以下是修改好的代码
- #include "reg51.h"
- #include "intrins.h"
-
- #include <stdio.h>//printf, sprintf
- #include <intrins.h>//_nop_, _cror_, _crol_
- typedef unsigned char u8; //0 to 255
- typedef unsigned int u16; //0 to 65535
- typedef unsigned long u32; //0 to 4294967295
- //测试工作频率为11.0592MHz
-
- sfr AUXR = 0x8e;
- sfr ADC_CONTR = 0xbc;
- sfr ADC_RES = 0xbd;
- sfr ADC_RESL = 0xbe;
- sfr ADCCFG = 0xde;
-
- sfr P3M0 = 0xb2; //P3口配置寄存器0
- sfr P3M1 = 0xb1; //P3口配置寄存器1
- sfr P5M0 = 0xca; //P5口配置寄存器0
- sfr P5M1 = 0xc9; //P5口配置寄存器1
-
- bit Busy = 0;
- void Uart1_Isr(void) interrupt 4
- {
- if (TI) //检测串口1发送中断
- {
- TI = 0; //清除串口1发送中断请求位
- Busy = 0;
- }
- if (RI) //检测串口1接收中断
- {
- RI = 0; //清除串口1接收中断请求位
- }
- }
- u8 putchar(u8 dat)
- {
- Busy = 1;
- SBUF = dat;
- while(Busy);
- return dat;
- }
- void Uart1_Init(void) //115200bps@11.0592MHz
- {
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x40; //定时器时钟1T模式
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //设置定时器模式
- TL1 = 0xE8; //设置定时初始值
- TH1 = 0xFF; //设置定时初始值
- ET1 = 0; //禁止定时器中断
- TR1 = 1; //定时器1开始计时
- ES = 1; //使能串口1中断
- }
- void Delay1000ms(void) //@11.0592MHz
- {
- unsigned char data i, j, k;
-
- i = 17;
- j = 27;
- k = 112;
- do
- {
- do
- {
- while (--k);
- }
- while (--j);
- }
- while (--i);
- }
- void Delay1ms(void) //@11.0592MHz
- {
- unsigned char data i, j;
-
- i = 15;
- j = 90;
- do
- {
- while (--j);
- }
- while (--i);
- }
- u16 ADC_Sel(u8 ch)
- {
- u16 Temp;
- ADC_CONTR |= 0x40 | ch; //启动AD转换
- _nop_();
- _nop_();
- while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
- ADC_CONTR &= ~0x2F; //清完成标志及频道选择
- Temp = ADC_RES; //读取ADC结果
- Temp = Temp<<8 | ADC_RESL;
- return Temp;
- }
- u16 Temp;
- u16 Cnt = 0;
- void main()
- {
- P3M0 = 0x00;
- P3M1 = 0x0c;
- P5M0 = 0x00;
- P5M1 = 0x10;
-
- ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16/16
- Uart1_Init();
- EA=1;
- ADC_CONTR = 0x82; //使能ADC模块
- Delay1ms();
- while (1)
- {
- Cnt++;
- printf("ADC Test: %u\r\n",Cnt);
- Delay1ms();
- Temp = ADC_Sel(2);
- printf("P32 Raw: %u\r\n",Temp);
- printf("P32 Volt: %lu x10mV\r\n",(u32)Temp*500/1024);
- Delay1ms();
- Temp = ADC_Sel(3);
- printf("P33 Raw: %u\r\n",Temp);
- printf("P33 Volt: %lu x10mV\r\n",(u32)Temp*500/1024);
- Delay1ms();
- Temp = ADC_Sel(4);
- printf("P54 Raw: %u\r\n",Temp);
- printf("P54 Volt: %lu x10mV\r\n",(u32)Temp*500/1024);
- Delay1000ms();
- }
- }
-
复制代码
|