📄 210.lst
字号:
(0155) j = 0;
00C1 2766 CLR R22
(0156) data++;
00C2 5F4F SUBI R20,0xFF
00C3 4F5F SBCI R21,0xFF
(0157) len--;
00C4 94AA DEC R10
00C5 20AA TST R10
00C6 F651 BNE 0x0091
(0158) }
(0159) }
(0160) }
(0161) return(crc);
00C7 91000072 LDS R16,crc
00C9 D0BD RCALL pop_gset3
00CA 9508 RET
(0162) }
(0163)
(0164)
(0165)
(0166) //地址计算
(0167) void addr_f(void)
(0168) {
(0169) unsigned char i;
(0170) unsigned char j; //data[0]data[1]地址
(0171) data[0]=EEPROM_read(0);
_addr_f:
j --> Y+1
i --> Y+1
00CB 2700 CLR R16
00CC DF7E RCALL _EEPROM_read
00CD 93000069 STS data,R16
(0172) data[1]=EEPROM_read(1); //EEPORM内地址,最大FFFF
00CF E001 LDI R16,1
00D0 DF7A RCALL _EEPROM_read
00D1 9300006A STS data+1,R16
(0173) data[2]=0;
00D3 2422 CLR R2
00D4 9220006B STS data+2,R2
(0174) if(GetADC()<579) data[2]|=0x80; //2.5/(3.3/13.3)/(1.1/1024)=579
00D6 DF9B RCALL _GetADC
00D7 3403 CPI R16,0x43
00D8 E0E2 LDI R30,2
00D9 071E CPC R17,R30
00DA F428 BCC 0x00E0
00DB 9180006B LDS R24,data+2
00DD 6880 ORI R24,0x80
00DE 9380006B STS data+2,R24
(0175) if(PINBS) data[2]|=0x40;
00E0 9020006E LDS R2,PINBS
00E2 2022 TST R2
00E3 F029 BEQ 0x00E9
00E4 9180006B LDS R24,data+2
00E6 6480 ORI R24,0x40
00E7 9380006B STS data+2,R24
(0176) data[2]+=CRC3(data,3);
00E9 E023 LDI R18,3
00EA E609 LDI R16,0x69
00EB E010 LDI R17,0
00EC DF9B RCALL _CRC3
00ED 9020006B LDS R2,data+2
00EF 0E20 ADD R2,R16
00F0 9220006B STS data+2,R2
00F2 9508 RET
(0177) }
(0178) //要发送的数据1
(0179) void data_1(void)
(0180) {
(0181) RF_OFF;
_data_1:
00F3 98C2 CBI 0x18,2
(0182) del(700);
00F4 EB0C LDI R16,0xBC
00F5 E012 LDI R17,2
00F6 DF5A RCALL _del
(0183) RF_ON;
00F7 9AC2 SBI 0x18,2
(0184) del(350);
00F8 E50E LDI R16,0x5E
00F9 E011 LDI R17,1
00FA DF56 RCALL _del
00FB 9508 RET
(0185) }
(0186) //要发送的数据0
(0187) void data_0(void)
(0188) {
(0189) RF_OFF;
_data_0:
00FC 98C2 CBI 0x18,2
(0190) del(350);
00FD E50E LDI R16,0x5E
00FE E011 LDI R17,1
00FF DF51 RCALL _del
(0191) RF_ON;
0100 9AC2 SBI 0x18,2
(0192) del(700);
0101 EB0C LDI R16,0xBC
0102 E012 LDI R17,2
0103 DF4D RCALL _del
0104 9508 RET
_rf:
i --> R20
j --> R10
dataf --> R22
0105 D087 RCALL push_gset3
0106 2F60 MOV R22,R16
0107 2F71 MOV R23,R17
(0193) }
(0194) //发送数据
(0195) void rf (unsigned char *dataf)
(0196) {
(0197) unsigned char i;
(0198) unsigned char j;
(0199) RF_ON; //起始位
0108 9AC2 SBI 0x18,2
(0200) del(350);
0109 E50E LDI R16,0x5E
010A E011 LDI R17,1
010B DF45 RCALL _del
(0201) for(i=0;i<3;i++)
010C 2744 CLR R20
010D C01B RJMP 0x0129
(0202) { for(j=0;j<8;j++)
010E 24AA CLR R10
010F C013 RJMP 0x0123
(0203) {
(0204) if(*dataf & (0x80>>j)) //如果该位为1
0110 2D2A MOV R18,R10
0111 2733 CLR R19
0112 E800 LDI R16,0x80
0113 E010 LDI R17,0
0114 D069 RCALL asr16
0115 2FE6 MOV R30,R22
0116 2FF7 MOV R31,R23
0117 8020 LDD R2,Z+0
0118 2433 CLR R3
0119 2220 AND R2,R16
011A 2231 AND R3,R17
011B 2022 TST R2
011C F411 BNE 0x011F
011D 2033 TST R3
011E F011 BEQ 0x0121
(0205) data_1();
011F DFD3 RCALL _data_1
0120 C001 RJMP 0x0122
(0206) else data_0();
0121 DFDA RCALL _data_0
0122 94A3 INC R10
0123 2D8A MOV R24,R10
0124 3088 CPI R24,0x8
0125 F350 BCS 0x0110
(0207) }
(0208) dataf++;
0126 5F6F SUBI R22,0xFF
0127 4F7F SBCI R23,0xFF
0128 9543 INC R20
0129 3043 CPI R20,3
012A F318 BCS 0x010E
(0209) }
(0210) RF_OFF;
012B 98C2 CBI 0x18,2
012C D05A RCALL pop_gset3
012D 9508 RET
_PCINT0_ovf_isr:
012E 920A ST R0,-Y
012F B60F IN R0,0x3F
0130 920A ST R0,-Y
(0211) }
(0212)
(0213) #pragma interrupt_handler PCINT0_ovf_isr:03
(0214) void PCINT0_ovf_isr(void) //中断程序
(0215) {
(0216) NOP();
0131 0000 NOP
0132 9009 LD R0,Y+
0133 BE0F OUT 0x3F,R0
0134 9009 LD R0,Y+
0135 9518 RETI
(0217) }
(0218) //主函数!不用解释了
(0219) void main()
(0220) {
(0221)
(0222) unsigned char i;
(0223) //以下初始化硬件
(0224) port_init(); //端口初始化
_main:
i --> R20
0136 DEFC RCALL _port_init
(0225) adc_init();
0137 DF00 RCALL _adc_init
(0226) // watchdog_init();//初始化看门狗
(0227) SEI(); //re-enable interrupts
0138 9478 BSET 7
(0228) GetADC();
0139 DF38 RCALL _GetADC
(0229) delay(10);
013A E00A LDI R16,0xA
013B E010 LDI R17,0
013C DF26 RCALL _delay
013D C03E RJMP 0x017C
(0230) while(1)
(0231) {
(0232) if((!(PINB&0x08))||(!(PINB&0x01)))
013E 9BB3 SBIS 0x16,3
013F C002 RJMP 0x0142
0140 99B0 SBIC 0x16,0
0141 C01B RJMP 0x015D
(0233) {
(0234) WDR();
0142 95A8 WDR
(0235) EN_ON;
0143 9AC1 SBI 0x18,1
(0236) addr_f();
0144 DF86 RCALL _addr_f
(0237) for(i=0;i<50;i++)
0145 2744 CLR R20
0146 C013 RJMP 0x015A
(0238) {
(0239) dataf[0]=data[0];
0147 90200069 LDS R2,data
0149 92200066 STS dataf,R2
(0240) dataf[1]=data[1];
014B 9020006A LDS R2,data+1
014D 92200067 STS dataf+1,R2
(0241) dataf[2]=data[2];
014F 9020006B LDS R2,data+2
0151 92200068 STS dataf+2,R2
(0242) rf(dataf);
0153 E606 LDI R16,0x66
0154 E010 LDI R17,0
0155 DFAF RCALL _rf
(0243) delay(3);
0156 E003 LDI R16,3
0157 E010 LDI R17,0
0158 DF0A RCALL _delay
0159 9543 INC R20
015A 3342 CPI R20,0x32
015B F358 BCS 0x0147
(0244) }
(0245) EN_OFF;
015C 98C1 CBI 0x18,1
(0246) }
(0247) GIMSK|=(1<<PCIE);
015D B78B IN R24,0x3B
015E 6280 ORI R24,0x20
015F BF8B OUT 0x3B,R24
(0248) PCMSK|=(1<<PCINT0);
0160 9AA8 SBI 0x15,0
(0249) PCMSK|=(1<<PCINT3);
0161 9AAB SBI 0x15,3
(0250) ADCSRA=0;
0162 2422 CLR R2
0163 B826 OUT 0x06,R2
(0251) MCUCR |= BIT(SM1);
0164 B785 IN R24,0x35
0165 6180 ORI R24,0x10
0166 BF85 OUT 0x35,R24
(0252)
(0253) MCUCR |= BIT(SE);
0167 B785 IN R24,0x35
0168 6280 ORI R24,0x20
0169 BF85 OUT 0x35,R24
(0254)
(0255) asm("sleep\n"); //进入睡眠状态
016A 9588 SLEEP
(0256) NOP();
016B 0000 NOP
(0257) MCUCR=0;
016C BE25 OUT 0x35,R2
(0258) delay(2);
016D E002 LDI R16,2
016E E010 LDI R17,0
016F DEF3 RCALL _delay
(0259) if(!(PINB&0x08)) PINBS=1;
0170 99B3 SBIC 0x16,3
0171 C004 RJMP 0x0176
0172 E081 LDI R24,1
0173 9380006E STS PINBS,R24
0175 C003 RJMP 0x0179
(0260) else PINBS=0;
0176 2422 CLR R2
0177 9220006E STS PINBS,R2
(0261) GIMSK=0;
0179 2422 CLR R2
017A BE2B OUT 0x3B,R2
(0262) adc_init();
FILE: <library>
017B DEBC RCALL _adc_init
017C CFC1 RJMP 0x013E
017D 9508 RET
asr16:
017E 2322 TST R18
017F F021 BEQ 0x0184
0180 9515 ASR R17
0181 9507 ROR R16
0182 952A DEC R18
0183 CFFA RJMP asr16
0184 9508 RET
pop_gset2:
0185 E0E2 LDI R30,2
0186 C00E RJMP pop
pop_gset3:
0187 E0E4 LDI R30,4
0188 C00C RJMP pop
push_gset5:
0189 92FA ST R15,-Y
018A 92EA ST R14,-Y
push_gset4:
018B 92DA ST R13,-Y
018C 92CA ST R12,-Y
push_gset3:
018D 92BA ST R11,-Y
018E 92AA ST R10,-Y
push_gset2:
018F 937A ST R23,-Y
0190 936A ST R22,-Y
push_gset1:
0191 935A ST R21,-Y
0192 934A ST R20,-Y
0193 9508 RET
pop_gset1:
0194 E0E1 LDI R30,1
pop:
0195 9149 LD R20,Y+
0196 9159 LD R21,Y+
0197 FDE0 SBRC R30,0
0198 9508 RET
0199 9169 LD R22,Y+
019A 9179 LD R23,Y+
019B FDE1 SBRC R30,1
019C 9508 RET
019D 90A9 LD R10,Y+
019E 90B9 LD R11,Y+
019F FDE2 SBRC R30,2
01A0 9508 RET
01A1 90C9 LD R12,Y+
01A2 90D9 LD R13,Y+
01A3 FDE3 SBRC R30,3
01A4 9508 RET
01A5 90E9 LD R14,Y+
01A6 90F9 LD R15,Y+
01A7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -