完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/*****************************************************
CodeWizardAVR V1.25.9 Professional Chip type : ATmega48V Clock frequency : 7.372800 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/ #include #define lck1 10 //lck1*4=lck4 #define lck4 40 //数据位H和L电平只和 lck4*wucha4<255 #define wucha1 2 //lck1的允许正负误差 #define wucha4 8 //wucha1*4=wucha4 #define in_1 PINC.0==1 //定义遥控接收端口 #define in_0 PINC.0==0 #define k_1 PINC.1==1 #define k_0 PINC.1==0 unsigned int time_init; unsigned char time, time_h, time_l, data0, data1, data2, n, jishu, biaoji, linshi; unsigned char eeprom e_data0, e_data1, e_data2; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if(in_1) {if(jishu<5) jishu++;} else {if(jishu>0) jishu--;} //积分检测 jishu if(jishu==0) biaoji=0; //下降沿判断 if(time<255) time++; if(time_init<65535) time_init++; } void main(void) { DDRC=252; PORTC=255; //C0接收信号 C1记忆按键 C2点亮LED UCSR0B=8; UCSR0C=0x06; UBRR0L=3; //串口初始化/监视辅助语句 TCCR0A=0; TCCR0B=1; TIMSK0=1; //时钟1分频/溢出中断使能 255/7.3728=34.6us中断一次 SREG|=128; //全局中断使能 while (1) { while(biaoji==0); //等待上升沿 while(biaoji==1); //等待下降沿 time_init=0; //同步信号L电平计时复位 while(biaoji==0); //等待上升沿 time=0; time_h=0; time_l=0; //时间清零 data0=0; data1=0; data2=0; //数据清零 if(time_init>(lck1-wucha1)*31 && time_init<(lck1+wucha1)*31) { for(n=0; n<24; n++) { while(biaoji==1); //等待下降沿 time_h=time; //记录高电平的持续时间 time=0; //UDR0=time_h; //辅助语句/通过串口输出H电平的时间值 while(biaoji==0); //等待上升沿 time_l=time; //记录低电平的持续时间 time=0; //UDR0=time_l; //辅助语句/通过串口输出L电平的时间值 linshi=time_h+time_l; if(time_h==time_l || time_h>lck4 || time_l>lck4) break; //这条语句和下面那条语句要分先后 if(linshi>lck4+wucha4 || linshi if(time_h>time_l) //如果数据位是1则更新记录/实际应用时建议再检测1和0的H和L电平的宽度 { if(n<16) {if(n<8) data0+=1<<(7-n); else data1+=1<<(15-n);} else data2+=1<<(23-n); } } } if(data0==e_data0 || data1==e_data1) //遥控点亮LED测试 { if(data2==e_data2+4) PORTC.2=1; if(data2==e_data2+8) PORTC.2=0; } if(k_0 && n==24) //记忆数据/第三个数据取高4位/低4位是按键位 { e_data0=data0; e_data1=data1; e_data2=data2&240; while(k_0); //等待按键松开/防止EEPROM被反复擦写 } } } 这是我在别网上转的程序 我现在没有ATmega48V单片机 我手上有stc11F16XE STC11F08XE还有STC89C54RD+想把上面的程序用在这些蕊片上选那款好,怎么改上面程序 也不知道行不行 ***目标就是想做一个带学习功能315解码程序 手上有晶振3.6864m 4m 12m 我手上现在做好的315不带学习功能解码程序 ***望各位师傅指点 !也不知道上面程序 |
|
相关推荐
1个回答
|
|
改寄存器就可以了,其他算法代码不用改
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
820 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第十一章 KEY实验
388 浏览 0 评论
783 浏览 0 评论
801 浏览 2 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件知识分享-最小系统原理
466 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11932 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 21:13 , Processed in 0.625414 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号