stc89c52上测试
#include<AT89X52.H>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit st=P2^4;//A/D转换控制
sbit ale=P2^3;//通道控制
sbit oe=P2^5;//输出控制
sbit eoc=P3^7;//转换结束标志
sbit addr_a=P2^0;
sbit addr_b=P2^1;
sbit addr_c=P2^2;
void delay(uchar x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void init()//初始化printf环境
{
EA=1; //中断总允许
TMOD=0x21; //定时器1模式2,自动重装,为串口提供波特率
TH1=0xfd; //晶振11.0592MHZ,波特率9600 。9600 n 8 1
TL1=0xfd;
TR1=1; //开启定时器1
PCON=0X00; //波特率不倍增
SCON=0X50; //串行口方式1 ,10位异步收发
ES=1; //串口中断允许
}
void main()
{
uchar tmp;
init();//初始化printf环境
while(1){
addr_a=0; //输出地址信号
addr_b=0;
addr_c=0;
ale=1; //输出地址锁存信号
delay(1);
ale=0;
st=1; //输出转换开始信号
st=0;
delay(1);//等待转换结束
if(eoc==1)//读取转换结束标志,查询方式
{
oe=1; //输出oe信号,读取数据
delay(1);
tmp=P0;
oe=0;
delay(1);
}
ES=0;//串口中断禁止
TI=1; //发送中断标志 手动置1
printf("tmp=%f\n",(float)(tmp/255.0*5.0));
while(!TI); //如果TI==0则死等
TI=0;
ES=1;//串口中断允许
}
}