第12章 8051机间通信的C.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 8051机间通信的C

* * * * * * * * * * * * * * * * 从机程序如下: #include reg51.h #define uchar unsigned char #define SLAVE 0x02 #define BN 16 uchar idata trbuf[16]; uchar idata rebuf[16]; bit tready; bit rready; void main (void) { TMOD=0x20; /*T/C1定义为方式2*/ TL1=0xfd; /*置初值*/ TH1=0xfd; PCON=0x00; TR1=1; SCON=0xf0; /*串行口为方式3,SM2=1,REN=1*/ ES=1;EA=1; /*开串行口中断*/ while(1) {tready=1; rready=1;} /*假定准备好发送和接收*/ } void ssio (void ) interrupt 4 using 1 { void str(void); void sre(void); uchar a,i; RI=0; ES=0; /*关串行口中断,禁止同一中断嵌套*/ if(SBUF! =SLAVE) {ES=1;goto reti;} /*非本机地址,从中断子程序返回主程序,继续监听*/ SM2=0 ; /* 从机确认呼叫的是自己,取消监听状态 */ SBUF=SLAVE ; /* 将从机本身地址作为身份确认信号发回主机 */ while ( TI ! =1 ) ;TI =0 ; while ( RI !=1 ) ; RI =0 ; /* 等待主机发送command */ if ( RB8 == 1 ) { SM2=1 ; ES=1 ;goto reti ; } /* 从机复位,恢复监听 */ /* 主机接收到从机的地址确认后:TB8=0,从机再收到RB8=1说明通信出错 */ a=SBUF ; /* 接收主机发来的命令 */ if (a =0x01 ) /* command =01H,主机发送,从机接收 */ {if ( rready = =1 ) SBUF =0x01 ; / * 将“准备好接收”状态发回主机 */ else SBUF=0x00 ; / * 从机“没准备好接收” ,主机将返回主程序重新发地址帧*/ while ( TI ! =1 ) ; TI=0 ; sre( ) ; /*从机准备好,开始接收数据 */ } else { if( a= 0x02 ) /* command =02H,主机接收,从机发送 */ {if ( tready = =1 ) SBUF =0x02 ; / * 将“准备好发送”状态发回主机 */ else SBUF=0x00 ;/ * 从机“没准备好发送” ,主机将返回主程序重新发地址帧*/ while ( TI ! = 1 ) ; TI =0 ; str ( ) ; / * 发送数据 */ } else {SBUF = 0x80 ; /* 命令非法 ,发状态 */ while ( TI ! =1 ) ; TI =0 ; SM2 =1 ; ES =1 ; /* 恢复监听 */ } } reti:; } void str ( void ) /* 发数据块 */ { uchar p ,i ; tready =0 ; do { p=0 ; /* 清校验和 */ for ( i= 0; iBN ; i++ ) { SBUF= trbuf[ i ]

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档