用的ta89c51,向PC机单发送可是TI总是不置位数据也传不过去(接口是usb转TTL)
org 0000HAJMP MAIN;转入主程序org 0030HMAIN:MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上MOV PCON,#80H;波特率翻倍为2400x2=4800BPSMOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值)MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值)SETB TR1;启动定时器T1 MOV A,#0AFH;将16进制的字符AF发送到串口去 MOV SBUF,A;将遥控器键值通过串口发送出去 g:JNB Ti,g;发送之后要判断Ti位是否置1,置1了才表示发送完成,然后用软件置0,否则只收到一次。MOV SBUF,A;将遥控器键值通过串口发送出去 CLR Ti
RET ;退出解码子程序end
修改了一下,试了试接收OK。
PS:还有就是主程序里不要加RET,没有LCALL及入栈指令就RET弹出堆栈指针 会让再往下的系统错乱,虽然这个并不是你这个程序的症结所在。
org 0000H
AJMP MAIN;转入主程序
org 0030H
MAIN:
LCALL DELAY100MS ;开机稳定延时
MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上
MOV PCON,#80H;波特率翻倍为2400x2=4800BPS
MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值)
MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值)
SETB TR1;启动定时器T1
MOV A,#0AFH;将16进制的字符AF发送到串口去
MOV SBUF,A;将遥控器键值通过串口发送出去
g:JNB Ti,g;发送之后要判断Ti位是否置1,置1了才表示发送完成,然后用软件置0,否则只收到一次。
LCALL DELAY100MS ;发送分隔延时
MOV SBUF,A;将遥控器键值通过串口发送出去
CLR Ti
SJMP $ ;停止
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY100MS: ;@12.000MHz
PUSH 30H
PUSH 31H
MOV 30H,#195
MOV 31H,#133
NEXT:DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
end
RET 忘记删除了,为了简化其它给删除了
哈哈 ,我的C51单片机通信口应该是坏的,我用c2051就可以发送。