📄 sja1000.lst
字号:
0112 5F8F SUBI R24,0xFF
0113 93800101 STS Tx_counter,R24
(0212) }
0115 C003 RJMP 0x0119
(0213) else
(0214) {
(0215) Tx_counter = 1;
0116 E081 LDI R24,1
0117 93800101 STS Tx_counter,R24
(0216) }
(0217)
(0218) Tx_data = Tx_data_buf[Tx_counter-1];
0119 E081 LDI R24,1
011A E091 LDI R25,1
011B 91E00101 LDS R30,Tx_counter
011D 27FF CLR R31
011E 0FE8 ADD R30,R24
011F 1FF9 ADC R31,R25
0120 8020 LDD R2,Z+0
0121 9220013A STS Tx_data,R2
(0219)
(0220) UDR0 = Tx_data; //data to transmit
0123 B82C OUT 0x0C,R2
(0221) UCSR0B &= 0xbf ; //1011 1111关闭发送中断
0124 B18A IN R24,0x0A
0125 7B8F ANDI R24,0xBF
0126 B98A OUT 0x0A,R24
(0222)
(0223) while ( !( UCSR0A & (1<<UDRE0)) ) //等待发送缓冲区空
0127 9B5D SBIS 0x0B,5
0128 CFFE RJMP 0x0127
(0224) {
(0225) }
(0226)
(0227) UCSR0B |= 0x80;
0129 9A57 SBI 0x0A,7
012A 9029 LD R2,Y+
012B BE2F OUT 0x3F,R2
012C 91F9 LD R31,Y+
012D 91E9 LD R30,Y+
012E 9199 LD R25,Y+
012F 9189 LD R24,Y+
0130 9029 LD R2,Y+
0131 9518 RETI
_UART0_RX_INT:
0132 922A ST R2,-Y
0133 938A ST R24,-Y
0134 939A ST R25,-Y
0135 93EA ST R30,-Y
0136 93FA ST R31,-Y
0137 B62F IN R2,0x3F
0138 922A ST R2,-Y
(0228) }
(0229)
(0230) void UART0_RX_INT(void)
(0231) {
(0232) Rx_data = UDR0;
0139 B02C IN R2,0x0C
013A 9220012D STS Rx_data,R2
(0233) UART0_RX_flag = 0;
013C 2422 CLR R2
013D 9220010D STS UART0_RX_flag,R2
(0234)
(0235) if (Rx_counter < 10)
013F 91800100 LDS R24,Rx_counter
0141 308A CPI R24,0xA
0142 F420 BCC 0x0147
(0236) {
(0237) Rx_counter += 1;
0143 5F8F SUBI R24,0xFF
0144 93800100 STS Rx_counter,R24
(0238) }
0146 C003 RJMP 0x014A
(0239) else
(0240) {
(0241) Rx_counter = 1;
0147 E081 LDI R24,1
0148 93800100 STS Rx_counter,R24
(0242) }
(0243)
(0244) Rx_data_buf[Rx_counter - 1] = Rx_data;
014A E28D LDI R24,0x2D
014B E091 LDI R25,1
014C 91E00100 LDS R30,Rx_counter
014E 27FF CLR R31
014F 0FE8 ADD R30,R24
0150 1FF9 ADC R31,R25
0151 9020012D LDS R2,Rx_data
0153 8220 STD Z+0,R2
(0245) PORTB = Green_LED_on;
0154 98C1 CBI 0x18,1
0155 9029 LD R2,Y+
0156 BE2F OUT 0x3F,R2
0157 91F9 LD R31,Y+
0158 91E9 LD R30,Y+
0159 9199 LD R25,Y+
015A 9189 LD R24,Y+
015B 9029 LD R2,Y+
015C 9518 RETI
_External_INT_0:
015D 920A ST R0,-Y
015E B60F IN R0,0x3F
015F 920A ST R0,-Y
(0246)
(0247) }
(0248)
(0249) void External_INT_0(void)
(0250) {
(0251) UCSR0B |= 0x40;
0160 9A56 SBI 0x0A,6
(0252) UCSR0B &= ~(0x80);
0161 9857 CBI 0x0A,7
0162 9009 LD R0,Y+
0163 BE0F OUT 0x3F,R0
0164 9009 LD R0,Y+
0165 9518 RETI
_External_INT_1:
0166 922A ST R2,-Y
0167 938A ST R24,-Y
0168 939A ST R25,-Y
0169 B62F IN R2,0x3F
016A 922A ST R2,-Y
(0253) }
(0254)
(0255) void External_INT_1(void)
(0256) {
(0257) if (Type_flag < 4 )
016B 9180010E LDS R24,Type_flag
016D 3084 CPI R24,4
016E F420 BCC 0x0173
(0258) {
(0259) Type_flag += 1;
016F 5F8F SUBI R24,0xFF
0170 9380010E STS Type_flag,R24
(0260) }
0172 C003 RJMP 0x0176
(0261) else
(0262) {
(0263) Type_flag = 0;
0173 2422 CLR R2
0174 9220010E STS Type_flag,R2
(0264) }
0176 9029 LD R2,Y+
0177 BE2F OUT 0x3F,R2
0178 9199 LD R25,Y+
0179 9189 LD R24,Y+
017A 9029 LD R2,Y+
017B 9518 RETI
_External_INT_2:
017C 922A ST R2,-Y
017D 938A ST R24,-Y
017E 939A ST R25,-Y
017F 93EA ST R30,-Y
0180 93FA ST R31,-Y
0181 B62F IN R2,0x3F
0182 922A ST R2,-Y
(0265) }
(0266) void External_INT_2(void)
(0267) {
(0268)
(0269) if(m < 12)
0183 91800127 LDS R24,m
0185 308C CPI R24,0xC
0186 F420 BCC 0x018B
(0270) {
(0271) m += 1;
0187 5F8F SUBI R24,0xFF
0188 93800127 STS m,R24
(0272) }
018A C003 RJMP 0x018E
(0273) else
(0274) {
(0275) m = 1;
018B E081 LDI R24,1
018C 93800127 STS m,R24
(0276) }
(0277)
(0278) Display_type = 0x0f;
018E E08F LDI R24,0xF
018F 93800129 STS Display_type,R24
(0279) Display_value = Rx_data_buf[m-1];
0191 E28D LDI R24,0x2D
0192 E091 LDI R25,1
0193 91E00127 LDS R30,m
0195 27FF CLR R31
0196 0FE8 ADD R30,R24
0197 1FF9 ADC R31,R25
0198 8020 LDD R2,Z+0
0199 92200128 STS Display_value,R2
019B 9029 LD R2,Y+
019C BE2F OUT 0x3F,R2
019D 91F9 LD R31,Y+
019E 91E9 LD R30,Y+
019F 9199 LD R25,Y+
01A0 9189 LD R24,Y+
01A1 9029 LD R2,Y+
01A2 9518 RETI
_LED_Display:
Data --> R22
Type --> R20
01A3 940E0222 CALL push_gset2
01A5 2F62 MOV R22,R18
01A6 2F40 MOV R20,R16
(0280)
(0281)
(0282) }
(0283) void LED_Display(unsigned char Type,unsigned char Data)
(0284) {
(0285)
(0286) DATA_to_NUM(Data);
01A7 2F06 MOV R16,R22
01A8 D03A RCALL _DATA_to_NUM
(0287)
(0288) PORTA = LED_table[number_ge];
01A9 E08F LDI R24,0xF
01AA E091 LDI R25,1
01AB 91E0012A LDS R30,number_ge
01AD 27FF CLR R31
01AE 0FE8 ADD R30,R24
01AF 1FF9 ADC R31,R25
01B0 8020 LDD R2,Z+0
01B1 BA2B OUT 0x1B,R2
(0289) PORTB = (PORTB|0xf0)&0x7F;
01B2 B388 IN R24,0x18
01B3 6F80 ORI R24,0xF0
01B4 778F ANDI R24,0x7F
01B5 BB88 OUT 0x18,R24
(0290) Delay();
01B6 DF42 RCALL _Delay
(0291)
(0292) PORTA = LED_table[number_shi];
01B7 E08F LDI R24,0xF
01B8 E091 LDI R25,1
01B9 91E0012B LDS R30,number_shi
01BB 27FF CLR R31
01BC 0FE8 ADD R30,R24
01BD 1FF9 ADC R31,R25
01BE 8020 LDD R2,Z+0
01BF BA2B OUT 0x1B,R2
(0293) PORTB = (PORTB|0xf0)&0xBF;
01C0 B388 IN R24,0x18
01C1 6F80 ORI R24,0xF0
01C2 7B8F ANDI R24,0xBF
01C3 BB88 OUT 0x18,R24
(0294) Delay();
01C4 DF34 RCALL _Delay
(0295)
(0296) PORTA = LED_table[number_bai];
01C5 E08F LDI R24,0xF
01C6 E091 LDI R25,1
01C7 91E0012C LDS R30,number_bai
01C9 27FF CLR R31
01CA 0FE8 ADD R30,R24
01CB 1FF9 ADC R31,R25
01CC 8020 LDD R2,Z+0
01CD BA2B OUT 0x1B,R2
(0297) PORTB = (PORTB|0xf0)&0xDF;
01CE B388 IN R24,0x18
01CF 6F80 ORI R24,0xF0
01D0 7D8F ANDI R24,0xDF
01D1 BB88 OUT 0x18,R24
(0298) Delay();
01D2 DF26 RCALL _Delay
(0299)
(0300) PORTA = LED_table[Type];
01D3 E08F LDI R24,0xF
01D4 E091 LDI R25,1
01D5 2FE4 MOV R30,R20
01D6 27FF CLR R31
01D7 0FE8 ADD R30,R24
01D8 1FF9 ADC R31,R25
01D9 8020 LDD R2,Z+0
01DA BA2B OUT 0x1B,R2
(0301) PORTB = (PORTB|0xf0)&0xEF;
01DB B388 IN R24,0x18
01DC 6F80 ORI R24,0xF0
01DD 7E8F ANDI R24,0xEF
01DE BB88 OUT 0x18,R24
(0302) Delay();
01DF DF19 RCALL _Delay
01E0 940E0219 CALL pop_gset2
01E2 9508 RET
_DATA_to_NUM:
data --> R20
01E3 940E0224 CALL push_gset1
01E5 2F40 MOV R20,R16
(0303) }
(0304)
(0305) void DATA_to_NUM(unsigned char data)
(0306) {
(0307) number_bai = data/100;
01E6 E614 LDI R17,0x64
01E7 2F04 MOV R16,R20
01E8 940E0203 CALL div8u
01EA 9300012C STS number_bai,R16
(0308) number_shi = (data%100)/10;
01EC E614 LDI R17,0x64
01ED 2F04 MOV R16,R20
01EE 940E0201 CALL mod8u
01F0 E01A LDI R17,0xA
01F1 940E0203 CALL div8u
01F3 9300012B STS number_shi,R16
(0309) number_ge = (data%100)%10;
FILE: <library>
01F5 E614 LDI R17,0x64
01F6 2F04 MOV R16,R20
01F7 940E0201 CALL mod8u
01F9 E01A LDI R17,0xA
01FA 940E0201 CALL mod8u
01FC 9300012A STS number_ge,R16
01FE 940E0227 CALL pop_gset1
0200 9508 RET
mod8u:
0201 9468 BSET 6
0202 C001 RJMP xdiv8u
div8u:
0203 94E8 BCLR 6
xdiv8u:
0204 932A ST R18,-Y
0205 92FA ST R15,-Y
0206 92EA ST R14,-Y
0207 24FF CLR R15
0208 24EE CLR R14
0209 E120 LDI R18,0x10
020A 0F00 LSL R16
020B 1CFF ROL R15
020C 1CEE ROL R14
020D 16E1 CP R14,R17
020E F010 BCS 0x0211
020F 1AE1 SUB R14,R17
0210 9503 INC R16
0211 952A DEC R18
0212 F7B9 BNE 0x020A
0213 F40E BRTC 0x0215
0214 2D0E MOV R16,R14
0215 90E9 LD R14,Y+
0216 90F9 LD R15,Y+
0217 9129 LD R18,Y+
0218 9508 RET
pop_gset2:
0219 E0E2 LDI R30,2
021A 940C0228 JMP pop
push_gset5:
021C 92FA ST R15,-Y
021D 92EA ST R14,-Y
push_gset4:
021E 92DA ST R13,-Y
021F 92CA ST R12,-Y
push_gset3:
0220 92BA ST R11,-Y
0221 92AA ST R10,-Y
push_gset2:
0222 937A ST R23,-Y
0223 936A ST R22,-Y
push_gset1:
0224 935A ST R21,-Y
0225 934A ST R20,-Y
0226 9508 RET
pop_gset1:
0227 E0E1 LDI R30,1
pop:
0228 9149 LD R20,Y+
0229 9159 LD R21,Y+
022A FDE0 SBRC R30,0
022B 9508 RET
022C 9169 LD R22,Y+
022D 9179 LD R23,Y+
022E FDE1 SBRC R30,1
022F 9508 RET
0230 90A9 LD R10,Y+
0231 90B9 LD R11,Y+
0232 FDE2 SBRC R30,2
0233 9508 RET
0234 90C9 LD R12,Y+
0235 90D9 LD R13,Y+
0236 FDE3 SBRC R30,3
0237 9508 RET
0238 90E9 LD R14,Y+
0239 90F9 LD R15,Y+
023A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -