STC89C52定时器3串口通信Word格式.doc
《STC89C52定时器3串口通信Word格式.doc》由会员分享,可在线阅读,更多相关《STC89C52定时器3串口通信Word格式.doc(3页珍藏版)》请在冰豆网上搜索。
#defineBAUD9600
sbitPWM=P1^1;
//控制信号输出口定义
uchara,b,y,i,j,s[4];
/*******************************串口初始化程序********************************/
voidInitUART(void)
{
unsignedintiTmpBaud;
unsignedlonglTmpBaud;
iTmpBaud=0;
//首先选定定时器2作为波特率发生器,16位定时器,自动装载
SCON=0x50;
//SM0SM1SM2RENTB8RB8TIRI //01010000
PCON=0x00;
//PCON的地址是87H,这里SMOD=0
T2CON=0x30;
//TF2EXF2RCLKTCLKEXEN2TR2C(/T2)CP(/RL2)//00110000
/* T2MOD=0x00;
/// / / / / / T2OE DCEN//00000000*/
lTmpBaud=FOSC/BAUD;
lTmpBaud/=32;
//12T-mode
iTmpBaud=lTmpBaud&
0xFFFF;
iTmpBaud=65536-iTmpBaud;
RCAP2H=(iTmpBaud>
>
8)&
0x0FF;
RCAP2L=iTmpBaud&
RI=0;
//清除接收中断标志
REN=1;
//允许串行接收
ES=1;
//允许串行中断
TR2=1;
//启动定时器1
EA=1;
//开总中断
}
//************************************通过串口将接收到数据发送给PC端**************************************
voidR_S_Byte(ucharR_Byte)
{
SBUF=R_Byte;
while(TI==0);
//查询法
TI=0;
}
//*********************************串口收到数据****************************************
voidUARTRead(void)interrupt4//接收上位机发送的控制指令
{
if(RI)//判断接收标志
{
s[i]=SBUF;
//接收到的数据放入数组a
}
RI=0;
i++;
if(i==4)
{
i=0;
for(j=0;
j<
4;
j++)
{
R_S_Byte(s[j]);
}
}
//*********************************主程序***************************************
voidmain(void)
{
InitUART();
while
(1)
}