- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
串口通信应用.doc
/*******************************************************************************************
例1:运用串口进行单片机的简单两机通信:
本例实现如下功能:发送机U2在外部中断0(INT0下降沿触发)的控制下,依次发出0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、P并加入奇偶校验位,如果发送校验位TB8为1则发送机P2.7上的LED灯亮,否则P2.7上的LED灯灭。接收机U1收到后进行奇偶校验,如果接收校验位RB8为1,则接收机P1.7上的LED灯亮,否则P1.7上的LED灯灭。同时接收机还要向发送机发出校验结果,如果校验正确则回发88,校验错误则回发77。并且当接收机收到最后一个数据’P’时,约定向发送机回发0x73,
而当发送机收到最后一个数据正确发送后(即收到回发的0x73),关闭中断允许位EA,停止工作。
*******************************************************************************************/
/*发射机(U2)程序如下:*/
#includeat89x52.h //头文件
#define uchar unsigned char //宏定义用ushar表示unsigned char
#define uint unsigned int //宏定义用uint表示unsigned int
uchar code a[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,
0x5e,0x79,0x71,0x73}; //共阴的LED段码,分别为0123456789AbCdEFP
uchar fs,as; //串口发送、接收变量
uchar *pin; //指向LED段码的指针变量
void esint() interrupt 4 //串口的中断服务程序
{
if(RI==1) //如果是接收中断
{
RI=0; //先将接收标志位清0
as=SBUF; //将接收缓存中的数据送到接收变量中暂存
pin++; //移动指针在a[ ]中的位置
if(as==0x88) //收到正确奇偶校验的处理程序
{
P1_7=0; //P1.7上的LED灯亮(注意P1.7上的LED是反接的)
}
else //收到错误奇偶校验的处理
P1_7=1; //P1.7上的LED灯灭
if (as==0x73) /*如果收到回发的数据是0x73,即最后一个数据“P”已正确接收了(与接收
机约定在收到最后一个数据时回发0x73)*/
{
EA=0; //确定最后一个数据正确发出后,发射机关闭中断允许位,停止工作
}
}
else //如果不是接收中断,那即是发送中断
{
TI=0; //将发送标志位清0
}
}
void kint() interrupt 0 //外部中断0(INT0)的中断服务程序
{
while(TI==1); //如果此时串口在发送数据则等待
fs=*pin; //将指向LED段码(a[ ])的地址中的数值赋给发送变量
#pragma asm /*加入奇偶校验位(C语言中嵌套汇编语句,注意添加C51S.LIB文件)*/
MOV A,FS //将fs中存储的LED段码地址赋给变量A
JB P,BTB8 /*小于转移,如果P为1则跳转至BTB8。这里P是程序状态字PSW中的最低
位,功能是做奇偶校验,当发送数据为奇数位时,P=1;否则为0*。并且P的设置是在数据进入SBUF时自动生成的/
CLR TB8 //否则将发送数据的奇偶校验位清0
CLR P2.7 //P2.7清0,即P2.7上的LED灯灭
AJMP ETB8 //跳转至ETB8
btb8:SETB TB8 //将发送数据的奇偶校验为置1
SETB P2.7 //P2.7置1,即P2.7上的LED灯亮
etb8: cpl p2.0 //P2.0清0,即P2.0上的LED灯灭
#pragma endasm //汇编语句嵌套结束
SBUF=fs
原创力文档


文档评论(0)