/*
发送程序
程序效果:发送数值给从机,让从机显示该数值
*/
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
注:本程序相对简单,只是对双机通信接触很少,所以会感觉无从下手,其实不然。
*/