📄 num-tiner0.s
字号:
.module num-tiner0.c
.area data(ram, con, rel)
_lednum::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e lednum _lednum c
_lednum1::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e lednum1 _lednum1 c
_lednum2::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e lednum2 _lednum2 c
_lednum3::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e lednum3 _lednum3 c
_lednum4::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e lednum4 _lednum4 c
_num::
.blkb 2
.area idata
.byte 63,6
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.blkb 2
.area idata
.byte 125,7
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbsym e num _num A[10:10]c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 19
; //ICC-AVR application builder : 2005-3-8 下午 04:53:49
; // Target : M8
; // Crystal: 11.059Mhz
;
; #include <iom8v.h>
; #include <macros.h>
;
; //lednum全局变量
; char lednum = 0;
; char lednum1 = 0;
; char lednum2 = 0;
; char lednum3 = 0;
; char lednum4 = 0;
; //码表
; char num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
;
;
; void port_init(void)
; {
.dbline 20
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 21
; DDRB = 0xFF;
out 0x17,R24
.dbline 22
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x15,R24
.dbline 23
; DDRC = 0x7F;
out 0x14,R24
.dbline 24
; PORTD = 0x00;
clr R2
out 0x12,R2
.dbline 25
; DDRD = 0xFF;
ldi R24,255
out 0x11,R24
.dbline -2
.dbline 26
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 33
;
; //TIMER0 initialisation - prescale:1024
; // WGM: Normal
; // desired value: 20mSec
; // actual value: 19.908mSec (0.5%)
; void timer0_init(void)
; {
.dbline 34
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 35
; TCNT0 = 0x29; //set count
ldi R24,41
out 0x32,R24
.dbline 36
; TCCR0 = 0x04; //start timer
ldi R24,4
out 0x33,R24
.dbline -2
.dbline 37
; }
L2:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 18
rjmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 41
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
.dbline 42
; TCNT0 = 0x29; //reload counter value
ldi R24,41
out 0x32,R24
.dbline 43
; TCCR0 = 0x04; //start timer
ldi R24,4
out 0x33,R24
.dbline 45
;
; PORTB |= 0x30;
in R24,0x18
ori R24,48
out 0x18,R24
.dbline 46
; PORTC |= 0x30;
in R24,0x15
ori R24,48
out 0x15,R24
.dbline 47
; if(lednum == 0) //更新PB4数码管;
lds R2,_lednum
tst R2
brne L4
.dbline 48
; { PORTB &= ~0x10;
.dbline 48
cbi 0x18,4
.dbline 49
; PORTD = lednum4;
lds R2,_lednum4
out 0x12,R2
.dbline 50
; }
rjmp L5
L4:
.dbline 51
; else if(lednum ==1) //更新PB5数码管;
lds R24,_lednum
cpi R24,1
brne L6
.dbline 52
; { PORTB &= ~0x20;
.dbline 52
cbi 0x18,5
.dbline 53
; PORTD = lednum3;
lds R2,_lednum3
out 0x12,R2
.dbline 54
; }
rjmp L7
L6:
.dbline 55
; else if(lednum ==2) //更新PC4数码管;
lds R24,_lednum
cpi R24,2
brne L8
.dbline 56
; { PORTC &= ~0x10;
.dbline 56
cbi 0x15,4
.dbline 57
; PORTD = lednum2;
lds R2,_lednum2
out 0x12,R2
.dbline 58
; }
rjmp L9
L8:
.dbline 60
; else //更新PC5数码管;
; { PORTC &= ~0x20;
.dbline 60
cbi 0x15,5
.dbline 61
; PORTD = lednum1;
lds R2,_lednum1
out 0x12,R2
.dbline 62
; }
L9:
L7:
L5:
.dbline 64
;
; lednum++;
lds R24,_lednum
subi R24,255 ; addi 1
sts _lednum,R24
rjmp L11
L10:
.dbline 65
lds R24,_lednum
subi R24,4
sts _lednum,R24
L11:
.dbline 65
; while(lednum >= 4) lednum = lednum - 4;
lds R24,_lednum
cpi R24,4
brsh L10
.dbline -2
.dbline 67
;
; }
L3:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 71
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 73
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 74
; port_init();
rcall _port_init
.dbline 75
; timer0_init();
rcall _timer0_init
.dbline 77
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 78
; GICR = 0x00;
out 0x3b,R2
.dbline 79
; TIMSK = 0x01; //timer interrupt sources
ldi R24,1
out 0x39,R24
.dbline 80
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 82
; //all peripherals are now initialised
; }
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay _delay fV
; j -> R16,R17
; i -> R18,R19
; z -> R20,R21
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 89
;
;
;
;
; //自定义函数
; void delay(void)
; {
.dbline 91
clr R18
clr R19
rjmp L18
L15:
.dbline 91
L16:
.dbline 91
subi R18,255 ; offset = 1
sbci R19,255
L18:
.dbline 91
; unsigned int i,j,z;
; for(i=0;i<10000;i++);
cpi R18,16
ldi R30,39
cpc R19,R30
brlo L15
.dbline 92
; { for(j=0;j<10000;j++)
.dbline 92
clr R16
clr R17
rjmp L22
L19:
.dbline 93
.dbline 93
clr R20
clr R21
rjmp L26
L23:
.dbline 93
L24:
.dbline 93
subi R20,255 ; offset = 1
sbci R21,255
L26:
.dbline 93
cpi R20,100
ldi R30,0
cpc R21,R30
brlo L23
.dbline 93
L20:
.dbline 92
subi R16,255 ; offset = 1
sbci R17,255
L22:
.dbline 92
cpi R16,16
ldi R30,39
cpc R17,R30
brlo L19
.dbline 94
; { for(z=0;z<100;z++);}
; }
.dbline -2
.dbline 95
; }
L14:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 16 i
.dbsym r i 18 i
.dbsym r z 20 i
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 98
;
; void main(void)
; {
.dbline 100
; char i;
; init_devices();
rcall _init_devices
rjmp L29
L28:
.dbline 103
;
; while(1)
; {
.dbline 105
;
; for(i=0;i<=9;i++)
clr R20
rjmp L34
L31:
.dbline 106
.dbline 106
ldi R24,<_num
ldi R25,>_num
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lednum1,R2
.dbline 107
rcall _delay
.dbline 108
L32:
.dbline 105
inc R20
L34:
.dbline 105
ldi R24,9
cp R24,R20
brsh L31
.dbline 111
; { lednum1 = num[i];
; delay();
; }
;
;
; PORTB |= 0x20;//位选2
sbi 0x18,5
.dbline 112
; for(i=0;i<=9;i++)
clr R20
rjmp L38
L35:
.dbline 113
.dbline 113
ldi R24,<_num
ldi R25,>_num
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lednum2,R2
.dbline 114
rcall _delay
.dbline 115
L36:
.dbline 112
inc R20
L38:
.dbline 112
ldi R24,9
cp R24,R20
brsh L35
.dbline 118
; { lednum2 = num[i];
; delay();
; }
;
;
; PORTC |= 0x10;//位选3
sbi 0x15,4
.dbline 119
; for(i=0;i<=9;i++)
clr R20
rjmp L42
L39:
.dbline 120
.dbline 120
ldi R24,<_num
ldi R25,>_num
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lednum3,R2
.dbline 121
rcall _delay
.dbline 122
L40:
.dbline 119
inc R20
L42:
.dbline 119
ldi R24,9
cp R24,R20
brsh L39
.dbline 126
; { lednum3 = num[i];
; delay();
; }
;
;
;
; for(i=0;i<=9;i++)
clr R20
rjmp L46
L43:
.dbline 127
.dbline 127
ldi R24,<_num
ldi R25,>_num
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _lednum4,R2
.dbline 128
rcall _delay
.dbline 129
L44:
.dbline 126
inc R20
L46:
.dbline 126
ldi R24,9
cp R24,R20
brsh L43
.dbline 132
L29:
.dbline 102
rjmp L28
X0:
.dbline -2
.dbline 133
; { lednum4 = num[i];
; delay();
; }
;
;
; }
; }
L27:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -