📄 m8demo.s
字号:
.dbline -2
L35:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e ReadADC _ReadADC fI
; i -> R20,R21
; channel -> R16
.even
_ReadADC::
rcall push_gset1
.dbline -1
.dbline 192
;
; }
;
; int ReadADC( unsigned char channel)
; {
.dbline 195
; int i;
;
; ADMUX = channel; // Select channel
out 0x7,R16
.dbline 197
;
; ADCSR |= 0x40; // Start conversion
sbi 0x6,6
L37:
.dbline 199
L38:
.dbline 199
;
; while (!(ADCSR & 0x10)); // Check if converstion is ready
sbis 0x6,4
rjmp L37
.dbline 201
;
; ADCSR |= 0x10; // Clear Conversion ready flag by setting the bit
sbi 0x6,4
.dbline 203
;
; i = ADCL; // Read 8 low bits first (important)
in R20,0x4
clr R21
.dbline 204
; i += (int)ADCH << 8; // Read 2 high bits and multiply with 256
in R2,0x5
clr R3
mov R3,R2
clr R2
add R20,R2
adc R21,R3
.dbline 206
;
; return i;
movw R16,R20
.dbline -2
L36:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r channel 16 c
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 211
; }
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 213
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 214
; port_init();
rcall _port_init
.dbline 215
; timer0_init();
rcall _timer0_init
.dbline 216
; timer1_init();
rcall _timer1_init
.dbline 219
; // spi_init();
; // twi_init();
; uart0_init();
rcall _uart0_init
.dbline 222
; // adc_init();
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 223
; GICR = 0x00;
out 0x3b,R2
.dbline 224
; TIMSK = 0x05; //timer interrupt sources
ldi R24,5
out 0x39,R24
.dbline 225
; SEI(); //re-enable interrupts
sei
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DisplayHexData _DisplayHexData fV
; temptimer4 -> R12
; temptimer3 -> R10
; temptimer2 -> R22
; temptimer1 -> R20
; timerL -> R22
; timerH -> R12
.even
_DisplayHexData::
rcall push_gset4
mov R22,R18
mov R12,R16
sbiw R28,3
.dbline -1
.dbline 232
; //all peripherals are now initialised
; }
;
;
; void DisplayHexData(unsigned char timerH,unsigned char timerL)
;
; {
.dbline 234
; unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
; temptimer1=timerL%16;
ldi R17,16
mov R16,R22
rcall mod8u
mov R20,R16
.dbline 235
; temptimer2=timerL/16;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 236
; temptimer3=timerH%16;
ldi R17,16
mov R16,R12
rcall mod8u
mov R10,R16
.dbline 237
; temptimer4=timerH/16;
mov R24,R12
swap R24
andi R24,#0x0F
mov R12,R24
.dbline 239
;
; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
std y+2,R12
std y+0,R10
mov R18,R22
mov R16,R20
rcall _Display_Data_LED
.dbline -2
L41:
adiw R28,3
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temptimer4 12 c
.dbsym r temptimer3 10 c
.dbsym r temptimer2 22 c
.dbsym r temptimer1 20 c
.dbsym r timerL 22 c
.dbsym r timerH 12 c
.dbend
.dbfunc e DisplayData _DisplayData fV
; temptimer4 -> R12
; temptimer3 -> R10
; temptimer2 -> R22
; temptimer1 -> R20
; timer -> R20,R21
.even
_DisplayData::
rcall push_gset4
movw R20,R16
sbiw R28,3
.dbline -1
.dbline 244
;
; }
;
; void DisplayData(unsigned int timer)
; {
.dbline 247
;
; unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
; temptimer4=timer/1000;
ldi R18,1000
ldi R19,3
movw R16,R20
rcall div16u
mov R12,R16
.dbline 248
; timer=timer%1000;
ldi R18,1000
ldi R19,3
movw R16,R20
rcall mod16u
movw R20,R16
.dbline 249
; temptimer3=timer/100;
ldi R18,100
ldi R19,0
rcall div16u
mov R10,R16
.dbline 250
; timer=timer%100;
ldi R18,100
ldi R19,0
movw R16,R20
rcall mod16u
movw R20,R16
.dbline 251
; temptimer2=timer/10;
ldi R18,10
ldi R19,0
rcall div16u
mov R22,R16
.dbline 252
; temptimer1=timer%10;
ldi R18,10
ldi R19,0
movw R16,R20
rcall mod16u
mov R20,R16
.dbline 253
; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
std y+2,R12
std y+0,R10
mov R18,R22
rcall _Display_Data_LED
.dbline -2
L42:
adiw R28,3
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temptimer4 12 c
.dbsym r temptimer3 10 c
.dbsym r temptimer2 22 c
.dbsym r temptimer1 20 c
.dbsym r timer 20 i
.dbend
.dbfunc e Display_Data_LED _Display_Data_LED fV
; displaydata_2 -> R22
; displaydata -> R20
; Data4 -> y+6
; Data3 -> y+4
; Data2 -> R18
; Data1 -> R16
.even
_Display_Data_LED::
rcall push_gset2
.dbline -1
.dbline 258
; }
;
; void Display_Data_LED(unsigned char Data1, unsigned char Data2,unsigned char Data3,unsigned char Data4)
;
; {unsigned char displaydata,displaydata_2;
.dbline 260
;
; switch(Display_Position)
lds R20,_Display_Position
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L47
cpi R20,2
ldi R30,0
cpc R21,R30
breq L48
cpi R20,3
ldi R30,0
cpc R21,R30
breq L49
cpi R20,4
ldi R30,0
cpc R21,R30
brne X5
rjmp L50
X5:
rjmp L45
X4:
.dbline 261
; {
L47:
.dbline 263
;
; case 1: displaydata=DataTab[Data1];
ldi R24,<_DataTab
ldi R25,>_DataTab
mov R30,R16
clr R31
add R30,R24
adc R31,R25
lpm R20,Z
.dbline 264
; displaydata_2=DataTab[Data1]&0xc0;
mov R30,R16
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
andi R22,192
.dbline 265
; PORTD=0x3B|displaydata_2;
mov R24,R22
ori R24,59
out 0x12,R24
.dbline 266
; PORTB=displaydata;
out 0x18,R20
.dbline 267
; break;
rjmp L45
L48:
.dbline 268
; case 2:displaydata=DataTab[Data2];
ldi R24,<_DataTab
ldi R25,>_DataTab
mov R30,R18
clr R31
add R30,R24
adc R31,R25
lpm R20,Z
.dbline 269
; displaydata_2=DataTab[Data2]&0xc0;
mov R30,R18
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
andi R22,192
.dbline 271
;
; PORTD=0x37|displaydata_2;
mov R24,R22
ori R24,55
out 0x12,R24
.dbline 272
; PORTB=displaydata;
out 0x18,R20
.dbline 273
; break;
rjmp L45
L49:
.dbline 274
; case 3: displaydata=DataTab[Data3];
ldi R24,<_DataTab
ldi R25,>_DataTab
ldd R30,y+4
clr R31
add R30,R24
adc R31,R25
lpm R20,Z
.dbline 275
; displaydata_2=DataTab[Data3]&0xc0;
ldd R30,y+4
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
andi R22,192
.dbline 276
; PORTD=0x2F|displaydata_2;
mov R24,R22
ori R24,47
out 0x12,R24
.dbline 277
; PORTB=displaydata;
out 0x18,R20
.dbline 278
; break;
rjmp L45
L50:
.dbline 279
ldi R24,<_DataTab
ldi R25,>_DataTab
ldd R30,y+6
clr R31
add R30,R24
adc R31,R25
lpm R20,Z
.dbline 280
ldd R30,y+6
clr R31
add R30,R24
adc R31,R25
lpm R22,Z
andi R22,192
.dbline 281
mov R24,R22
ori R24,31
out 0x12,R24
.dbline 282
out 0x18,R20
.dbline 283
.dbline 285
L45:
.dbline -2
L43:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r displaydata_2 22 c
.dbsym r displaydata 20 c
.dbsym l Data4 6 c
.dbsym l Data3 4 c
.dbsym r Data2 18 c
.dbsym r Data1 16 c
.dbend
.dbfunc e DisplayTimer _DisplayTimer fV
; temptimer4 -> R12
; temptimer2 -> R22
; temptimer3 -> R10
; temptimer1 -> R20
; timer -> R22,R23
.even
_DisplayTimer::
rcall push_gset4
movw R22,R16
sbiw R28,3
.dbline -1
.dbline 291
; case 4: displaydata=DataTab[Data4];
; displaydata_2=DataTab[Data4]&0xc0;
; PORTD=0x1F|displaydata_2;
; PORTB=displaydata;
; break;
; default:
; break;
;
; }
;
; }
; void DisplayTimer(unsigned int timer)
; {
.dbline 293
; unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
; temptimer1=timer%60;
ldi R18,60
ldi R19,0
movw R16,R22
rcall mod16u
mov R20,R16
.dbline 294
; temptimer3=timer/60;
ldi R18,60
ldi R19,0
movw R16,R22
rcall div16u
mov R10,R16
.dbline 295
; temptimer2=temptimer1/10;
ldi R17,10
mov R16,R20
rcall div8u
mov R22,R16
.dbline 296
; temptimer1=temptimer1%10;
ldi R17,10
mov R16,R20
rcall mod8u
mov R20,R16
.dbline 297
; temptimer4=temptimer3/10;
ldi R17,10
mov R16,R10
rcall div8u
mov R12,R16
.dbline 298
; temptimer3=temptimer3%10;
ldi R17,10
mov R16,R10
rcall mod8u
mov R10,R16
.dbline 299
; Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
std y+2,R12
std y+0,R10
mov R18,R22
mov R16,R20
rcall _Display_Data_LED
.dbline -2
L51:
adiw R28,3
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r temptimer4 12 c
.dbsym r temptimer2 22 c
.dbsym r temptimer3 10 c
.dbsym r temptimer1 20 c
.dbsym r timer 22 i
.dbend
.dbfunc e Key_Decode _Key_Decode fc
.even
_Key_Decode::
.dbline -1
.dbline 304
;
; }
;
; unsigned char Key_Decode(void)
; { Delay(10);
.dbline 304
ldi R16,10
ldi R17,0
rcall _Delay
.dbline 306
;
; DDRC&=0x79;
in R24,0x14
andi R24,121
out 0x14,R24
.dbline 307
; PORTC|=0x30;
in R24,0x15
ori R24,48
out 0x15,R24
.dbline 308
; PORTC&=0x59;
in R24,0x15
andi R24,89
out 0x15,R24
.dbline 309
; Delay(10);
ldi R16,10
ldi R17,0
rcall _Delay
.dbline 310
; if (!(PINC & 0x02))
sbic 0x13,1
rjmp L53
.dbline 311
; { return key_inc;}
.dbline 311
ldi R16,254
rjmp L52
L53:
.dbline 312
; if (!(PINC & 0x04))
sbic 0x13,2
rjmp L55
.dbline 313
; {return key_enter;}
.dbline 313
ldi R16,251
rjmp L52
L55:
.dbline 314
; PORTC|=0x30;
in R24,0x15
ori R24,48
out 0x15,R24
.dbline 315
; PORTC&=0x69;
in R24,0x15
andi R24,105
out 0x15,R24
.dbline 316
; Delay(10);
ldi R16,10
ldi R17,0
rcall _Delay
.dbline 317
; if (!(PINC & 0x02))
sbic 0x13,1
rjmp L57
.dbline 318
; {return key_dec;}
.dbline 318
ldi R16,253
rjmp L52
L57:
.dbline 319
; if (!(PINC & 0x04))
sbic 0x13,2
rjmp L59
.dbline 320
; {return key_mode;}
.dbline 320
ldi R16,252
rjmp L52
L59:
.dbline 321
; return key_no;
ldi R16,255
.dbline -2
L52:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Key_Task _Key_Task fV
.even
_Key_Task::
rcall push_gset1
.dbline -1
.dbline 325
;
; }
; void Key_Task(void)
; {
.dbline 327
;
; switch(key_state)
lds R20,_key_state
clr R21
cpi R20,0
cpc R20,R21
breq L65
X6:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L68
cpi R20,2
ldi R30,0
cpc R21,R30
brne X8
rjmp L71
X8:
cpi R20,3
ldi R30,0
cpc R21,R30
brne X9
rjmp L74
X9:
cpi R20,4
ldi R30,0
cpc R21,R30
brne X10
rjmp L77
X10:
cpi R20,5
ldi R30,0
cpc R21,R30
brne X11
rjmp L80
X11:
cpi R20,6
ldi R30,0
cpc R21,R30
brne X12
rjmp L83
X12:
rjmp L63
X7:
.dbline 328
; {
L65:
.dbline 330
; case KBD_IDLE:
; {
.dbline 331
; key_value=key_no;
ldi R24,255
sts _key_value,R24
.dbline 332
; key_pressed=false;
clr R2
sts _key_pressed,R2
.dbline 333
; key_value=Key_Decode();
rcall _Key_Decode
sts _key_value,R16
.dbline 334
; if(key_value!=key_no)
cpi R16,255
brne X13
rjmp L63
X13:
.dbline 335
; {
.dbline 336
; key_state = KBD_DEBOUNCE;
ldi R24,1
sts _key_state,R24
.dbline 337
; key_tick=0;
clr R2
clr R3
sts _key_tick+1,R3
sts _key_tick,R2
.dbline 339
;
; }
.dbline 340
; break;
rjmp L63
L68:
.dbline 345
; }
;
; case KBD_DEBOUNCE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -