📄 serial.s
字号:
.module serial.c
.area text(rom, con, rel)
.dbfile D:\AVR_Demo\M8IAP\Source\serial.c
.dbfunc e SerialInit _SerialInit fV
.even
_SerialInit::
.dbline -1
.dbline 3
; #include "defines.h"
; void SerialInit(void)
; {
.dbline 22
; #ifdef _ATMEGA32
; UBRRL = 11; // 19200bps @ 3.69 MHz
; UCSRB = (1<<RXEN) | (1<<TXEN); // Enable recieve and transmit UART1
; #endif
;
; #ifdef _ATMEGA161
; UCSR0B = 0x00; //disable while setting baud rate
; UCSR0A = 0x00; //disable while setting baud rate
; UBRR0 = 0x0B; //set baud rate
; UBRRHI = 0x00;
; UCSR0A = 0x00; //enable
; UCSR0B = 0x18; //enable#endif
; #endif
; #ifdef _ATMEGA163
; UBRRL = 11; // 19200bps @ 3.69 MHz
; UCSRB = (1<<RXEN) | (1<<TXEN); // Enable recieve and transmit
; #endif
; #ifdef _ATMEGA8
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 23
; UCSRA = 0x00;
out 0xb,R2
.dbline 24
; UCSRC = 0x86;
ldi R24,134
out 0x20,R24
.dbline 25
; UBRRL = 0x0B; //set baud rate lo
ldi R24,11
out 0x9,R24
.dbline 26
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 27
; UCSRB = 0xF8;
ldi R24,248
out 0xa,R24
.dbline -2
.dbline 30
; #endif
;
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sendchar _sendchar fV
; c -> R16
.even
_sendchar::
.dbline -1
.dbline 32
; void sendchar(char c)
; {
.dbline 50
; #ifdef _ATMEGA32
; UDR=c;
; while (!(UCSRA & (1<<TXC))); //wait until byte sendt
; UCSRA |= (1<<TXC); //delete TXCflag
; #endif
; #ifdef _ATMEGA161
; UDR0=c;
; while (!(UCSR0A & (1<<TXC0))); //wait until byte sendt
; UCSR0A |= (1<<TXC0); //delete TXCflag
; #endif
; #ifdef _ATMEGA163
; UDR=c;
; while (!(UCSRA & (1<<TXC))); //wait until byte sendt
; UCSRA |= (1<<TXC); //delete TXCflag
;
; #endif
; #ifdef _ATMEGA8
; UDR=c;
out 0xc,R16
L3:
.dbline 51
L4:
.dbline 51
; while (!(UCSRA & (1<<TXC))); //wait until byte sendt
sbis 0xb,6
rjmp L3
.dbline 52
; UCSRA |= (1<<TXC); //delete TXCflag
sbi 0xb,6
.dbline -2
.dbline 56
;
; #endif
;
; }
L2:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e sendstr _sendstr fV
; s -> R20,R21
.even
_sendstr::
rcall push_gset1
movw R20,R16
.dbline -1
.dbline 58
; void sendstr(char *s)
; {while(*s)
rjmp L8
L7:
.dbline 59
.dbline 60
movw R30,R20
ldd R16,z+0
rcall _sendchar
.dbline 61
subi R20,255 ; offset = 1
sbci R21,255
.dbline 62
L8:
.dbline 58
movw R30,R20
ldd R2,z+0
tst R2
brne L7
.dbline 63
; {
; sendchar(*s);
; s++;
; }
; sendchar(0x0a);
ldi R16,10
rcall _sendchar
.dbline -2
.dbline 65
; //sendchar(0x0d);
; }
L6:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbend
.dbfunc e recchar _recchar fc
; temp -> R16
.even
_recchar::
.dbline -1
.dbline 69
;
; char recchar(void)
;
; {
L11:
.dbline 86
L12:
.dbline 86
; unsigned char temp;
; #ifdef _ATMEGA32
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
; #ifdef _ATMEGA161
; while(!(UCSR0A & (1<<RXC0))); // Wait for data to come
; temp=UDR0;
; return temp;
; #endif
; #ifdef _ATMEGA163
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
;
; #ifdef _ATMEGA8
; while(!(UCSRA & (1<<RXC))) ;
sbis 0xb,7
rjmp L11
.dbline 87
; temp=UDR;
in R16,0xc
.dbline 88
; return temp;
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e reccharcommand _reccharcommand fc
; temp -> R16
; i -> R18,R19
.even
_reccharcommand::
.dbline -1
.dbline 92
; #endif
; }
; char reccharcommand(void)
; {unsigned int i;
.dbline 94
; unsigned char temp;
; i=0;
clr R18
clr R19
rjmp L16
L15:
.dbline 111
; #ifdef _ATMEGA32
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
; #ifdef _ATMEGA161
; while(!(UCSR0A & (1<<RXC0))); // Wait for data to come
; temp=UDR0;
; return temp;
; #endif
; #ifdef _ATMEGA163
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
;
; #ifdef _ATMEGA8
; while(!(UCSRA & (1<<RXC)))
; {i++;
.dbline 111
subi R18,255 ; offset = 1
sbci R19,255
.dbline 112
; if(i>6000)
ldi R24,6000
ldi R25,23
cp R24,R18
cpc R25,R19
brsh L18
.dbline 113
clr R16
rjmp L14
L18:
.dbline 113
L16:
.dbline 110
sbis 0xb,7
rjmp L15
.dbline 113
; return 0x00;}; // Wait for data to come
.dbline 114
; temp=UDR;
in R16,0xc
.dbline 115
; return temp;
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbsym r i 18 i
.dbend
.dbfunc e reccharcommand2 _reccharcommand2 fc
; temp -> R16
; i -> R18,R19
.even
_reccharcommand2::
.dbline -1
.dbline 120
; #endif
; }
;
; char reccharcommand2(void)
; {unsigned int i;
.dbline 122
; unsigned char temp;
; i=0;
clr R18
clr R19
rjmp L22
L21:
.dbline 139
; #ifdef _ATMEGA32
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
; #ifdef _ATMEGA161
; while(!(UCSR0A & (1<<RXC0))); // Wait for data to come
; temp=UDR0;
; return temp;
; #endif
; #ifdef _ATMEGA163
; while(!(UCSRA & (1<<RXC))); // Wait for data to come
; return UDR;
; #endif
;
; #ifdef _ATMEGA8
; while(!(UCSRA & (1<<RXC)))
; {i++;
.dbline 139
subi R18,255 ; offset = 1
sbci R19,255
.dbline 140
; if(i>50000)
ldi R24,50000
ldi R25,195
cp R24,R18
cpc R25,R19
brsh L24
.dbline 141
clr R16
rjmp L20
L24:
.dbline 141
L22:
.dbline 138
sbis 0xb,7
rjmp L21
.dbline 141
; return 0x00;}; // Wait for data to come
.dbline 142
; temp=UDR;
in R16,0xc
.dbline 143
; return temp;
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbsym r i 18 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -