📄 uart.lst
字号:
(0210) if (Tx_counter<10)
010E 91800101 LDS R24,0x101
0110 308A CPI R24,0xA
0111 F420 BCC 0x0116
(0211) {
(0212) Tx_counter += 1;
0112 5F8F SUBI R24,0xFF
0113 93800101 STS 0x101,R24
(0213) }
0115 C003 RJMP 0x0119
(0214) else
(0215) {
(0216) Tx_counter = 1;
0116 E081 LDI R24,1
0117 93800101 STS 0x101,R24
(0217) }
(0218)
(0219) Tx_data = Tx_data_buf[Tx_counter-1];
0119 E081 LDI R24,1
011A E091 LDI R25,1
011B 91E00101 LDS R30,0x101
011D 27FF CLR R31
011E 0FE8 ADD R30,R24
011F 1FF9 ADC R31,R25
0120 8020 LDD R2,0+Z
0121 9220013A STS _Tx_data,R2
(0220)
(0221) UDR0 = Tx_data; //data to transmit
0123 B82C OUT P0C,R2
(0222) UCSR0B &=0xbf ; //1011 1111关闭发送中断
0124 B18A IN R24,P0A
0125 7B8F ANDI R24,0xBF
0126 B98A OUT P0A,R24
(0223)
(0224) while ( !( UCSR0A & (1<<UDRE0)) ) //等待发送缓冲区空
0127 9B5D SBIS P0B,5
0128 CFFE RJMP 0x0127
(0225) {
(0226) }
(0227)
(0228) UCSR0B |= 0x80;
0129 9A57 SBI P0A,7
(0229) }
012A 9029 LD R2,Y+
012B BE2F OUT P3F,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,P3F
0138 922A ST R2,-Y
(0230)
(0231) void UART0_RX_INT(void)
(0232) {
(0233) Rx_data = UDR0;
0139 B02C IN R2,P0C
013A 9220012D STS _Rx_data,R2
(0234) UART0_RX_flag = 0;
013C 2422 CLR R2
013D 9220010D STS 0x10D,R2
(0235)
(0236) if (Rx_counter < 10)
013F 91800100 LDS R24,0x100
0141 308A CPI R24,0xA
0142 F420 BCC 0x0147
(0237) {
(0238) Rx_counter += 1;
0143 5F8F SUBI R24,0xFF
0144 93800100 STS 0x100,R24
(0239) }
0146 C003 RJMP 0x014A
(0240) else
(0241) {
(0242) Rx_counter = 1;
0147 E081 LDI R24,1
0148 93800100 STS 0x100,R24
(0243) }
(0244)
(0245) Rx_data_buf[Rx_counter - 1] = Rx_data;
014A E28D LDI R24,0x2D
014B E091 LDI R25,1
014C 91E00100 LDS R30,0x100
014E 27FF CLR R31
014F 0FE8 ADD R30,R24
0150 1FF9 ADC R31,R25
0151 9020012D LDS R2,_Rx_data
0153 8220 STD R2,0+Z
(0246) PORTB = Green_LED_on;
0154 98C1 CBI P18,1
(0247)
(0248) }
0155 9029 LD R2,Y+
0156 BE2F OUT P3F,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,P3F
015F 920A ST R0,-Y
(0249)
(0250) void External_INT_0(void)
(0251) {
(0252) UCSR0B |= 0x40;
0160 9A56 SBI P0A,6
(0253) UCSR0B &= ~(0x80);
0161 9857 CBI P0A,7
(0254) }
0162 9009 LD R0,Y+
0163 BE0F OUT P3F,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,P3F
016A 922A ST R2,-Y
(0255)
(0256) void External_INT_1(void)
(0257) {
(0258) if (Type_flag < 4 )
016B 9180010E LDS R24,0x10E
016D 3084 CPI R24,4
016E F420 BCC 0x0173
(0259) {
(0260) Type_flag += 1;
016F 5F8F SUBI R24,0xFF
0170 9380010E STS 0x10E,R24
(0261) }
0172 C003 RJMP 0x0176
(0262) else
(0263) {
(0264) Type_flag = 0;
0173 2422 CLR R2
0174 9220010E STS 0x10E,R2
(0265) }
(0266) }
0176 9029 LD R2,Y+
0177 BE2F OUT P3F,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,P3F
0182 922A ST R2,-Y
(0267) void External_INT_2(void)
(0268) {
(0269)
(0270) if(m < 12)
0183 91800127 LDS R24,_m
0185 308C CPI R24,0xC
0186 F420 BCC 0x018B
(0271) {
(0272) m += 1;
0187 5F8F SUBI R24,0xFF
0188 93800127 STS _m,R24
(0273) }
018A C003 RJMP 0x018E
(0274) else
(0275) {
(0276) m = 1;
018B E081 LDI R24,1
018C 93800127 STS _m,R24
(0277) }
(0278)
(0279) Display_type = 0x0f;
018E E08F LDI R24,0xF
018F 93800129 STS _Display_type,R24
(0280) 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,0+Z
0199 92200128 STS _Display_value,R2
(0281)
(0282)
(0283) }
019B 9029 LD R2,Y+
019C BE2F OUT P3F,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 940E022F CALL push_gset2
01A5 2F62 MOV R22,R18
01A6 2F40 MOV R20,R16
(0284) void LED_Display(unsigned char Type,unsigned char Data)
(0285) {
(0286)
(0287) DATA_to_NUM(Data);
01A7 2F06 MOV R16,R22
01A8 D03A RCALL _DATA_to_NUM
(0288)
(0289) 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,0+Z
01B1 BA2B OUT P1B,R2
(0290) PORTB = (PORTB|0xf0)&0x7F;
01B2 B388 IN R24,P18
01B3 6F80 ORI R24,0xF0
01B4 778F ANDI R24,0x7F
01B5 BB88 OUT P18,R24
(0291) Delay();
01B6 DF42 RCALL _Delay
(0292)
(0293) 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,0+Z
01BF BA2B OUT P1B,R2
(0294) PORTB = (PORTB|0xf0)&0xBF;
01C0 B388 IN R24,P18
01C1 6F80 ORI R24,0xF0
01C2 7B8F ANDI R24,0xBF
01C3 BB88 OUT P18,R24
(0295) Delay();
01C4 DF34 RCALL _Delay
(0296)
(0297) 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,0+Z
01CD BA2B OUT P1B,R2
(0298) PORTB = (PORTB|0xf0)&0xDF;
01CE B388 IN R24,P18
01CF 6F80 ORI R24,0xF0
01D0 7D8F ANDI R24,0xDF
01D1 BB88 OUT P18,R24
(0299) Delay();
01D2 DF26 RCALL _Delay
(0300)
(0301) 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,0+Z
01DA BA2B OUT P1B,R2
(0302) PORTB = (PORTB|0xf0)&0xEF;
01DB B388 IN R24,P18
01DC 6F80 ORI R24,0xF0
01DD 7E8F ANDI R24,0xEF
01DE BB88 OUT P18,R24
(0303) Delay();
01DF DF19 RCALL _Delay
(0304) }
01E0 940E0215 CALL pop_gset2
01E2 9508 RET
_DATA_to_NUM:
data --> R20
01E3 940E0218 CALL push_gset1
01E5 2F40 MOV R20,R16
(0305)
(0306) void DATA_to_NUM(unsigned char data)
(0307) {
(0308) number_bai = data/100;
01E6 E614 LDI R17,0x64
01E7 2F04 MOV R16,R20
01E8 940E0203 CALL div8u
01EA 9300012C STS _number_bai,R16
(0309) 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
(0310) number_ge = (data%100)%10;
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
(0311) }
FILE: <library>
01FE 940E021B 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 24FF CLR R15
0207 E028 LDI R18,0x8
0208 0F00 LSL R16
0209 1CFF ROL R15
020A 16F1 CP R15,R17
020B F010 BCS 0x020E
020C 1AF1 SUB R15,R17
020D 9503 INC R16
020E 952A DEC R18
020F F7C1 BNE 0x0208
0210 F40E BRTC 0x0212
0211 2D0F MOV R16,R15
0212 90F9 LD R15,Y+
0213 9129 LD R18,Y+
0214 9508 RET
pop_gset2:
0215 E0E2 LDI R30,2
0216 940C021C JMP pop
push_gset1:
0218 935A ST R21,-Y
0219 934A ST R20,-Y
021A 9508 RET
pop_gset1:
021B E0E1 LDI R30,1
pop:
021C 9149 LD R20,Y+
021D 9159 LD R21,Y+
021E FDE0 SBRC R30,0
021F 9508 RET
0220 9169 LD R22,Y+
0221 9179 LD R23,Y+
0222 FDE1 SBRC R30,1
0223 9508 RET
0224 90A9 LD R10,Y+
0225 90B9 LD R11,Y+
0226 FDE2 SBRC R30,2
0227 9508 RET
0228 90C9 LD R12,Y+
0229 90D9 LD R13,Y+
022A FDE3 SBRC R30,3
022B 9508 RET
022C 90E9 LD R14,Y+
022D 90F9 LD R15,Y+
022E 9508 RET
push_gset2:
022F 937A ST R23,-Y
0230 936A ST R22,-Y
0231 940C0218 JMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -