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

上传人:rrsccc 文档编号:9006210 上传时间:2021-01-29 格式:DOC 页数:19 大小:301KB
返回 下载 相关 举报
REMOTE.为51单片机编写的红外遥控解码程序.doc_第1页
第1页 / 共19页
REMOTE.为51单片机编写的红外遥控解码程序.doc_第2页
第2页 / 共19页
REMOTE.为51单片机编写的红外遥控解码程序.doc_第3页
第3页 / 共19页
REMOTE.为51单片机编写的红外遥控解码程序.doc_第4页
第4页 / 共19页
REMOTE.为51单片机编写的红外遥控解码程序.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《REMOTE.为51单片机编写的红外遥控解码程序.doc》由会员分享,可在线阅读,更多相关《REMOTE.为51单片机编写的红外遥控解码程序.doc(19页珍藏版)》请在三一文库上搜索。

1、OPE Shanghai Module Specification Progress File模块开发文件夹工程项目名称MC-55模块名称REMOTE版本号1.0程序员姓名完成日期修改日期源程序行数目标代码长度(字节)模块类型 GENERAL BIOS SYSTEM 最大执行时间(指令周期)模块简要描述 REMOTE模块主要功能为:接收遥控信号,对遥控信号进行识别、解码,并在码值有效后,输出统一编码。REMOTE模块是在有遥控信号或电磁干扰时,由系统调用。由于该模块包含三部分:INT0处理模块和TIMER0处理模块及初始化模块。REMOTE模块是采用中断处理信号,占用INT0和TIMER0两个

2、资源。为了尽可能减少堆栈的使用,以避免堆栈溢出,该模块的内部已经对INT0和TIMER0的中断地址做了处理,即两个长跳转指令已经被绝对定位在相应的中断地址上了。在主程序中已无须对上述两中断源再做处理。只须做下面三点:1 在主程序的开始部分加入下面语句: #include “remote.h”2 在主程序的初始化中加入REMOTE的初始化程序: REMOTE_INIT();3 在链接时需加入文件REMOTE.OBJ(由REMOTE.ASM和REMOTE.INC汇编生成)。 开发起止时间表预计起止时间实际起止时间设计编码单元测试集成测试1 模块详细设计结果描述1.1 基本原理REMOTE模块是针对

3、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;A

4、DDR=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,REMVA

5、LID,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 MO

6、VREMMODE,#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

7、: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,#DELA

8、Y100USDELAY_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_HIGH

9、1 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

10、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

11、 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 MO

12、V 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_OPTNMOD

13、3_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_HIG

14、H,#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,#8

15、0H 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*;

16、* 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_

17、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 INCREMMODE

18、AJMPET_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

19、,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

20、,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

21、,#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

22、 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

23、 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

24、 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,0

25、DFH,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

26、 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?R

27、EMOTE?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 th

28、e 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 li

29、st 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

30、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 INTER

31、RUPT 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 IN

32、TERRUPTERIFET_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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


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