各位大佬好,有大神能帮我检查一下ADC的程序吗?谢谢!
我正在学习单片机开发,我的需求是让单片机检测P3.3脚的电压,通过ADC转换,并用串口输出。
P3.3和P3.2脚上万用表测量电压是1.420V和1.416V
现在的问题是,上传单片机后,串口一直输出:
- ADC:0
- _____________
- ADC:0
- _____________
- ADC:0
- _____________
- ADC:0
- _____________
复制代码
我尝试更换引脚到P3.2、更改测量速度均为0。
- #include "STC8G.h"
- #include "stdio.h"
- #include "intrins.h"
-
- unsigned int Temp;
-
- void UART_Init() { //串口模式初始化
- SCON = 0x50;
- TMOD = 0x00; // 设置定时器1为模式0
- TL1 = 0xE5; // TL1存储低8位
- TH1 = 0xFF; // TH1存储高8位
- TR1 = 1; // 启动定时器1
- AUXR = 0x40; // 定时器1-1T模式
- }
-
- char putchar(char ch) //定义printf串口发送函数
- {
- SBUF = ch; //串口1数据寄存器
- while(TI == 0); //串口1中断发送请求标志
- TI = 0;
- return ch;
- }
-
- void ADC_Init() {
- P_SW2 |= 0x80;
- ADCTIM = 0x3f; //设置ADC内部时序
- P_SW2 &= 0x7f;
- ADC_CONTR = 0x8b; //打开ADC电源、选择P3.3引脚
- ADCCFG = 0x2f;
- }
-
- void Get_Temp() {
- ADC_CONTR |= 0x40; //启动AD转换
- _nop_();
- _nop_();
- while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
- ADC_CONTR &= ~0x20; //清完成标志
- Temp = ADC_RESL;
- Temp += ADC_RES*256;
- printf("ADC:%u\n", Temp);
- printf("_____________\n");
- }
-
- void main() {
- P3M0 = 0x00; //设置P3.0、3.1串口为准双向口,其余为高祖输入
- P3M1 = 0xfc;
- UART_Init();
- ADC_Init();
- while(1){
- Get_Temp();
- }
- }
复制代码
十分感激!
|