...遥控的按键值,问题是串口助手什么都没收到,先谢过了!!!
发布网友
发布时间:2024-01-02 18:57
我来回答
共1个回答
热心网友
时间:2024-08-01 14:14
你有可能还没有运行到发送命令的那个程序去,先单编一个串口通讯程序,把串口通讯测试成功如下:
uint8 code trdata1[]={0,0,24,160,1,236};
void Txd2_num(void)
{
uint8 i=0;
for(i=0;i<6;i++)
{
Usart1.RxdBuf[i]=trdata1[i];
}
SBUF =Usart1.TxdBuf[0];
Usart1.TxdCnt=0;
Usart1.TxdNum =6;
Usart1.TxdBusy=1;
}
/*****************************************
*串口1中断
*****************************************/
void RXD_Int_Service() interrupt 4
{
uint8 ch;
if(RI)
{
RI=0;
Usart1.RxdDly=6; //超过0.3S清空计数
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
{
Usart1.RxdTrue=1; //接收正确。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
}
}
if(TI)
{
TI=0;
if(Usart1.TxdBusy)
{
Usart1.TxdCnt++;
if(Usart1.TxdCnt<Usart1.TxdNum) //发送计数。
SBUF=Usart1.TxdBuf[Usart1.TxdCnt];
else
Usart1.TxdBusy=0; //发送完成一帧数据,标志位。
}
}
}
我的红外摇控接收程序如下,可作参考
//*********************************************
//中断接收摇控头的信号.
unsigned int code comp[5]={6000,2000,500,200,500}; //分别代表9mS,4.5mS,1.5mS,0.56mS,1.5mS.
//此时晶振为12MHz
unsigned char Cnt;
void Ex_Int0_InSevice() interrupt 0
{
unsigned char j=0,i=0,ch[4];
unsigned int comp_data=0;
ch[0]=0;
ch[1]=0;
ch[2]=0;
ch[3]=0;
if(red_rxd==0 && !rxd_ture && RedDly==0)
{
while(red_rxd==0)comp_data++; //等高电平的到来
if(comp_data>comp[0]) //9mS的低电平
{
comp_data=0;
while(red_rxd==1)
{
comp_data++; //等低电平的到来
if(comp_data>5000)
return;
}
if(comp_data>comp[1]) //4.5mS的低电平
{
while(i<4)
{
for(j=0;j<8;j++)
{
while(red_rxd==0); //等高电平的到来
comp_data=0;
while(red_rxd==1)
{
comp_data++; //等低电平的到来
if(comp_data>1500)
return;
}
ch[i]=ch[i]>>1;
if(comp_data>comp[2])
ch[i]=ch[i]|0x80;
}
i++;
}
Cnt++;
if(Cnt>3)Cnt=0;
if(ch[0]==0x00&&ch[1]==0xff&&(ch[2]+ch[3])==0xff)
{
IR_key=ch[2];
rxd_ture=1;
}
}
}
}
RedDly=3;
}