📄 hp.lst
字号:
010D 9543 INC R20
010E 3046 CPI R20,6
010F F360 BCS 0x00FC
(0298) }
(0299) }
(0300) if((pb_state&(1<<6))==0)
0110 9020008F LDS R2,_pb_state
0112 FC26 SBRC R2,6
0113 C005 RJMP 0x0119
(0301) {
(0302) i2c_public|=1<<5;
0114 918000F6 LDS R24,_i2c_public
0116 6280 ORI R24,0x20
0117 938000F6 STS _i2c_public,R24
(0303) }
(0304) }
0119 940E1157 CALL pop_gset1
011B 9508 RET
_io_check:
i --> R20
011C 940E1154 CALL push_gset1
(0305) //UDR=pb_state;
(0306) }
(0307) void io_check(void) //io状态变化检测函数 0.5s检测一次
(0308) {
(0309) uchar i;
(0310)
(0311) if(pb_state!=(PINB&0x7f))
011E B386 IN R24,0x16
011F 778F ANDI R24,0x7F
0120 9020008F LDS R2,_pb_state
0122 1628 CP R2,R24
0123 F029 BEQ 0x0129
(0312) {
(0313) pbcheck_num++;
0124 9180008D LDS R24,_pbcheck_num
0126 5F8F SUBI R24,0xFF
0127 9380008D STS _pbcheck_num,R24
(0314) }
(0315)
(0316) if(pbcheck_num>1) //确认有变化
0129 E081 LDI R24,1
012A 9020008D LDS R2,_pbcheck_num
012C 1582 CP R24,R2
012D F008 BCS 0x012F
012E C03F RJMP 0x016E
(0317) {
(0318) for(i=0;i<6;i++)
012F 2744 CLR R20
0130 C024 RJMP 0x0155
(0319) {
(0320) if((pb_state&(1<<i))!=((PINB&(1<<i))))//位比较,相同则调用函数
0131 2F24 MOV R18,R20
0132 2733 CLR R19
0133 E001 LDI R16,1
0134 E010 LDI R17,0
0135 940E11A5 CALL lsl16
0137 B226 IN R2,0x16
0138 2433 CLR R3
0139 2220 AND R2,R16
013A 2231 AND R3,R17
013B 9040008F LDS R4,_pb_state
013D 2455 CLR R5
013E 2240 AND R4,R16
013F 2251 AND R5,R17
0140 1442 CP R4,R2
0141 0453 CPC R5,R3
0142 F089 BEQ 0x0154
(0321) {
(0322)
(0323) i2c_public|=(1<<i); //相应位置位
0143 E001 LDI R16,1
0144 2F14 MOV R17,R20
0145 940E11AC CALL lsl8
0147 902000F6 LDS R2,_i2c_public
0149 2A20 OR R2,R16
014A 922000F6 STS _i2c_public,R2
(0324) pb_state=PINB&0x7f; //保存新的状态位
014C B386 IN R24,0x16
014D 778F ANDI R24,0x7F
014E 9380008F STS _pb_state,R24
(0325) STATE=(~pb_state)&0x7f;
0150 9580 COM R24
0151 778F ANDI R24,0x7F
0152 9380007F STS _STATE,R24
0154 9543 INC R20
0155 3046 CPI R20,6
0156 F2D0 BCS 0x0131
(0326) }
(0327) }
(0328) if((pb_state&(1<<6))!=(PINB&(1<<6))) //由于i2c_public只有8位第7位单独处理
0157 B386 IN R24,0x16
0158 7480 ANDI R24,0x40
0159 9190008F LDS R25,_pb_state
015B 7490 ANDI R25,0x40
015C 1798 CP R25,R24
015D F069 BEQ 0x016B
(0329) { //第5位第6位用相同申请项
(0330) i2c_public|=(1<<5); //相应位置位
015E 918000F6 LDS R24,_i2c_public
0160 6280 ORI R24,0x20
0161 938000F6 STS _i2c_public,R24
(0331) pb_state=PINB&0x7f; //保存新的状态位
0163 B386 IN R24,0x16
0164 778F ANDI R24,0x7F
0165 9380008F STS _pb_state,R24
(0332) STATE=(~pb_state)&0x7f; //
0167 9580 COM R24
0168 778F ANDI R24,0x7F
0169 9380007F STS _STATE,R24
(0333) }
(0334) pbcheck_num=0;
016B 2422 CLR R2
016C 9220008D STS _pbcheck_num,R2
(0335) }
016E 940E1157 CALL pop_gset1
0170 9508 RET
(0336) //UDR=pb_state;
(0337) }
(0338) /*********************************************
(0339) //开机函数
(0340) //此函数用于设置开机时序
(0341)
(0342) *********************************************/
(0343) void open_machine(void)
(0344) {
(0345) WDR();
_open_machine:
0171 95A8 WDR
(0346) //PORTC|=0x38; //pwrbt=1,reset=1,eset_l=1
(0347) pwrbt_count=0;
0172 2422 CLR R2
0173 922000BC STS _pwrbt_count,R2
(0348) reset_open_count=0;
0175 922000BB STS _reset_open_count,R2
(0349) vs_on_open_count=0;
0177 922000B8 STS _vs_on_open_count,R2
(0350) machine_open_start=1;
0179 E081 LDI R24,1
017A 938000B0 STS _machine_open_start,R24
(0351) open_to_close_station=0;
017C 922000B1 STS _open_to_close_station,R2
(0352) open_to_close_count=0;
017E 2433 CLR R3
017F 923000BE STS _open_to_close_count+1,R3
0181 922000BD STS _open_to_close_count,R2
(0353) close_machine_enable=0;
0183 922000AE STS _close_machine_enable,R2
(0354) open_machine_enable=0;
0185 922000AD STS _open_machine_enable,R2
(0355) tv_state=1;
0187 938000F9 STS _tv_state,R24
(0356) WDR();
0189 95A8 WDR
(0357) command_2d=0;
018A 92200093 STS _command_2d,R2
(0358) PORTA|=(1<<7);
018C 9ADF SBI 0x1B,7
(0359) System_State=booting;
018D 93800069 STS _System_State,R24
018F 9508 RET
(0360) }
(0361)
(0362)
(0363)
(0364) /*********************************************
(0365) //关机函数
(0366) //此函数用于设置关机时序
(0367)
(0368) *********************************************/
(0369) void close_machine(void)
(0370) {
(0371) WDR();
_close_machine:
0190 95A8 WDR
(0372) //PORTC|=0x38; //pwrbt=1
(0373) reset_close_count=0;
0191 2422 CLR R2
0192 922000BA STS _reset_close_count,R2
(0374) rly_on_count=0;
0194 922000B9 STS _rly_on_count,R2
(0375) vs_on_close_count=0;
0196 922000B7 STS _vs_on_close_count,R2
(0376) close_to_open_count=0;
0198 922000BF STS _close_to_open_count,R2
(0377) machine_close_start=1;
019A E081 LDI R24,1
019B 938000AF STS _machine_close_start,R24
(0378) close_to_open_station=0;
019D 922000B2 STS _close_to_open_station,R2
(0379) close_machine_enable=0;
019F 922000AE STS _close_machine_enable,R2
(0380) open_machine_enable=0;
01A1 922000AD STS _open_machine_enable,R2
(0381) tv_state=0;
01A3 922000F9 STS _tv_state,R2
(0382) PORTA|=(1<<7);
01A5 9ADF SBI 0x1B,7
(0383) System_State=halting;
01A6 E084 LDI R24,4
01A7 93800069 STS _System_State,R24
(0384) WDR();
01A9 95A8 WDR
01AA 9508 RET
(0385) }
(0386)
(0387)
(0388)
(0389) /*********************************************
(0390) // port initialize
(0391)
(0392) *********************************************/
(0393) void port_init(void)
(0394) {
(0395) PORTA = 0xcc; //将PA4 PA5,SPDIF_SW 输出为0 PA6 HOTPLUG保持为高
_port_init:
01AB EC8C LDI R24,0xCC
01AC BB8B OUT 0x1B,R24
(0396) DDRA = 0xf3; // PA4,PA5 置为输出态
01AD EF83 LDI R24,0xF3
01AE BB8A OUT 0x1A,R24
(0397) // PORTB = 0x7f;
(0398) PORTB = 0xff; //内部上拉使能
01AF EF8F LDI R24,0xFF
01B0 BB88 OUT 0x18,R24
(0399) DDRB = 0x80;
01B1 E880 LDI R24,0x80
01B2 BB87 OUT 0x17,R24
(0400) // PORTC = 0x4c; //m103 output only
(0401) PORTC = 0x0c;
01B3 E08C LDI R24,0xC
01B4 BB85 OUT 0x15,R24
(0402) PORTC|=(1<<RS232_SW1); //1
01B5 9AAE SBI 0x15,6
(0403) PORTC&=~(1<<RS232_SW2); //0 --串口初始化
01B6 98AF CBI 0x15,7
(0404) // PORTC = 0x0c; //m103 output only
(0405) DDRC = 0xf4; //pwrbt 去掉更改为备用的实时的中断输入引脚;
01B7 EF84 LDI R24,0xF4
01B8 BB84 OUT 0x14,R24
(0406) PORTD = 0x60;
01B9 E680 LDI R24,0x60
01BA BB82 OUT 0x12,R24
(0407) DDRD = 0xF3;
01BB EF83 LDI R24,0xF3
01BC BB81 OUT 0x11,R24
01BD 9508 RET
_init_time:
01BE 940E116B CALL push_gset2
(0408) }
(0409) /********************************************/
(0410) void init_time()
(0411) {
(0412) Time.VS.TL=0;
01C0 E040 LDI R20,0
01C1 E050 LDI R21,0
01C2 E060 LDI R22,0
01C3 E070 LDI R23,0
01C4 93500071 STS _Time+1,R21
01C6 93400070 STS _Time,R20
01C8 93700073 STS _Time+3,R23
01CA 93600072 STS _Time+2,R22
(0413) Time.VS.TH=0;
01CC 2422 CLR R2
01CD 2433 CLR R3
01CE 92300075 STS 0x75,R3
01D0 92200074 STS 0x74,R2
01D2 940E114B CALL pop_gset2
01D4 9508 RET
_WriteTime:
i --> R20
Num --> R18
RTime --> R16
01D5 940E1154 CALL push_gset1
(0414) }
(0415)
(0416) void WriteTime(char * RTime,char Num)
(0417) {
(0418) unsigned char i;
(0419) for(i=0;i<Num;i++)
01D7 2744 CLR R20
01D8 C00D RJMP 0x01E6
(0420) {
(0421) *(RTime+i)=I2cReceiveData[i+1];
01D9 EC8B LDI R24,0xCB
01DA E090 LDI R25,0
01DB 2FE4 MOV R30,R20
01DC 27FF CLR R31
01DD 0FE8 ADD R30,R24
01DE 1FF9 ADC R31,R25
01DF 8020 LDD R2,Z+0
01E0 2FE4 MOV R30,R20
01E1 27FF CLR R31
01E2 0FE0 ADD R30,R16
01E3 1FF1 ADC R31,R17
01E4 8220 STD Z+0,R2
01E5 9543 INC R20
01E6 1742 CP R20,R18
01E7 F388 BCS 0x01D9
01E8 940E1157 CALL pop_gset1
01EA 9508 RET
_ReadTime:
i --> R20
Num --> R18
Rtime --> R16
01EB 940E1154 CALL push_gset1
(0422) }
(0423)
(0424) }
(0425) /*
(0426) void WriteTime() //写设定时间
(0427) {
(0428) unsigned char i;
(0429) for(i=1;i<6;i++)
(0430) {
(0431) Time.CBit[i]=I2cReceiveData[i];
(0432) }
(0433) }
(0434) void WriteOpenTime() //写开机时间
(0435) {
(0436) unsigned char i;
(0437) for(i=1;i<4;i++)
(0438) {
(0439) OpenTime.OBit[i]=I2cReceiveData[i];
(0440) }
(0441) }
(0442) void WriteCloseTime() //写关机时间
(0443) {
(0444) unsigned char i;
(0445) for(i=1;i<4;i++)
(0446) {
(0447) CloseTime.CBit[i]=I2cReceiveData[i];
(0448) }
(0449) }*/
(0450)
(0451) void ReadTime(char *Rtime,char Num)
(0452) {
(0453) unsigned char i;
(0454) for(i=0;i<Num;i++)
01ED 2744 CLR R20
01EE C00D RJMP 0x01FC
(0455) {
(0456) I2cSendData[i+1]=*(Rtime+i);
01EF 2FE4 MOV R30,R20
01F0 27FF CLR R31
01F1 0FE0 ADD R30,R16
01F2 1FF1 ADC R31,R17
01F3 8020 LDD R2,Z+0
01F4 ED8D LDI R24,0xDD
01F5 E090 LDI R25,0
01F6 2FE4 MOV R30,R20
01F7 27FF CLR R31
01F8 0FE8 ADD R30,R24
01F9 1FF9 ADC R31,R25
01FA 8220 STD Z+0,R2
01FB 9543 INC R20
01FC 1742 CP R20,R18
01FD F388 BCS 0x01EF
01FE 940E1157 CALL pop_gset1
0200 9508 RET
_AddTime:
i --> Y+0
ATime --> R16
0201 940E116B CALL push_gset2
0203 9724 SBIW R28,4
(0457) }
(0458) }
(0459) void AddTime(char ATime)
(0460) {
(0461) unsigned long i;
(0462) i=0xFFFFFFFF-Time.VS.TL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -