c51串行通信汇编语言,51单片机双机串行通信汇编语言程序+Proteus仿真
ORG 00H
SJMP INIT
ORG 0023H
LJMP LOOP
ORG 0030H
INIT:? ???MOV SP,#5FH
MOV SCON,#50H? ?? ?? ?? ???;串行口工作方式1,允許接收
MOV TMOD,#20H? ?? ?? ?? ???;定時器1工作方式2
MOV PCON,#0H? ?? ?? ?? ?? ?;波特率不加倍
MOV TH1,#0FDH? ?? ?? ?? ???;波特率9.6kbit/s
MOV TL1,#0FDH
SETB TR1? ?? ?? ?? ?? ?? ? ;啟動定時器1
SETB EA
SETB ES
CLR TI
CLR RI
KEYS:? ???MOV P0,#0FFH
MOV R1,#0EFH? ?? ?? ?? ?? ?;初始化各寄存器
MOV R2,#4
MOV R3,#0FFH
MOV 20H,#11101111B
MOV 21H,#11111110B
KEYREAD:??MOV A,R1
MOV P0,A? ?? ?? ?? ?? ?? ???;送掃描碼至P0口
MOV A,P0? ?? ?? ?? ?? ?? ???;讀P0口按鍵狀態
MOV R3,A? ?? ?? ?? ?? ?? ???;將此狀態保存在寄存器R3中
ORL A,#0F0H? ?? ?? ?? ?? ???;屏蔽P0口高四位
CJNE A,#0FFH,KEYDOWN? ?? ???;若P0口低四位不全為1,有按鍵落下
MOV A,R1
RL A? ?? ?? ?? ?? ?? ?? ?? ?;若低四位全為1,掃描下一行
MOV R1,A
DJNZ R2,KEYREAD
LJMP KEYS
KEYDOWN:??MOV A,P0
ORL A,#0F0H
CJNE A,#0FFH,KEYTURN1? ?? ???;若按鍵確實落下,將按鍵轉換為按鍵碼
LJMP KEYS
KEYTURN1: MOV R2,#4? ?? ?? ?? ?? ?? ? ;設循環次數
MOV B,#0? ?? ?? ?? ?? ?? ???;按鍵碼初始值設為0
LOOP1:? ? MOV A,P0
ORL A,#0F0H
CJNE A,21H,S1? ?? ?? ?? ?? ?;判斷落下按鍵是否位于該列
SJMP KEYTURN2? ?? ?? ?? ?? ?;是,跳轉判斷行
S1:? ?? ? INC B? ?? ?? ?? ?? ?? ?? ???;否,按鍵碼加1,(21H)左移,判斷是否位于下一列
MOV A,21H
RL A
MOV 21H,A
DJNZ R2,LOOP1
SJMP KEYREAD
KEYTURN2: MOV R2,#4
LOOP2:? ? MOV A,P0
ORL A,#0FH
CJNE A,20H,S2? ?? ?? ?? ?? ? ;判斷落下按鍵是否位于該行
SJMP S3
S2:? ?? ? INC B? ?? ?? ?? ?? ?? ?? ???;否,按鍵碼加4,(20H)左移,判斷是否位于下一行
INC B
INC B
INC B
MOV A,20H
RL A
MOV 20H,A
DJNZ R2,LOOP2
SJMP KEYREAD
S3:? ?? ? MOV A,B? ?? ?? ?? ?? ?? ?? ?;將按鍵碼送給A
SEND:? ???MOV SBUF,A? ?? ?? ?? ?? ?? ?;發送數據
JNB TI,$
CLR TI
LJMP INIT
LOOP:? ? ? ?? ? MOV A,SBUF? ?? ?? ?? ?? ?? ?;接收乙機數據
JNB RI,$
CLR RI? ?? ?? ?? ?? ?? ?? ? ;清接收中斷標志
MOV P1,#0FFH
LCALL LED8? ?? ?? ?? ?? ?? ?;將乙機按鍵數據送P1口,點亮LED燈
RETI
LED8:? ???JNB ACC.0,LIGHT1
JNB ACC.1,LIGHT2
JNB ACC.2,LIGHT3
RETURN:? ?RET
LIGHT1:? ?MOV A,#0FEH
MOV R2,#8
L1:? ? ? ?? ? MOV P1,A
RL A
ACALL DELAY
DJNZ R2,L1
SJMP RETURN
LIGHT2:? ?MOV A,#07FH
MOV R2,#8
L2:? ? MOV P1,A
RR A
ACALL DELAY
DJNZ R2,L2
SJMP RETURN
LIGHT3:? ?MOV A,#0E7H
MOV P1,A
ACALL DELAY
SETB C
L31:? ?MOV R0,A
ORL A,#0FH
RLC A
MOV R1,A
MOV A,R0
ORL A,#0F0H
RRC A
MOV R2,A
ANL A,#0FH
MOV R0,A
MOV A,R1
ANL A,#0F0H
ADD A,R0
MOV P1,A
ACALL DELAY
JB P1.7,L31
L32:? ?SETB C
MOV R0,A
ORL A,#0FH
RRC A
MOV R1,A
MOV A,R0
ORL A,#0F0H
RLC A
MOV R2,A
ANL A,#0FH
MOV R0,A
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
總結
以上是生活随笔為你收集整理的c51串行通信汇编语言,51单片机双机串行通信汇编语言程序+Proteus仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaweb springboot餐厅
- 下一篇: 服务器开发中网络数据分析与故障排查经验漫