#include "reg52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define addata P1
sfr BRT = 0x9C; //独立波特率定时器
sfr AUXR = 0x8e; //Auxiliary register
sfr WAKE_CLKO = 0x8f; //wakeup and clock output control register
sbit CLK = P3^4; //timer0 clock output pin
sbit STR=P2^4; //单片机P1.0接模块STR引脚, 启动转换信号
sbit EOC=P2^3; //单片机P1.1接模块EOC, 转换结束信号,高电平有效
sbit OE=P2^2; //单片机P1.2接模块OE,输出允许信号,高电平有效
void delayms(uint xms)
{
uint i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--)
;
}
void send_data(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void main()
{
uchar uidata;
SCON=0x50; //串口工作在方式1
TMOD = 0x22; //T0工作在方式2,8位自动重装计数器
AUXR = AUXR | 0x80; //T0工作在1T模式
AUXR = AUXR | 0x04; //独立波特率发生器工作在1T模式
BRT = (256-12); //实测值约为500KHz
TH0 = (256-12);
TH1=0xfd; //波特率9600
TH1=0xfd; // 置初值
WAKE_CLKO=WAKE_CLKO|0x07; //允许T0,T1,独立波特率发生器输出时钟
EA=1; // 开总中断
ES=1; // 开串口中断
TR1=1;
TR0 = 1; //启动T0开始计数,对系统时钟进行分频输出
AUXR =AUXR|0x10; //启动BRT工作,对系统时钟进行分频输出
//至此时钟已经输出,用户可以通过示波器观看到输出的时钟频率
STR=0;
OE=0;
while(1)
{
STR=0;
_nop_();
STR=1;
_nop_(); //启动AD转换。
STR=0;
_nop_();
while(EOC==0);
OE=1;
addata=0xff;
OE=1;
uidata=addata;
OE=0;
send_data(uidata);
delayms(1000);
}
}