串口调试助手向51单片机发数据怎么没反应

STC11F16XE
#include <REG51.H>
sbit p20=P2^0;
void main(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
REN=1;
EA=1;
ES=1;
p20=0;
while(1)
{ }
}

void ser() interrupt 4
{
p20=0;
RI=0;
P0=SBUF;
}
是不是串口调试助手SerialDebug_v1.1.4不行啊 电脑是WIN7 32位系统

第1个回答  2013-11-18
你测试过你发出的数据是否正确?可以把端口2,3脚短接用电脑检查数据正确后再发到单片机。追问

就发了一个十六进制的55 让led灯亮,但是没反应

追答

你的PC与MCU通信频率是否一样?

追问

一样的 就是不亮 呃呃呃 。。。。

追答

;12T 12M 2400bit

LED bit P0.0 ;在这选择LED灯IO口

ORG 0000H
LJMP START
ORG 0023H
LJMP UARTInterrupt

START:
MOV SP,#60H
LCALL InitUART

LOOP:
;add your code here!
LJMP LOOP

InitUART:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0F3H
MOV TL1,TH1
MOV PCON,#00H
SETB EA
SETB ES
SETB TR1
RET

UARTInterrupt:
JB RI,IsUART_Receive
CLR TI
RETI
IsUART_Receive:
CLR RI
PUSH ACC
MOV A,SBUF
;========================
CJNE A,#55H,OUT ;接收的数据是否为55H,不是则跳转
CPL LED ;每正确收到一次LED灯状态翻转一次
OUT:
;========================
POP ACC
RETI

SendOneByte:
CLR ES
CLR TI
MOV SBUF,A
WaitSendFinish:
JNB TI,WaitSendFinish
CLR TI
SETB ES
RET
END

本回答被提问者采纳
第2个回答  2013-11-18
串口发送的是16进制数还是字符,直接赋值给P0需要检查一下  还有波特率及晶振是否匹配追问

com3 0xfd 9600 都一样的

追答

单片机的晶振是11.0592M不?

供参考:
void init(void) //初始化函数的定义
{
SCON = 0x50; //01010000 REN=1允许串行接受状态,串口工作模式1(10位异步发送接收方式)
TMOD= 0x20; //定时器1工作方式2 初值自动加载
PCON= 0x00; //SMOD=0波特率不变(其他位不使用)不可位寻址
TH1 = 0xFD; //(11.0592M)波特率9600(数据位8、停止位1。效验位无)
TL1 = TH1;
TR1 = 1; //开启定时器
PS=1; //把串口中断的优先级设为最高
ES = 1; //开串口中断
EA = 1; // 开总中断
}
void com(void) interrupt 4
{
char b;
if(RI) //RI=1 接收到数据
{
RI=0; //清除中断标志位
 b=SBUF; //将接收的数据存于变量中
}

}

第3个回答  2013-11-18
你的发,收的波特率不一致..
把发送代码贴出来追问

用串口调试助手发送。。。

相似回答