📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\uart\uart.c
0000 .dbfunc e delay_nus _delay_nus fV
0000 ; i -> R20,R21
0000 ; n -> R16,R17
.even
0000 _delay_nus::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 .dbline -1
0004 .dbline 11
0004 ; //ICC-AVR application builder : 2008-8-5 14:38:41
0004 ; // Target : M8515
0004 ; // Crystal: 8.0000Mhz
0004 ;
0004 ; #include <iom8515v.h>
0004 ; #include <macros.h>
0004 ;
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; void delay_nus(unsigned int n)//n微秒延时函数
0004 ; {
0004 .dbline 13
0004 ; unsigned int i;
0004 ; for (i=0;i<n;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 03C0 rjmp L5
000A L2:
000A .dbline 14
000A ; {
000A .dbline 15
000A ; asm("nop");
000A 0000 nop
000C .dbline 16
000C ; }
000C L3:
000C .dbline 13
000C 4F5F subi R20,255 ; offset = 1
000E 5F4F sbci R21,255
0010 L5:
0010 .dbline 13
0010 4017 cp R20,R16
0012 5107 cpc R21,R17
0014 D0F3 brlo L2
0016 X0:
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 5991 ld R21,y+
0018 4991 ld R20,y+
001A 0895 ret
001C .dbsym r i 20 i
001C .dbsym r n 16 i
001C .dbend
001C .dbfunc e delay_nms _delay_nms fV
001C ; i -> R20,R21
001C ; n -> R10,R11
.even
001C _delay_nms::
001C 00D0 rcall push_xgset300C
001E 5801 movw R10,R16
0020 .dbline -1
0020 .dbline 19
0020 ; }
0020 ; void delay_nms(unsigned int n)//n毫秒延时函数
0020 ; {
0020 .dbline 21
0020 ; unsigned int i;
0020 ; for (i=0;i<n;i++) //执行n次1毫秒延时
0020 4427 clr R20
0022 5527 clr R21
0024 05C0 rjmp L10
0026 L7:
0026 .dbline 22
0026 ; delay_nus(1000);
0026 08EE ldi R16,1000
0028 13E0 ldi R17,3
002A EADF rcall _delay_nus
002C L8:
002C .dbline 21
002C 4F5F subi R20,255 ; offset = 1
002E 5F4F sbci R21,255
0030 L10:
0030 .dbline 21
0030 4A15 cp R20,R10
0032 5B05 cpc R21,R11
0034 C0F3 brlo L7
0036 X1:
0036 .dbline -2
0036 L6:
0036 .dbline 0 ; func end
0036 00C0 rjmp pop_xgset300C
0038 .dbsym r i 20 i
0038 .dbsym r n 10 i
0038 .dbend
0038 .dbfunc e port_init _port_init fV
.even
0038 _port_init::
0038 .dbline -1
0038 .dbline 25
0038 ; }
0038 ; void port_init(void)
0038 ; {
0038 .dbline 26
0038 ; PORTA = 0x00;
0038 2224 clr R2
003A 2BBA out 0x1b,R2
003C .dbline 27
003C ; DDRA = 0x00;
003C 2ABA out 0x1a,R2
003E .dbline 28
003E ; PORTB = 0x00;
003E 28BA out 0x18,R2
0040 .dbline 29
0040 ; DDRB = 0x00;
0040 27BA out 0x17,R2
0042 .dbline 30
0042 ; PORTC = 0x00;
0042 25BA out 0x15,R2
0044 .dbline 31
0044 ; DDRC = 0x00;
0044 24BA out 0x14,R2
0046 .dbline 32
0046 ; PORTD = 0x00;
0046 22BA out 0x12,R2
0048 .dbline 33
0048 ; DDRD = 0x00;
0048 21BA out 0x11,R2
004A .dbline 34
004A ; PORTE = 0x00;
004A 27B8 out 0x7,R2
004C .dbline 35
004C ; DDRE = 0x00;
004C 26B8 out 0x6,R2
004E .dbline -2
004E L11:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
0050 .dbfunc e uart0_init _uart0_init fV
.even
0050 _uart0_init::
0050 .dbline -1
0050 .dbline 42
0050 ; }
0050 ;
0050 ; //UART0 initialize
0050 ; // desired baud rate: 9600
0050 ; // actual: baud rate:9615 (0.2%)
0050 ; void uart0_init(void)
0050 ; {
0050 .dbline 43
0050 ; UCSRB = 0x00; //disable while setting baud rate
0050 2224 clr R2
0052 2AB8 out 0xa,R2
0054 .dbline 44
0054 ; UCSRA = 0x00;
0054 2BB8 out 0xb,R2
0056 .dbline 45
0056 ; UCSRC = BIT(URSEL) | 0x26;
0056 86EA ldi R24,166
0058 80BD out 0x20,R24
005A .dbline 46
005A ; UBRRL = 0x33; //set baud rate lo
005A 83E3 ldi R24,51
005C 89B9 out 0x9,R24
005E .dbline 47
005E ; UBRRH = 0x00; //set baud rate hi
005E 20BC out 0x20,R2
0060 .dbline 48
0060 ; UCSRB = 0x18;
0060 88E1 ldi R24,24
0062 8AB9 out 0xa,R24
0064 .dbline -2
0064 L12:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbend
0066 .dbfunc e sendchar _sendchar fV
0066 ; num -> R16
.even
0066 _sendchar::
0066 .dbline -1
0066 .dbline 53
0066 ; }
0066 ;
0066 ;
0066 ; void sendchar(uchar num)
0066 ; {
0066 .dbline 54
0066 ; UDR=num;
0066 0CB9 out 0xc,R16
0068 L14:
0068 .dbline 55
0068 ; while(!(UCSRA&(1<<TXC)));
0068 L15:
0068 .dbline 55
0068 5E9B sbis 0xb,6
006A FECF rjmp L14
006C X2:
006C .dbline 56
006C ; UCSRA |= (1<<TXC);
006C 5E9A sbi 0xb,6
006E .dbline -2
006E L13:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbsym r num 16 c
0070 .dbend
0070 .dbfunc e PutChar _PutChar fI
0070 ; c -> R20
.even
0070 _PutChar::
0070 4A93 st -y,R20
0072 402F mov R20,R16
0074 .dbline -1
0074 .dbline 59
0074 ; }
0074 ; int PutChar(char c)
0074 ; {
0074 .dbline 60
0074 ; if(c == '\n')
0074 4A30 cpi R20,10
0076 11F4 brne L18
0078 X3:
0078 .dbline 61
0078 ; {
0078 .dbline 62
0078 ; PutChar('\r');
0078 0DE0 ldi R16,13
007A FADF rcall _PutChar
007C .dbline 63
007C ; }
007C L18:
007C .dbline 64
007C ; UDR = c;
007C 4CB9 out 0xc,R20
007E L20:
007E .dbline 65
007E ; while(!(UCSRA &(1<<UDRE)));
007E L21:
007E .dbline 65
007E 5D9B sbis 0xb,5
0080 FECF rjmp L20
0082 X4:
0082 .dbline 66
0082 ; UCSRA |= (1<<UDRE);
0082 5D9A sbi 0xb,5
0084 .dbline 67
0084 ; return 0;
0084 0027 clr R16
0086 1127 clr R17
0088 .dbline -2
0088 L17:
0088 .dbline 0 ; func end
0088 4991 ld R20,y+
008A 0895 ret
008C .dbsym r c 20 c
008C .dbend
008C .dbfunc e main _main fV
008C ; j -> <dead>
008C ; i -> <dead>
.even
008C _main::
008C .dbline -1
008C .dbline 71
008C ; }
008C ;
008C ; void main(void)
008C ; {
008C .dbline 73
008C ; uchar i,j;
008C ; uart0_init();
008C E1DF rcall _uart0_init
008E 05C0 rjmp L25
0090 L24:
0090 .dbline 75
0090 ; while(1)
0090 ; {
0090 .dbline 76
0090 ; delay_nms(500);
0090 04EF ldi R16,500
0092 11E0 ldi R17,1
0094 C3DF rcall _delay_nms
0096 .dbline 77
0096 ; sendchar(0xaa);
0096 0AEA ldi R16,170
0098 E6DF rcall _sendchar
009A .dbline 78
009A ; }
009A L25:
009A .dbline 74
009A FACF rjmp L24
009C X5:
009C .dbline -2
009C L23:
009C .dbline 0 ; func end
009C 0895 ret
009E .dbsym l j 1 c
009E .dbsym l i 1 c
009E .dbend
009E ; ;
009E ;
009E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -