标题: 为什么89C2051单片机P1每位输出总是低电平 附汇编代码 [打印本页]

作者: lwq1947    时间: 2022-1-5 16:22
标题: 为什么89C2051单片机P1每位输出总是低电平 附汇编代码
蓝牙与51交叉连接,P1.0接1.5K上拉电阻。给蓝牙发信息P1每位输出总是低电平。恳请大家指教。程序如下;
ORG 0000H
SJIMP MAIN
ORG 0060H
MAIN:
MOV P1,#00H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV PCON,#0
MOV SCON,#50H
SETB EA
SETB ES
SETB TR1
LOOP:
JNB  RI,$
MOV P1.SBUF
CLR RI
JMP LOOP
END
END


作者: 冰火风轮    时间: 2022-1-5 17:08
是你设置的哈
MOV P1,#00H
作者: lwq1947    时间: 2022-1-5 18:29
冰火风轮 发表于 2022-1-5 17:08
是你设置的哈
MOV P1,#00H

那是初始设置,之后应是LOOP循环中SBUF赋予的值呀。
作者: 188610329    时间: 2022-1-5 23:45
要么
SETB EA
SETB ES
这两句去掉。

要么

CSEG   AT  0023H
JBC  RI,Run_INT
RETI
Run_INT:
MOV P1.SBUF
RETI

作者: lwq1947    时间: 2022-1-6 13:13
188610329 发表于 2022-1-5 23:45
要么
SETB EA
SETB ES

首先感谢总工的回复解答,试过之后不成就开始怀疑是否自己哪里有问题。检查硬件才发现自己犯了不该有的低级错误。原因是蓝牙的TXD与51的RXD在线路板上连接处有虚焊,导制51根本收不到任何数据。原程序是没问题的。我原先是用过中断编程的。后来没把那两句去掉,应按总工的提示去作使程序更简睫。

作者: 188610329    时间: 2022-1-8 13:16
源程序是有问题的,你开了es,就必须在0023写中断函数,并且有reti返回,不然你只要发了串口数据,就会PC入栈,而没有PC出栈,堆栈溢出只是早晚的事,虽然你这个程序没有用到r寄存器,也许溢出后绕个圈,还能接着溢出,但是这种写法本来就是跑飞的写法。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1