/*
發送程序
程序效果:發送數值給從機,讓從機顯示該數值
*/
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.zg4o1577.cn/ziliao/file/shuangjiasm.rar
注:本程序相對簡單,只是對雙機通信接觸很少,所以會感覺無從下手,其實不然。
*/