|
按照STC8H手册里19.6范例程序,把ADC采集通道改了下。电压测量显示结果传到串口助手,一直是0?
附代码:
#include <STC8H.h>
#include <intrins.h>
#include <stdio.h>
void Delay1000ms() //@11.0592MHz
{
unsigned char data i, j, k;
i = 57;
j = 27;
k = 112;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit(void)//9600bps @11.0592MHz
{
SCON = 0x50;//8位数据,可变波特率
AUXR |= 0x40;//定时器1时钟为FOSC,就是1T
AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
TMOD &= 0x0F;//设定定时器1为16位重装载方式
TL1 = 0xE0;//设定定时器低位值
TH1 = 0xFE ;//设定定时器高位值
ET1 = 0;//禁止定时器1中断
TR1 = 1;//启动定时器1
}
void Uart1_SendChar(unsigned char Udat)
{
SBUF = Udat;//串口1数据寄存器
while(!TI);//串口1中断发送请求标志
TI = 0;
}
char putchar(char c)
{
Uart1_SendChar(c);
return c;
}
void main()
{
P_SW2 |= 0x80; //使能访问XFR
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P0M0 = 0x00; P0M1 = 0x10; //设置P0.4(47引脚)ADC测量的引脚为高阻输入模式
ADCTIM = 0x3f; //设置ADC 内部时序
ADCCFG = 0x2f; //设置ADC 时钟为系统时钟/2/16
ADC_CONTR = 0x8c; //开启ADC测量功能,设置第12通道为ADC测量作用
UartInit();
while (1)
{
ADC_CONTR = 0xcc; //启动AD 转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC 完成标志
ADC_CONTR &= ~0x20; //清完成标志
printf("测得外部ADC电压为%u",ADC_RES); //读取ADC 测量结果显示至串口助手
Delay1000ms();
}
}
|
-
|