资源描述:
《二十、ATmega16基于SCRIPTABLE发送的红外接收解码(SONY SIRC Protocol)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于Proteus的Atmega48单片机仿真二十、ATmega16基于SCRIPTABLE发送的红外接收解码(SONYSIRCProtocol)(鹰击长空,longsky2007@126.com)★注:网上资料,仅供学习和参考★1、仿真环境:uProteusPro7.4sp3uICCAVR6.31a2、电路原理图u外接4M晶振u外接RC复位电路3、程序u参照彭伟《单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真》P345u本例采用SCRIPTABLE发送红外接收头解调后的(SONYSIRCProtocol)波形,Timer1输入捕获中断4、注意事项(1)在“Gener
2、atorMode”里面选择“SCRIPTABLE”,然后可修改“GeneratorName”;在“LocalScript”里面粘贴EasyHDL语言的源代码,可以点击“Edit”可以编辑和保存,见图2和图3。源代码是产生一次发送的脉冲“ABC”,如下://*SCRIPTGENERATORRECE1INTiINTREC_CODEREC_CODE=$0ABCOUT=1SLEEPFOR2000m//Delay2sOUT=0SLEEPFOR2400uOUT=1SLEEPFOR600uFORi=0TO11STEP1IF((REC_CODE&$01)!=0)THENOUT=0SLEEPFOR1200
3、uOUT=1SLEEPFOR600uELSEOUT=0SLEEPFOR600uOUT=1SLEEPFOR600uENDIFREC_CODE=REC_CODE>>1NEXTi2OUT=0SLEEPFOR600uOUT=1SLEEPFOR5*ENDSCRIPT(2)本例采用输入捕捉中断,下降沿触发,因为SONYSIRCProtocol解调的后波形是以高电平结束,因此增加一个低电平的脉冲作为结束位信号。见图4。3图1原理图4图2SCRIPTABLE的设置卡5图3编辑EasyHDL语言的源代码6图4SCRIPTABLE产生的波形图中第一个区间是起始信号;第二个区间是命令和地址;第三个区间是结束位
4、7图5用cof文件调试后的全局变量值8图6运行后的结果9/****main.c****************************************版本:ICCAVR6.25C,外接晶振4.00MHzMCU:ATmega16**************************************************/#include#include"delay_Accurate2.h"#defineF_CPU4000000UL#defineSEI()asm("sei")#defineCLI()asm("cli")#defineNOP()asm("no
5、p")#defineBEEP()PORTD^=1<6、/12位二进制数据分解为3个十六进制数位10volatileunsignedcharDigit_Buffer[]={0,0,0};//连续15次捕获计数变量volatileunsignedintCAP[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};volatileunsignedintCAP_Diff[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};volatileunsignedcharnum=0;//采集14次结束的标志volatileunsignedcharflag=0;volatileunsignedchark=0xFF;//输出提示音v
7、oidSounder(void){unsignedchari;for(i=0;i<200;i++){BEEP();//Delay_us(280);Delay_nus(558);}}//------------------------------------------------------------------//数码管显示频率//-------------------------------------------------