📄 uart.lst
字号:
03C1 B18B IN R24,0x0B
03C2 7B8F ANDI R24,0xBF
03C3 B98B OUT 0x0B,R24
03C4 9508 RET
(0049) }
(0050)
(0051) void light_5(void)
(0052) { //01001001
(0053) PORTB &= 0b11010010;
_light_5:
03C5 B185 IN R24,0x05
03C6 7D82 ANDI R24,0xD2
03C7 B985 OUT 0x05,R24
(0054) PORTB |= 0b00010010;
03C8 B185 IN R24,0x05
03C9 6182 ORI R24,0x12
03CA B985 OUT 0x05,R24
(0055) PORTD &= 0b10111111;
03CB B18B IN R24,0x0B
03CC 7B8F ANDI R24,0xBF
03CD B98B OUT 0x0B,R24
03CE 9508 RET
(0056) }
(0057)
(0058) void light_6(void)
(0059) { //01000001
(0060) PORTB &= 0b11000010;
_light_6:
03CF B185 IN R24,0x05
03D0 7C82 ANDI R24,0xC2
03D1 B985 OUT 0x05,R24
(0061) PORTB |= 0b00000010;
03D2 9A29 SBI 0x05,1
(0062) PORTD &= 0b10111111;
03D3 B18B IN R24,0x0B
03D4 7B8F ANDI R24,0xBF
03D5 B98B OUT 0x0B,R24
03D6 9508 RET
(0063) }
(0064)
(0065) void light_7(void)
(0066) { //00011111
(0067) PORTB &= 0b11111000;
_light_7:
03D7 B185 IN R24,0x05
03D8 7F88 ANDI R24,0xF8
03D9 B985 OUT 0x05,R24
(0068) PORTB |= 0b00111000;
03DA B185 IN R24,0x05
03DB 6388 ORI R24,0x38
03DC B985 OUT 0x05,R24
(0069) PORTD |= 0b01000000;
03DD 9A5E SBI 0x0B,6
03DE 9508 RET
(0070) }
(0071)
(0072) void light_8(void)
(0073) { //00000001
(0074) PORTB &= 0b11000000;
_light_8:
03DF B185 IN R24,0x05
03E0 7C80 ANDI R24,0xC0
03E1 B985 OUT 0x05,R24
(0075) //
(0076) PORTD &= 0b10111111;
03E2 B18B IN R24,0x0B
03E3 7B8F ANDI R24,0xBF
03E4 B98B OUT 0x0B,R24
03E5 9508 RET
(0077) }
(0078)
(0079) void light_9(void)
(0080) { //00001001
(0081) PORTB &= 0b11010000;
_light_9:
03E6 B185 IN R24,0x05
03E7 7D80 ANDI R24,0xD0
03E8 B985 OUT 0x05,R24
(0082) PORTB |= 0b00010000;
03E9 9A2C SBI 0x05,4
(0083) PORTD &= 0b10111111;
03EA B18B IN R24,0x0B
03EB 7B8F ANDI R24,0xBF
03EC B98B OUT 0x0B,R24
03ED 9508 RET
(0084) }
(0085)
(0086)
(0087) void led_init(void)
(0088) {
(0089) //段码 1: output; 0: input.
(0090) DDRD |= 0xc0; // 0b1100'0000
_led_init:
03EE B18A IN R24,0x0A
03EF 6C80 ORI R24,0xC0
03F0 B98A OUT 0x0A,R24
(0091) DDRB |= 0x3f; // 0b0011'1111
03F1 B184 IN R24,0x04
03F2 638F ORI R24,0x3F
03F3 B984 OUT 0x04,R24
(0092) //位码
(0093) DDRC |= 0x3c; // 0b0011'1100
03F4 B187 IN R24,0x07
03F5 638C ORI R24,0x3C
03F6 B987 OUT 0x07,R24
(0094) //
(0095) PORTC &= 0b11011111;
03F7 B188 IN R24,0x08
03F8 7D8F ANDI R24,0xDF
03F9 B988 OUT 0x08,R24
(0096) PORTC |= 0b00100000;
03FA 9A45 SBI 0x08,5
(0097) PORTC &= 0b11011111;
03FB B188 IN R24,0x08
03FC 7D8F ANDI R24,0xDF
03FD B988 OUT 0x08,R24
(0098) PORTC |= 0b00010000;
03FE 9A44 SBI 0x08,4
(0099) PORTC &= 0b11101111;
03FF B188 IN R24,0x08
0400 7E8F ANDI R24,0xEF
0401 B988 OUT 0x08,R24
(0100) //连接
(0101) pcled[0] = light_0;
0402 E688 LDI R24,0x68
0403 E090 LDI R25,0
0404 9390013F STS pcled+1,R25
0406 9380013E STS pcled,R24
(0102) pcled[1] = light_1;
0408 E686 LDI R24,0x66
0409 E090 LDI R25,0
040A 93900141 STS pcled+3,R25
040C 93800140 STS pcled+2,R24
(0103) pcled[2] = light_2;
040E E684 LDI R24,0x64
040F E090 LDI R25,0
0410 93900143 STS 0x143,R25
0412 93800142 STS 0x142,R24
(0104) pcled[3] = light_3;
0414 E682 LDI R24,0x62
0415 E090 LDI R25,0
0416 93900145 STS 0x145,R25
0418 93800144 STS 0x144,R24
(0105) pcled[4] = light_4;
041A E680 LDI R24,0x60
041B E090 LDI R25,0
041C 93900147 STS 0x147,R25
041E 93800146 STS 0x146,R24
(0106) pcled[5] = light_5;
0420 E58E LDI R24,0x5E
0421 E090 LDI R25,0
0422 93900149 STS 0x149,R25
0424 93800148 STS 0x148,R24
(0107) pcled[6] = light_6;
0426 E58C LDI R24,0x5C
0427 E090 LDI R25,0
0428 9390014B STS 0x14B,R25
042A 9380014A STS 0x14A,R24
(0108) pcled[7] = light_7;
042C E58A LDI R24,0x5A
042D E090 LDI R25,0
042E 9390014D STS 0x14D,R25
0430 9380014C STS 0x14C,R24
(0109) pcled[8] = light_8;
0432 E588 LDI R24,0x58
0433 E090 LDI R25,0
0434 9390014F STS 0x14F,R25
0436 9380014E STS 0x14E,R24
(0110) pcled[9] = light_9;
0438 E586 LDI R24,0x56
0439 E090 LDI R25,0
043A 93900151 STS 0x151,R25
043C 93800150 STS 0x150,R24
043E 9508 RET
_CalculateSub:
p_aloneD --> R20
Digit --> R22
043F D0BE RCALL push_gset2
0440 01A9 MOVW R20,R18
0441 01B8 MOVW R22,R16
(0111) }
(0112)
(0113) //位计算.
(0114) void CalculateSub(unsigned int Digit,char *p_aloneD)
(0115) {
(0116) *p_aloneD = (char)(Digit/1000);
0442 EE28 LDI R18,0xE8
0443 E033 LDI R19,3
0444 018B MOVW R16,R22
0445 D080 RCALL div16u
0446 01FA MOVW R30,R20
0447 8300 STD Z+0,R16
(0117) Digit -= *p_aloneD++ * 1000;
0448 9121 LD R18,Z+
0449 01AF MOVW R20,R30
044A 2733 CLR R19
044B EE08 LDI R16,0xE8
044C E013 LDI R17,3
044D D092 RCALL empy16s
044E 1B60 SUB R22,R16
044F 0B71 SBC R23,R17
(0118)
(0119) *p_aloneD = (char)(Digit/100);
0450 E624 LDI R18,0x64
0451 E030 LDI R19,0
0452 018B MOVW R16,R22
0453 D072 RCALL div16u
0454 01FA MOVW R30,R20
0455 8300 STD Z+0,R16
(0120) Digit -= *p_aloneD++ * 100;
0456 9111 LD R17,Z+
0457 01AF MOVW R20,R30
0458 E604 LDI R16,0x64
0459 0201 MULS R16,R17
045A 1960 SUB R22,R0
045B 0971 SBC R23,R1
(0121)
(0122) *p_aloneD = (char)(Digit/10);
045C E02A LDI R18,0xA
045D E030 LDI R19,0
045E 018B MOVW R16,R22
045F D066 RCALL div16u
0460 01FA MOVW R30,R20
0461 8300 STD Z+0,R16
(0123) Digit -= *p_aloneD++ * 10;
0462 9111 LD R17,Z+
0463 E00A LDI R16,0xA
0464 0201 MULS R16,R17
0465 1960 SUB R22,R0
0466 0971 SBC R23,R1
(0124)
(0125) *p_aloneD = (char)Digit;
0467 8360 STD Z+0,R22
(0126) p_aloneD = 0;
0468 2744 CLR R20
0469 2755 CLR R21
046A D085 RCALL pop_gset2
046B 9508 RET
(0127) }
(0128)
(0129) void sub2(void)
(0130) {
(0131) static int ShowDigit;
(0132) NOP();
_sub2:
046C 0000 NOP
(0133) ShowDigit = LedShowLink;// 0x4d2;//
046D 9020013C LDS R2,LedShowLink
046F 9030013D LDS R3,LedShowLink+1
0471 9230013B STS ShowDigit+1,R3
0473 9220013A STS ShowDigit,R2
(0134) CalculateSub(ShowDigit, &aloneD[0]);
0475 E522 LDI R18,0x52
0476 E031 LDI R19,1
0477 9100013A LDS R16,ShowDigit
0479 9110013B LDS R17,ShowDigit+1
047B DFC3 RCALL _CalculateSub
(0135) NOP();
047C 0000 NOP
047D 9508 RET
_subled:
bytebit --> R22
byteT --> R20
047E D07F RCALL push_gset2
(0136) }
(0137)
(0138) void subled(void)
(0139) {
(0140) static char ledbitcou=0b00000000;
(0141) // static char coui ; //用作数组aloneD[]下标.
(0142) char bytebit=0,byteT=0;
047F 2766 CLR R22
0480 2744 CLR R20
(0143)
(0144) //为每位扫描. 1,置一,四位都不亮; 2,清零,点亮一个位.
(0145)
(0146) if(ledbitcou == 0)
0481 90200100 LDS R2,ledbitcou
0483 2022 TST R2
0484 F411 BNE 0x0487
(0147) {
(0148) bytebit = 0b11111011;
0485 EF6B LDI R22,0xFB
(0149) }else if(ledbitcou == 1)
0486 C011 RJMP 0x0498
0487 91800100 LDS R24,ledbitcou
0489 3081 CPI R24,1
048A F411 BNE 0x048D
(0150) {
(0151) bytebit = 0b11110111;
048B EF67 LDI R22,0xF7
(0152) }else if(ledbitcou == 2)
048C C00B RJMP 0x0498
048D 91800100 LDS R24,ledbitcou
048F 3082 CPI R24,2
0490 F411 BNE 0x0493
(0153) {
(0154) bytebit = 0b11101111;
0491 EE6F LDI R22,0xEF
(0155) }else if(ledbitcou == 3)
0492 C005 RJMP 0x0498
0493 91800100 LDS R24,ledbitcou
0495 3083 CPI R24,3
0496 F409 BNE 0x0498
(0156) {
(0157) bytebit = 0b11011111;
0497 ED6F LDI R22,0xDF
(0158) }
(0159)
(0160) //先清段码
(0161) // PORTA &= 0b11110000;
(0162) // PORTA |= bytebit;
(0163) PORTD |= 0b11000000; //包含了小数点
0498 B18B IN R24,0x0B
0499 6C80 ORI R24,0xC0
049A B98B OUT 0x0B,R24
(0164) PORTB |= 0b11111100;
049B B185 IN R24,0x05
049C 6F8C ORI R24,0xFC
049D B985 OUT 0x05,R24
(0165) //置位位码
(0166) PORTC |= 0b00111100;
049E B188 IN R24,0x08
049F 638C ORI R24,0x3C
04A0 B988 OUT 0x08,R24
(0167) PORTC &= bytebit;
04A1 B028 IN R2,0x08
04A2 2226 AND R2,R22
04A3 B828 OUT 0x08,R2
(0168) //置位段码
(0169) byteT = aloneD[ledbitcou];
04A4 E582 LDI R24,0x52
04A5 E091 LDI R25,1
04A6 91E00100 LDS R30,ledbitcou
04A8 27FF CLR R31
04A9 0FE8 ADD R30,R24
04AA 1FF9 ADC R31,R25
04AB 8140 LDD R20,Z+0
(0170) (*pcled[byteT])(); //调用语句.
04AC E082 LDI R24,2
04AD 9F84 MUL R24,R20
04AE 01F0 MOVW R30,R0
04AF E38E LDI R24,0x3E
04B0 E091 LDI R25,1
04B1 0FE8 ADD R30,R24
04B2 1FF9 ADC R31,R25
04B3 81A0 LDD R26,Z+0
04B4 81B1 LDD R27,Z+1
04B5 01FD MOVW R30,R26
04B6 D060 RCALL xicall
(0171) if(++ledbitcou == 4)
04B7 91800100 LDS R24,ledbitcou
04B9 5F8F SUBI R24,0xFF
04BA 2E28 MOV R2,R24
04BB 92200100 STS ledbitcou,R2
04BD 3084 CPI R24,4
04BE F419 BNE 0x04C2
(0172) ledbitcou = 0;
FILE: <library>
04BF 2422 CLR R2
04C0 92200100 STS ledbitcou,R2
04C2 D02D RCALL pop_gset2
04C3 9508 RET
mod16u:
04C4 9468 BSET 6
04C5 C001 RJMP xdiv16u
div16u:
04C6 94E8 BCLR 6
xdiv16u:
04C7 92EA ST R14,-Y
04C8 92FA ST R15,-Y
04C9 938A ST R24,-Y
04CA 24EE CLR R14
04CB 24FF CLR R15
04CC E180 LDI R24,0x10
04CD 0F00 LSL R16
04CE 1F11 ROL R17
04CF 1CEE ROL R14
04D0 1CFF ROL R15
04D1 16E2 CP R14,R18
04D2 06F3 CPC R15,R19
04D3 F018 BCS 0x04D7
04D4 1AE2 SUB R14,R18
04D5 0AF3 SBC R15,R19
04D6 9503 INC R16
04D7 958A DEC R24
04D8 F7A1 BNE 0x04CD
04D9 F416 BRTC 0x04DC
04DA 2D0E MOV R16,R14
04DB 2D1F MOV R17,R15
04DC 9189 LD R24,Y+
04DD 90F9 LD R15,Y+
04DE 90E9 LD R14,Y+
04DF 9508 RET
empy16s:
04E0 920A ST R0,-Y
04E1 921A ST R1,-Y
04E2 938A ST R24,-Y
04E3 939A ST R25,-Y
04E4 9F02 MUL R16,R18
04E5 01C0 MOVW R24,R0
04E6 9F12 MUL R17,R18
04E7 0D90 ADD R25,R0
04E8 9F03 MUL R16,R19
04E9 0D90 ADD R25,R0
04EA 018C MOVW R16,R24
04EB 9199 LD R25,Y+
04EC 9189 LD R24,Y+
04ED 9019 LD R1,Y+
04EE 9009 LD R0,Y+
04EF 9508 RET
pop_gset2:
04F0 E0E2 LDI R30,2
04F1 C012 RJMP pop
pop_gset3:
04F2 E0E4 LDI R30,4
04F3 C010 RJMP pop
pop_gset4:
04F4 E0E8 LDI R30,0x8
04F5 C00E RJMP pop
pop_gset5:
04F6 27EE CLR R30
04F7 C00C RJMP pop
push_gset5:
04F8 92FA ST R15,-Y
04F9 92EA ST R14,-Y
push_gset4:
04FA 92DA ST R13,-Y
04FB 92CA ST R12,-Y
push_gset3:
04FC 92BA ST R11,-Y
04FD 92AA ST R10,-Y
push_gset2:
04FE 937A ST R23,-Y
04FF 936A ST R22,-Y
push_gset1:
0500 935A ST R21,-Y
0501 934A ST R20,-Y
0502 9508 RET
pop_gset1:
0503 E0E1 LDI R30,1
pop:
0504 9149 LD R20,Y+
0505 9159 LD R21,Y+
0506 FDE0 SBRC R30,0
0507 9508 RET
0508 9169 LD R22,Y+
0509 9179 LD R23,Y+
050A FDE1 SBRC R30,1
050B 9508 RET
050C 90A9 LD R10,Y+
050D 90B9 LD R11,Y+
050E FDE2 SBRC R30,2
050F 9508 RET
0510 90C9 LD R12,Y+
0511 90D9 LD R13,Y+
0512 FDE3 SBRC R30,3
0513 9508 RET
0514 90E9 LD R14,Y+
0515 90F9 LD R15,Y+
0516 9508 RET
xicall:
0517 920A ST R0,-Y
0518 95C8 LPM
0519 920A ST R0,-Y
051A 9631 ADIW R30,1
051B 95C8 LPM
051C 2DF0 MOV R31,R0
051D 91E9 LD R30,Y+
051E 9009 LD R0,Y+
051F 9409 IJMP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -