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位系统
就发了一个十六进制的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
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; //将接收的数据存于变量中
}
}
用串口调试助手发送。。。