本帖最后由 helloTZ 于 2015-4-10 15:12 编辑
串口传送Hello,在电脑的串口助手上只显示了H。而且影响到其他的I/O口的电平。
串口发送函数
sendIRdata2PC()单独拎出来放在switch前面是可以的,但是会影响外部中断。 不知道是什么原因,搞晕了,求解惑>0<
void main(void){ int i=0;
Init_clear();
mode= modeCheck();
while(1)
{
switch(mode) { case STUDYMODE:
//
学习模式初始化 for(i=0;i<IR_CODE_BITS;i++)
{
IRdata=0;
}
IRtime1=0;IRtime2=0;
part2flag=NOBEGIN;
bit_i=0;
EA=1;
TMOD=0x02; //
定时器0工作方式8位自动重装 TH0=0X80; //128us
TL0=0X80;
ET0=1;
IT0=1; //
负跳变触发 EX0=1;
while(1)
{
if(IRtime2>MAX || IRtime1>MAX)//认为结束符 { EA=0; ET0=0;
EX0=0;
TR0=0;
IRdata[bit_i]=0;
bit_i++;
break;
} } sendIRdata2PC();//发送给PC机查看接收到的红外数据 break;
case REMOTEMODE:
led2=~led2;
sendIRCode();
break;
default:break;
} mode= modeCheck();
}}
/******************************************************函数名:sendIRdata2PC()功能:把接收到的红外信号发送给串口******************************************************/void sendIRdata2PC(){ uchar i=0;
sendTOPCflag=1;
SCON = 0x50;
TMOD|= 0x20; //
定时器1工作方式2 PCON|= 0x80; //
波特率提高一倍 TH1 = 0xF3; // //baud*2 /*
波特率4800、数据位8、停止位1。效验位无 (12M) TL1 = 0xF3;
TR1 = 1; //
开启定时器1 ES = 1; //
开串口中断 EA = 1; //
开总中断 sendMessage("HELLO"); i=0;
if(IRdata!=0)
{
numToStr(IRdata);
sendMessage(MESSAGE);
i++;
sendMessage(" ; ");
}
EA=0;
TR1=0;
sendTOPCflag=0; }
此帖出自
小平头技术问答
一周热门 更多>