当前位置:首页 > 单片机 > 单片机
[导读] #include"reg51.h"#defineFOSC18432000L#defineBAUD115200#defineNONE_PARITY0//无校验位#defineODD_PARITY1//奇校验#defineEVEN_PARITY2//偶校验#defineMARK_PARITY3//标记校验#defineSPACE_PARITY4//

#include"reg51.h"

#defineFOSC18432000L
#defineBAUD115200
#defineNONE_PARITY0//无校验位
#defineODD_PARITY1//奇校验

#defineEVEN_PARITY2//偶校验
#defineMARK_PARITY3//标记校验
#defineSPACE_PARITY4//空校验

#definePARITYBITEVEN_PARITY

#defineS2RI0x01
#defineS2TI0x02
#defineS2RB80x04
#defineS2TB80x08

sfrAUXR=0x8e;
sfrS2CON=0x9a;
sfrS2BUF=0x9b;
sfrBRT=0x9c;
sfrIE2=0xaf;

bitbusy;

voidSendData(chardat);
voidSendString(char*s);

voidmain()
{
#if(PARITYBIT==NONE_PARITY)
S2CON=0x5a;//8位可变波特率(无校验位)
#elif(PARITYBIT==ODD_PARITY)||(PARITYBIT==EVEN_PARITY)||(PARITYBIT==MARK_PARITY)
S2CON=0xda;//9位可变波特率,校验位初始为1
#elif(PARITYBIT==SPACE_PARITY)
S2CON=0xd5;//9位可变波特率,校验位初始为0
#endif

BRT=-(FOSC/32/BAUD);//设置独立波特率发生器的重载初值
AUXR=0x14;//独立波特率发生器工作在1T模式
IE2=0x01;//使能串口2中断
EA=1;//开总中断

SendString("STC12C5A60S2rnUART2Test!rn");
while(1);
}

voidUart2()interrupt8using1
{
if(S2CON&S2RI)
{
S2CON&=~S2RI;//清除接收完成标志
P0=S2BUF;//P0显示串口数据
P2=(S2CON&S2RB8);//P2.2显示校验位
}
if(S2CON&S2TI)
{
S2CON&=~S2TI;//清除发送完成标志
busy=0;
}
}

voidSendData(chardat)
{
while(busy);//等待上个数据发送完成
ACC=dat;//取得偶校验位P
if(P)//根据P来设置串口数据的校验位
{
#if(PARITYBIT==ODD_PARITY)
S2CON&=~S2TB8;//置校验位为0
#elif(PARITYBIT==EVEN_PARITY)
S2CON|=S2TB8;//置校验位为1
#endif
}
else
{
#if(PARITYBIT==ODD_PARITY)
S2CON|=S2TB8;//置校验位为1
#elif(PARITYBIT==EVEN_PARITY)
S2CON&=~S2TB8;//置校验位为0
#endif
}
busy=1;
S2BUF=ACC;//发送数据
}

voidSendString(char*s)
{
while(*s)//判断字符串结束标志
{
SendData(*s++);//发送字符
}
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭