| 
 
| 使用P89LPC938的10位AD,并且使用周立功的例子来测试。例子如下: 但是在测试时,AD0口的电压值变化时,我直接读取了AD结果寄存器中的值,值没有什么太大的变化,并且基本趋近于0。请问:
 1)938的AD使用是不是还要有什么其他的设置?
 2)我也用过900系列的915、917单片机的AD,使用都很正常。938是不是对AD的使用在电路上还有什么特殊的要求?
 
 谢谢!
 //*******************************************************************************************
 //版权:周立功单片机研究所
 //文件:TEST938AD.C
 //功能:对通道AD0 进行AD 转换,结果通过UART 发送到PC,通信波特率为9600BPS
 //*******************************************************************************************
 #include "reg932.h" //包含头文件
 sfr ADCON0 = 0x97; //定义ADC 用到的寄存器
 sfr ADMODA = 0xC0;
 sfr ADMODB = 0xA1;
 sfr ADINS = 0xA3;
 unsigned char xdata AD0DAT0R _at_ 0xfffe; //定义AD0DAT0R 地址
 unsigned char xdata AD0DAT0L _at_ 0xffff; //定义AD0DAT0L 地址
 //------------------------------------
 //msec: 延时子程序
 //-------------------------------------
 void msec(int msec)
 {
 int delay = 0;
 while(msec)
 {
 for(delay = 0;delay < 680; delay++);
 msec--;
 }
 }
 //------------------------------------
 // io_init: 初始化IO 子程序
 //-------------------------------------
 void io_init(void)
 {
 P0M1=0xFF;
 P0M2=0x00;
 P1M1=0x00;
 P1M2=0x00;
 }
 //------------------------------------
 //ad_init: 初始化AD 子程序
 //-------------------------------------
 void ad_init(void)
 {
 ADINS=0x01; //选择通道AD0
 ADMODA|=0x10; //单次转换
 
 }
 //------------------------------------
 // ad_start: 启动AD 转换子程序
 //-------------------------------------
 void ad_start(void)
 {
 ADCON0=0X05; //固定通道、单次转换、立即启动
 while(!ADCON0&0x08); //等待转换完毕
 }
 //------------------------------------
 // UART_init:初始化UART
 //-------------------------------------
 void UART_init()
 {
 SCON=0x50; // 选择内部BRG 为UART 波特率发生器
 SSTAT=0x60;
 BRGR0=0xF0; // 设置波特率为9600bps
 BRGR1=0x02;
 BRGCON = 0x03; // 允许BRG
 }
 //------------------------------------
 // sendtoPC:通过UART 发送转换结果到PC
 //-------------------------------------
 void sendtoPC(void)
 {
 TI=0;
 SBUF=AD0DAT0L; //发送结果高位,即9:2
 while (!TI);
 TI=0;
 SBUF=AD0DAT0R; //发送结果低位,即7:0
 while (!TI);
 }
 //------------------------------------
 // main:主函数
 //-------------------------------------
 void main(void)
 { //初始化IO
 io_init(); //初始化AD
 ad_init(); //初始化UART
 UART_init();
 while(1)
 {
 ad_start(); //启动AD
 | 
 |