📄 uart-lednum.s
字号:
.module uart-lednum.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\开发板\调试程序\uart\uart-lednum.c
.dbsym e lednum _lednum c
_lednum1::
.blkb 1
.area idata
.byte 63
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e lednum1 _lednum1 c
_lednum2::
.blkb 1
.area idata
.byte 6
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e lednum2 _lednum2 c
_lednum3::
.blkb 1
.area idata
.byte 91
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e lednum3 _lednum3 c
_lednum4::
.blkb 1
.area idata
.byte 79
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.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\开发板\调试程序\uart\uart-lednum.c
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.blkb 2
.area idata
.byte 125,7
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e num _num A[10:10]c
_uart_count::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e uart_count _uart_count c
_led_sel::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbsym e led_sel _led_sel c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 22
; //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 = 0x3f;
; char lednum2 = 0x06;
; char lednum3 = 0x5b;
; char lednum4 = 0x4f;
; //码表
; char num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
;
; //uart全局变量
; char uart_count=0;
; char led_sel = 1;
;
; void port_init(void)
; {
.dbline 23
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 24
; DDRB = 0xFF;
out 0x17,R24
.dbline 25
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x15,R24
.dbline 26
; DDRC = 0x7F;
out 0x14,R24
.dbline 27
; PORTD = 0x00;
clr R2
out 0x12,R2
.dbline 28
; DDRD = 0xFF;
ldi R24,255
out 0x11,R24
.dbline -2
.dbline 29
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 36
;
; //TIMER0 initialisation - prescale:1024
; // WGM: Normal
; // desired value: 20mSec
; // actual value: 19.908mSec (0.5%)
; void timer0_init(void)
; {
.dbline 37
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 38
; TCNT0 = 0x29; //set count
ldi R24,41
out 0x32,R24
.dbline 39
; TCCR0 = 0x04; //start timer
ldi R24,4
out 0x33,R24
.dbline -2
.dbline 40
; }
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\开发板\调试程序\uart\uart-lednum.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 44
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
.dbline 45
; TCNT0 = 0x29; //reload counter value
ldi R24,41
out 0x32,R24
.dbline 46
; TCCR0 = 0x04; //start timer
ldi R24,4
out 0x33,R24
.dbline 48
;
; PORTB |= 0x30;
in R24,0x18
ori R24,48
out 0x18,R24
.dbline 49
; PORTC |= 0x30;
in R24,0x15
ori R24,48
out 0x15,R24
.dbline 50
; if(lednum == 0) //更新PB4数码管;
lds R2,_lednum
tst R2
brne L4
.dbline 51
; { PORTB &= ~0x10;
.dbline 51
cbi 0x18,4
.dbline 52
; PORTD = lednum4;
lds R2,_lednum4
out 0x12,R2
.dbline 53
; }
rjmp L5
L4:
.dbline 54
; else if(lednum ==1) //更新PB5数码管;
lds R24,_lednum
cpi R24,1
brne L6
.dbline 55
; { PORTB &= ~0x20;
.dbline 55
cbi 0x18,5
.dbline 56
; PORTD = lednum3;
lds R2,_lednum3
out 0x12,R2
.dbline 57
; }
rjmp L7
L6:
.dbline 58
; else if(lednum ==2) //更新PC4数码管;
lds R24,_lednum
cpi R24,2
brne L8
.dbline 59
; { PORTC &= ~0x10;
.dbline 59
cbi 0x15,4
.dbline 60
; PORTD = lednum2;
lds R2,_lednum2
out 0x12,R2
.dbline 61
; }
rjmp L9
L8:
.dbline 63
; else //更新PC5数码管;
; { PORTC &= ~0x20;
.dbline 63
cbi 0x15,5
.dbline 64
; PORTD = lednum1;
lds R2,_lednum1
out 0x12,R2
.dbline 65
; }
L9:
L7:
L5:
.dbline 67
;
; lednum++;
lds R24,_lednum
subi R24,255 ; addi 1
sts _lednum,R24
rjmp L11
L10:
.dbline 68
lds R24,_lednum
subi R24,4
sts _lednum,R24
L11:
.dbline 68
; while(lednum >= 4) lednum = lednum - 4;
lds R24,_lednum
cpi R24,4
brsh L10
.dbline -2
.dbline 70
;
; }
L3:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 78
;
; //UART0 initialisation
; // desired baud rate: 9600
; // actual: baud rate:9600 (0.0%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
.dbline 79
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 80
; UCSRA = 0x00;
out 0xb,R2
.dbline 81
; UCSRC = 0x86;
ldi R24,134
out 0x20,R24
.dbline 82
; UBRRL = 0x47; //set baud rate lo
ldi R24,71
out 0x9,R24
.dbline 83
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 84
; UCSRB = 0x98;
ldi R24,152
out 0xa,R24
.dbline -2
.dbline 85
; }
L13:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 22
rjmp _uart0_rx_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\uart\uart-lednum.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
; temp -> R16
.even
_uart0_rx_isr::
st -y,R2
st -y,R16
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 89
;
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {
.dbline 92
; //uart has received a character in UDR
; char temp;
; temp = UDR;
in R16,0xc
.dbline 93
; if(uart_count == 0)
lds R2,_uart_count
tst R2
brne L15
.dbline 94
; { led_sel = temp;
.dbline 94
sts _led_sel,R16
.dbline 95
; UDR = temp;
out 0xc,R16
.dbline 96
; uart_count ++;
mov R24,R2
subi R24,255 ; addi 1
sts _uart_count,R24
.dbline 97
; }
rjmp L16
L15:
.dbline 99
; else
; { uart_count = 0;
.dbline 99
clr R2
sts _uart_count,R2
.dbline 100
; if(led_sel == 1)
lds R24,_led_sel
cpi R24,1
brne L17
.dbline 101
; lednum1=temp;
sts _lednum1,R16
rjmp L18
L17:
.dbline 102
; else if(led_sel == 2)
lds R24,_led_sel
cpi R24,2
brne L19
.dbline 103
; lednum2 = temp;
sts _lednum2,R16
rjmp L20
L19:
.dbline 104
; else if(led_sel == 3)
lds R24,_led_sel
cpi R24,3
brne L21
.dbline 105
; lednum3 = temp;
sts _lednum3,R16
rjmp L22
L21:
.dbline 107
; else
; lednum4 =temp;
sts _lednum4,R16
L22:
L20:
L18:
.dbline 108
out 0xc,R16
.dbline 109
L16:
.dbline -2
.dbline 110
; UDR = temp;
; }
; }
L14:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R16,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r temp 16 c
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 115
;
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 117
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 118
; port_init();
rcall _port_init
.dbline 119
; timer0_init();
rcall _timer0_init
.dbline 120
; uart0_init();
rcall _uart0_init
.dbline 122
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 123
; GICR = 0x00;
out 0x3b,R2
.dbline 124
; TIMSK = 0x01; //timer interrupt sources
ldi R24,1
out 0x39,R24
.dbline 125
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 127
; //all peripherals are now initialised
; }
L23:
.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 134
;
;
;
;
; //自定义函数
; void delay(void)
; {
.dbline 136
clr R18
clr R19
rjmp L28
L25:
.dbline 136
L26:
.dbline 136
subi R18,255 ; offset = 1
sbci R19,255
L28:
.dbline 136
; unsigned int i,j,z;
; for(i=0;i<10000;i++);
cpi R18,16
ldi R30,39
cpc R19,R30
brlo L25
.dbline 137
; { for(j=0;j<10000;j++)
.dbline 137
clr R16
clr R17
rjmp L32
L29:
.dbline 138
.dbline 138
clr R20
clr R21
rjmp L36
L33:
.dbline 138
L34:
.dbline 138
subi R20,255 ; offset = 1
sbci R21,255
L36:
.dbline 138
cpi R20,100
ldi R30,0
cpc R21,R30
brlo L33
.dbline 138
L30:
.dbline 137
subi R16,255 ; offset = 1
sbci R17,255
L32:
.dbline 137
cpi R16,16
ldi R30,39
cpc R17,R30
brlo L29
.dbline 139
; { for(z=0;z<100;z++);}
; }
.dbline -2
.dbline 140
; }
L24:
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
.even
_main::
.dbline -1
.dbline 143
;
; void main(void)
; {
.dbline 145
;
; init_devices();
rcall _init_devices
.dbline 147
;
; lednum1 = num[0];
lds R2,_num
sts _lednum1,R2
.dbline 148
; lednum2 =num[1];
lds R2,_num+1
sts _lednum2,R2
.dbline 149
; lednum3 = num[2];
lds R2,_num+2
sts _lednum3,R2
.dbline 150
; lednum4 = num[3];
lds R2,_num+3
sts _lednum4,R2
L41:
.dbline 152
.dbline 152
.dbline 153
L42:
.dbline 151
rjmp L41
X0:
.dbline -2
.dbline 154
; while(1)
; {;
; }
; }
L37:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -