专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机双机通信(汇编程序)

作者:佚名   来源:本站原创   点击数:  更新时间:2010年02月04日   【字体:

/*
发送程序
程序效果:发送数值给从机,让从机显示该数值
*/

   ORG 0000H
   LJMP START
   ORG 0030H
START:      MOV TMOD,#20H //定时器1工作在方式2
   MOV TH0,#0F4H //设置波特率为4800
   MOV TL0,#0F4H
   MOV PCON,#80H  //把SMOD置1
   MOV SCON,#50H  //串口工作在方式1,允许接收
   SETB ET1   //开定时器1
   SETB ES   //允许串行口中断
   SETB TR1  //启动定时器
   CLR TI  //发送中断标志位清零
   MOV P2,#00H  //高八位
   MOV DPTR,#TAB   //赋表首地址
MAIN:        JNB P3.6,KEY2 //判断按键是否按下
   LJMP MAIN
KEY2:        LCALL DELAY10MS //延时,消抖
   JB P3.6,MAIN //再判断按键是否真的按下
WAIT:        JNB P3.6,WAIT   //等待按键松手
LOP1:        MOV A,#00   //清零
   MOVC A,@A+DPTR
   CJNE A,#'#',SENDDATA  //判断数据是否发送完
   LJMP START   //发送完了,回到初始情况下

SENDDATA:   MOV SBUF,A  //把要发送的数据送给缓冲区
WAITS:        JNB TI,WAITS //等待数据发送完
   CLR TI   //发送完了,把发送中断标志位清零,准备下次发送
   INC DPTR //加1,准备发送下一个数据
   LJMP MAIN  
//延时消抖程序
DELAY10MS: MOV 63H,#200
DE2:   MOV 64H,#250
DE1:   DJNZ 64H,DE1
   DJNZ 63H,DE2
   RET
TAB:         DB 3FH,06H,5BH,4FH,66H //数码管显示的数值  
   DB  6DH,7DH,07H,7FH,6FH,'#'
   END

/*
接收程序
程序效果:一个数码管显示主机发送来的数值
*/
   ORG 0000H
   LJMP START
   ORG 0030H
START:   MOV TMOD,#20H  //定时器1工作在方式2
   MOV TH0,#0F4H  //波特率为4800,发送与接收的波特率要相等
   MOV TL0,#0F4H
   MOV PCON,#80H //SMOD为1
   MOV SCON,#50H //串口工作在方式1,允许接收
   SETB ET1   //开定时器
   SETB ES  //允许串口中断
   SETB TR1   //启动定时器
   CLR RI   //接收中断标志位清零
MAIN:   JB RI,DISP//判断是否接收完
   SJMP  MAIN //没有,继续等待
DISP:   CLR RI    //接受完了,接收中断标志位清零
DISP1:   MOV A,SBUF   //同时把该数据送给A
   MOV P2,#7FH //点亮一个数码管
   MOV P0,A //显示该数值 
   LCALL DELAY   //延时0.1s,便于眼睛能够看清该数据,时间适宜即可
   MOV P0,#00 //消隐
   JNB RI,DISP1 //判断下一个数据是否接受完,没有则继续显示
   SJMP  DISP
//延时0.1s子程序
DELAY:   MOV 61H,#200
DEL2:     MOV 62H,#250
DEL1:     DJNZ 62H,DEL1
   DJNZ 61H,DEL2
   RET
   END
/*
只需用3根线连接2个单片机即可实现,gnd连gnd ,rxd连txd ,txd连rxd,可从这里下载完整的程序:http://www.51hei.com/ziliao/file/shuangjiasm.rar
注:本程序相对简单,只是对双机通信接触很少,所以会感觉无从下手,其实不然。
*/

关闭窗口

相关文章