📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile F:\Programme\PWM\main.c
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 18
; /*--------------------------------------------------------
; Atiny24-PWM: 此版本使用T0、T1共两路PWM,但目前两者还不能独立
; PWM mode:
; TCCR0A: COM0A1-COM0A0-COM0B1-COM0B0 - - WGM01-WGM00
; TCCR0B: FOC0A-FOC0B - - WGM02-CS02-CS01-CS00
; TCCR1A: COM1A1-COM1A0-COM1B1-COM1B0 - - WGM11-WGM10
; TCCR1B: ICNC1-ICES1 - WGM13-WGM12-CS12-CS11-CS10
; ---------------------------------------------------------*/
; #include "iot24v.h"
; #include "macros.h"
; #include "selffile.h"
;
; unsigned int OCR0_temp,OCR1_temp;
; /*----------------------------------------
; 主程序
; ----------------------------------------*/
; void main(void)
; {
.dbline 19
; NOP();
nop
.dbline 20
; CLI();
cli
.dbline 21
; WTCHDOG_init();
xcall _WTCHDOG_init
.dbline 22
; OCR0_temp=0;
clr R2
clr R3
sts _OCR0_temp+1,R3
sts _OCR0_temp,R2
.dbline 23
; OCR1_temp=0;
sts _OCR1_temp+1,R3
sts _OCR1_temp,R2
.dbline 25
;
; MCU_init();
xcall _MCU_init
.dbline 26
; WDR();
wdr
.dbline 27
; SEI();
sei
xjmp L3
L2:
.dbline 29
; while(1)
; {
.dbline 30
; Delay_nms(500);
ldi R16,500
ldi R17,1
xcall _Delay_nms
.dbline 31
; OCR0_temp+=1;
lds R24,_OCR0_temp
lds R25,_OCR0_temp+1
adiw R24,1
sts _OCR0_temp+1,R25
sts _OCR0_temp,R24
.dbline 32
; OCR1_temp+=0x10;
lds R24,_OCR1_temp
lds R25,_OCR1_temp+1
adiw R24,16
sts _OCR1_temp+1,R25
sts _OCR1_temp,R24
.dbline 33
; if(OCR0_temp>0xff)
ldi R24,255
ldi R25,0
lds R2,_OCR0_temp
lds R3,_OCR0_temp+1
cp R24,R2
cpc R25,R3
brsh L5
X0:
.dbline 34
; OCR0_temp=0;
clr R2
clr R3
sts _OCR0_temp+1,R3
sts _OCR0_temp,R2
L5:
.dbline 35
; if(OCR1_temp>0x3ff)
ldi R24,1023
ldi R25,3
lds R2,_OCR1_temp
lds R3,_OCR1_temp+1
cp R24,R2
cpc R25,R3
brsh L7
X1:
.dbline 36
; OCR1_temp=0;
clr R2
clr R3
sts _OCR1_temp+1,R3
sts _OCR1_temp,R2
L7:
.dbline 38
;
; OCR0A=OCR0_temp;
lds R2,_OCR0_temp
lds R3,_OCR0_temp+1
out 0x36,R2
.dbline 39
; OCR1A=OCR1_temp;
lds R2,_OCR1_temp
lds R3,_OCR1_temp+1
out 0x2b,R3
out 0x2a,R2
.dbline 40
; WDR();
wdr
.dbline 41
; }
L3:
.dbline 28
xjmp L2
X2:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 48
; }
;
; /*----------------------------------------
; 系统初始化
; ----------------------------------------*/
; void timer1_init(void)
; {
.dbline 49
; TCNT1H=0x00;
clr R2
out 0x2d,R2
.dbline 50
; TCNT1L=0x00;
out 0x2c,R2
.dbline 51
; OCR1AH=0x00; //
out 0x2b,R2
.dbline 52
; OCR1AL=0xff;
ldi R24,255
out 0x2a,R24
.dbline 53
; TIMSK1=0x00;
out 0xc,R2
.dbline 54
; TCCR1A=(1<<COM1A1)|(1<<WGM10)|(1<<WGM11); //
ldi R24,131
out 0x2f,R24
.dbline 55
; TCCR1B=(1<<CS10);
ldi R24,1
out 0x2e,R24
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 59
; }
;
; void timer0_init(void)
; {
.dbline 60
; TCCR0B=0x00;
clr R2
out 0x33,R2
.dbline 61
; TCNT0=0x00; //0xb0
out 0x32,R2
.dbline 62
; OCR0A=0x80;
ldi R24,128
out 0x36,R24
.dbline 63
; TIMSK0=0x00;
out 0x39,R2
.dbline 64
; TCCR0A=(1<<COM0A1)|(1<<WGM00);
ldi R24,129
out 0x30,R24
.dbline 65
; TCCR0B=(1<<CS00);
ldi R24,1
out 0x33,R24
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e MCU_init _MCU_init fV
.even
_MCU_init::
.dbline -1
.dbline 69
; }
;
; void MCU_init(void)
; {
.dbline 70
; DDRA=(1<<PA6)|(1<<PA5);
ldi R24,96
out 0x1a,R24
.dbline 71
; DDRB=(1<<PB2);
ldi R24,4
out 0x17,R24
.dbline 72
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 73
; GIMSK = 0x00;
out 0x3b,R2
.dbline 74
; timer0_init();
xcall _timer0_init
.dbline 75
; timer1_init();
xcall _timer1_init
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e WTCHDOG_init _WTCHDOG_init fV
.even
_WTCHDOG_init::
.dbline -1
.dbline 82
; }
;
; /*----------------------------------------
; 看门狗设置
; ----------------------------------------*/
; void WTCHDOG_init(void) //WTCHDOG: use the least frequency,about 2S
; {
.dbline 83
; WDR();
wdr
.dbline 84
; WDTCSR=0x9f;
ldi R24,159
out 0x21,R24
.dbline 85
; WDTCSR=0x0f;
ldi R24,15
out 0x21,R24
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile F:\Programme\PWM\main.c
_OCR1_temp::
.blkb 2
.dbsym e OCR1_temp _OCR1_temp i
_OCR0_temp::
.blkb 2
.dbsym e OCR0_temp _OCR0_temp i
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -