3个51单片机通信汇编程序.doc
文本预览下载声明
(1)主机程序 AT89C51-A
ORG 00H
JMP START
START: MOV SP,#60H ;设置堆栈
MOV TMOD, ;TIMER1工作在MODE2
ANL PCON, ;SMOD=0
MOV TH1,#0F3H ;波特率为2400
MOV TL1,#0F3H
SETB TR1 ;启动TIMER1
MOV SCON, ;UART工作在MODE3
MOV IE, ;UART中断使能
SETB SM2 ;设SM2=1
MOV P2,#0FFH ;给P2口赋初值
MOV 32H,0FFH ;两个副CPU地址暂存器
SCAN0: MOV R3,#F7H ;键盘扫描初始值
SCAN: JB RI,UARTI ;是否有接收中断
MOV R1,#00H ;TABLE取码指针
SCAN1: MOV A,R3 ;输出行扫描
MOV P1,A
MOV A,P1
MOV R4,A
SETB C
MOV R5,#03H ;扫描4列
L1: RLC A
JNC KEYIN ;C=0表示有键按下
INC R1 ;C不等于0,未按则取码指针加1
DJNZ R5,L1 ;扫描下一列
MOV A,R3 ;扫描下一行
SETB C
RRC A
MOV R3,A
JC SCAN1 ;4行扫描完
JMP SCAN0
KEYIN: MOV R7,#0D0H ;消除抖动
D2: MOV R6,#19H
DJNZ R6,$
DJNZ R7,D2
D3: MOV A,P1 ;按键放开否?
XRL A,R4
JZ D3
MOV A,R1 ;至TABLE取键盘码
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV 30H,A
XRL A,#83H ;“#1”是否按下?
JZ UART1
MOV A,30H
XRL A,#C6H ;“#2”是否按下?
JZ UART2
MOV A,30H
MOV SBUF,A ;载入SBUF发送出去
WAIT: JBC TI,SCAN ;发送完毕否?
JMP WAIT
UART1: SETB TB8 ;设TB8=1
MOV SBUF,#01H ;发送AT89C51-B的地址01H
WAIT1: JBC TI,L2 ;发送完毕否?
JMP WAIT1
L2: CLR TB8 ;清
显示全部