pic16f887单片机ADRESH和ADRESL
时间: 2023-07-24 18:03:52 浏览: 270
PIC16F887是一款8位的微控制器,其中ADRESH和ADRESL是用于模拟数字转换(ADC)的寄存器。ADC是将模拟信号转换为数字信号的过程。在PIC16F887中,ADC可以将模拟电压转换为8位数字值。ADRESH和ADRESL寄存器一起存储ADC转换结果的数据。其中ADRESH存储高8位,ADRESL存储低8位。通过这两个寄存器的组合,可以获得ADC转换结果的完整8位数字值。
相关问题
单片机PIC16F18877读取环境亮度的代码
单片机 PIC16F18877 通常使用模拟传感器如光敏电阻或光敏二极管来测量环境亮度。这里是一个简单的示例,展示了如何使用 LM35 光敏电阻来获取光照强度,并通过 ADC (Analog-to-Digital Converter) 进行转换。LM35 将光照度转化为电压,然后 ADC 可以将这个电压值转换为数字值。
首先,确保已连接 LM35 到 PIC 的模拟输入端口(如 A0),并且配置好 ADC。
```c
#include <xc.h> // 包含 Microchip 驱动头文件
// ADC 设置
#define ADC_CHANNEL 0
#define ADC_PRESCALER _ANSEL(ADC_CHANNEL); // 设置通道为输入
__config(_INTRCioni & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _BODEN_OFF);
void setup() {
TRISA = 0; // 全局设置为输入模式
ANSAD = 0b10000000 << ADC_CHANNEL; // 开启并设置 ADC 输入通道
ADCON1 = _BGO + _ADPS2_2; // 使用外部时钟源,参考分频为 2
}
unsigned int readLightIntensity() {
unsigned char result;
ADRESL = 0; // 清除低字节寄存器
ADRESH = 0; // 清除高字节寄存器
ADCON0bits.GO = 1; // 开始转换
while (!ADCON0bits.GIF); // 等待转换完成
result = ADRESH << 8 | ADRESL; // 结果组合到一个整数
return result * (Vcc / (1 << (9 - ADC_RES))); // Vcc 是电源电压,ADC_RES 是 ADC 的分辨率
}
int main(void) {
while (1) {
int brightness = readLightIntensity();
// 根据需要处理亮度值,比如打印、存储等
printf("当前环境亮度: %d\n", brightness);
}
}
```
在这个例子中,`readLightIntensity()` 函数会持续读取并返回环境亮度。注意实际操作可能会因硬件连接和微控制器库的不同而有所差异。此外,你还需要根据 LM35 的典型输出范围调整计算公式。
阅读全文