⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 necdecode.lis

📁 MCU控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module necdecode.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\McuControl\necdecode.c
 0000                   .dbfunc e Head_Reset_Nec_receive _Head_Reset_Nec_receive fV
                        .even
 0000           _Head_Reset_Nec_receive::
 0000                   .dbline -1
 0000                   .dbline 96
 0000           ; //ICC-AVR application builder : 2006-9-20 14:49:40
 0000           ; // Target : M16
 0000           ; // Crystal: 7.3728Mhz
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include <eeprom.h>
 0000           ; #include "hptvstruct.h"
 0000           ; //#include "necdecode.h"
 0000           ; // time2的中断周期为102us
 0000           ; //接收NEC码起始位最小时间 118*102us=12.036ms
 0000           ; //接收NEC码起始位最大时间 147*102us=14.994ms
 0000           ; //接收逻辑0最小时长       10*102us=1.02ms
 0000           ; //接收逻辑0最大时长       13*102us=1.326ms
 0000           ; //接收逻辑1最小时长       20*102us=2.04ms
 0000           ; //接收逻辑1最大时长       25*102us=2.55ms
 0000           ; //重复码与上位的最小时长      980*102us=99.96ms
 0000           ; //重复码的最大时长      1176*102us=120.36ms
 0000           ; //当NEC开始接收还未接收完成同时又不是重复码时超过TimeNecOutoftime的时间将视为不是NEC码
 0000           ; 
 0000           ; 
 0000           ; #define NecStartBitMin         118
 0000           ; #define NecStartBitMax         147
 0000           ; #define NecBit0Min             10
 0000           ; #define NecBit0Max             13
 0000           ; #define NecBit1Min             20
 0000           ; #define NecBit1Max             25
 0000           ; #define BTvState                1
 0000           ; #define NecRepeatBitMin        103
 0000           ; #define NecRepeatBitMax        115
 0000           ; #define TimeNecRepeatMin       880
 0000           ; #define TimeNecRepeatMax       1180
 0000           ; #define TimeNecRepeatMins      372
 0000           ; #define TimeNecRepeatMaxs      450
 0000           ; #define TimeNecOutoftime       40             
 0000           ; 
 0000           ; 
 0000           ; unsigned char  BTheFirstFallEdge; //为0时说明为接收到第一个下降沿或接受到第一个;为1时认为已接收到了第一个或大于1个下降沿;做为起始时间基准
 0000           ; unsigned char  BReceiveStart;    //开始接收数据标志
 0000           ; unsigned char  BNecFallEdge;     //是否有下降边沿
 0000           ; unsigned char  TimeNecFallEdge;  //下降边沿时间长度
 0000           ; unsigned char  RTimeNecFallEdge; //下降边沿时间长度结果保存
 0000           ; unsigned char  BNecStartBit;   //是否有起始位
 0000           ; unsigned char  NecData[4];             //红外数据
 0000           ; unsigned int   NecDecodeNum;   //红外数据位个数指针
 0000           ; unsigned int   i;
 0000           ; unsigned char  BHasReceiveNec;   //已收到一个NEC码 为进行接收重复码做准备
 0000           ; unsigned char  BPowerButton;     //有开机按键
 0000           ; unsigned int   NecRepeatCodeNum; //重复码与上一个NEC码时间间隔计数变量和重复码本身长度计数变量
 0000           ; unsigned int   RNecRepeatCodeNum;//重复码计数结果保存
 0000           ; 
 0000           ; unsigned char  BNecRepeat;       //重复码标志,置1为收到重复码
 0000           ; unsigned char  ResultNec;
 0000           ; unsigned char  RepeatCountFlag;  //为0时为还已收到了一个NEC码还未收到一次重复码,为1时为收到至少一个重复码
 0000           ; unsigned char  BRepeatStar;      //Repeat开始标志   
 0000           ; unsigned char  NecData_Map;
 0000           ; 
 0000           ; //加入的开关机控制变量和I2C变量
 0000           ; unsigned char power_key_open_enable;//
 0000           ; unsigned char power_on_close_enable;//
 0000           ; unsigned char tv_state;           //机器状态位
 0000           ; unsigned char irda_num,irda_b;
 0000           ; unsigned char  i2c_public;           //i2c使用权检测 
 0000           ; unsigned char irda_data;          //预发送数据
 0000           ; //Add end
 0000           ; 
 0000           ; extern unsigned char close_machine_enable,open_machine_enable;
 0000           ; unsigned char RepeatControl;
 0000           ; volatile unsigned char Powerdown_signal;
 0000           ; unsigned char Fac_mode;
 0000           ; unsigned char Fac_aging;
 0000           ; 
 0000           ; extern unsigned char Open_Panel_flag;
 0000           ; /*
 0000           ; typedef enum _TVstate
 0000           ; {
 0000           ;    standby,
 0000           ;    booting,
 0000           ;    delaying,
 0000           ;    working,
 0000           ;    halting
 0000           ; }TVstate_t;
 0000           ; */
 0000           ; 
 0000           ; extern volatile TVstate_t System_State;
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; //test
 0000           ; union NecTime
 0000           ; {
 0000           ;    unsigned int NecRepeatNum;
 0000           ;    unsigned char a[2];
 0000           ; }NecTimeTest;
 0000           ; 
 0000           ; void Head_Reset_Nec_receive()
 0000           ; {
 0000                   .dbline 97
 0000           ;  BReceiveStart=0;
 0000 2224              clr R2
 0002 20922400          sts _BReceiveStart,R2
 0006                   .dbline 98
 0006           ;  TimeNecFallEdge=0;
 0006 20922200          sts _TimeNecFallEdge,R2
 000A                   .dbline 99
 000A           ;  RTimeNecFallEdge=0;
 000A 20922100          sts _RTimeNecFallEdge,R2
 000E                   .dbline 100
 000E           ;  BNecStartBit=0;
 000E 20922000          sts _BNecStartBit,R2
 0012                   .dbline 101
 0012           ;  NecData[0]=0;
 0012 20921C00          sts _NecData,R2
 0016                   .dbline 102
 0016           ;  NecData[1]=0;
 0016 20921D00          sts _NecData+1,R2
 001A                   .dbline 103
 001A           ;  NecData[2]=0;
 001A 20921E00          sts _NecData+2,R2
 001E                   .dbline 104
 001E           ;  NecData[3]=0;
 001E 20921F00          sts _NecData+3,R2
 0022                   .dbline 105
 0022           ;  NecDecodeNum=0;
 0022 3324              clr R3
 0024 30921B00          sts _NecDecodeNum+1,R3
 0028 20921A00          sts _NecDecodeNum,R2
 002C                   .dbline 106
 002C           ;  BPowerButton=0;
 002C 20921600          sts _BPowerButton,R2
 0030                   .dbline 107
 0030           ;  i=0; 
 0030 30921900          sts _i+1,R3
 0034 20921800          sts _i,R2
 0038                   .dbline 108
 0038           ;  RepeatControl=0;
 0038 20920500          sts _RepeatControl,R2
 003C                   .dbline -2
 003C           L1:
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbend
 003E                   .dbfunc e HasR_Head_Reset_Nec_receive _HasR_Head_Reset_Nec_receive fV
                        .even
 003E           _HasR_Head_Reset_Nec_receive::
 003E                   .dbline -1
 003E                   .dbline 112
 003E           ; }
 003E           ; 
 003E           ; void HasR_Head_Reset_Nec_receive()
 003E           ; {
 003E                   .dbline 113
 003E           ;  BReceiveStart=0;
 003E 2224              clr R2
 0040 20922400          sts _BReceiveStart,R2
 0044                   .dbline 114
 0044           ;  TimeNecFallEdge=0;
 0044 20922200          sts _TimeNecFallEdge,R2
 0048                   .dbline 115
 0048           ;  RTimeNecFallEdge=0;
 0048 20922100          sts _RTimeNecFallEdge,R2
 004C                   .dbline 116
 004C           ;  BNecStartBit=0;
 004C 20922000          sts _BNecStartBit,R2
 0050                   .dbline 117
 0050           ;  NecDecodeNum=0;
 0050 3324              clr R3
 0052 30921B00          sts _NecDecodeNum+1,R3
 0056 20921A00          sts _NecDecodeNum,R2
 005A                   .dbline 118
 005A           ;  BPowerButton=0;
 005A 20921600          sts _BPowerButton,R2
 005E                   .dbline 119
 005E           ;  i=0; 
 005E 30921900          sts _i+1,R3
 0062 20921800          sts _i,R2
 0066                   .dbline -2
 0066           L5:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbend
 0068                   .dbfunc e Nec_data_deal_fun _Nec_data_deal_fun fV
                        .even
 0068           _Nec_data_deal_fun::
 0068 0E940000          xcall push_gset1
 006C                   .dbline -1
 006C                   .dbline 124
 006C           ; }
 006C           ; 
 006C           ; 
 006C           ; void Nec_data_deal_fun(void)
 006C           ;   {
 006C                   .dbline 126
 006C           ;     //UDR=ResultNec;
 006C           ;       switch(ResultNec)
 006C 40911000          lds R20,_ResultNec
 0070 5527              clr R21
 0072 4F30              cpi R20,15
 0074 E0E0              ldi R30,0
 0076 5E07              cpc R21,R30
 0078 A1F0              breq L10
 007A 4F30              cpi R20,15
 007C E0E0              ldi R30,0
 007E 5E07              cpc R21,R30
 0080 0CF4              brge X1
 0082 A0C0              xjmp L7
 0084           X1:
 0084           L40:
 0084 4233              cpi R20,50
 0086 E0E0              ldi R30,0
 0088 5E07              cpc R21,R30
 008A 69F1              breq L17
 008C 4333              cpi R20,51
 008E E0E0              ldi R30,0
 0090 5E07              cpc R21,R30
 0092 09F4              brne X2
 0094 48C0              xjmp L24
 0096           X2:
 0096 4433              cpi R20,52
 0098 E0E0              ldi R30,0
 009A 5E07              cpc R21,R30
 009C 09F4              brne X3
 009E 6CC0              xjmp L31
 00A0           X3:
 00A0 91C0              xjmp L7
 00A2           X0:
 00A2                   .dbline 127
 00A2           ;         {
 00A2           L10:
 00A2                   .dbline 131
 00A2           ;               case 15:
 00A2           ;                // 
 00A2           ;                
 00A2           ;                if(System_State==working)
 00A2 80910000          lds R24,_System_State
 00A6 8330              cpi R24,3
 00A8 99F4              brne L11
 00AA                   .dbline 132
 00AA           ;                 {
 00AA                   .dbline 134
 00AA           ; //                UDR=0x90;
 00AA           ;                       if(close_machine_enable==1)     //加入System_State后这个条件其实无用处了
 00AA 80910000          lds R24,_close_machine_enable
 00AE 8130              cpi R24,1
 00B0 09F0              breq X4
 00B2 96C0              xjmp L8
 00B4           X4:
 00B4                   .dbline 135
 00B4           ;                       {
 00B4                   .dbline 137
 00B4           ; //                            UDR=0x91;
 00B4           ;                               Powerdown_signal=1;
 00B4 81E0              ldi R24,1
 00B6 80930400          sts _Powerdown_signal,R24
 00BA                   .dbline 138
 00BA           ;                               i2c_public|=1<<7;
 00BA 80910700          lds R24,_i2c_public
 00BE 8068              ori R24,128
 00C0 80930700          sts _i2c_public,R24
 00C4                   .dbline 139
 00C4           ;                               irda_data=ResultNec|(1<<7); //发送键码最高位置1
 00C4 80911000          lds R24,_ResultNec
 00C8 8068              ori R24,128
 00CA 80930600          sts _irda_data,R24
 00CE                   .dbline 140
 00CE           ;                       }
 00CE                   .dbline 141
 00CE           ;                 }
 00CE 88C0              xjmp L8
 00D0           L11:
 00D0                   .dbline 143
 00D0           ;                 else
 00D0           ;                 {
 00D0                   .dbline 145
 00D0           ;                  // infrared_open_enable=1;////开机
 00D0           ;                   if(open_machine_enable==1)
 00D0 80910000          lds R24,_open_machine_enable
 00D4 8130              cpi R24,1
 00D6 09F0              breq X5
 00D8 83C0              xjmp L8
 00DA           X5:
 00DA                   .dbline 146
 00DA           ;                       {
 00DA                   .dbline 147
 00DA           ;                               power_key_open_enable=1;
 00DA 81E0              ldi R24,1
 00DC 80930C00          sts _power_key_open_enable,R24
 00E0                   .dbline 148
 00E0           ;                               Open_Panel_flag=1;
 00E0 80930000          sts _Open_Panel_flag,R24
 00E4                   .dbline 149
 00E4           ;                       }        
 00E4                   .dbline 150
 00E4           ;                 }
 00E4                   .dbline 151
 00E4           ;               break;
 00E4 7DC0              xjmp L8
 00E6           L17:
 00E6                   .dbline 157
 00E6           ; 
 00E6           ;               case 50:                 //工厂遥控器开关机
 00E6           ;                // 
 00E6           ;                
 00E6           ; 
 00E6           ;                if(System_State==working)
 00E6 80910000          lds R24,_System_State
 00EA 8330              cpi R24,3
 00EC 99F4              brne L18
 00EE                   .dbline 158
 00EE           ;                 {
 00EE                   .dbline 160
 00EE           ; //                UDR=0x90;
 00EE           ;                       if(close_machine_enable==1)
 00EE 80910000          lds R24,_close_machine_enable
 00F2 8130              cpi R24,1
 00F4 09F0              breq X6
 00F6 74C0              xjmp L8
 00F8           X6:
 00F8                   .dbline 161
 00F8           ;                       {
 00F8                   .dbline 163
 00F8           ; //                            UDR=0x91;
 00F8           ;                               Powerdown_signal=1;
 00F8 81E0              ldi R24,1
 00FA 80930400          sts _Powerdown_signal,R24
 00FE                   .dbline 164

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -