📄 hptv.s
字号:
;
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
.dbline 963
; //external interupt on INT0
;
; // if(BTvState) //是否允许进行遥控检测
; // {
; if(BHasReceiveNec==0)
lds R2,_BHasReceiveNec
tst R2
brne L134
.dbline 964
; {
.dbline 965
; BNecFallEdge=1; //有下降沿启动定时计数
ldi R24,1
sts _BNecFallEdge,R24
.dbline 966
; if(TimeNecFallEdge<=5) //判断是否为起始位
ldi R24,5
lds R2,_TimeNecFallEdge
cp R24,R2
brlo L136
.dbline 967
; {
.dbline 968
; goto int0end; //检测到起始位
xjmp L138
L136:
.dbline 970
; }
; RTimeNecFallEdge=TimeNecFallEdge; //读取时间间隔
lds R2,_TimeNecFallEdge
sts _RTimeNecFallEdge,R2
.dbline 971
; TimeNecFallEdge=0;
clr R2
sts _TimeNecFallEdge,R2
.dbline 972
; Nec_Receive();
xcall _Nec_Receive
.dbline 973
; }
xjmp L135
L134:
.dbline 975
; else
; {
.dbline 976
; RNecRepeatCodeNum=NecRepeatCodeNum;
lds R2,_NecRepeatCodeNum
lds R3,_NecRepeatCodeNum+1
sts _RNecRepeatCodeNum+1,R3
sts _RNecRepeatCodeNum,R2
.dbline 977
; NecRepeatCodeNum=0;
clr R2
clr R3
sts _NecRepeatCodeNum+1,R3
sts _NecRepeatCodeNum,R2
.dbline 978
; RepeatReceive();
xcall _RepeatReceive
.dbline 979
; }
L135:
L138:
.dbline 1008
; // }
;
; /*
; if(BTvState) //是否允许进行遥控检测
; {
; if(BHasReceiveNec==0)
; {
; BNecFallEdge=1; //有下降沿启动定时计数
; if(BTheFirstFallEdge==0) //判断是否为第一个下降沿,做为起始时间基准
; {
; BTheFirstFallEdge=1;
; TimeNecFallEdge=0;
; goto int0end; //检测到起始位
; }
; RTimeNecFallEdge=TimeNecFallEdge; //读取时间间隔
; UDR=TimeNecFallEdge;
; TimeNecFallEdge=0;
; // Nec_Receive();
; }
; else
; {
; RNecRepeatCodeNum=NecRepeatCodeNum;
; NecRepeatCodeNum=0;
; RepeatReceive();
; }
; }
; */
;
; int0end: ;
.dbline -2
L133:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e key_powercl _key_powercl fV
.even
_key_powercl::
.dbline -1
.dbline 1018
; }
;
; /**********************************************/
; /*#######################################################*/
; //读写e2prom 函数 EEPROMread(addr)
; // EEPROMwrite(addr,value)
; //直接使用即可
; /*######################################################*/
; void key_powercl(void)
; {
.dbline 1019
; UDR=0x66;
ldi R24,102
out 0xc,R24
.dbline 1020
; if(power_num==0)
lds R2,_power_num
tst R2
breq X4
xjmp L140
X4:
.dbline 1021
; {
.dbline 1022
; if(System_State==standby) //启动8秒检测,是否为进入工厂状态
lds R2,_System_State
tst R2
brne L150
.dbline 1023
; {
L144:
.dbline 1024
L145:
.dbline 1024
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L144
.dbline 1025
; UDR=0x67;
ldi R24,103
out 0xc,R24
.dbline 1027
; //开机不用申请发送
; if(fac_state==FAC_OPEN) //是否为工厂状态,如是则开机
lds R2,_fac_state
tst R2
brne L147
.dbline 1028
; {
.dbline 1029
; open_machine();
xcall _open_machine
.dbline 1030
; PORTB&=~(1<<EDID_RWEN); //打开i2c参数使能
cbi 0x18,7
.dbline 1031
; }
xjmp L143
L147:
.dbline 1033
; else
; {
.dbline 1034
; s8_state=1;
ldi R24,1
sts _s8_state,R24
.dbline 1035
; power_key_open_enable=1;//只执行一次开机代码 ,开机见主程序
sts _power_key_open_enable,R24
.dbline 1036
; Open_Panel_flag=1;
sts _Open_Panel_flag,R24
.dbline 1037
; }
.dbline 1038
; }
xjmp L143
X3:
.dbline 1040
; else //按键关机
; {
L149:
.dbline 1041
L150:
.dbline 1041
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L149
.dbline 1042
; UDR=0x68;
ldi R24,104
out 0xc,R24
.dbline 1044
;
; if(System_State==working)
lds R24,_System_State
cpi R24,3
brne L152
.dbline 1045
; {
L154:
.dbline 1046
L155:
.dbline 1046
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L154
.dbline 1047
; UDR=0x69;
ldi R24,105
out 0xc,R24
.dbline 1048
; if(fac_state==FAC_OPEN)
lds R2,_fac_state
tst R2
brne L157
.dbline 1049
; {
.dbline 1050
; fac_state=FAC_CLOSE; //非工厂状态
ldi R24,255
sts _fac_state,R24
.dbline 1051
; PORTB|=(1<<EDID_RWEN); //关闭i2c参数读写使能
sbi 0x18,7
.dbline 1052
; EEPROMwrite(0x80,fac_state); //擦除工厂状态
mov R18,R24
ldi R16,128
ldi R17,0
xcall _EEPROMwrite
.dbline 1053
; }
L157:
.dbline 1056
;
; //power_on_close_enable=1; //按键关机 //借用power_on关机
; Powerdown_signal=1;
ldi R24,1
sts _Powerdown_signal,R24
.dbline 1057
; }
xjmp L153
L152:
.dbline 1059
; else
; {
.dbline 1060
; key|=0x80;
lds R24,_key
ori R24,128
sts _key,R24
L159:
.dbline 1061
L160:
.dbline 1061
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L159
.dbline 1062
; UDR=0x70;
ldi R24,112
out 0xc,R24
.dbline 1063
; }
L153:
.dbline 1065
;
; }
L143:
.dbline 1066
; }
L140:
.dbline 1067
; if((s8_state==1)&&(key_open==1))
lds R24,_s8_state
cpi R24,1
brne L162
lds R24,_key_open
cpi R24,1
brne L162
.dbline 1068
; {
.dbline 1069
; power_num++;
lds R24,_power_num
subi R24,255 ; addi 1
sts _power_num,R24
.dbline 1070
; }
xjmp L163
L162:
.dbline 1072
; else
; {
.dbline 1073
; power_num=0;
clr R2
sts _power_num,R2
.dbline 1074
; }
L163:
.dbline 1076
;
; if((power_num==10)&&(s8_state))// 连续按键5s之后打开工厂状态
lds R24,_power_num
cpi R24,10
brne L164
lds R2,_s8_state
tst R2
breq L164
.dbline 1077
; {
.dbline 1078
; fac_state=FAC_OPEN; //打开工厂状态
clr R2
sts _fac_state,R2
L166:
.dbline 1079
L167:
.dbline 1079
sbis 0xb,5
rjmp L166
.dbline 1080
ldi R24,170
out 0xc,R24
.dbline 1081
clr R2
sts _s8_state,R2
.dbline 1082
lds R18,_fac_state
ldi R16,128
ldi R17,0
xcall _EEPROMwrite
.dbline 1083
ldi R24,1
sts _power_on_close_enable,R24
.dbline 1084
L164:
.dbline -2
L139:
.dbline 0 ; func end
ret
.dbend
.dbfunc e key_cl _key_cl fV
; key_8 -> R20,R21
; i -> R20
.even
_key_cl::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 1113
; while(!(UCSRA&(1<<UDRE)));
; UDR=0xAA;
; s8_state=0; //0为工厂状态,芯片出厂默认为非工场状态
; EEPROMwrite(0x80,fac_state); //写入工厂状态
; power_on_close_enable=1; //之后关机
; }
;
;
; }
; /*####################按键处理函数,预留7个按键请在此写入功能
; void key_menu(void) //menu键处理函数
; {
; }
; void key_volh(void) //volh
; {
; }
; void key_voll(void) //voll
; {
; }
; void key_chh(void) //chh
; {
; }
; void key_chl(void) //chl
; {
; }
; void key_source(void) //source
; {
; }
; void key_enter(void) //enter
; {
; }**/
; //###############################################################
; //-------------键码范围识别-------------------------
; void key_cl(uchar i)
; {
.dbline 1116
;
; unsigned int key_8;
; if((i>KEYPOWER_MIN)&&(i<KEYPOWER_MAX))
clr R2
cp R2,R20
brsh L170
cpi R20,32
brsh L170
.dbline 1117
; {
.dbline 1118
; KeyResult=KEY_POWER;
ldi R24,64
sts _KeyResult,R24
.dbline 1121
; // UDR=i;
; //UDR=key; //测试
; key_powercl();
xcall _key_powercl
.dbline 1122
; goto keycl;
xjmp L172
L170:
.dbline 1125
; }
;
; if((i>KEYMENU_MIN)&&(i<KEYMENU_MAX))
ldi R24,128
cp R24,R20
brsh L173
cpi R20,162
brsh L173
.dbline 1126
; {
.dbline 1127
; KeyResult=KEY_MENU;
ldi R24,1
sts _KeyResult,R24
.dbline 1131
; // UDR=i;
; //UDR=key;
; //key_menu();
; goto keycl;
xjmp L172
L173:
.dbline 1133
; }
; if((i>KEYVOLH_MIN)&&(i<KEYVOLH_MAX))
ldi R24,195
cp R24,R20
brsh L175
cpi R20,219
brsh L175
.dbline 1134
; {
.dbline 1136
; // key_volh();
; KeyResult=KEY_VOLH;
ldi R24,2
sts _KeyResult,R24
.dbline 1138
; // UDR=i;
; goto keycl;
xjmp L172
L175:
.dbline 1140
; }
; if((i>KEYVOLL_MIN)&&(i<KEYVOLL_MAX))
ldi R24,104
cp R24,R20
brsh L177
cpi R20,128
brsh L177
.dbline 1141
; {
.dbline 1143
; // key_volh();
; KeyResult=KEY_VOLL;
ldi R24,4
sts _KeyResult,R24
.dbline 1145
; // UDR=i;
; goto keycl;
xjmp L172
L177:
.dbline 1147
; }
; if((i>KEYCHH_MIN)&&(i<KEYCHH_MAX))
ldi R24,74
cp R24,R20
brsh L179
cpi R20,98
brsh L179
.dbline 1148
; {
.dbline 1150
; // key_chh();
; KeyResult=KEY_CHH;
ldi R24,8
sts _KeyResult,R24
.dbline 1152
; // UDR=i;
; goto keycl;
xjmp L172
L179:
.dbline 1154
; }
; if((i>KEYCHL_MIN)&&(i<KEYCHL_MAX))
ldi R24,40
cp R24,R20
brsh L181
cpi R20,66
brsh L181
.dbline 1155
; {
.dbline 1157
; // key_chl();
; KeyResult=KEY_CHL;
ldi R24,16
sts _KeyResult,R24
.dbline 1159
; // UDR=i;
; goto keycl;
xjmp L172
L181:
.dbline 1161
; }
; if((i>KEYSOURCE_MIN)&&(i<KEYSOURCE_MAX))
ldi R24,168
cp R24,R20
brsh L183
cpi R20,191
brsh L183
.dbline 1162
; {
.dbline 1164
; // key_source();
; KeyResult=KEY_SOURCE;
ldi R24,32
sts _KeyResult,R24
.dbline 1166
; // UDR=i;
; goto keycl;
xjmp L172
L183:
.dbline 1169
; }
;
; KeyResult=0;
clr R2
sts _KeyResult,R2
L172:
.dbline 1170
; keycl:;
.dbline 1171
; if(System_State==working)
lds R24,_System_State
cpi R24,3
brne L185
.dbline 1172
; {
.dbline 1173
; if(KeyResult!=0)
lds R2,_KeyResult
tst R2
breq L187
.dbline 1174
; {
.dbline 1175
; key_8=(key&(0x80));
lds R20,_key
clr R21
andi R20,128
andi R21,0
.dbline 1176
; KeyResult|=key_8;
clr R3
or R2,R20
or R3,R21
sts _KeyResult,R2
.dbline 1177
; key=KeyResult;
sts _key,R2
.dbline 1178
; i2c_public|=(1<<6); //准备i2c发送
lds R24,_i2c_public
ori R24,64
sts _i2c_public,R24
.dbline 1179
; }
L187:
.dbline 1180
L185:
.dbline -2
L169:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r key_8 20 i
.dbsym r i 20 c
.dbend
.dbfunc e adc_cl _adc_cl fV
; adc_sun -> R20,R21
; adc_maxmin -> R12
; j -> R22
; i -> R10
.even
_adc_cl::
xcall push_gset4
.dbline -1
.dbline 1184
; }
; }
;
; void ad
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -