📄 led.s
字号:
.module led.c
.area data(ram, con, rel)
_T0Count0::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile d:\excersize\led.h
.dbsym e T0Count0 _T0Count0 i
.area text(rom, con, rel)
.dbfile d:\excersize\led.h
.dbfile D:\excersize\led.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 9
; //ICC-AVR application builder : 2006-5-22 9:26:54
; // Target : M128
; // Crystal: 16.000Mhz
;
; #include <iom128v.h>
; #include <macros.h>
; #include <d:\excersize\led.h>
; void port_init(void)
; {
.dbline 10
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 11
; DDRA = 0x00;
out 0x1a,R2
.dbline 12
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 13
; DDRB = 0xFF;
out 0x17,R24
.dbline 14
; PORTC = 0x00; //m103 output only
out 0x15,R2
.dbline 15
; DDRC = 0xFF;
out 0x14,R24
.dbline 16
; PORTD = 0xFF;
out 0x12,R24
.dbline 17
; DDRD = 0xF0;
ldi R24,240
out 0x11,R24
.dbline 18
; PORTE = 0x00;
out 0x3,R2
.dbline 19
; DDRE = 0x00;
out 0x2,R2
.dbline 20
; PORTF = 0x00;
sts 98,R2
.dbline 21
; DDRF = 0x00;
sts 97,R2
.dbline 22
; PORTG = 0x00;
sts 101,R2
.dbline 23
; DDRG = 0x00;
sts 100,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 26
; }
; void watchdog_init(void)
; {
.dbline 27
; WDR(); //this prevents a timout on enabling//
wdr
.dbline 28
; WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
ldi R24,15
out 0x21,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 30
; }
; void timer0_init(void){
.dbline 31
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 32
; ASSR = 0x00; //set async mode//同步方式,允许更新计数,比较输出,控制寄存器
out 0x30,R2
.dbline 33
; TCNT0 = 0x83; //set count
ldi R24,131
out 0x32,R24
.dbline 34
; OCR0 = 0x7D;
ldi R24,125
out 0x31,R24
.dbline 35
; TCCR0 = 0x05; //start timer//128分频
ldi R24,5
out 0x33,R24
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 60
jmp _timer0_comp_isr
.area text(rom, con, rel)
.dbfile D:\excersize\led.c
.dbfunc e timer0_comp_isr _timer0_comp_isr fV
.even
_timer0_comp_isr::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 39
; }
; //======================================================time0 中断
; #pragma interrupt_handler timer0_comp_isr:16
; void timer0_comp_isr(void){
.dbline 40
; TCNT0 = 0x83;
ldi R24,131
out 0x32,R24
.dbline 41
; T0Count0++;
lds R24,_T0Count0
lds R25,_T0Count0+1
adiw R24,1
sts _T0Count0+1,R25
sts _T0Count0,R24
.dbline -2
L4:
ld R24,y+
out 0x3f,R24
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e delay _delay fV
; j -> R16,R17
; i -> R18,R19
.even
_delay::
.dbline -1
.dbline 47
;
; //compare occured TCNT0=OCR0
; }
; //call this routine to initialize all peripherals
; void delay(void)
; {
.dbline 49
;
; UI i=0;
clr R18
clr R19
.dbline 50
; UI j=0;
clr R16
clr R17
.dbline 51
; for(j=0;j<500;j++)
xjmp L9
L6:
.dbline 52
; {
.dbline 53
; WDR();
wdr
.dbline 54
clr R18
clr R19
xjmp L13
L10:
.dbline 54
L11:
.dbline 54
subi R18,255 ; offset = 1
sbci R19,255
L13:
.dbline 54
cpi R18,136
ldi R30,19
cpc R19,R30
brlo L10
.dbline 55
L7:
.dbline 51
subi R16,255 ; offset = 1
sbci R17,255
L9:
.dbline 51
cpi R16,244
ldi R30,1
cpc R17,R30
brlo L6
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r j 16 i
.dbsym r i 18 i
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 59
; for(i=0;i<5000;i++);
; }
;
; }
; void init_devices(void)
; {
.dbline 61
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 62
; XDIV = 0x00; //xtal divider//系统时钟分频控制寄存器
clr R2
out 0x3c,R2
.dbline 63
; XMCRA = 0x0E; //external memory//外部存储器控制寄存器
ldi R24,14
sts 109,R24
.dbline 64
; XMCRB = 0x80;
ldi R24,128
sts 108,R24
.dbline 65
; port_init();
xcall _port_init
.dbline 66
; timer0_init();
xcall _timer0_init
.dbline 67
; MCUCR = 0xC0;//MCU控制寄存器
ldi R24,192
out 0x35,R24
.dbline 68
; EICRA = 0x0A; //extended ext ints//外部中断控制寄存器
ldi R24,10
sts 106,R24
.dbline 69
; EICRB = 0x0F; //extended ext ints
ldi R24,15
out 0x3a,R24
.dbline 70
; EIMSK = 0x33; //0x03 extended ext enable
ldi R24,51
out 0x39,R24
.dbline 71
; TIMSK = 0x12; //timer interrupt sources 01:time0
ldi R24,18
out 0x37,R24
.dbline 72
; ETIMSK =0x00; //extended timer interrupt sources
clr R2
sts 125,R2
.dbline 73
; SEI(); //re-enable interrupts
sei
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; mid -> R20
; i -> R22,R23
.even
_main::
.dbline -1
.dbline 77
; //all peripherals are now initialized
; }
; void main(void)
; {
.dbline 78
; watchdog_init();
xcall _watchdog_init
.dbline 79
; WDR();
wdr
.dbline 80
; init_devices();
xcall _init_devices
xjmp L17
L16:
.dbline 82
; while(1)
; {
.dbline 83
; UI i=0;
clr R22
clr R23
.dbline 84
; WDR();
wdr
.dbline 85
; if(T0Count0>10)
ldi R24,10
ldi R25,0
lds R2,_T0Count0
lds R3,_T0Count0+1
cp R24,R2
cpc R25,R3
brsh L19
.dbline 86
; {
.dbline 87
; UC mid=0x01;
ldi R20,1
.dbline 88
; WDR();
wdr
.dbline 89
; T0Count0=0;
clr R2
clr R3
sts _T0Count0+1,R3
sts _T0Count0,R2
.dbline 91
;
; for(i=0;i<8;i++)
xjmp L24
L21:
.dbline 92
.dbline 93
xcall _delay
.dbline 94
mov R2,R20
com R2
out 0x18,R2
.dbline 95
ldi R24,2
mul R24,R20
mov R20,R0
.dbline 97
L22:
.dbline 91
subi R22,255 ; offset = 1
sbci R23,255
L24:
.dbline 91
cpi R22,8
ldi R30,0
cpc R23,R30
brlo L21
.dbline 99
; {
; delay();
; PORTB=~mid;
; mid=mid*2;
;
; }
;
; PORTB=0xFF;
ldi R24,255
out 0x18,R24
.dbline 100
; delay();
xcall _delay
.dbline 101
; PORTD=0xEF;
ldi R24,239
out 0x12,R24
.dbline 102
; delay();
xcall _delay
.dbline 103
; PORTD=0xDF;
ldi R24,223
out 0x12,R24
.dbline 104
; delay();
xcall _delay
.dbline 105
; PORTD=0xBF;
ldi R24,191
out 0x12,R24
.dbline 106
; delay();
xcall _delay
.dbline 107
; PORTD=0x7F;
ldi R24,127
out 0x12,R24
.dbline 108
; delay();
xcall _delay
.dbline 109
; PORTD=0xFF;
ldi R24,255
out 0x12,R24
.dbline 110
; }
L19:
.dbline 111
L17:
.dbline 81
xjmp L16
X0:
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r mid 20 c
.dbsym r i 22 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -