📄 timer0.lis
字号:
00C4 .dbline -1
00C4 .dbline 60
00C4 ; }
00C4 ; void port_init(void)
00C4 ; {
00C4 .dbline 61
00C4 ; PORTA = 0x00;
00C4 2224 clr R2
00C6 2BBA out 0x1b,R2
00C8 .dbline 62
00C8 ; DDRA = 0x00;
00C8 2ABA out 0x1a,R2
00CA .dbline 63
00CA ; PORTB = 0x06;
00CA 86E0 ldi R24,6
00CC 88BB out 0x18,R24
00CE .dbline 64
00CE ; DDRB = 0x0E;
00CE 8EE0 ldi R24,14
00D0 87BB out 0x17,R24
00D2 .dbline 65
00D2 ; PORTC = 0x00; //m103 output only
00D2 25BA out 0x15,R2
00D4 .dbline 66
00D4 ; DDRC = 0x00;
00D4 24BA out 0x14,R2
00D6 .dbline 67
00D6 ; PORTD = 0x00;
00D6 22BA out 0x12,R2
00D8 .dbline 68
00D8 ; DDRD = 0x00;
00D8 21BA out 0x11,R2
00DA .dbline -2
00DA L10:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbend
00DC .dbfunc e timer0_init _timer0_init fV
.even
00DC _timer0_init::
00DC .dbline -1
00DC .dbline 76
00DC ; }
00DC ;
00DC ; //TIMER0 initialize - prescale:1024
00DC ; // WGM: Normal
00DC ; // desired value: 10mSec
00DC ; // actual value: 9.984mSec (0.2%)
00DC ; void timer0_init(void)
00DC ; {
00DC .dbline 77
00DC ; TCCR0 = 0x00; //stop
00DC 2224 clr R2
00DE 23BE out 0x33,R2
00E0 .dbline 78
00E0 ; TCNT0 = 0xB2; //set count
00E0 82EB ldi R24,178
00E2 82BF out 0x32,R24
00E4 .dbline 79
00E4 ; OCR0 = 0x4E; //set compare
00E4 8EE4 ldi R24,78
00E6 8CBF out 0x3c,R24
00E8 .dbline 80
00E8 ; TCCR0 = 0x05; //start timer
00E8 85E0 ldi R24,5
00EA 83BF out 0x33,R24
00EC .dbline -2
00EC L11:
00EC .dbline 0 ; func end
00EC 0895 ret
00EE .dbend
.area vector(rom, abs)
.org 36
0024 0C947700 jmp _timer0_ovf_isr
.area text(rom, con, rel)
00EE .dbfile F:\WORKS\AVRSIM~1\TIMER0~1\timer0.c
00EE .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
00EE _timer0_ovf_isr::
00EE 2A92 st -y,R2
00F0 8A93 st -y,R24
00F2 9A93 st -y,R25
00F4 2FB6 in R2,0x3f
00F6 2A92 st -y,R2
00F8 .dbline -1
00F8 .dbline 85
00F8 ; }
00F8 ;
00F8 ; #pragma interrupt_handler timer0_ovf_isr:10
00F8 ; void timer0_ovf_isr(void)
00F8 ; {
00F8 .dbline 86
00F8 ; TCNT0 = 0xB2; //reload counter value
00F8 82EB ldi R24,178
00FA 82BF out 0x32,R24
00FC .dbline 87
00FC ; if (counter<10) counter++;
00FC 80910300 lds R24,_counter
0100 8A30 cpi R24,10
0102 20F4 brsh L13
0104 X2:
0104 .dbline 87
0104 8F5F subi R24,255 ; addi 1
0106 80930300 sts _counter,R24
010A 24C0 xjmp L14
010C L13:
010C .dbline 88
010C ; else {counter=0 ;
010C .dbline 88
010C 2224 clr R2
010E 20920300 sts _counter,R2
0112 .dbline 89
0112 ; if (second<60) second++;
0112 80910200 lds R24,_second
0116 8C33 cpi R24,60
0118 20F4 brsh L15
011A X3:
011A .dbline 89
011A 8F5F subi R24,255 ; addi 1
011C 80930200 sts _second,R24
0120 19C0 xjmp L16
0122 L15:
0122 .dbline 90
0122 ; else {second=0 ;
0122 .dbline 90
0122 2224 clr R2
0124 20920200 sts _second,R2
0128 .dbline 91
0128 ; if (minute<60) minute++;
0128 80910100 lds R24,_minute
012C 8C33 cpi R24,60
012E 20F4 brsh L17
0130 X4:
0130 .dbline 91
0130 8F5F subi R24,255 ; addi 1
0132 80930100 sts _minute,R24
0136 0EC0 xjmp L18
0138 L17:
0138 .dbline 92
0138 ; else {minute=0;
0138 .dbline 92
0138 2224 clr R2
013A 20920100 sts _minute,R2
013E .dbline 93
013E ; if (hour<24) hour++;
013E 80910000 lds R24,_hour
0142 8831 cpi R24,24
0144 20F4 brsh L19
0146 X5:
0146 .dbline 93
0146 8F5F subi R24,255 ; addi 1
0148 80930000 sts _hour,R24
014C 03C0 xjmp L20
014E L19:
014E .dbline 94
014E ; else hour=0;
014E 2224 clr R2
0150 20920000 sts _hour,R2
0154 L20:
0154 .dbline 95
0154 ; }
0154 L18:
0154 .dbline 96
0154 ; }
0154 L16:
0154 .dbline 97
0154 ; }
0154 L14:
0154 .dbline -2
0154 L12:
0154 .dbline 0 ; func end
0154 2990 ld R2,y+
0156 2FBE out 0x3f,R2
0158 9991 ld R25,y+
015A 8991 ld R24,y+
015C 2990 ld R2,y+
015E 1895 reti
0160 .dbend
0160 .dbfunc e init_devices _init_devices fV
.even
0160 _init_devices::
0160 .dbline -1
0160 .dbline 102
0160 ; }
0160 ;
0160 ; //call this routine to initialize all peripherals
0160 ; void init_devices(void)
0160 ; {
0160 .dbline 104
0160 ; //stop errant interrupts until set up
0160 ; CLI(); //disable all interrupts
0160 F894 cli
0162 .dbline 105
0162 ; port_init();
0162 B0DF xcall _port_init
0164 .dbline 106
0164 ; timer0_init();
0164 BBDF xcall _timer0_init
0166 .dbline 108
0166 ;
0166 ; MCUCR = 0x00;
0166 2224 clr R2
0168 25BE out 0x35,R2
016A .dbline 109
016A ; GICR = 0x00;
016A 2BBE out 0x3b,R2
016C .dbline 110
016C ; TIMSK = 0x01; //timer interrupt sources
016C 81E0 ldi R24,1
016E 89BF out 0x39,R24
0170 .dbline 111
0170 ; SEI(); //re-enable interrupts
0170 7894 sei
0172 .dbline -2
0172 L21:
0172 .dbline 0 ; func end
0172 0895 ret
0174 .dbend
0174 .dbfunc e main _main fV
.even
0174 _main::
0174 .dbline -1
0174 .dbline 115
0174 ; //all peripherals are now initialized
0174 ; }
0174 ; void main(void)
0174 ; {
0174 .dbline 116
0174 ; init_devices();
0174 F5DF xcall _init_devices
0176 .dbline 117
0176 ; for(;;)
0176 L23:
0176 .dbline 118
0176 ; display();
0176 75DF xcall _display
0178 .dbline 117
0178 .dbline 117
0178 FECF xjmp L23
017A X6:
017A .dbline -2
017A L22:
017A .dbline 0 ; func end
017A 0895 ret
017C .dbend
017C ; }
017C ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -