/*--------------------------------------
芯片 :STC12C5A60S2
晶振 :11.0592MHZ
开发平台:KEIL
功能 :串口一收发8位数据。(采用中断方式,T1产生波特率)
波特率 :9600BPS
日期 :11.5.19
其他 :采用查询方式发送稳定,但是接收数据极不稳定由于
官方资料使用的是中断方式,所以建议使用中断方式收发数据。
注意 :下载完程序后请复位系统后运行!(切记!!)
--------------------------------------*/
#include "STC12C5A60S2.h"
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={"STC12C5A60S2!"};
uchar dat=0;
/*--------------------------------------
延时函数
--------------------------------------*/
void delay ( uchar t )
{
uchar i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/*--------------------------------------
串口初始化
--------------------------------------*/
void init(void)
{
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式2,8位数据,波特率可变
PCON = 0x00; //不倍增波特率
AUXR = 0x00; //1T工作方式,不使用波特率发生器
IP = 0x00; //优先级默认
TH1 = TL1 = 0xfd; //波特率 9600
TR1 = 1; //启动定时器产生波特率
EA = 1; ES = 1; //开总中断,开串口中断
}
/*--------------------------------------
发送一个字符
--------------------------------------*/
void txd_c(uchar x)
{
SBUF = x;
}
/*--------------------------------------
发送接收中断函数
--------------------------------------*/
void uart_isr() interrupt 4
{
if( RI ) RI = 0;
dat = SBUF;
if( TI ) TI = 0;
}
/*--------------------------------------
主函数
--------------------------------------*/
void main()
{
uchar x;
init();
for( x=0;x<14;x++ ){
txd_c(tab[x]);
delay(200);
}
while(1) P0 = dat;
}
|