📄 usart.lis
字号:
.module usart.c
.area text(rom, con, rel)
0000 .dbfile D:\dai\AVR_USART\usart.c
0000 .dbfunc e UsartInit _UsartInit fV
.even
0000 _UsartInit::
0000 .dbline -1
0000 .dbline 4
0000 ; #define USART_C
0000 ; #include "includes.h"
0000 ; void UsartInit(void)
0000 ; {
0000 .dbline 12
0000 ; // 晶振频率 : 4.0MHz
0000 ; // 通信参数: 9600 8 Data, 1 Stop, No Parity
0000 ; // 波特率:
0000 ; // UBRRL= 0x0C 19200;
0000 ; // UBRRL= 0x19 9600;
0000 ; // UBRRL= 0x33 4800;
0000 ; // UBRRL= 0x67 2400
0000 ; UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //允许发送和接收,接收中断使能
0000 8AB1 in R24,0xa
0002 8869 ori R24,152
0004 8AB9 out 0xa,R24
0006 .dbline 13
0006 ; UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据位+1位停止位
0006 80B5 in R24,0x20
0008 8668 ori R24,134
000A 80BD out 0x20,R24
000C .dbline 14
000C ; UBRRH = 0x00;
000C 2224 clr R2
000E 20BC out 0x20,R2
0010 .dbline 15
0010 ; UBRRL = 0x19;
0010 89E1 ldi R24,25
0012 89B9 out 0x9,R24
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e PutChar _PutChar fI
0016 ; c -> R20
.even
0016 _PutChar::
0016 0E940000 xcall push_gset1
001A 402F mov R20,R16
001C .dbline -1
001C .dbline 20
001C ; //sei();
001C ; }
001C ;
001C ; int PutChar(char c)
001C ; {
001C .dbline 21
001C ; if(c == '\n')
001C 4A30 cpi R20,10
001E 11F4 brne L3
0020 .dbline 22
0020 ; {
0020 .dbline 23
0020 ; PutChar('\r');
0020 0DE0 ldi R16,13
0022 F9DF xcall _PutChar
0024 .dbline 24
0024 ; }
0024 L3:
0024 .dbline 25
0024 ; UDR = c;
0024 4CB9 out 0xc,R20
0026 L5:
0026 .dbline 26
0026 L6:
0026 .dbline 26
0026 ; while(!(UCSRA &(1<<UDRE)));
0026 5D9B sbis 0xb,5
0028 FECF rjmp L5
002A .dbline 27
002A ; UCSRA |= (1<<UDRE);
002A 5D9A sbi 0xb,5
002C .dbline 28
002C ; return 0;
002C 0027 clr R16
002E 1127 clr R17
0030 .dbline -2
0030 L2:
0030 0E940000 xcall pop_gset1
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r c 20 c
0036 .dbend
0036 .dbfunc e SendNbyte _SendNbyte fV
0036 ; w -> R20
0036 ; L -> R22
0036 ; p -> R10,R11
.even
0036 _SendNbyte::
0036 0E940000 xcall push_gset3
003A 622F mov R22,R18
003C 5801 movw R10,R16
003E .dbline -1
003E .dbline 33
003E ; }
003E ;
003E ;
003E ; void SendNbyte(unsigned char *p,unsigned char L)
003E ; {
003E .dbline 35
003E ; unsigned char w;
003E ; for(w=0;w<L;w++)
003E 4427 clr R20
0040 07C0 xjmp L12
0042 L9:
0042 .dbline 36
0042 .dbline 40
0042 E42F mov R30,R20
0044 FF27 clr R31
0046 EA0D add R30,R10
0048 FB1D adc R31,R11
004A 0081 ldd R16,z+0
004C E4DF xcall _PutChar
004E .dbline 41
004E L10:
004E .dbline 35
004E 4395 inc R20
0050 L12:
0050 .dbline 35
0050 4617 cp R20,R22
0052 B8F3 brlo L9
0054 .dbline -2
0054 L8:
0054 0E940000 xcall pop_gset3
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r w 20 c
005A .dbsym r L 22 c
005A .dbsym r p 10 pc
005A .dbend
005A .dbfunc e PutStr _PutStr fV
005A ; Str -> R20,R21
.even
005A _PutStr::
005A 0E940000 xcall push_gset1
005E A801 movw R20,R16
0060 .dbline -1
0060 .dbline 46
0060 ; {
0060 ; // UDR = *(p+w);
0060 ; // while(!(UCSRA &(1<<UDRE)));
0060 ; //UCSRA |= (1<<UDRE);
0060 ; PutChar(*(p+w));
0060 ; }
0060 ;
0060 ; }
0060 ;
0060 ; void PutStr(unsigned char *Str)
0060 ; {
0060 05C0 xjmp L15
0062 L14:
0062 .dbline 48
0062 .dbline 49
0062 FA01 movw R30,R20
0064 0081 ldd R16,z+0
0066 D7DF xcall _PutChar
0068 .dbline 50
0068 4F5F subi R20,255 ; offset = 1
006A 5F4F sbci R21,255
006C .dbline 51
006C L15:
006C .dbline 47
006C ; while(*Str != '\0')
006C FA01 movw R30,R20
006E 2080 ldd R2,z+0
0070 2220 tst R2
0072 B9F7 brne L14
0074 .dbline -2
0074 L13:
0074 0E940000 xcall pop_gset1
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r Str 20 pc
007A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -