📄 timer.s
字号:
.module Timer.c
.area text(rom, con, rel)
.dbfile D:\AVR\User\AVR_PWM\Timer.c
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 22
; #include <iom8v.h>
; #include <macros.h>
; #include <math.h>
;
; #define Uchar unsigned char
; #define Uint unsigned int
; #define Ulong unsigned long
;
; Uchar time_init;
; Uchar CNT1;
; Uchar CNT2;
; Uchar CNT3;
; Uchar LMT1;
; Uchar LMT2;
; Uchar LMT3;
;
; //TIMER1 initialize - prescale:1024
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1Hz
; // actual value: 1.000Hz (0.0%)
; void timer1_init(void)
; {
.dbline 23
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 24
; TCNT1H = 0xfe; //setup
ldi R24,254
out 0x2d,R24
.dbline 25
; TCNT1L = 0x00;
out 0x2c,R2
.dbline 26
; OCR1AH = 0x0F;
ldi R24,15
out 0x2b,R24
.dbline 27
; OCR1AL = 0x42;
ldi R24,66
out 0x2a,R24
.dbline 28
; OCR1BH = 0x0F;
ldi R24,15
out 0x29,R24
.dbline 29
; OCR1BL = 0x42;
ldi R24,66
out 0x28,R24
.dbline 30
; ICR1H = 0x0F;
ldi R24,15
out 0x27,R24
.dbline 31
; ICR1L = 0x42;
ldi R24,66
out 0x26,R24
.dbline 32
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 33
; TCCR1B = 0x01; //start Timer
ldi R24,1
out 0x2e,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 16
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\AVR\User\AVR_PWM\Timer.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R2
st -y,R4
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 38
; }
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 39
; TCNT1H = 0xfe; //reload counter high value
ldi R24,254
out 0x2d,R24
.dbline 40
; TCNT1L = 0x00; //reload counter low value
clr R2
out 0x2c,R2
.dbline 41
; ++CNT1;
lds R24,_CNT1
subi R24,255 ; addi 1
sts _CNT1,R24
.dbline 42
; if(CNT1>=LMT1)
lds R2,_LMT1
cp R24,R2
brlo L3
.dbline 43
; {
.dbline 44
; CNT1=0;
clr R2
sts _CNT1,R2
.dbline 45
; if(++CNT2>=LMT2)
lds R24,_CNT2
subi R24,255 ; addi 1
mov R2,R24
sts _CNT2,R2
lds R4,_LMT2
cp R24,R4
brlo L5
.dbline 46
; {
.dbline 47
; CNT2=0;
clr R2
sts _CNT2,R2
.dbline 48
; CNT3=~CNT3;
lds R2,_CNT3
com R2
sts _CNT3,R2
.dbline 49
; }
L5:
.dbline 50
; }
L3:
.dbline 51
; time_init=1;
ldi R24,1
sts _time_init,R24
.dbline -2
L2:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R4,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 70
; }
;
; /*void flush(UCHAR ios,UCHAR ioc)
; {
; UCHAR a;
; if(time_init)
; {
; time_init=0;
; if(CNT1<=CNT2)
; {
; PORTB=ios;
; }
; else
; PORTB=ioc;
; }
; }
; */
; void main(void)
; {
.dbline 71
; OSCCAL=0X9d;
ldi R24,157
out 0x31,R24
.dbline 72
; CLI(); //disable all interrupts
cli
.dbline 73
; timer1_init();
rcall _timer1_init
.dbline 74
; PORTB = 0x00;
clr R2
out 0x18,R2
.dbline 75
; DDRB = 0xff;
ldi R24,255
out 0x17,R24
.dbline 76
; MCUCR = 0x00;
out 0x35,R2
.dbline 77
; GICR = 0x00;
out 0x3b,R2
.dbline 78
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 79
; time_init=0;
sts _time_init,R2
.dbline 80
; LMT1=250;
ldi R24,250
sts _LMT1,R24
.dbline 81
; LMT2=250;
sts _LMT2,R24
.dbline 82
; LMT3=1;
ldi R24,1
sts _LMT3,R24
.dbline 83
; CNT1=CNT2=CNT3=0;
sts _CNT3,R2
sts _CNT2,R2
sts _CNT1,R2
.dbline 84
; SEI(); //re-enable interrupts
sei
rjmp L9
L8:
.dbline 87
;
; while(1)
; {
.dbline 88
; if (!CNT3)
lds R2,_CNT3
tst R2
brne L11
.dbline 89
; {
.dbline 90
; if(time_init)
lds R2,_time_init
tst R2
breq L12
.dbline 91
; {
.dbline 92
; time_init=0;
clr R2
sts _time_init,R2
.dbline 93
; if(CNT1<=CNT2)
lds R2,_CNT2
lds R3,_CNT1
cp R2,R3
brlo L15
.dbline 94
; {
.dbline 95
; PORTB=1;
ldi R24,1
out 0x18,R24
.dbline 96
; }
rjmp L12
L15:
.dbline 98
; else
; PORTB=0;
clr R2
out 0x18,R2
.dbline 99
; }
.dbline 100
; }
rjmp L12
L11:
.dbline 102
; else
; if(time_init)
lds R2,_time_init
tst R2
breq L17
.dbline 103
; {
.dbline 104
; time_init=0;
clr R2
sts _time_init,R2
.dbline 105
; if(CNT1<=CNT2)
lds R2,_CNT2
lds R3,_CNT1
cp R2,R3
brlo L19
.dbline 106
; {
.dbline 107
; PORTB=0;
clr R2
out 0x18,R2
.dbline 108
; }
rjmp L20
L19:
.dbline 110
; else
; PORTB=1;
ldi R24,1
out 0x18,R24
L20:
.dbline 111
; }
L17:
L12:
.dbline 112
L9:
.dbline 86
rjmp L8
X0:
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\AVR\User\AVR_PWM\Timer.c
_LMT3::
.blkb 1
.dbsym e LMT3 _LMT3 c
_LMT2::
.blkb 1
.dbsym e LMT2 _LMT2 c
_LMT1::
.blkb 1
.dbsym e LMT1 _LMT1 c
_CNT3::
.blkb 1
.dbsym e CNT3 _CNT3 c
_CNT2::
.blkb 1
.dbsym e CNT2 _CNT2 c
_CNT1::
.blkb 1
.dbsym e CNT1 _CNT1 c
_time_init::
.blkb 1
.dbsym e time_init _time_init c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -