本帖最后由 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 { 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; }
|