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

📄 usart.lis

📁 M16控制,从键盘输入字符,当输入字符达到10个的时候,终端和LCD都显示所接收到的字符
💻 LIS
字号:
                        .module usart.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\新建文件夹\usart_icc\cfile\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           ;     // 通信参数: 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 4A93              st -y,R20
 0018 402F              mov R20,R16
 001A                   .dbline -1
 001A                   .dbline 20
 001A           ;     //sei();
 001A           ; }
 001A           ; 
 001A           ; int PutChar(char c)
 001A           ; {
 001A                   .dbline 21
 001A           ;     if(c == '\n')
 001A 4A30              cpi R20,10
 001C 11F4              brne L3
 001E           X0:
 001E                   .dbline 22
 001E           ;     {
 001E                   .dbline 23
 001E           ;         PutChar('\r');
 001E 0DE0              ldi R16,13
 0020 FADF              xcall _PutChar
 0022                   .dbline 24
 0022           ;     }
 0022           L3:
 0022                   .dbline 25
 0022           ;     UDR = c;
 0022 4CB9              out 0xc,R20
 0024           L5:
 0024                   .dbline 26
 0024           ;     while(!(UCSRA &(1<<UDRE)));
 0024           L6:
 0024                   .dbline 26
 0024 5D9B              sbis 0xb,5
 0026 FECF              rjmp L5
 0028           X1:
 0028                   .dbline 27
 0028           ;     UCSRA |= (1<<UDRE);
 0028 5D9A              sbi 0xb,5
 002A                   .dbline 28
 002A           ;     return 0;
 002A 0027              clr R16
 002C 1127              clr R17
 002E                   .dbline -2
 002E           L2:
 002E                   .dbline 0 ; func end
 002E 4991              ld R20,y+
 0030 0895              ret
 0032                   .dbsym r c 20 c
 0032                   .dbend
 0032                   .dbfunc e SendNbyte _SendNbyte fV
 0032           ;              w -> R10
 0032           ;              L -> R12
 0032           ;              p -> R14,R15
                        .even
 0032           _SendNbyte::
 0032 0E940000          xcall push_xgset00FC
 0036 C22E              mov R12,R18
 0038 7801              movw R14,R16
 003A                   .dbline -1
 003A                   .dbline 33
 003A           ; }
 003A           ; 
 003A           ; 
 003A           ; void SendNbyte(unsigned char *p,unsigned char L)
 003A           ; {
 003A                   .dbline 35
 003A           ;     unsigned char w;
 003A           ;     for(w=0;w<L;w++)
 003A AA24              clr R10
 003C 07C0              xjmp L12
 003E           L9:
 003E                   .dbline 36
 003E           ;     {
 003E                   .dbline 40
 003E           ;        // UDR = *(p+w);
 003E           ;        // while(!(UCSRA &(1<<UDRE)));
 003E           ;         //UCSRA |= (1<<UDRE);
 003E           ;         PutChar(*(p+w));
 003E EA2D              mov R30,R10
 0040 FF27              clr R31
 0042 EE0D              add R30,R14
 0044 FF1D              adc R31,R15
 0046 0081              ldd R16,z+0
 0048 E6DF              xcall _PutChar
 004A                   .dbline 41
 004A           ;     }
 004A           L10:
 004A                   .dbline 35
 004A A394              inc R10
 004C           L12:
 004C                   .dbline 35
 004C AC14              cp R10,R12
 004E B8F3              brlo L9
 0050           X2:
 0050                   .dbline -2
 0050           L8:
 0050                   .dbline 0 ; func end
 0050 0C940000          xjmp pop_xgset00FC
 0054                   .dbsym r w 10 c
 0054                   .dbsym r L 12 c
 0054                   .dbsym r p 14 pc
 0054                   .dbend
 0054                   .dbfunc e PutStr _PutStr fV
 0054           ;            Str -> R20,R21
                        .even
 0054           _PutStr::
 0054 4A93              st -y,R20
 0056 5A93              st -y,R21
 0058 A801              movw R20,R16
 005A                   .dbline -1
 005A                   .dbline 46
 005A           ;     
 005A           ; }
 005A           ; 
 005A           ; void PutStr(unsigned char *Str)
 005A           ; {
 005A 05C0              xjmp L15
 005C           L14:
 005C                   .dbline 48
 005C           ;     while(*Str != '\0')
 005C           ;     {
 005C                   .dbline 49
 005C           ;         PutChar(*Str);
 005C FA01              movw R30,R20
 005E 0081              ldd R16,z+0
 0060 DADF              xcall _PutChar
 0062                   .dbline 50
 0062           ;         Str++;
 0062 4F5F              subi R20,255  ; offset = 1
 0064 5F4F              sbci R21,255
 0066                   .dbline 51
 0066           ;     }
 0066           L15:
 0066                   .dbline 47
 0066 FA01              movw R30,R20
 0068 2080              ldd R2,z+0
 006A 2220              tst R2
 006C B9F7              brne L14
 006E           X3:
 006E                   .dbline -2
 006E           L13:
 006E                   .dbline 0 ; func end
 006E 5991              ld R21,y+
 0070 4991              ld R20,y+
 0072 0895              ret
 0074                   .dbsym r Str 20 pc
 0074                   .dbend
 0074           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -