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

📄 uart.lis

📁 AtMega169芯片连接RTC的测试程序
💻 LIS
字号:
                        .module uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\TDdownload\zxy\169demo\169RTC\uart.c
 0000                   .dbfunc e putchar _putchar fV
 0000           ;              c -> R16
                        .even
 0000           _putchar::
 0000                   .dbline -1
 0000                   .dbline 7
 0000           ; #include <iom169v.h>
 0000           ; #include <macros.h>
 0000           ; #define fosc 1000000 //晶振1MHZ
 0000           ; #define baud 19200     //波特率
 0000           ; /*            字符输出函数             */
 0000           ; void putchar(unsigned char c)
 0000           ;       {        
 0000           L2:
 0000                   .dbline 8
 0000           ;      while (!(UCSRA&(1<<UDRE)));
 0000           L3:
 0000                   .dbline 8
 0000 2090C000          lds R2,192
 0004 25FE              sbrs R2,5
 0006 FCCF              rjmp L2
 0008           X0:
 0008                   .dbline 9
 0008           ;        UDR=c;    
 0008 0093C600          sts 198,R16
 000C                   .dbline -2
 000C           L1:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbsym r c 16 c
 000E                   .dbend
 000E                   .dbfunc e getchar _getchar fc
                        .even
 000E           _getchar::
 000E                   .dbline -1
 000E                   .dbline 13
 000E           ;       }
 000E           ; /*            字符输入函数             */     
 000E           ; unsigned char getchar(void)
 000E           ;       {
 000E           L6:
 000E                   .dbline 14
 000E           ;        while(!(UCSRA&(1<<RXC)));
 000E           L7:
 000E                   .dbline 14
 000E 2090C000          lds R2,192
 0012 27FE              sbrs R2,7
 0014 FCCF              rjmp L6
 0016           X1:
 0016                   .dbline 15
 0016           ;      return UDR;
 0016 0091C600          lds R16,198
 001A                   .dbline -2
 001A           L5:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbend
 001C                   .dbfunc e puts _puts fV
 001C           ;              s -> R20,R21
                        .even
 001C           _puts::
 001C 4A93              st -y,R20
 001E 5A93              st -y,R21
 0020 A801              movw R20,R16
 0022                   .dbline -1
 0022                   .dbline 19
 0022           ;       }               
 0022           ; /*                    字符串输出函数           */     
 0022           ; void puts(char *s)
 0022           ;       {
 0022 05C0              xjmp L11
 0024           L10:
 0024                   .dbline 21
 0024           ;       while (*s)
 0024           ;               {
 0024                   .dbline 22
 0024           ;               putchar(*s);
 0024 FA01              movw R30,R20
 0026 0081              ldd R16,z+0
 0028 EBDF              xcall _putchar
 002A                   .dbline 23
 002A           ;               s++;
 002A 4F5F              subi R20,255  ; offset = 1
 002C 5F4F              sbci R21,255
 002E                   .dbline 24
 002E           ;               }       
 002E           L11:
 002E                   .dbline 20
 002E FA01              movw R30,R20
 0030 2080              ldd R2,z+0
 0032 2220              tst R2
 0034 B9F7              brne L10
 0036           X2:
 0036                   .dbline 25
 0036           ;     putchar(0x0a);//回车换行
 0036 0AE0              ldi R16,10
 0038 E3DF              xcall _putchar
 003A                   .dbline 26
 003A           ;       putchar(0x0d);
 003A 0DE0              ldi R16,13
 003C E1DF              xcall _putchar
 003E                   .dbline -2
 003E           L9:
 003E                   .dbline 0 ; func end
 003E 5991              ld R21,y+
 0040 4991              ld R20,y+
 0042 0895              ret
 0044                   .dbsym r s 20 pc
 0044                   .dbend
 0044                   .dbfunc e uart_init _uart_init fV
                        .even
 0044           _uart_init::
 0044                   .dbline -1
 0044                   .dbline 30
 0044           ;       }
 0044           ; /*                    UART初始化                              */      
 0044           ; void uart_init(void)
 0044           ; {
 0044                   .dbline 31
 0044           ;  UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
 0044 88E9              ldi R24,152
 0046 8093C100          sts 193,R24
 004A                   .dbline 32
 004A           ;  UBRRL=(fosc/16/(baud+1))%256;
 004A 83E0              ldi R24,3
 004C 8093C400          sts 196,R24
 0050                   .dbline 33
 0050           ;  UBRRH=(fosc/16/(baud+1))/256;
 0050 2224              clr R2
 0052 2092C500          sts 197,R2
 0056                   .dbline 34
 0056           ;  UCSRC=(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
 0056 86E0              ldi R24,6
 0058 8093C200          sts 194,R24
 005C                   .dbline -2
 005C           L13:
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbend
 005E           ; }

⌨️ 快捷键说明

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