📄 uart1.s
字号:
.module uart1.c
.area text(rom, con, rel)
.dbfile C:\work\UART_MEGA128\uart1.c
.dbfunc e uart0_init _uart0_init fI
.even
_uart0_init::
.dbline -1
.dbline 7
; #include<iom128v.h>
; #include<macros.h>
; #define fosc 4000000 //晶振4MHZ
; #define baud 2400 //波特率
; #define com0
; void uart0_init(void)
; {
.dbline 8
; UCSR0B = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 9
; UCSR0A = 0x00;
out 0xb,R2
.dbline 10
; UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
ldi R24,6
sts 149,R24
.dbline 11
; UBRR0L=(fosc/16/(baud+1))%256;
ldi R24,104
out 0x9,R24
.dbline 12
; UBRR0H=(fosc/16/(baud+1))/256;
sts 144,R2
.dbline 13
; UCSR0B =(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN
ldi R24,24
out 0xa,R24
.dbline -2
.dbline 14
; }
L1:
.dbline 0 ; func end
ret
.dbfunc e uart1_init _uart1_init fI
.even
_uart1_init::
.dbline -1
.dbline 16
; void uart1_init(void)
; {
.dbline 17
; UCSR1B = 0x00; //disable while setting baud rate
clr R2
sts 154,R2
.dbline 18
; UCSR1A = 0x00;
sts 155,R2
.dbline 19
; UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
ldi R24,6
sts 157,R24
.dbline 20
; UBRR1L=(fosc/16/(baud+1))%256;
ldi R24,104
sts 153,R24
.dbline 21
; UBRR1H=(fosc/16/(baud+1))/256;
sts 152,R2
.dbline 22
; UCSR1B =(1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN
ldi R24,24
sts 154,R24
.dbline -2
.dbline 23
; }
L2:
.dbline 0 ; func end
ret
.dbfunc e putchar0 _putchar0 fI
; c -> R16
.even
_putchar0::
.dbline -1
.dbline 25
; void putchar0(unsigned char c)
; {
L4:
.dbline 26
L5:
.dbline 26
; while (!(UCSR0A&(1<<UDRE0)));
sbis 0xb,5
rjmp L4
.dbline 27
; UDR0=c;
out 0xc,R16
.dbline -2
.dbline 28
; }
L3:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbfunc e putchar1 _putchar1 fI
; c -> R16
.even
_putchar1::
.dbline -1
.dbline 30
; void putchar1(unsigned char c)
; {
L8:
.dbline 31
L9:
.dbline 31
; while (!(UCSR1A&(1<<UDRE1)));
lds R2,155
sbrs R2,5
rjmp L8
.dbline 32
; UDR1=c;
sts 156,R16
.dbline -2
.dbline 33
; }
L7:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbfunc e getchar0 _getchar0 fI
.even
_getchar0::
.dbline -1
.dbline 35
; unsigned char getchar0(void)
; {
L12:
.dbline 36
L13:
.dbline 36
; while(!(UCSR0A& (1<<RXC0)));
sbis 0xb,7
rjmp L12
.dbline 37
; return UDR0;
in R16,0xc
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbfunc e getchar1 _getchar1 fI
.even
_getchar1::
.dbline -1
.dbline 40
; }
; unsigned char getchar1(void)
; {
L16:
.dbline 41
L17:
.dbline 41
; while(!(UCSR1A& (1<<RXC1)));
lds R2,155
sbrs R2,7
rjmp L16
.dbline 42
; return UDR1;
lds R16,156
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbfunc e puts0 _puts0 fI
; s -> R20,R21
.even
_puts0::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 45
; }
; void puts0(char *s)
; {
xjmp L21
L20:
.dbline 47
.dbline 48
movw R30,R20
ldd R16,z+0
xcall _putchar0
.dbline 49
subi R20,255 ; offset = 1
sbci R21,255
.dbline 50
L21:
.dbline 46
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L20
.dbline 51
; {
; putchar0(*s);
; s++;
; }
; putchar0(0x0a);
ldi R16,10
xcall _putchar0
.dbline 52
; putchar0(0x0d);
ldi R16,13
xcall _putchar0
.dbline -2
.dbline 53
; }
L19:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbfunc e puts1 _puts1 fI
; s -> R20,R21
.even
_puts1::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 55
; void puts1(char *s)
; {
xjmp L25
L24:
.dbline 57
.dbline 58
movw R30,R20
ldd R16,z+0
xcall _putchar1
.dbline 59
subi R20,255 ; offset = 1
sbci R21,255
.dbline 60
L25:
.dbline 56
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L24
.dbline 61
; {
; putchar1(*s);
; s++;
; }
; putchar1(0x0a);
ldi R16,10
xcall _putchar1
.dbline 62
; putchar1(0x0d);
ldi R16,13
xcall _putchar1
.dbline -2
.dbline 63
; }
L23:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbfunc e main _main fI
; i -> R20
.even
_main::
.dbline -1
.dbline 65
; void main(void)
; {
.dbline 68
; unsigned char i;
; #ifdef com0
; uart0_init();
xcall _uart0_init
.dbline 69
; puts0("HELLO!");
ldi R16,<L28
ldi R17,>L28
xcall _puts0
xjmp L30
L29:
.dbline 75
; #else
; uart1_init();
; puts1("HELLO!");
; #endif
; while(1)
; {
.dbline 77
; #ifdef com0
; if (getchar0()=='t')//按键盘t键开始测试
xcall _getchar0
cpi R16,116
brne L32
.dbline 78
; {
.dbline 79
; puts0("test ok!");
ldi R16,<L34
ldi R17,>L34
xcall _puts0
.dbline 80
; for (i=0;i<10;i++)
clr R20
xjmp L38
L35:
.dbline 81
.dbline 82
mov R16,R20
subi R16,208 ; addi 48
xcall _putchar0
.dbline 83
L36:
.dbline 80
inc R20
L38:
.dbline 80
cpi R20,10
brlo L35
.dbline 84
; {
; putchar0(0x30+i);
; }
; putchar0(0x0a);
ldi R16,10
xcall _putchar0
.dbline 85
; putchar0(0x0d);
ldi R16,13
xcall _putchar0
.dbline 86
; }
L32:
.dbline 99
L30:
.dbline 74
xjmp L29
X0:
.dbline -2
.dbline 100
; #else
; if (getchar1()=='t')//按键盘t键开始测试
; {
; puts1("test ok!");
; for (i=0;i<10;i++)
; {
; putchar1(0x30+i);
; }
; putchar1(0x0a);
; putchar1(0x0d);
; }
; #endif
; }
; }
L27:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.area data(ram, con, rel)
.dbfile C:\work\UART_MEGA128\uart1.c
L34:
.blkb 9
.area idata
.byte 't,'e,'s,'t,32,'o,'k,33,0
.area data(ram, con, rel)
.dbfile C:\work\UART_MEGA128\uart1.c
L28:
.blkb 7
.area idata
.byte 'H,'E,'L,'L,'O,33,0
.area data(ram, con, rel)
.dbfile C:\work\UART_MEGA128\uart1.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -