📄 jianpan.lst
字号:
0106 91900062 LDS R25,0x62
0108 9601 ADIW R24,1
0109 93900062 STS 0x62,R25
010B 93800061 STS 0x61,R24
010D 91800063 LDS R24,0x63
010F 91900064 LDS R25,0x64
0111 9601 ADIW R24,1
0112 93900064 STS 0x64,R25
0114 93800063 STS 0x63,R24
(0184) }
0116 9189 LD R24,Y+
0117 BF8F OUT 0x3F,R24
0118 9199 LD R25,Y+
0119 9189 LD R24,Y+
011A 9518 RETI
(0185) //
(0186)
(0187)
(0188) //UART0 initialisation
(0189) // desired baud rate: 9600
(0190) // actual: baud rate:9615 (0.2%)
(0191) // char size: 8 bit
(0192) // parity: Disabled
(0193) void uart0_init(void)
(0194) {
(0195) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
011B 2422 CLR R2
011C B82A OUT 0x0A,R2
(0196) UCSRA = 0x00;
011D B82B OUT 0x0B,R2
(0197) UCSRC = 0x86;
011E E886 LDI R24,0x86
011F BD80 OUT 0x20,R24
(0198) UBRRL = 51; //set baud rate lo
0120 E383 LDI R24,0x33
0121 B989 OUT 0x09,R24
(0199) UBRRH = 0x00; //set baud rate hi
0122 BC20 OUT 0x20,R2
(0200) UCSRB = 0x18;
0123 E188 LDI R24,0x18
0124 B98A OUT 0x0A,R24
(0201) }
0125 9508 RET
(0202)
(0203) //Watchdog initialisation
(0204) // prescale: 32K cycles
(0205) void watchdog_init(void)
(0206) {
(0207) WDR(); //this prevents a timout on enabling
_watchdog_init:
0126 95A8 WDR
(0208) WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
0127 E08A LDI R24,0xA
0128 BD81 OUT 0x21,R24
(0209) }
0129 9508 RET
(0210)
(0211) //call this routine to initialise all peripherals
(0212) void init_devices(void)
(0213) {
(0214) //stop errant interrupts until set up
(0215) CLI(); //disable all interrupts
_init_devices:
012A 94F8 BCLR 7
(0216) port_init();
012B DFBA RCALL _port_init
(0217) timer0_init();
012C DFC8 RCALL _timer0_init
(0218) uart0_init();
012D DFED RCALL _uart0_init
(0219) //watchdog_init();
(0220)
(0221) MCUCR = 0x00;
012E 2422 CLR R2
012F BE25 OUT 0x35,R2
(0222) GICR = 0x00;
0130 BE2B OUT 0x3B,R2
(0223) TIMSK = 0x01; //timer interrupt sources
0131 E081 LDI R24,1
0132 BF89 OUT 0x39,R24
(0224) SEI(); //re-enable interrupts
0133 9478 BSET 7
(0225) //all peripherals are now initialised
(0226) }
0134 9508 RET
_display:
tmp --> R20
0135 940E04D2 CALL push_gset2
(0227) //显示
(0228) void display( void )
(0229) {
(0230) uint tmp;
(0231) send( 7, mode );
0137 91200068 LDS R18,0x68
0139 E007 LDI R16,7
013A DF34 RCALL _send
(0232) tmp=numL;
(0233) switch( NumBitL )
013B 91400065 LDS R20,0x65
013D 91500066 LDS R21,0x66
013F 91600069 LDS R22,0x69
0141 2777 CLR R23
0142 3061 CPI R22,1
0143 E0E0 LDI R30,0
0144 077E CPC R23,R30
0145 F409 BNE 0x0147
0146 C0D1 RJMP 0x0218
0147 3062 CPI R22,2
0148 E0E0 LDI R30,0
0149 077E CPC R23,R30
014A F409 BNE 0x014C
014B C0AE RJMP 0x01FA
014C 3063 CPI R22,3
014D E0E0 LDI R30,0
014E 077E CPC R23,R30
014F F409 BNE 0x0151
0150 C07D RJMP 0x01CE
0151 3064 CPI R22,4
0152 E0E0 LDI R30,0
0153 077E CPC R23,R30
0154 F409 BNE 0x0156
0155 C045 RJMP 0x019B
0156 3065 CPI R22,5
0157 E0E0 LDI R30,0
0158 077E CPC R23,R30
0159 F009 BEQ 0x015B
015A C0CC RJMP 0x0227
(0234) {
(0235) case 5: send( 0, tmp % 10 );
015B E02A LDI R18,0xA
015C E030 LDI R19,0
015D 018A MOVW R16,R20
015E 940E0471 CALL mod16u
0160 2F20 MOV R18,R16
0161 2700 CLR R16
0162 DF0C RCALL _send
(0236) tmp=tmp/10;
(0237) send( 1, tmp% 10 );
0163 E02A LDI R18,0xA
0164 E030 LDI R19,0
0165 018A MOVW R16,R20
0166 940E0473 CALL div16u
0168 01A8 MOVW R20,R16
0169 E02A LDI R18,0xA
016A E030 LDI R19,0
016B 940E0471 CALL mod16u
016D 2F20 MOV R18,R16
016E E001 LDI R16,1
016F DEFF RCALL _send
(0238) tmp=tmp/10;
(0239) send( 2, tmp % 10 );
0170 E02A LDI R18,0xA
0171 E030 LDI R19,0
0172 018A MOVW R16,R20
0173 940E0473 CALL div16u
0175 01A8 MOVW R20,R16
0176 E02A LDI R18,0xA
0177 E030 LDI R19,0
0178 940E0471 CALL mod16u
017A 2F20 MOV R18,R16
017B E002 LDI R16,2
017C DEF2 RCALL _send
(0240) tmp=tmp/10;
(0241) send( 3, tmp % 10 );
017D E02A LDI R18,0xA
017E E030 LDI R19,0
017F 018A MOVW R16,R20
0180 940E0473 CALL div16u
0182 01A8 MOVW R20,R16
0183 E02A LDI R18,0xA
0184 E030 LDI R19,0
0185 940E0471 CALL mod16u
0187 2F20 MOV R18,R16
0188 E003 LDI R16,3
0189 DEE5 RCALL _send
(0242) tmp=tmp/10;
(0243) send( 4, tmp % 10 );
018A E02A LDI R18,0xA
018B E030 LDI R19,0
018C 018A MOVW R16,R20
018D 940E0473 CALL div16u
018F 01A8 MOVW R20,R16
0190 E02A LDI R18,0xA
0191 E030 LDI R19,0
0192 940E0471 CALL mod16u
0194 2F20 MOV R18,R16
0195 E004 LDI R16,4
0196 DED8 RCALL _send
(0244) delay(1);
0197 E001 LDI R16,1
0198 E010 LDI R17,0
0199 DEC5 RCALL _delay
(0245) break;
019A C08F RJMP 0x022A
(0246) case 4:send( 0, tmp % 10 );
019B E02A LDI R18,0xA
019C E030 LDI R19,0
019D 018A MOVW R16,R20
019E 940E0471 CALL mod16u
01A0 2F20 MOV R18,R16
01A1 2700 CLR R16
01A2 DECC RCALL _send
(0247) tmp=tmp/10;
(0248) send( 1, tmp% 10 );
01A3 E02A LDI R18,0xA
01A4 E030 LDI R19,0
01A5 018A MOVW R16,R20
01A6 940E0473 CALL div16u
01A8 01A8 MOVW R20,R16
01A9 E02A LDI R18,0xA
01AA E030 LDI R19,0
01AB 940E0471 CALL mod16u
01AD 2F20 MOV R18,R16
01AE E001 LDI R16,1
01AF DEBF RCALL _send
(0249) tmp/=10;
(0250) send( 2, tmp % 10 );
01B0 E02A LDI R18,0xA
01B1 E030 LDI R19,0
01B2 018A MOVW R16,R20
01B3 940E0473 CALL div16u
01B5 01A8 MOVW R20,R16
01B6 E02A LDI R18,0xA
01B7 E030 LDI R19,0
01B8 940E0471 CALL mod16u
01BA 2F20 MOV R18,R16
01BB E002 LDI R16,2
01BC DEB2 RCALL _send
(0251) tmp/=10;
(0252) send( 3, tmp % 10 );
01BD E02A LDI R18,0xA
01BE E030 LDI R19,0
01BF 018A MOVW R16,R20
01C0 940E0473 CALL div16u
01C2 01A8 MOVW R20,R16
01C3 E02A LDI R18,0xA
01C4 E030 LDI R19,0
01C5 940E0471 CALL mod16u
01C7 2F20 MOV R18,R16
01C8 E003 LDI R16,3
01C9 DEA5 RCALL _send
(0253) delay(1);
01CA E001 LDI R16,1
01CB E010 LDI R17,0
01CC DE92 RCALL _delay
(0254) break;
01CD C05C RJMP 0x022A
(0255) case 3: send( 0, numL % 10 );
01CE E02A LDI R18,0xA
01CF E030 LDI R19,0
01D0 91000065 LDS R16,0x65
01D2 91100066 LDS R17,0x66
01D4 940E0471 CALL mod16u
01D6 2F20 MOV R18,R16
01D7 2700 CLR R16
01D8 DE96 RCALL _send
(0256) tmp=numL/10;
(0257) send( 1, tmp% 10 );
01D9 E02A LDI R18,0xA
01DA E030 LDI R19,0
01DB 91000065 LDS R16,0x65
01DD 91100066 LDS R17,0x66
01DF 940E0473 CALL div16u
01E1 01A8 MOVW R20,R16
01E2 E02A LDI R18,0xA
01E3 E030 LDI R19,0
01E4 940E0471 CALL mod16u
01E6 2F20 MOV R18,R16
01E7 E001 LDI R16,1
01E8 DE86 RCALL _send
(0258) tmp/=10;
(0259) send( 2, tmp % 10 );
01E9 E02A LDI R18,0xA
01EA E030 LDI R19,0
01EB 018A MOVW R16,R20
01EC 940E0473 CALL div16u
01EE 01A8 MOVW R20,R16
01EF E02A LDI R18,0xA
01F0 E030 LDI R19,0
01F1 940E0471 CALL mod16u
01F3 2F20 MOV R18,R16
01F4 E002 LDI R16,2
01F5 DE79 RCALL _send
(0260) delay(1);
01F6 E001 LDI R16,1
01F7 E010 LDI R17,0
01F8 DE66 RCALL _delay
(0261) break;
01F9 C030 RJMP 0x022A
(0262) case 2: send( 0, numL% 10 );
01FA E02A LDI R18,0xA
01FB E030 LDI R19,0
01FC 91000065 LDS R16,0x65
01FE 91100066 LDS R17,0x66
0200 940E0471 CALL mod16u
0202 2F20 MOV R18,R16
0203 2700 CLR R16
0204 DE6A RCALL _send
(0263) send( 1, numL / 10 % 10 );
0205 E02A LDI R18,0xA
0206 E030 LDI R19,0
0207 91000065 LDS R16,0x65
0209 91100066 LDS R17,0x66
020B 940E0473 CALL div16u
020D E02A LDI R18,0xA
020E E030 LDI R19,0
020F 940E0471 CALL mod16u
0211 2F20 MOV R18,R16
0212 E001 LDI R16,1
0213 DE5B RCALL _send
(0264) delay(2);
0214 E002 LDI R16,2
0215 E010 LDI R17,0
0216 DE48 RCALL _delay
(0265) break;
0217 C012 RJMP 0x022A
(0266) case 1: send( 0, numL % 10 );
0218 E02A LDI R18,0xA
0219 E030 LDI R19,0
021A 91000065 LDS R16,0x65
021C 91100066 LDS R17,0x66
021E 940E0471 CALL mod16u
0220 2F20 MOV R18,R16
0221 2700 CLR R16
0222 DE4C RCALL _send
(0267) delay(3);
0223 E003 LDI R16,3
0224 E010 LDI R17,0
0225 DE39 RCALL _delay
(0268) break;
0226 C003 RJMP 0x022A
(0269) default: delay(3);
0227 E003 LDI R16,3
0228 E010 LDI R17,0
0229 DE35 RCALL _delay
(0270) break;
(0271) }
(0272)
(0273) switch(NumBitH)
022A 9140006A LDS R20,0x6A
022C 2755 CLR R21
022D 3041 CPI R20,1
022E E0E0 LDI R30,0
022F 075E CPC R21,R30
0230 F0E1 BEQ 0x024D
0231 3042 CPI R20,2
0232 E0E0 LDI R30,0
0233 075E CPC R21,R30
0234 F009 BEQ 0x0236
0235 C023 RJMP 0x0259
(0274) {
(0275) case 2: send( 5, numH% 10 );
0236 E01A LDI R17,0xA
0237 91000067 LDS R16,0x67
0239 940E048D CALL mod8u
023B 2F20 MOV R18,R16
023C E005 LDI R16,5
023D DE31 RCALL _send
(0276) send( 6, numH / 10 % 10 );
023E E01A LDI R17,0xA
023F 91000067 LDS R16,0x67
0241 940E048F CALL div8u
0243 E01A LDI R17,0xA
0244 940E048D CALL mod8u
0246 2F20 MOV R18,R16
0247 E006 LDI R16,6
0248 DE26 RCALL _send
(0277) delay(2);
0249 E002 LDI R16,2
024A E010 LDI R17,0
024B DE13 RCALL _delay
(0278) break;
024C C00F RJMP 0x025C
(0279) case 1: send(5,numH%10);
024D E01A LDI R17,0xA
024E 91000067 LDS R16,0x67
0250 940E048D CALL mod8u
0252 2F20 MOV R18,R16
0253 E005 LDI R16,5
0254 DE1A RCALL _send
(0280) delay(2);
0255 E002 LDI R16,2
0256 E010 LDI R17,0
0257 DE07 RCALL _delay
(0281) break;
0258 C003 RJMP 0x025C
(0282) default: delay(3);
0259 E003 LDI R16,3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -