📄 necdecode.lis
字号:
.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 + -