欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    REMOTE.为51单片机编写的红外遥控解码程序.doc

    • 资源ID:9006210       资源大小:301KB        全文页数:19页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    REMOTE.为51单片机编写的红外遥控解码程序.doc

    OPE Shanghai Module Specification Progress File模块开发文件夹工程项目名称MC-55模块名称REMOTE版本号1.0程序员姓名完成日期修改日期源程序行数目标代码长度(字节)模块类型 GENERAL BIOS SYSTEM 最大执行时间(指令周期)模块简要描述 REMOTE模块主要功能为:接收遥控信号,对遥控信号进行识别、解码,并在码值有效后,输出统一编码。REMOTE模块是在有遥控信号或电磁干扰时,由系统调用。由于该模块包含三部分:INT0处理模块和TIMER0处理模块及初始化模块。REMOTE模块是采用中断处理信号,占用INT0和TIMER0两个资源。为了尽可能减少堆栈的使用,以避免堆栈溢出,该模块的内部已经对INT0和TIMER0的中断地址做了处理,即两个长跳转指令已经被绝对定位在相应的中断地址上了。在主程序中已无须对上述两中断源再做处理。只须做下面三点:1 在主程序的开始部分加入下面语句: #include “remote.h”2 在主程序的初始化中加入REMOTE的初始化程序: REMOTE_INIT();3 在链接时需加入文件REMOTE.OBJ(由REMOTE.ASM和REMOTE.INC汇编生成)。 开发起止时间表预计起止时间实际起止时间设计编码单元测试集成测试1 模块详细设计结果描述1.1 基本原理REMOTE模块是针对NEC标准的遥控发射信号设计的。共占用MCU两个资源:INT0和TIMER0。通过INT0接收遥控信号,侦测脉冲信号的起止点。通过TIMER0计算脉冲信号的时间长度。根据时间的长短可识别出各种码值,从而可判断出是否是电磁干扰,或码值是否有效。1.2 扇出无。1.3 硬件接口请查阅 “TOP LOAD SYSTEM MCU BOARD REV:01” 的原理图。2 源程序清单2.1 源程序:下面所列为REMOTE模块的程序清单,(文件名:REMOTE.ASM)$INCLUDE(REMOTE.INC)CSEGAT EX_ADDR;ADDR=03H FOR EXTERN INTERUPTER 0;ADDR=13H FOR EXTERN INTERUPTER 1LJMPEX_SERVERCSEGAT ET_ADDR;ADDR=0BH FOR TIMER0 INTERUPTER;ADDR=1BH FOR TIMER1 INTERUPTERLJMPET_SERVER;*;* NAME: REMOTE_INIT*;* PURPOSE: Initial the Remote peripheral-INT0,TIMER1*;* FUNCTION: Be called when system reset*;* OUTPUT: ET0,EX0,IT0,TMOD,REMMODE,REMCONT,REMVALID,RPTVALID*;* RAM:ACC,DPTR,TEMPDATA,LOWCONT*;* Excuting: Be called After main()*;*C-Declare:void REMOTE_INIT(void);*;*RSEG?PR?REMOTE?REMOTE INBLOCKREMOTE_INIT:SETBET_ENABLE;T0 enableSETBEX_ENABLE;INT0 OR INT1 enable SETBEX_TRIG;INT0 OR INT1MOVA,TMOD;Set T0ANLA,#TMOD_MOD1ORLA,#TMOD_MOD2MOVTMOD,A MOVREMMODE,#0H MOVREMCONT,#0HCLRREMVALID CLR REMTEMPCLRRPTVALIDRET;*;* NAME: EX_SERVER*;* PURPOSE: Analyse and calculate remote wave,get the valid wave.*;* FUNCTION: wil be called When rmeote wave is received.*;*return REMMDOE,REMCONT*;* SCOPE:NONE.*;* INPUT:REMMODE,REMCONT,REMVALID,RPTVALID*;* OUTPUT:REMMODE,REMCONT*;* RAM:ACC,DPTR,TEMPDATA,LOWCONT*;* Time(MAX): 80T+100us*;* Excuting: Be called in INT0 interrupt*;* Ref.Flowchart:REMOTE.wmf*;*RSEG?PR?REMOTE?REMOTE INBLOCKEX_SERVER: PUSH ACC PUSH DPH PUSH DPL PUSH PSWJBPOWER_EN,SERVER1JBEX_TRIG,SERVER1SETBEX_TRIGLJMPEX_RSETALLSERVER1: MOV A,#DELAY100USDELAY_LOOP: DEC A JNZ DELAY_LOOP MOV DPTR,#MODETAB MOV A,REMMODE SUBB A,#9H JNC EX_RSET MOV A,REMMODE RL A JMP A+DPTRMODETAB: AJMP CODEMODE0 AJMP CODEMODE1 AJMP CODEMODE2 AJMP CODEMODE3 NOPNOPNOPNOP AJMP EX_RSETALL NOP NOPCODEMODE0: JB REM_RECEIVE,EX_RSET CLR TI_CTRL MOV TCON_HIGH,#PT1200_HIGH1 MOV TCON_LOW,#PT1200_LOW1 SETB TI_CTRL ;Start T0 1.72ms timer. MOV TEMPDATA,#80H AJMP EX_RSETCODEMODE1: JB REM_RECEIVE,EX_RSET AJMPEX_RTNCODEMODE2: JB REM_RECEIVE,EX_RTN CLR TI_CTRL MOV A,TCON_HIGHCLRCSUBBA,#R4500_lOWJCCHK_REPEAT SUBB A,#RANGE4500 JNC EX_RSETALL MOV TCON_HIGH,#0H ;Timer=4.5ms,the leader code valid MOV TCON_LOW,#R1125_PRE SETB TI_CTRL;Start timer. MOV REMMODE,#3H;turn to mode3 AJMP EX_RTNCHK_REPEAT:MOVA,TCON_HIGHCLRC SUBBA,#R2250_lOW1JCEX_RSETALLSUBBA,#RANGE2250JNCEX_RSETALL JB REMTEMP,SET_MODE5;Timer=2.25ms JNB RPTVALID,EX_RSETSET_MODE5: MOV TCON_HIGH,#PT1200_HIGH;The repeat leader code valid MOV TCON_LOW,#PT1200_LOW SETB TI_CTRL;Start 1.125ms timer MOV REMMODE,#5H ;turn to mode5 AJMP EX_RTNEX_RSETALL: CLR REMVALID CLR REMTEMP CLR RPTVALIDEX_RSET: MOV REMMODE,#0H MOV REMCONT,#0HEX_RTN: POP PSW POP DPL POP DPH POP ACC RETICODEMODE3: JB REM_RECEIVE,EX_RSET CLR TI_CTRL MOV A,TCON_HIGH MOV TCON_HIGH,#0H MOV TCON_LOW,#R1125_PRE SETB TI_CTRL CJNE A,#R1125_HIGH,MOD3_LPWR;TCON_HIGH=0,跳转DATA_CHK,检查TCON_LOW。DATA_OPTN: MOV A,TEMPDATA;data save RRC A MOV TEMPDATA,A JNC EX_RTN MOV A,REMCONT RL A MOV DPTR,#COMP_TAB JMP A+DPTRMOD3_LPWR:CJNEA,#R1125_lOW,MOD3_HPWRAJMPDATA_OPTNMOD3_HPWR:CJNEA,#R2250_HIGH2,MOD3_HPWR1SETBCAJMPDATA_OPTNMOD3_HPWR1:CJNEA,#R2250_lOW2,EX_RSETALLSETBCAJMPDATA_OPTNCOMP_TAB: AJMP CMP_CODE1 AJMP CMP_CODE2 AJMP SAVE_DATA MOV A,TEMPDATA ;compare data code and its complement CPL A CJNE A,REMDATA,EX_RSETALL INCREMMODEMOVREMCONT,#0H CLR TI_CTRL MOV TCON_HIGH,#PT1200_HIGH MOV TCON_LOW,#PT1200_LOW SETB TI_CTRL AJMP EX_RTNCMP_CODE1: MOV A,TEMPDATA;compare custom code CJNE A,#CUSTOMCODE1,EX_RSET AJMP CHKDATA_OKCMP_CODE2: MOV A,TEMPDATA;compare custom code CJNE A,#CUSTOMCODE2,EX_RSET AJMP CHKDATA_OKSAVE_DATA: MOV REMDATA,TEMPDATACHKDATA_OK: MOV TEMPDATA,#80H INC REMCONT AJMP EX_RTN;*;* NAME: ET_SERVER*;* PURPOSE: AS A TIMER FOR ANY MODE OF REMOTE*;* FUNCTION: wilL be called When rmeote wave is received.*;*return REMMDOE,REMCONT,REMVALID,RPTVALID.*;* SCOPE:NONE.*;*Static input:REMMODE,REMCONT*;*Static output:REMMODE,REMCONT,REMVALID,RPTVALID,REMDATA*;* RAM:ACC,DPTR*;* Time(MAX): 53T*;* Excuting: Be called in Timer1 interrupt*;* Ref.Flowchart:REMOTE.wmf*;*C-Declare:void TIMER1_REMOTE(void);*;*RSEG?PR?REMOTE?REMOTE INBLOCKET_SERVER: CLR EX0CLRTI_CTRL PUSH ACC PUSH PSW PUSH DPH PUSH DPL MOV A,REMMODERLA;Get offset addressMOVDPTR,#ET_TABJMPA+DPTRET_TAB:AJMPET_MODE0AJMPET_MODE1NOPNOPAJMPET_RSETALLAJMPET_MODE4AJMPET_MODE5AJMPET_MODE6AJMPET_MODE7AJMP ET_RSETALLAJMP ET_MODE9ET_MODE0: JB REM_RECEIVE,ET_RSETALL MOV TCON_HIGH,#PT1200_HIGH MOV TCON_LOW,#PT1200_LOW SETB TI_CTRL ;SET CONTER 1.125MS INC REMCONT MOV A,REMCONT CJNE A,#7H,ET_RTN1 INCREMMODEAJMPET_RSET1ET_MODE1: JNB REM_RECEIVE,ET_RSETALL MOV TCON_HIGH,#0H JBREMTEMP,CONTER_2250US JB RPTVALID,CONTER_2250US MOV TCON_LOW,#R4500_PREAJMPCONTER_NORMALCONTER_2250US:MOVTCON_LOW,#R2250_PRECONTER_NORMAL: SETB TI_CTRL INC REMMODE ;mode=2 AJMP ET_RTN1ET_MODE4:JNBREM_RECEIVE,ET_RSETALL;After 0.56ms,P3.2 should be high,or is invalid SETB REMVALID ;SET REMVALID,REFRESH CODE SETB REMTEMP CLR RPTVALIDMOVA,REMDATAJNBACC.6,OUT_DATA ANL A,#1FHORLA,#20HOUT_DATA: MOV DPTR,#REMOTE_LABMOVCA,A+DPTRMOVKEYDATA,AMOVREMDATA,A MOV TCON_HIGH,#PT_TEMP_HIGH MOV TCON_LOW,#PT_TEMP_LOWSETBTI_CTRL;SET 43.5MS COUNTER,close INT0 or INT1MOVREMMODE,#6HAJMPET_RTNET_RSETALL: CLR REMVALID CLR REMTEMPCLRRPTVALIDET_RSET: MOV REMMODE,#0HET_RSET1: MOV REMCONT,#0HET_RTN1: SETB EX0ET_RTN: POP DPL POP DPH POP PSW POP ACC RETIET_MODE5:JNBREM_RECEIVE,ET_RSETALLSETB RPTVALIDCLRREMVALID CLR REMTEMPMOVKEYDATA,REMDATA MOV REMMODE,#9H MOV REMCONT,#0HMODE5_RTN: MOV TCON_HIGH,#PT47MS_HIGH MOV TCON_LOW,#PT47MS_LOW SETB TI_CTRL AJMP ET_RTNET_MODE9: INC REMCONT MOV A,REMCONT CJNE A,#2H,MODE5_RTN MOV REMMODE,#6HET_MODE6: INC REMMODE MOV TCON_HIGH,#PT3000_HIGH MOV TCON_LOW,#PT3000_LOWSETBTI_CTRL AJMP ET_RSET1ET_MODE7: MOV A,REMCONT CJNE A,#1H,MODE7_RTNINCREMMODEMODE7_RTN: INC REMCONT MOV TCON_HIGH,#PT60MS_HIGH MOV TCON_LOW,#PT60MS_LOW SETB TI_CTRL AJMP ET_RTN1IF REM_HANDLE=1REMOTE_LAB: DB 0H,0C7H,0C8H, 0H, 0H, 0H, 0H, 0H DB 0CFH,0C1H, 0H, 0H,0DDH, 0H, 0H, 0H DB 0DCH,0CDH,0C2H, 0H, 0H,0CBH,0CCH, 0H DB 0DEH,0CAH,0C3H,0C5HELSEIF REM_HANDLE=2REMOTE_LAB: DB 0C1H, 0H, 0H, 0H, 0H, 0H, 0H, 0H DB 0D6H, 0H,0D5H,0F1H,0F2H,0F3H,0F4H,0F5H DB 0FAH,0CEH,0C5H,0C6H, 0H, 0H, 0H, 0H DB 0H, 0H,0CBH,0DCH,0D0H,0C7H,0C4H,0D2H DB 0D9H, 0H, 0H, 0H, 0H, 0H, 0H, 0H DB 0H,0D7H, 0H,0F6H,0F7H,0F8H,0F9H,0F0H DB 0CFH,0DEH,0DAH,0D4H,0DBH,0CAH,0D3H,0C2H DB 0C3H,0CCH,0CDH,0DDH,0D8H,0C8H,0C9H,0D1HELSEIF REM_HANDLE=3REMOTE_LAB: DB 0E4h, 0H, 0H,0FEH,0DEH, 0H, 0H,0FDH;CTRL_DN,PBC,CTRL,SLOW_PLAY DB 0E3H, 0H, 0H,0EFH, 0H, 0H, 0H,0EEH;CTRL_UP,FRAME,NTSC/PAL DB 0D3H,0D8H,0E9H,0EDH,0D0H,0D9H,0E7H,0ECH;AUX,SLEEP,VPOINTER,9_PICTURES,CD,TIMER,MIC,AB, DB 0D1H,0DFH,0E8H,0EBH,0D2H,0DBH,0E6H,0EAH;TAPE,REC,ECHO,MEMORY_PLAY,TUNER,OPEN/CLOSE,L/R,GOTO DB 0FFH,0F7H,0F4H,0F1H,0F0H,0F8H,0F5H,0F2H;OSD,7,4,1,0,8,5,2 DB 0FAH,0F9H,0F6H,0F3H, 0H,0C8H,0C4H,0C3H;+10,9,6,3,REPEAT,REMAIN,B_PLAY DB 0H,0C9H,0C5H,0C2H, 0H,0CDH,0C7H,0E5H;INTRO,PROG,A_PLAY,R_SKIP,RANDOM,PAUSE DB 0CEH,0CCH,0C6H,0CAH,0CFH,0DDH,0DCH,0C1H;SOUNDMODE,F_SKIP,STEREO,STOP,MUTE,VOL_DN,VOL_UP,POWERENDIFEND2.2 INC文件 下面文件中是作为源程序REMOTE.ASM的辅助文件(文件名:REMOTE.INC)。主要为源程序中用到的一些内存变量的定义、分配和声明,主程序中用到的文件和变量的说明,以及某些参数的预定义等等。PUBLICREMOTE_INIT,REMVALID,RPTVALIDEXTRNDATA(KEYDATA,OS)?PR?REMOTE?REMOTE SEGMENTCODE?DT?REMOTE?REMOTESEGMENTDATA?BI?REMOTE?REMOTESEGMENTBITRSEG?DT?REMOTE?REMOTETEMPDATA:DS1REMDATA: DS1REMMODE: DS1REMCONT: DS1RSEG?BI?REMOTE?REMOTEREMVALID:DBIT1RPTVALID:DBIT1REMTEMP:DBIT1EXTNO0EQU0B2H;The address of P3.2,and the port P3.2 is for extern interrupter 0EXTNO1EQU0B3H;The address of P3.3,and the port P3.3 is for extern interrupter 1TIMERNO0EQU0BHTIMERNO1EQU1BHPOWER_ENEQUP0.6;*; If you has been changed something of system, such as I/O port of*;remote receive, timer interrupter for remote, crystal of system,*;custom code of remote handle,the size of handle,etc,some predefined*;parameters list in below should be changed.*;*REM_RECEIVEEQUEXTNO0ET_ADDREQU TIMERNO0ORITRONEQU 1H;1H - The 1st group of custom code in ORITRON;2H - The 2nd group of custom code in ORITRONCRYSTALEQU 1H;1H - The crystal is 12.072 MHz;2H - The crystal is 12.000 MHz;3H - The crystal is 11.0592 MHz;4H - The crystal is 3.57 MHzREM_HANDLEEQU3H; 1H - For remote handle size 2025(small); 2H - For remote handle size 901; 3H - For test board.;+CHANGE END+;THE AREA ABOVE IS CHANGABLE;+;+;THE AREA BELOW IS UNCHANGABLE;*CHOICE START *;THE CHOICE OF EXTERN INTERRUPTERIF REM_RECEIVE=0B2HEX_ADDREQU 3H; 13H IS FOR EXT INTERRUPT 1EX_ENABLEEQU0A8H;0AAH IS FOR EXT INTERRUPT 1EX_TRIGEQU 88H; 8AH IS FOR EXT INTERRUPT 1ELSEIF REM_RECEIVE=0B3HEX_ADDREQU 13H; 13H IS FOR EXT INTERRUPT 1EX_ENABLEEQU0AAH;0AAH IS FOR EXT INTERRUPT 1EX_TRIGEQU 8AH; 8AH IS FOR EXT INTERRUPT 1ENDIF;*CHOICE END*;*CHOICE START *;THE CHOICE OF TIMER INTERRUPTERIFET_ADDR=0BHET_ENABLEEQU0A9H;0ABH IS FOR TIMER1 INTERRUPTERTI_CTRLEQU 8CH; 8EH IS FOR TIMER1 INTERRUPTERTCON_HIGHEQU 8CH; 8DH IS FOR TIMER1 INTERRUPTERTCON_LOWEQU 8AH; 8BH IS FOR TIMER1 INTERRUPTERTMOD_MOD1EQU0F0H; 0FH IS FOR TIMER1 INTERRUPTERTMOD_MOD2EQU 1H; 10H IS FOR TIMER1 INTERRUPTERELSEIFET_ADDR=1BHET_ENABLEEQU0ABH;0ABH IS FOR TIMER1 INTERRUPTERTI_CTRLEQU 8EH; 8EH IS FOR TIMER1 INTERRUPTERTCON_HIGHEQU 8DH; 8DH IS FOR TIMER1 INTERRUPTERTCON_LOWEQU 8BH; 8BH IS FOR TIMER1 INTERRUPTERTMOD_MOD1EQU 0FH; 0FH IS FOR TIMER1 INTERRUPTERTMOD_MOD2EQU 10H; 10H IS FOR TIMER1 INTERRUPT

    注意事项

    本文(REMOTE.为51单片机编写的红外遥控解码程序.doc)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开