📄 sudu.lst
字号:
(0143) ndata[7] = numHH;
0155 90200074 LDS R2,_numHH
0157 92200067 STS 0x67,R2
(0144) UCSRB|=(1<<TXCIE);
0159 9A56 SBI 0x0A,6
(0145) UDR = ndata[0];
015A 90200060 LDS R2,0x60
015C B82C OUT 0x0C,R2
(0146)
(0147) }
015D 9508 RET
_uart0_tx_isr:
015E 922A ST R2,-Y
015F 938A ST R24,-Y
0160 939A ST R25,-Y
0161 93EA ST R30,-Y
0162 93FA ST R31,-Y
0163 B62F IN R2,0x3F
0164 922A ST R2,-Y
(0148)
(0149)
(0150) #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
(0151) void uart0_tx_isr(void)
(0152) {
(0153)
(0154) if(K<7)
0165 91800073 LDS R24,_K
0167 3087 CPI R24,7
0168 F468 BCC 0x0176
(0155) {K=K+1;
0169 5F8F SUBI R24,0xFF
016A 93800073 STS _K,R24
(0156) UDR=ndata[K];
016C E680 LDI R24,0x60
016D E090 LDI R25,0
016E 91E00073 LDS R30,_K
0170 27FF CLR R31
0171 0FE8 ADD R30,R24
0172 1FF9 ADC R31,R25
0173 8020 LDD R2,Z+0
0174 B82C OUT 0x0C,R2
(0157) }
0175 C004 RJMP 0x017A
(0158)
(0159) else
(0160) {
(0161) K=0;
0176 2422 CLR R2
0177 92200073 STS _K,R2
(0162) UCSRB&=~(1<<TXCIE); //1?UART ?¤?é?¨a?D??
0179 9856 CBI 0x0A,6
(0163) }
(0164)
(0165)
(0166) }
017A 9029 LD R2,Y+
017B BE2F OUT 0x3F,R2
017C 91F9 LD R31,Y+
017D 91E9 LD R30,Y+
017E 9199 LD R25,Y+
017F 9189 LD R24,Y+
0180 9029 LD R2,Y+
0181 9518 RETI
(0167)
(0168) void USART_Init(void) //串行初始化
(0169) {
(0170) UCSRB|=(1<<TXEN);//允许发送
_USART_Init:
0182 9A53 SBI 0x0A,3
(0171) UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
0183 E384 LDI R24,0x34
0184 B989 OUT 0x09,R24
(0172) UBRRH=(fosc/16/(baud+1))/256;
0185 2422 CLR R2
0186 BC20 OUT 0x20,R2
(0173) UCSRC=0x86;//8 位数据+1 位STOP 位
0187 E886 LDI R24,0x86
0188 BD80 OUT 0x20,R24
(0174)
(0175) }
0189 9508 RET
_tim0Ovf:
018A 922A ST R2,-Y
018B 938A ST R24,-Y
018C 939A ST R25,-Y
018D B62F IN R2,0x3F
018E 922A ST R2,-Y
(0176)
(0177)
(0178) //定时器0溢出中断
(0179) #pragma interrupt_handler tim0Ovf:10 // vector #
(0180) //测量时间定时
(0181) void tim0Ovf(void)
(0182) {
(0183) TCCR0 = 0x00; //停止TC0
018F 2422 CLR R2
0190 BE23 OUT 0x33,R2
(0184) //INT0中断关
(0185) GICR = 0x00;
0191 BE2B OUT 0x3B,R2
(0186)
(0187) m += 1;
0192 91800080 LDS R24,_m
0194 91900081 LDS R25,_m+1
0196 9601 ADIW R24,1
0197 93900081 STS _m+1,R25
0199 93800080 STS _m,R24
(0188) TCNT0 = TIME50ms;
019B EA8E LDI R24,0xAE
019C BF82 OUT 0x32,R24
(0189) TCCR0 = 0x05; // Timer on //1024分频
019D E085 LDI R24,5
019E BF83 OUT 0x33,R24
(0190)
(0191) //PORTB |= (1<<PORTB1);
(0192) //PORTB &= ~(1<<PORTB1);
(0193)
(0194) if(GIFR& 0x40)
019F B62A IN R2,0x3A
01A0 FE26 SBRS R2,6
01A1 C002 RJMP 0x01A4
(0195) GIFR = 0x40; //清除INT0中断标志
01A2 E480 LDI R24,0x40
01A3 BF8A OUT 0x3A,R24
(0196) SEI();
01A4 9478 BSET 7
(0197) //INT0中断开
(0198) GICR = 0x40;
01A5 E480 LDI R24,0x40
01A6 BF8B OUT 0x3B,R24
(0199)
(0200) }
01A7 9029 LD R2,Y+
01A8 BE2F OUT 0x3F,R2
01A9 9199 LD R25,Y+
01AA 9189 LD R24,Y+
01AB 9029 LD R2,Y+
01AC 9518 RETI
_INT_0:
01AD D088 RCALL push_lset
(0201) //INT0中断服务子程序
(0202) #pragma interrupt_handler INT_0:2 // vector #
(0203)
(0204) void INT_0(void)
(0205) {
(0206) n = m;
01AE 90200080 LDS R2,_m
01B0 90300081 LDS R3,_m+1
01B2 9230007F STS _n+1,R3
01B4 9220007E STS _n,R2
(0207) /*
(0208) while(1)
(0209) {
(0210) PORTD |= (1<<PORTD3);
(0211) PORTD &= ~(1<<PORTD3);
(0212) delay(500);
(0213) }
(0214) */
(0215) num_read(); //从EEROM读出num
01B6 DF62 RCALL _num_read
(0216) num += m ;
01B7 90200080 LDS R2,_m
01B9 90300081 LDS R3,_m+1
01BB 2444 CLR R4
01BC 2455 CLR R5
01BD 9080007A LDS R8,_num+2
01BF 9090007B LDS R9,_num+3
01C1 90600078 LDS R6,_num
01C3 90700079 LDS R7,_num+1
01C5 0C62 ADD R6,R2
01C6 1C73 ADC R7,R3
01C7 1C84 ADC R8,R4
01C8 1C95 ADC R9,R5
01C9 92700079 STS _num+1,R7
01CB 92600078 STS _num,R6
01CD 9290007B STS _num+3,R9
01CF 9280007A STS _num+2,R8
(0217) num_write(); //将num写入EEROM
01D1 DF5C RCALL _num_write
(0218) DataTransmit(); //串行485数据发送
01D2 DF70 RCALL _DataTransmit
(0219) m = 0;
01D3 2422 CLR R2
01D4 2433 CLR R3
01D5 92300081 STS _m+1,R3
01D7 92200080 STS _m,R2
(0220) TCNT0 = TIME50ms;
01D9 EA8E LDI R24,0xAE
01DA BF82 OUT 0x32,R24
(0221) TCCR0 = 0x05; //Timer on //1024分频
01DB E085 LDI R24,5
01DC BF83 OUT 0x33,R24
(0222)
(0223)
(0224) }
01DD D06F RCALL pop_lset
01DE 9518 RETI
(0225)
(0226)
(0227) void main(void)
(0228) {
(0229) delay(200);
_main:
01DF EC08 LDI R16,0xC8
01E0 DE56 RCALL _delay
(0230) OSCCAL=e2rom_read(osccal_addr);
01E1 EF0F LDI R16,0xFF
01E2 E011 LDI R17,1
01E3 DF2E RCALL _e2rom_read
01E4 BF01 OUT 0x31,R16
(0231) //OSCCAL=osccal;
(0232)
(0233) PORTD|=(1<<PORTD3);
01E5 9A93 SBI 0x12,3
(0234)
(0235) MCUCR = 0x02; //INT0下降沿
01E6 E082 LDI R24,2
01E7 BF85 OUT 0x35,R24
(0236) TIMSK = 0x01; //TC0溢出中断允许
01E8 E081 LDI R24,1
01E9 BF89 OUT 0x39,R24
(0237)
(0238) //定时器0中断设置
(0239) TCCR0 = 0x00; //停止TC0
01EA 2422 CLR R2
01EB BE23 OUT 0x33,R2
(0240) TCNT0 = TIME50ms; //初装值
01EC EA8E LDI R24,0xAE
01ED BF82 OUT 0x32,R24
(0241)
(0242) USART_Init();
01EE DF93 RCALL _USART_Init
(0243)
(0244) DDRD=0xfb;
01EF EF8B LDI R24,0xFB
01F0 BB81 OUT 0x11,R24
(0245)
(0246) SEI();
01F1 9478 BSET 7
(0247)
(0248) GICR = 0x40; //INT0中断开
01F2 E480 LDI R24,0x40
01F3 BF8B OUT 0x3B,R24
(0249) m = 0;
01F4 2422 CLR R2
01F5 2433 CLR R3
01F6 92300081 STS _m+1,R3
01F8 92200080 STS _m,R2
(0250) TCCR0 = 0x05; //Timer on //1024分频
01FA E085 LDI R24,5
01FB BF83 OUT 0x33,R24
01FC C01B RJMP 0x0218
(0251) //主循环...
(0252)
(0253) while(1)
(0254) {
(0255) /*测试程序段,已屏蔽*/
(0256) /*PORTB &= ~(1<<PORTB2);
(0257) delay(1);
(0258) PORTB |= (1<<PORTB2);
(0259) */
(0260) DataTransmit();
01FD DF45 RCALL _DataTransmit
(0261) for(k=1;k<100;k++)
01FE E081 LDI R24,1
01FF E090 LDI R25,0
0200 9390007D STS _k+1,R25
0202 9380007C STS _k,R24
0204 C00B RJMP 0x0210
(0262) delay(200);
0205 EC08 LDI R16,0xC8
0206 DE30 RCALL _delay
0207 9180007C LDS R24,_k
0209 9190007D LDS R25,_k+1
020B 9601 ADIW R24,1
020C 9390007D STS _k+1,R25
020E 9380007C STS _k,R24
0210 9180007C LDS R24,_k
0212 9190007D LDS R25,_k+1
0214 3684 CPI R24,0x64
0215 E0E0 LDI R30,0
0216 079E CPC R25,R30
0217 F368 BCS 0x0205
0218 CFE4 RJMP 0x01FD
(0263)
(0264)
(0265) }
(0266)
(0267)
(0268) }
FILE: <library>
0219 9508 RET
pop_gset2:
021A E0E2 LDI R30,2
021B C004 RJMP pop
push_gset1:
021C 935A ST R21,-Y
021D 934A ST R20,-Y
021E 9508 RET
pop_gset1:
021F E0E1 LDI R30,1
pop:
0220 9149 LD R20,Y+
0221 9159 LD R21,Y+
0222 FDE0 SBRC R30,0
0223 9508 RET
0224 9169 LD R22,Y+
0225 9179 LD R23,Y+
0226 FDE1 SBRC R30,1
0227 9508 RET
0228 90A9 LD R10,Y+
0229 90B9 LD R11,Y+
022A FDE2 SBRC R30,2
022B 9508 RET
022C 90C9 LD R12,Y+
022D 90D9 LD R13,Y+
022E FDE3 SBRC R30,3
022F 9508 RET
0230 90E9 LD R14,Y+
0231 90F9 LD R15,Y+
0232 9508 RET
push_gset2:
0233 937A ST R23,-Y
0234 936A ST R22,-Y
0235 CFE6 RJMP push_gset1
push_lset:
0236 93FA ST R31,-Y
0237 93EA ST R30,-Y
0238 93BA ST R27,-Y
0239 93AA ST R26,-Y
023A 939A ST R25,-Y
023B 938A ST R24,-Y
023C 933A ST R19,-Y
023D 932A ST R18,-Y
023E 931A ST R17,-Y
023F 930A ST R16,-Y
0240 929A ST R9,-Y
0241 928A ST R8,-Y
0242 927A ST R7,-Y
0243 926A ST R6,-Y
0244 925A ST R5,-Y
0245 924A ST R4,-Y
0246 923A ST R3,-Y
0247 922A ST R2,-Y
0248 921A ST R1,-Y
0249 920A ST R0,-Y
024A B60F IN R0,0x3F
024B 920A ST R0,-Y
024C 9508 RET
pop_lset:
024D 9009 LD R0,Y+
024E BE0F OUT 0x3F,R0
024F 9009 LD R0,Y+
0250 9019 LD R1,Y+
0251 9029 LD R2,Y+
0252 9039 LD R3,Y+
0253 9049 LD R4,Y+
0254 9059 LD R5,Y+
0255 9069 LD R6,Y+
0256 9079 LD R7,Y+
0257 9089 LD R8,Y+
0258 9099 LD R9,Y+
0259 9109 LD R16,Y+
025A 9119 LD R17,Y+
025B 9129 LD R18,Y+
025C 9139 LD R19,Y+
025D 9189 LD R24,Y+
025E 9199 LD R25,Y+
025F 91A9 LD R26,Y+
0260 91B9 LD R27,Y+
0261 91E9 LD R30,Y+
0262 91F9 LD R31,Y+
0263 9508 RET
lsl32:
0264 920F PUSH R0
0265 9009 LD R0,Y+
0266 2000 TST R0
0267 F031 BEQ 0x026E
0268 0F00 LSL R16
0269 1F11 ROL R17
026A 1F22 ROL R18
026B 1F33 ROL R19
026C 940A DEC R0
026D CFF8 RJMP 0x0266
026E 900F POP R0
026F 9508 RET
lsr32:
0270 920F PUSH R0
0271 9009 LD R0,Y+
0272 2000 TST R0
0273 F031 BEQ 0x027A
0274 9536 LSR R19
0275 9527 ROR R18
0276 9517 ROR R17
0277 9507 ROR R16
0278 940A DEC R0
0279 CFF8 RJMP 0x0272
027A 900F POP R0
027B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -