;串口接收一个字符,并将其返回上位机 BUF EQU 40H BUZZER EQU P3.4 FLAGR EQU 20H.1 ORG 8000H ; 实验板开始执行的第一条指令所处的地址 LJMP MAIN ; 跳转到主程序 ORG 8023H ;中断程序入口 LJMP SINT ORG 8100H ; 主程序开始的地址;避开中断入口地址
MAIN: MOV SP, #0D0H ;设置堆栈起始地址 CLR FLAGR MOV BUF,#00H MOV SCON,#50H ;设置串口工作模式1,允许接受控制 MOV PCON,#00H ;SMOD=0 MOV TMOD,#20H ;设置定时器1工作模式2 MOV TH1,#0FDH ;置定时器初值,设定比特率9600bps MOV TL1,#0FDH SETB ES ;允许串口中断 SETB EA SETB TR1 ;启动定时器
LOOP1: JNB FLAGR,$ ;等待接收字符 LCALL RING ;接收到字符,响铃提示 CLR FLAGR AJMP LOOP1
;========================================响铃 RING: CLR BUZZER LCALL TMS1 LCALL TMS1 SETB BUZZER RET
;========================================延时100ms
TMS1: MOV R6, #0F0H ; 给R6和R7赋初值,在12Hz晶振时延时时间为200(R7循环次数)× 250(R6循环次数)×2×1(us) MOV R7, #0C8H
DELAY02: DJNZ R6, $ ; R6单元减1,非0继续执行当前指令,\"$\"指当前指令地址 DJNZ R7, DELAY02 ; R7减1,非0跳转到标号DELAY01处执行 RET
;========================================串口接收中断 ORG 8500H SINT: PUSH ACC ;保护现场 PUSH PSW CLR RI SETB FLAGR MOV A,SBUF MOV BUF,A MOV SBUF,A JNB TI,$ CLR TI POP PSW POP ACC RETI END
;将接收到的字符返回上位机