⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.s

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 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 + -