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

📄 myuart.lis

📁 atmega128单片机串口调试程序
💻 LIS
字号:
                        .module myuart.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\全物理仿真\mega128\uart_0\myuart.c
 0000                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0000           _uart0_init::
 0000                   .dbline -1
 0000                   .dbline 8
 0000           ; #include"includes.h"
 0000           ; 
 0000           ; /*USART initiate*/
 0000           ; U8 rx_flag;   //接收数据标志
 0000           ; U8 rx_buff;   //接收数据缓存区
 0000           ; 
 0000           ; void uart0_init(void)
 0000           ; {
 0000                   .dbline 9
 0000           ;     UBRR0H = BAUD_H;     
 0000 2224              clr R2
 0002 20929000          sts 144,R2
 0006                   .dbline 10
 0006           ;     UBRR0L = BAUD_L;            //Set baud rate 
 0006 83E2              ldi R24,35
 0008 89B9              out 0x9,R24
 000A                   .dbline 11
 000A           ;     UCSR0C = 0x0E;            //Set frame format: 8data, 2stop bit 
 000A 8EE0              ldi R24,14
 000C 80939500          sts 149,R24
 0010                   .dbline 12
 0010           ;     UCSR0B = ((1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0));   //Enable Receiver and Transmitter 
 0010 88E9              ldi R24,152
 0012 8AB9              out 0xa,R24
 0014                   .dbline -2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbend
                        .area vector(rom, abs)
                        .org 72
 0048 0C940B00          jmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0016                   .dbfile F:\全物理仿真\mega128\uart_0\myuart.c
 0016                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
                        .even
 0016           _uart0_rx_isr::
 0016 2A92              st -y,R2
 0018 2FB6              in R2,0x3f
 001A 2A92              st -y,R2
 001C                   .dbline -1
 001C                   .dbline 20
 001C           ;                               //1:接受中断
 001C           ;                               //0:关闭中断
 001C           ; }
 001C           ; 
 001C           ; //接收中断
 001C           ; #pragma interrupt_handler uart0_rx_isr:19
 001C           ; void uart0_rx_isr(void)
 001C           ; {
 001C                   .dbline 22
 001C           ;     //uart has received a character in UDR
 001C           ;     PORTA=UDR0; //接收数据并输出到PA
 001C 2CB0              in R2,0xc
 001E 2BBA              out 0x1b,R2
 0020                   .dbline -2
 0020           L2:
 0020 2990              ld R2,y+
 0022 2FBE              out 0x3f,R2
 0024 2990              ld R2,y+
 0026                   .dbline 0 ; func end
 0026 1895              reti
 0028                   .dbend
                        .area vector(rom, abs)
                        .org 80
 0050 0C941400          jmp _uart0_tx_isr
                        .area text(rom, con, rel)
 0028                   .dbfile F:\全物理仿真\mega128\uart_0\myuart.c
 0028                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 0028           _uart0_tx_isr::
 0028                   .dbline -1
 0028                   .dbline 28
 0028           ; }
 0028           ; 
 0028           ; //发送中断
 0028           ; #pragma interrupt_handler uart0_tx_isr:21
 0028           ; void uart0_tx_isr(void)
 0028           ; {
 0028                   .dbline -2
 0028           L3:
 0028                   .dbline 0 ; func end
 0028 1895              reti
 002A                   .dbend
                        .area vector(rom, abs)
                        .org 76
 004C 0C941500          jmp _uart0_data_isr
                        .area text(rom, con, rel)
 002A                   .dbfile F:\全物理仿真\mega128\uart_0\myuart.c
 002A                   .dbfunc e uart0_data_isr _uart0_data_isr fV
                        .even
 002A           _uart0_data_isr::
 002A                   .dbline -1
 002A                   .dbline 34
 002A           ; }
 002A           ; 
 002A           ; //USART0 数据寄存器空中断
 002A           ; #pragma interrupt_handler uart0_data_isr:20
 002A           ; void uart0_data_isr(void)
 002A           ; {
 002A                   .dbline -2
 002A           L4:
 002A                   .dbline 0 ; func end
 002A 1895              reti
 002C                   .dbend
 002C                   .dbfunc e uart0_putchar _uart0_putchar fV
 002C           ;              c -> R16
                        .even
 002C           _uart0_putchar::
 002C                   .dbline -1
 002C                   .dbline 43
 002C           ; }
 002C           ; 
 002C           ; //call this routine to initialize all peripherals
 002C           ; 
 002C           ; 
 002C           ; 
 002C           ; //从RS232发送一个字节 
 002C           ; void uart0_putchar(char c)
 002C           ; { 
 002C           L6:
 002C                   .dbline 44
 002C           L7:
 002C                   .dbline 44
 002C           ;     while(!(UCSR0A & 0x20)); 
 002C 5D9B              sbis 0xb,5
 002E FECF              rjmp L6
 0030                   .dbline 45
 0030           ;     UDR0 = c; 
 0030 0CB9              out 0xc,R16
 0032                   .dbline -2
 0032           L5:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r c 16 c
 0034                   .dbend
 0034                   .dbfunc e uart0_putstr _uart0_putstr fV
 0034           ;            str -> R20,R21
                        .even
 0034           _uart0_putstr::
 0034 0E940000          xcall push_gset1
 0038 A801              movw R20,R16
 003A                   .dbline -1
 003A                   .dbline 50
 003A           ; } 
 003A           ; 
 003A           ; //输出一个字符串
 003A           ; void uart0_putstr(char* str)
 003A           ; {
 003A 05C0              xjmp L11
 003C           L10:
 003C                   .dbline 52
 003C                   .dbline 53
 003C FA01              movw R30,R20
 003E 0081              ldd R16,z+0
 0040 F5DF              xcall _uart0_putchar
 0042                   .dbline 54
 0042 4F5F              subi R20,255  ; offset = 1
 0044 5F4F              sbci R21,255
 0046                   .dbline 55
 0046           L11:
 0046                   .dbline 51
 0046           ;       while(*str)
 0046 FA01              movw R30,R20
 0048 2080              ldd R2,z+0
 004A 2220              tst R2
 004C B9F7              brne L10
 004E                   .dbline -2
 004E           L9:
 004E 0E940000          xcall pop_gset1
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r str 20 pc
 0054                   .dbend
 0054                   .dbfunc e uart0_getchar _uart0_getchar fI
 0054           ;            res -> R16
 0054           ;         status -> R18
                        .even
 0054           _uart0_getchar::
 0054                   .dbline -1
 0054                   .dbline 60
 0054           ;       {
 0054           ;               uart0_putchar(*str);
 0054           ;               str++;
 0054           ;       }
 0054           ; }
 0054           ; 
 0054           ; //从RS232接收一个字节 
 0054           ; int uart0_getchar(void) 
 0054           ; { 
 0054                   .dbline 62
 0054           ;     unsigned char status,res; 
 0054           ;     if(!(UCSR0A & 0x80)) return -1;        //no data to be received 
 0054 5F99              sbic 0xb,7
 0056 03C0              rjmp L14
 0058                   .dbline 62
 0058 0FEF              ldi R16,-1
 005A 1FEF              ldi R17,-1
 005C 09C0              xjmp L13
 005E           L14:
 005E                   .dbline 63
 005E           ;     status = UCSR0A; 
 005E 2BB1              in R18,0xb
 0060                   .dbline 64
 0060           ;     res = UDR0; 
 0060 0CB1              in R16,0xc
 0062                   .dbline 65
 0062           ;     if (status & 0x1c) return -1;        // If error, return -1 
 0062 822F              mov R24,R18
 0064 8C71              andi R24,28
 0066 19F0              breq L16
 0068                   .dbline 65
 0068 0FEF              ldi R16,-1
 006A 1FEF              ldi R17,-1
 006C 01C0              xjmp L13
 006E           L16:
 006E                   .dbline 66
 006E           ;     return res; 
 006E 1127              clr R17
 0070                   .dbline -2
 0070           L13:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbsym r res 16 c
 0072                   .dbsym r status 18 c
 0072                   .dbend
 0072                   .dbfunc e uart0_waitchar _uart0_waitchar fc
 0072           ;              c -> R20,R21
                        .even
 0072           _uart0_waitchar::
 0072 0E940000          xcall push_gset1
 0076                   .dbline -1
 0076                   .dbline 70
 0076           ; } 
 0076           ; 
 0076           ; char uart0_waitchar(void) 
 0076           ; { 
 0076           L19:
 0076                   .dbline 72
 0076           L20:
 0076                   .dbline 72
 0076           ;     int c; 
 0076           ;     while((c=uart0_getchar())==-1); 
 0076 EEDF              xcall _uart0_getchar
 0078 A801              movw R20,R16
 007A 4F3F              cpi R20,255
 007C EFEF              ldi R30,255
 007E 5E07              cpc R21,R30
 0080 D1F3              breq L19
 0082                   .dbline 73
 0082           ;     return (char)c; 
 0082                   .dbline -2
 0082           L18:
 0082 0E940000          xcall pop_gset1
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r c 20 I
 0088                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\全物理仿真\mega128\uart_0\myuart.c
 0000           _rx_buff::
 0000                   .blkb 1
 0001                   .dbsym e rx_buff _rx_buff c
 0001           _rx_flag::
 0001                   .blkb 1
 0002                   .dbsym e rx_flag _rx_flag c

⌨️ 快捷键说明

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