完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*********************************************************************/
// remote.c // 学习型遥控器 // LRM 2004.10.12 /*********************************************************************/ //使用AT89C52单片机,12MHZ晶振, // //#pragma src(E:remote.asm) #include "reg51.h" #include "intrins.h" //_nop_();延时函数用 // #define char unsigned char #define int unsigned int // ***it studylamp=P1^6; //学习状态指示灯 ***it lamp=P1^7; //发射指示灯 ***it studykey=P3^2; //学习键(中断口) ***it remotein=P3^4; //遥控信号输入口 ***it remoteout=P3^5; // 遥控输出口 ***it txkey=P1^0 ; //发射键 // // int i,j,m=255,n,k,s; char idata remotedata[206];//存脉冲宽度数据用 int head; //存起始位用 int remdata; // // //// /*********1毫秒延时程序**********/ delay1ms(int t) { for(i=0;i ; } // // /***********初始化函数**********/ clearmen() { studylamp=0; //关学习灯 lamp=0; //关发射指示 remoteout=0; //关遥控输出 remotein=1; //遥控信号输入口 置高电平? for(i=0;i<206;i++) //清内存 {remotedata[i]=0x00;} IE=0x00; IP=0x01; TMOD=0x22; //8位自动重装模式 PCON=0X00; TH1=0xf3; //40KHZ初值 TL1=0xf3; IT0=1; EX0=1; //外中断允许 EA=1; //开总中断 } // // /**********发射函数************/ //========================================================================= //====================================================================== //========问题:为什么接收的时候是15个nop,发射的时候才9个nop,而且偶数不延时??=============== //========================================================================= //=========================================================================== keywork() { if(txkey==0) //发射键被按下 { while(txkey==0); //等待键释放 ET1=1;TR1=1; //发起始位 for(i=head;i>0;i--){;} //起始位head remoteout=0; // 遥控输出口 ET1=0;TR1=0; n=0; while(1) { if(remotedata[n]==0x00) {delay1ms(10);break;} //数据为0结束 for(i=remotedata[n];i>0;i--) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} //9个nop_(),一个脉冲周期 lamp=~lamp; //发射灯指示闪烁 n++; //偶地址不发脉冲 ET1=1;TR1=1; //奇地址发调制脉冲 for(i=remotedata[n];i>0;i--){;} remoteout=0; // 遥控输出口 ET1=0;TR1=0; n++; } } } // // /***********主函数***************/ main() { clearmen(); //初始化 while(1) { keywork(); //按键扫描 } } // // /*********40KHZ发生器***********/ //定时中断T1 void time_intt1(void) interrupt 3 { remoteout=~remoteout; // 遥控输出口 } // // /***********学习函数 ***********/ //外中断0 void intt0(void) interrupt 0 //studykey学习键(中断口) P3^2 { ET1=0;TR1=0; EX0=0;EA=0; head=0; //初始位初始化 studylamp=1; //开学习指示灯 lamp=0; //关发射指示 while(studykey==0); //等待键释放 while(remotein==1); //等待遥控码输入 //遥控信号输入口 出现低电平往下进行remotein==0 head=0; //读入起始位 //========================================================================= //====================================================================== //========问题:为什么接收的时候是15个nop,发射的时候才9个nop,而且偶数不延时??=============== //========================================================================= //=========================================================================== while(remotein==0) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); head++; } //remotein==1; n=0; remdata=0x0000; while(1) { while(remotein==1) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //15个nop remdata++; //remdata高电平脉宽数据 } if(remdata>m) //高电平>5毫秒退出 m=255 { remotedata[n]=0x00; EX0=1;EA=1; goto end; } remotedata[n]=remdata; //存高电平脉宽数据 n++; remdata=0x0000; //脉宽计数器清零 while(remotein==0) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); remdata++; //低电平计数 } remotedata[n]=remdata; //存低电平脉宽数据 n++; remdata=0x00; } end: lamp=1; studylamp=0; //学习指示灯灭 } // //*********************结束**************************// |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12037 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 03:01 , Processed in 0.849373 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号