No.104426 作者:kexiner 邮件:kexinerdd@163.com ID:72511 登陆:6次 文章数:10篇 最后登陆IP:222.184.15.50 最后登陆:2007/5/16 9:59:23 注册:2007/3/24 9:04:38 财富:142 发帖时间:2007/4/9 19:03:22 发贴者IP:222.184.15.50 标题:kexiner:求助:一个单片机串口通信的程序,请帮忙找下错误 摘要:No.104426求助:一个单片机串口通信的程序,请帮忙找下错误 将单片机与计算机通过RS232相连,单片机的P1.4接蜂鸣器,P1.5接红灯,P1.6接绿灯。调试时使用串口调试助手。当从输入18H时,要求蜂鸣器响,19H时红、绿灯一起亮,1AH时红灯亮,1BH时绿灯亮。 下面是我的程序。调试时基本已实现了要求,可是,有一点毛病,比如我先输入18H,蜂鸣器响了,然后我再输入1AH,正确的结果是红灯亮,我的程序是先是蜂鸣器响,然后再发一次,红灯才会亮,我搞了好久,真不知道怎么办了,哪位高手帮帮忙啊! ORG 0000H LJMP START ORG 0023H START: MOV SP,#30H MOV TMOD, #21H ; 定时计数器0工作于方式1,1工作于方式2 MOV TH1, #0FDH ; 波特率9600 MOV TL1, #0FDH MOV SCON, #50H ; 置串口为方式1,允许接收 SETB TR1 SETB EA ; 开中断 SETB ES ; 允许串口中断 LOOP: LCALL SIN LCALL DELAY_1 AJMP LOOP SIN: MOV A,SBUF JNB RI,$ CLR RI CJNE A,#18H,GR ;如果收到18H,即"↑",蜂鸣器响 JNB RI,$ CLR RI CLR P1.4 LCALL DELAY_1 SETB P1.4 RET GR: CJNE A,#19H,RED ;如果收到19H,即"↓",红、绿灯一起亮 JNB RI,$ CLR RI CLR P1.6 CLR P1.5 LCALL DELAY_1 SETB P1.6 SETB P1.5 SETB ES RET RED: CJNE A,#1AH,GREEN ;如果收到1AH,即"→",红灯亮 JNB RI,$ CLR RI CLR P1.5 LCALL DELAY_1 SETB P1.5 SETB ES RET GREEN: CJNE A,#1BH,ENT0 ;如果收到1BH,即"←",绿灯亮 CLR RI CLR P1.6 LCALL DELAY_1 SETB P1.6 SETB ES RET ENT0: SETB ES ;允许串行中断 RETI ;中断返回 DELAY_1: MOV R0, #0FFH LOOP2:MOV R1, #0FFH LOO ......
>>返回讨论的主题
|