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

📄 usart.lis

📁 avr icc开发的avr单片机与pc机vb通讯控制程序
💻 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 + -