很基础的两个单片机通信,p0口控制键盘,p2位选p1字选,注意两个单片机要用同样的晶振,并且用相同的电源供电
程序如下
ORG 00H
LJMP MAIN
ORG 0023H
LJMP SBR
MAIN:MOV SP,#60H
MOV R7,#08H
MOV TMOD,#20H//定时器1设为模式2
MOV TH1,#0F3H//设初值
MOV TL1,#0F3H
CLR ET1 //禁止定时器1中断
SETB TR1
MOV SCON,#50H//串行口设置为方式1,REN=1
SETB ES //允许串口中断
SETB EA //开放总中断
MOV DPTR,#LED
LOOP:CALL Key
MOV A,R7
LCALL OLED
MOV A,R7
MOV SBUF,A
JB TI,$
AJMP LOOP
SBR:PUSH ACC
JB TI,SEND //TI=1,为发送中断
ACALL SIN //RI=1,为接受中断
SJMP BACK_1
SEND:ACALL SOUT //调用发送子程序
BACK_1:POP ACC
RETI
SOUT:CLR TI
RET
SIN:CLR RI //接收子程序
MOV A,SBUF
MOV R7,A //读出接收缓冲区的内容
LCALL OLED
RET
Key:MOV A,P0
K1:CJNE A,#07FH,K2
MOV R7,#00H
K2:CJNE A,#0BFH,K3
MOV R7,#01H
K3:CJNE A,#0DFH,K4
MOV R7,#02H
K4:CJNE A,#0EFH,K5
MOV R7,#03H
K5:CJNE A,#0F7H,K6
MOV R7,#04H
K6:CJNE A,#0FBH,K7
MOV R7,#05H
K7:CJNE A,#0FDH,K8
MOV R7,#06H
K8:CJNE A,#0FEH,BACK
MOV R7,#07H
BACK:RET
OLED:MOV P2,#0FEH
MOVC A,@A+DPTR //显示
MOV P1,A
RET
LED:DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
END
|