谢谢
在仿真机上调试通过了,下面是正确的程序:
ORG 0000H
LJMP START
ORG 0023H ;串口中断入口地址
LJMP SIN
ORG 0100H
START: MOV SP,#35H ; 修改堆栈地址
CLR TXEN
MOV TMOD, #21H ; 定时计数器0工作于方式1,1工作于方式2
MOV TH1, #0FDH ; 计数初值(11.0592MHz晶振下,波特率为9600)
MOV TL1, #0FDH
MOV SCON, #50H ; 置串口为方式1,允许接收
SETB TR1 ; 启动定时器1
SETB EA ; 开中断
LOOP: SETB ES ; 允许串行中断
LCALL DELAY_1
AJMP LOOP
SIN: CLR ES ;关串行中断
CLR RI ;清接收中断标志
MOV A,SBUF
CJNE A,#18H,GR ;测试是否收到18H
CLR P1.4 ;如果收到18H,即"↑",蜂鸣器响
LCALL DELAY_1
SETB P1.4
GR: MOV A,SBUF
CJNE A,#19H,RED ;测试是否收到19H
CLR P1.6 ;如果收到19H,即"↓",红、绿灯一起亮
CLR P1.5
LCALL DELAY_1
SETB P1.6
SETB P1.5
RED: MOV A,SBUF
CJNE A,#1AH,GREEN ;测试是否收到1AH
CLR P1.5 ;如果收到1AH,即"→",红灯亮
LCALL DELAY_1
SETB P1.5
GREEN: MOV A,SBUF
CJNE A,#1BH,ENT0 ;测试是否收到1BH
CLR P1.6 ;如果收到1BH,即"←",绿灯亮
LCALL DELAY_1
SETB P1.6
ENT0: SETB ES
RETI ;中断返回
DELAY_1: ;延时程序
MOV R0, #0FFH
LOOP2:MOV R1, #0FFH
LOOP1:NOP
NOP
DJNZ R1, LOOP1
DJNZ R0, LOOP2
RET
END
发表时间:2007年4月15日9:22:49