跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手什么都没收到,先谢过了!!!

跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手什么都没收到,先谢过了!!!,第1张

你有可能还没有运行到发送命令的那个程序去,先单编一个串口通讯程序,把串口通讯测试成功如下:

uint8 code trdata1[]={0,0,24,160,1,236};

void Txd2_num(void)

{

uint8 i=0;

for(i=0;i<6;i++)

{

Usart1RxdBuf[i]=trdata1[i];

}

SBUF =Usart1TxdBuf[0];

Usart1TxdCnt=0;

Usart1TxdNum =6;

Usart1TxdBusy=1;

}

/

串口1中断

/

void RXD_Int_Service() interrupt 4

{

uint8 ch;

if(RI)

{

RI=0;

Usart1RxdDly=6; //超过03S清空计数

Usart1RxdBuf[Usart1RxdCnt]=ch;

Usart1RxdCnt++;

if(Usart1RxdCnt>=10)

{

Usart1RxdTrue=1; //接收正确。

Usart1RxdNum=Usart1RxdCnt;

Usart1RxdCnt=0;

}

}

if(TI)

{

TI=0;

if(Usart1TxdBusy)

{

Usart1TxdCnt++;

if(Usart1TxdCnt<Usart1TxdNum) //发送计数。

SBUF=Usart1TxdBuf[Usart1TxdCnt];

else

Usart1TxdBusy=0; //发送完成一帧数据,标志位。

}

}

}

我的红外摇控接收程序如下,可作参考

//

//中断接收摇控头的信号

unsigned int code comp[5]={6000,2000,500,200,500}; //分别代表9mS,45mS,15mS,056mS,15mS

//此时晶振为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]) //45mS的低电平

{

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;

}

IIC分主从,据我所知,从机不能主动发数据给主机(我也没查过这些资料,我就按我所知道和接触过的说)。IIC一般是2根线,主机不断控制CLK的翻转,这就是通讯频率,翻转一次,就通过SDA传一个数据(0或1)

主机写数据到从机:起始+地址+读写命令+地址+数据+数据+数据++结束信号。

从机:检测到起始+读地址+判断到写命令+读取地址+读取n个数据(n>0)+结束信号

主机读从机数据:起始+地址+读写命令+地址

从机:检测到起始+读地址+判断到写命令+读取地址+控制SDA发送数据+直到检测到结束信号

起始后7个数据是地址,第8个是读写标志。

如果是写,表示下面SDA由主机控制,从机读SDA的状态。

如果读,表示下面主机只控制CLK的信号翻转,从机在每次翻转时候,将数据写入SDA,主机来读。从机一直到发现新的起始信号活着结束信号方才结束本次通讯。

总的来说:

主机控制时钟频率(SCK翻转频率,可以不均匀)。

主机先写,告诉从机下面要干嘛(写/读)。

这个讲的是I2C协议的具体SDA与SCL高低电平时序,就假如你用51单片机两个I/O口 一个I/O模拟SDA 一个I/O模拟SCL时 你可以按照以上里面的时序来编辑两个I/O高低电平时序。假如你有I2C通讯硬件模块的话 你就不需要以上直接用模块就行。上面讲的东西 大部分在I/O口模拟I2C 传输数据时才会用到,比较底层。不知道我的回答你能理解么。

以上就是关于跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手什么都没收到,先谢过了!!!全部的内容,包括:跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手什么都没收到,先谢过了!!!、两个不同的芯片之间用IIC通信,如何实现、51单片机的I2C通讯问题.w等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9599501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存