📄 m8demo.lis
字号:
.even
01F4 _adc_isr::
01F4 2A92 st -y,R2
01F6 3A92 st -y,R3
01F8 4A92 st -y,R4
01FA 5A92 st -y,R5
01FC 8A93 st -y,R24
01FE 2FB6 in R2,0x3f
0200 2A92 st -y,R2
0202 .dbline -1
0202 .dbline 182
0202 ; }
0202 ; #pragma interrupt_handler adc_isr:15
0202 ; void adc_isr(void)
0202 ; {
0202 .dbline 184
0202 ; //conversion complete, read value (int) using...
0202 ; adc_value=ADCL; //Read 8 low bits first (important)
0202 24B0 in R2,0x4
0204 3324 clr R3
0206 30920300 sts _adc_value+1,R3
020A 20920200 sts _adc_value,R2
020E .dbline 185
020E ; adc_value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
020E 25B0 in R2,0x5
0210 3324 clr R3
0212 322C mov R3,R2
0214 2224 clr R2
0216 40900200 lds R4,_adc_value
021A 50900300 lds R5,_adc_value+1
021E 4228 or R4,R2
0220 5328 or R5,R3
0222 50920300 sts _adc_value+1,R5
0226 40920200 sts _adc_value,R4
022A .dbline 186
022A ; ADCSR = 0x00;
022A 2224 clr R2
022C 26B8 out 0x6,R2
022E .dbline 187
022E ; ADCSR = 0xC8;
022E 88EC ldi R24,200
0230 86B9 out 0x6,R24
0232 .dbline -2
0232 L35:
0232 2990 ld R2,y+
0234 2FBE out 0x3f,R2
0236 8991 ld R24,y+
0238 5990 ld R5,y+
023A 4990 ld R4,y+
023C 3990 ld R3,y+
023E 2990 ld R2,y+
0240 .dbline 0 ; func end
0240 1895 reti
0242 .dbend
0242 .dbfunc e ReadADC _ReadADC fI
0242 ; i -> R20,R21
0242 ; channel -> R16
.even
0242 _ReadADC::
0242 00D0 rcall push_gset1
0244 .dbline -1
0244 .dbline 192
0244 ;
0244 ; }
0244 ;
0244 ; int ReadADC( unsigned char channel)
0244 ; {
0244 .dbline 195
0244 ; int i;
0244 ;
0244 ; ADMUX = channel; // Select channel
0244 07B9 out 0x7,R16
0246 .dbline 197
0246 ;
0246 ; ADCSR |= 0x40; // Start conversion
0246 369A sbi 0x6,6
0248 L37:
0248 .dbline 199
0248 L38:
0248 .dbline 199
0248 ;
0248 ; while (!(ADCSR & 0x10)); // Check if converstion is ready
0248 349B sbis 0x6,4
024A FECF rjmp L37
024C .dbline 201
024C ;
024C ; ADCSR |= 0x10; // Clear Conversion ready flag by setting the bit
024C 349A sbi 0x6,4
024E .dbline 203
024E ;
024E ; i = ADCL; // Read 8 low bits first (important)
024E 44B1 in R20,0x4
0250 5527 clr R21
0252 .dbline 204
0252 ; i += (int)ADCH << 8; // Read 2 high bits and multiply with 256
0252 25B0 in R2,0x5
0254 3324 clr R3
0256 322C mov R3,R2
0258 2224 clr R2
025A 420D add R20,R2
025C 531D adc R21,R3
025E .dbline 206
025E ;
025E ; return i;
025E 8A01 movw R16,R20
0260 .dbline -2
0260 L36:
0260 00D0 rcall pop_gset1
0262 .dbline 0 ; func end
0262 0895 ret
0264 .dbsym r i 20 I
0264 .dbsym r channel 16 c
0264 .dbend
0264 .dbfunc e init_devices _init_devices fV
.even
0264 _init_devices::
0264 .dbline -1
0264 .dbline 211
0264 ; }
0264 ;
0264 ; //call this routine to initialise all peripherals
0264 ; void init_devices(void)
0264 ; {
0264 .dbline 213
0264 ; //stop errant interrupts until set up
0264 ; CLI(); //disable all interrupts
0264 F894 cli
0266 .dbline 214
0266 ; port_init();
0266 E4DE rcall _port_init
0268 .dbline 215
0268 ; timer0_init();
0268 EFDE rcall _timer0_init
026A .dbline 216
026A ; timer1_init();
026A 60DF rcall _timer1_init
026C .dbline 219
026C ; // spi_init();
026C ; // twi_init();
026C ; uart0_init();
026C 00D0 rcall _uart0_init
026E .dbline 222
026E ; // adc_init();
026E ;
026E ; MCUCR = 0x00;
026E 2224 clr R2
0270 25BE out 0x35,R2
0272 .dbline 223
0272 ; GICR = 0x00;
0272 2BBE out 0x3b,R2
0274 .dbline 224
0274 ; TIMSK = 0x05; //timer interrupt sources
0274 85E0 ldi R24,5
0276 89BF out 0x39,R24
0278 .dbline 225
0278 ; SEI(); //re-enable interrupts
0278 7894 sei
027A .dbline -2
027A L40:
027A .dbline 0 ; func end
027A 0895 ret
027C .dbend
027C .dbfunc e DisplayHexData _DisplayHexData fV
027C ; temptimer4 -> R12
027C ; temptimer3 -> R10
027C ; temptimer2 -> R22
027C ; temptimer1 -> R20
027C ; timerL -> R22
027C ; timerH -> R12
.even
027C _DisplayHexData::
027C 00D0 rcall push_gset4
027E 622F mov R22,R18
0280 C02E mov R12,R16
0282 2397 sbiw R28,3
0284 .dbline -1
0284 .dbline 232
0284 ; //all peripherals are now initialised
0284 ; }
0284 ;
0284 ;
0284 ; void DisplayHexData(unsigned char timerH,unsigned char timerL)
0284 ;
0284 ; {
0284 .dbline 234
0284 ; unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
0284 ; temptimer1=timerL%16;
0284 10E1 ldi R17,16
0286 062F mov R16,R22
0288 00D0 rcall mod8u
028A 402F mov R20,R16
028C .dbline 235
028C ; temptimer2=timerL/16;
028C 862F mov R24,R22
028E 8295 swap R24
0290 8F70 andi R24,#0x0F
0292 682F mov R22,R24
0294 .dbline 236
0294 ; temptimer3=timerH%16;
0294 10E1 ldi R17,16
0296 0C2D mov R16,R12
0298 00D0 rcall mod8u
029A A02E mov R10,R16
029C .dbline 237
029C ; temptimer4=timerH/16;
029C 8C2D mov R24,R12
029E 8295 swap R24
02A0 8F70 andi R24,#0x0F
02A2 C82E mov R12,R24
02A4 .dbline 239
02A4 ;
02A4 ; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
02A4 CA82 std y+2,R12
02A6 A882 std y+0,R10
02A8 262F mov R18,R22
02AA 042F mov R16,R20
02AC 29D0 rcall _Display_Data_LED
02AE .dbline -2
02AE L41:
02AE 2396 adiw R28,3
02B0 00D0 rcall pop_gset4
02B2 .dbline 0 ; func end
02B2 0895 ret
02B4 .dbsym r temptimer4 12 c
02B4 .dbsym r temptimer3 10 c
02B4 .dbsym r temptimer2 22 c
02B4 .dbsym r temptimer1 20 c
02B4 .dbsym r timerL 22 c
02B4 .dbsym r timerH 12 c
02B4 .dbend
02B4 .dbfunc e DisplayData _DisplayData fV
02B4 ; temptimer4 -> R12
02B4 ; temptimer3 -> R10
02B4 ; temptimer2 -> R22
02B4 ; temptimer1 -> R20
02B4 ; timer -> R20,R21
.even
02B4 _DisplayData::
02B4 00D0 rcall push_gset4
02B6 A801 movw R20,R16
02B8 2397 sbiw R28,3
02BA .dbline -1
02BA .dbline 244
02BA ;
02BA ; }
02BA ;
02BA ; void DisplayData(unsigned int timer)
02BA ; {
02BA .dbline 247
02BA ;
02BA ; unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
02BA ; temptimer4=timer/1000;
02BA 28EE ldi R18,1000
02BC 33E0 ldi R19,3
02BE 8A01 movw R16,R20
02C0 00D0 rcall div16u
02C2 C02E mov R12,R16
02C4 .dbline 248
02C4 ; timer=timer%1000;
02C4 28EE ldi R18,1000
02C6 33E0 ldi R19,3
02C8 8A01 movw R16,R20
02CA 00D0 rcall mod16u
02CC A801 movw R20,R16
02CE .dbline 249
02CE ; temptimer3=timer/100;
02CE 24E6 ldi R18,100
02D0 30E0 ldi R19,0
02D2 00D0 rcall div16u
02D4 A02E mov R10,R16
02D6 .dbline 250
02D6 ; timer=timer%100;
02D6 24E6 ldi R18,100
02D8 30E0 ldi R19,0
02DA 8A01 movw R16,R20
02DC 00D0 rcall mod16u
02DE A801 movw R20,R16
02E0 .dbline 251
02E0 ; temptimer2=timer/10;
02E0 2AE0 ldi R18,10
02E2 30E0 ldi R19,0
02E4 00D0 rcall div16u
02E6 602F mov R22,R16
02E8 .dbline 252
02E8 ; temptimer1=timer%10;
02E8 2AE0 ldi R18,10
02EA 30E0 ldi R19,0
02EC 8A01 movw R16,R20
02EE 00D0 rcall mod16u
02F0 402F mov R20,R16
02F2 .dbline 253
02F2 ; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
02F2 CA82 std y+2,R12
02F4 A882 std y+0,R10
02F6 262F mov R18,R22
02F8 03D0 rcall _Display_Data_LED
02FA .dbline -2
02FA L42:
02FA 2396 adiw R28,3
02FC 00D0 rcall pop_gset4
02FE .dbline 0 ; func end
02FE 0895 ret
0300 .dbsym r temptimer4 12 c
0300 .dbsym r temptimer3 10 c
0300 .dbsym r temptimer2 22 c
0300 .dbsym r temptimer1 20 c
0300 .dbsym r timer 20 i
0300 .dbend
0300 .dbfunc e Display_Data_LED _Display_Data_LED fV
0300 ; displaydata_2 -> R22
0300 ; displaydata -> R20
0300 ; Data4 -> y+6
0300 ; Data3 -> y+4
0300 ; Data2 -> R18
0300 ; Data1 -> R16
.even
0300 _Display_Data_LED::
0300 00D0 rcall push_gset2
0302 .dbline -1
0302 .dbline 258
0302 ; }
0302 ;
0302 ; void Display_Data_LED(unsigned char Data1, unsigned char Data2,unsigned char Data3,unsigned char Data4)
0302 ;
0302 ; {unsigned char displaydata,displaydata_2;
0302 .dbline 260
0302 ;
0302 ; switch(Display_Position)
0302 40910500 lds R20,_Display_Position
0306 5527 clr R21
0308 4130 cpi R20,1
030A E0E0 ldi R30,0
030C 5E07 cpc R21,R30
030E 71F0 breq L47
0310 4230 cpi R20,2
0312 E0E0 ldi R30,0
0314 5E07 cpc R21,R30
0316 E1F0 breq L48
0318 4330 cpi R20,3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -