📄 timer1.s
字号:
.module timer1.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\16BITT~1\timer1.c
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 21
; //ICC-AVR application builder : 2007-5-6 21:30:57
; // Target : M16
; // Crystal: 8.0000Mhz
; //TIMER1 initialize - prescale:64
; // WGM: 10) PWM phz correct, TOP= ICRn
; // desired value: 1Hz
; // actual value: 1.000Hz (0.0%)
;
;
; #include <iom16v.h>
; #include <macros.h>
;
; #define PWM1A PORTD5 //OC1A PD5
; #define PWM1B PORTD4 //OC1B PD4
; unsigned char OCAH;
; unsigned char OCAL;
; unsigned char OCBH;
; unsigned char OCBL;
;
; void timer1_init(void)
; {
.dbline 22
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 23
; TCNT1H = 0x00; //setup
out 0x2d,R2
.dbline 24
; TCNT1L = 0x01;
ldi R24,1
out 0x2c,R24
.dbline 25
; OCR1AH = OCAH;
lds R2,_OCAH
out 0x2b,R2
.dbline 26
; OCR1AL = OCAL;
lds R2,_OCAL
out 0x2a,R2
.dbline 27
; OCR1BH = OCBH;
lds R2,_OCBH
out 0x29,R2
.dbline 28
; OCR1BL = OCBL;
lds R2,_OCBL
out 0x28,R2
.dbline 29
; ICR1H = 0xff; // pwm 的计数顶值
ldi R24,255
out 0x27,R24
.dbline 30
; ICR1L = 0xFF;
out 0x26,R24
.dbline 31
; TCCR1A = 0xA3; // 匹配清零 top置位
ldi R24,163
out 0x2f,R24
.dbline 32
; TCCR1B = 0x0B; // start Timer
ldi R24,11
out 0x2e,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
; valuebl -> y+6
; valuebh -> y+4
; valueal -> R20
; valueah -> R22
.even
_init_devices::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 36
; }
;
; void init_devices(unsigned char valueah,unsigned char valueal,unsigned char valuebh,unsigned char valuebl)
; {
.dbline 38
;
; OCAH=valueah;
sts _OCAH,R22
.dbline 39
; OCAL=valueal;
sts _OCAL,R20
.dbline 40
; OCBH=valuebh;
ldd R0,y+4
sts _OCBH,R0
.dbline 41
; OCBL=valuebl;
ldd R0,y+6
sts _OCBL,R0
.dbline 42
; CLI();
cli
.dbline 44
; //disable all interrupts
; timer1_init();
xcall _timer1_init
.dbline 45
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 46
; GICR = 0x00;
out 0x3b,R2
.dbline 47
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 48
; SEI(); //re-enable interrupts
sei
.dbline -2
L2:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l valuebl 6 c
.dbsym l valuebh 4 c
.dbsym r valueal 20 c
.dbsym r valueah 22 c
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,3
.dbline -1
.dbline 54
;
; }
;
;
; void main(void)
; {
.dbline 55
; PORTD&=(0<<PWM1A)&(0<<PWM1B);
clr R2
out 0x12,R2
.dbline 56
; DDRD|=(1<<PWM1A)|(1<<PWM1B);
in R24,0x11
ori R24,48
out 0x11,R24
.dbline 57
; init_devices(0x0f,0x45,0x0f,0xf0); //修改实参即可改变占空比,最大值为0X0FFF;
ldi R24,240
std y+2,R24
ldi R24,15
std y+0,R24
ldi R18,69
ldi R16,15
xcall _init_devices
L4:
.dbline 58
L5:
.dbline 58
xjmp L4
X0:
.dbline -2
L3:
adiw R28,3
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\16BITT~1\timer1.c
_OCBL::
.blkb 1
.dbsym e OCBL _OCBL c
_OCBH::
.blkb 1
.dbsym e OCBH _OCBH c
_OCAL::
.blkb 1
.dbsym e OCAL _OCAL c
_OCAH::
.blkb 1
.dbsym e OCAH _OCAH c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -