完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
| 回复本帖可获得 1 分积分奖励! 每人限 1 次 | |
|
我用定时器T2做可编程时钟输出38khz载波,再用定时计数器0控制定时器T2(TR2)达到调制信号的目的,可是用示波器测P1.0脚时输出的频率大概在23khz附近波动,是什么原因,有没有其他方案解决。发射部分代码
#include #include #define uint unsigned int #define uchar unsigned char ***it OB=P1^0; //红外发射管脚 static uint count; //延时计数器 static uint endcount; //终止延时计数器 static uchar flag; //红外发送1或0的标志 void SendGuide(); //引导码 void SendRepeat(); //连接码 void SendData_0(); //发送“0” void SendData_1(); //发送“1” void delay_us(); void delay_ms(uint n); void main() { EA=1; //总中断开 TMOD=0x02; //设置定时器0 ET0=1; //定时器0中断允许 TH0=0xa4; TL0=0xa4; //产生100us的定时 TR0=1; C_T2=0; //定时器模式 T2MOD=0x02; //T2OE=1,定时器2允许输出 RCAP2L=0Xb7; //赋T2的预置值0xffb7,输出频率38K //0xffd8 RCAP2H=0XFF; TR2=0; while(1) { SendGuide(); SendData_1(); SendData_0(); SendData_0(); SendData_1(); //4 SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_1(); //9 SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); //21 SendData_1(); //22 SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_1(); //29 SendData_0(); SendData_1(); //31 SendData_0(); SendData_0(); SendData_1(); //34 SendData_0(); SendRepeat(); SendData_1();//1 SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_1();//14 SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_0(); SendData_1();//29 SendData_0(); SendData_0(); SendData_1();//32 } } //发送起始码 void SendGuide() { TR2=0; OB=0; endcount=90; //低电平持续时间9ms flag=0; count=0; while(count endcount=45; count=0; //高电平持续时间4.5ms flag=1; while(count flag=0; OB=0; } //发送连接码 void SendRepeat() { TR2=0; OB=0; endcount=6; //低电平持续时间600us count=0; flag=0; while(count endcount=200; //高电平持续时间20ms count=0; flag=1; while(count flag=0; OB=0; } //发送“0” void SendData_0() { TR2=0; OB=0; endcount=6; //低电平持续时间600us count=0; flag=0; while(count endcount=6; //高电平持续时间600us count=0; flag=1; while(count TR2=0; OB=0; } //发送“1” void SendData_1() { TR2=0; OB=0; endcount=6; //低电平持续时间600us count=0; flag=0; while(count endcount=16; //高电平持续时间1.6ms count=0; flag=1; while(count TR2=0; OB=0; } void delay_us() { _nop_(); _nop_(); _nop_(); _nop_(); } void delay_ms(uint n) { uint i,j; for(i=0;i } //定时计数器0中断服务函数 void timeint(void) interrupt 1 { TH0=0xa4; //产生100us的定时 TL0=0xa4; //设定定时器初值 count++; //中断计数累加 if(flag==1) { TR2=1; } else {TR2=0;OB=0;} } |
|
相关推荐
5 个讨论
|
|
|
又遇到一个问题,我用自己买的一体化接收头接在示波器上看接收到的波形,
这是我自己做的遥控器波形: https://bbs.elecfans.com/forum.php?mod=attachment&aid=NTcwMDg1fDYwY2U2NDNkYzBkOWMyN2M4M2ZkOTU5MWJmNDQ5MWI1fDE3NjUyOTU1NTU%3D&request=yes&_f=.jpg https://bbs.elecfans.com/forum.php?mod=attachment&aid=NTcwMDg2fDQwZjIxYmZhMzllYmFiMDk5Nzg1OGRmMTM3MTQ5YzgyfDE3NjUyOTU1NTU%3D&request=yes&_f=.jpg 这是格力的遥控器波形: https://bbs.elecfans.com/forum.php?mod=attachment&aid=NTcwMDg3fGFkMGRhM2M5ZjhlNTg1ZjhiZTM5M2FlOGMwNWRiYzIyfDE3NjUyOTU1NTU%3D&request=yes&_f=.jpg https://bbs.elecfans.com/forum.php?mod=attachment&aid=NTcwMDg4fGRjNzJiYjc1N2I3MmU1NjhlN2MwYWM4MTAxNWM0ZDBlfDE3NjUyOTU1NTU%3D&request=yes&_f=.jpg 我已经尽量把自己的波形调试的接近它的波形(有点差距,但不大),但还是控制不了空调, 是因为我买的接收头能识别的载波频率较宽,跟空调的不一样,因为我感觉我的调制后的信号并不是 精确的38khz,但我的接收头又能接收到,很郁闷,是不是还有其他因素啊........ |
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
112 浏览 0 评论
219 浏览 0 评论
721 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
702 浏览 0 评论
有人有STM8H1K08T连接TM1650的源码吗,可以直接使用的那种,我的代码在烧录之后数码管一直处于熄灭状态
1036 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16965 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 23:52 , Processed in 0.665078 second(s), Total 45, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
6890