51单片机串口:为什么通过调试助手给单片机发送“1”时,数码管显示的不是“1” 求大神指点迷津

ORG 0000H
MAIN: MOV TMOD,#20H MOV TH1,#0F3H;250=0xfa MOV TL1,#0F3H MOV P1,#00H SETB TR1 MOV SCON,#50HWAIT: MOV A,SBUF MOV P1,A MOV DPTR,#TAB MOVC A,@A+DPTR JNB RI,$ CLR RI RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END

串口助手发送字符1时,实际发送1的asc码,即0x31
WAIT: MOV A,SBUF
MOV P1,A
应改为
WAIT: MOV A,SBUF
subb a,#30h
MOV P1,A追问

WAIT: MOV A,SBUF
subb a,#30h
MOV P1,A

减30H不行,因为从P1口的发光二级管可以看到A得到的是10010001B(#A0H)

追答

还需调整顺序,改动后完整程序
ORG 0000H
MAIN:
MOV TMOD,#20H
MOV TH1,#0FdH; 晶振用11.0592M,波特率9600
MOV TL1,#0FdH
MOV P1,#00H
SETB TR1
MOV SCON,#50H
WAIT:jnb RI,$
CLR RI
MOV A,SBUF
subb a,#30h; 如发16进制01该句不要
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
sjmp wait
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

追问

仿真成功了,一个是波特率改成9600,另外subb a,#30h就得了,有点想不通的是我设成2400(#0F3H)感觉也没错呀

    谢谢了

追答

设成2400 (#0xf4)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-13
程序似乎不对,应该是1收串口数据;2查表;3显示。
ORG 0000H
MAIN:
MOV TMOD,#20H
MOV TH1,#0F3H;250=0xfa
MOV TL1,#0F3H
MOV P1,#00H
SETB TR1
MOV SCON,#50H
WAIT: JNB RI,$
CLR RI

MOV A,SBUF
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
SJMP WAIT
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END追问

很抱歉,没及时回复

好像不是程序顺序的问题,按你的程序仿真,数据不能送到P1口

相似回答