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

📄 uart.lis

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module Uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\Uart.c
 0000                   .dbfunc e uart0_RX_Enable _uart0_RX_Enable fV
                        .even
 0000           _uart0_RX_Enable::
 0000                   .dbline -1
 0000                   .dbline 7
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include "Uart.h"
 0000           ; 
 0000           ; void uart0_RX_Enable(void)
 0000           ; {
 0000                   .dbline 8
 0000           ; UCSRB = 0xE8; //disable while setting baud rate
 0000 88EE              ldi R24,232
 0002 8AB9              out 0xa,R24
 0004                   .dbline -2
 0004           L1:
 0004                   .dbline 0 ; func end
 0004 0895              ret
 0006                   .dbend
 0006                   .dbfunc e uart0_RX_Disable _uart0_RX_Disable fV
                        .even
 0006           _uart0_RX_Disable::
 0006                   .dbline -1
 0006                   .dbline 11
 0006           ; }
 0006           ; void uart0_RX_Disable(void)
 0006           ; {
 0006                   .dbline 12
 0006           ; UCSRB = 0xF8; //disable while setting baud rate
 0006 88EF              ldi R24,248
 0008 8AB9              out 0xa,R24
 000A                   .dbline -2
 000A           L2:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e uart0_init _uart0_init fV
                        .even
 000C           _uart0_init::
 000C                   .dbline -1
 000C                   .dbline 16
 000C           ; }
 000C           ; 
 000C           ; void uart0_init(void)
 000C           ; {
 000C                   .dbline 17
 000C           ; UCSRB = 0x00; //disable while setting baud rate
 000C 2224              clr R2
 000E 2AB8              out 0xa,R2
 0010                   .dbline 18
 0010           ;  UCSRA = 0x00;
 0010 2BB8              out 0xb,R2
 0012                   .dbline 19
 0012           ;  UCSRC = 0x86;
 0012 86E8              ldi R24,134
 0014 80BD              out 0x20,R24
 0016                   .dbline 20
 0016           ;  UBRRL = 0x0B; //set baud rate lo
 0016 8BE0              ldi R24,11
 0018 89B9              out 0x9,R24
 001A                   .dbline 21
 001A           ;  UBRRH = 0x00; //set baud rate hi
 001A 20BC              out 0x20,R2
 001C                   .dbline 22
 001C           ;  UCSRB = 0xF8; 
 001C 88EF              ldi R24,248
 001E 8AB9              out 0xa,R24
 0020                   .dbline -2
 0020           L3:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 11C0              rjmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0022                   .dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\Uart.c
 0022                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 0022           ;       tempdata -> R20
                        .even
 0022           _uart0_rx_isr::
 0022 00D0              rcall push_lset
 0024 00D0              rcall push_gset1
 0026                   .dbline -1
 0026                   .dbline 26
 0026                   .dbline 27
 0026 4CB1              in R20,0xc
 0028                   .dbline 28
 0028 042F              mov R16,R20
 002A 8FD0              rcall _PutChar
 002C                   .dbline 31
 002C 00E0              ldi R16,<L5
 002E 10E0              ldi R17,>L5
 0030 0FD0              rcall _PutStr
 0032                   .dbline 32
 0032 00E0              ldi R16,<L6
 0034 10E0              ldi R17,>L6
 0036 0CD0              rcall _PutStr
 0038                   .dbline 34
 0038 4934              cpi R20,73
 003A 29F4              brne L7
 003C                   .dbline 35
 003C                   .dbline 35
 003C F894              cli
 003E                   .dbline 36
 003E 2224              clr R2
 0040 2AB8              out 0xa,R2
 0042                   .dbline 37
 0042 0C94000E          JMP 0x1C00
 0046                   .dbline 38
 0046           L7:
 0046                   .dbline -2
 0046           L4:
 0046 00D0              rcall pop_gset1
 0048 00D0              rcall pop_lset
 004A                   .dbline 0 ; func end
 004A 1895              reti
 004C                   .dbsym r tempdata 20 c
 004C                   .dbend
                        .area vector(rom, abs)
                        .org 24
 0018 26C0              rjmp _uart0_udre_isr
                        .area text(rom, con, rel)
 004C                   .dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\Uart.c
 004C                   .dbfunc e uart0_udre_isr _uart0_udre_isr fV
                        .even
 004C           _uart0_udre_isr::
 004C                   .dbline -1
 004C                   .dbline 43
 004C           ;  }
 004C           ; #pragma interrupt_handler uart0_rx_isr:12
 004C           ; void uart0_rx_isr(void)
 004C           ; { unsigned char tempdata;
 004C           ;    tempdata = UDR; /* read the received data */
 004C           ;    PutChar( tempdata);
 004C           ;  //  PutChar(0x0a);
 004C           ;  //  PutChar(0x0d);
 004C           ;   PutStr("富友勤 ATMEGA8 DEMO");
 004C           ;  PutStr("Start IAP");
 004C           ; 
 004C           ;    if(tempdata=='I')
 004C           ;       { CLI(); 
 004C           ;         UCSRB = 0x00; 
 004C           ;           asm("JMP 0x1C00") ;
 004C           ;       }
 004C           ;       }
 004C           ; 
 004C           ; #pragma interrupt_handler uart0_udre_isr:13
 004C           ; void uart0_udre_isr(void)
 004C           ; {
 004C                   .dbline -2
 004C           L9:
 004C                   .dbline 0 ; func end
 004C 1895              reti
 004E                   .dbend
                        .area vector(rom, abs)
                        .org 26
 001A 27C0              rjmp _uart0_tx_isr
                        .area text(rom, con, rel)
 004E                   .dbfile D:\Datasheet\Atmel\FROMJI~1\AVR_Demo\m8\SoftWare\Uart.c
 004E                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 004E           _uart0_tx_isr::
 004E                   .dbline -1
 004E                   .dbline 50
 004E           ;  //character transferred to shift register so UDR is now empty
 004E           ;  
 004E           ; }
 004E           ; 
 004E           ; #pragma interrupt_handler uart0_tx_isr:14
 004E           ; void uart0_tx_isr(void)
 004E           ; {
 004E                   .dbline -2
 004E           L10:
 004E                   .dbline 0 ; func end
 004E 1895              reti
 0050                   .dbend
 0050                   .dbfunc e PutStr _PutStr fI
 0050           ;              s -> R16,R17
                        .even
 0050           _PutStr::
 0050                   .dbline -1
 0050                   .dbline 55
 0050           ; }
 0050           ; 
 0050           ; 
 0050           ; int PutStr(char *s)
 0050           ; {
 0050 07C0              rjmp L13
 0052           X0:
 0052                   .dbline 57
 0052           ; while(*s)
 0052           ; {while ( !(UCSRA & (1<<UDRE)) )
 0052           L15:
 0052                   .dbline 58
 0052           L16:
 0052                   .dbline 57
 0052 5D9B              sbis 0xb,5
 0054 FECF              rjmp L15
 0056                   .dbline 59
 0056 F801              movw R30,R16
 0058 2080              ldd R2,z+0
 005A 2CB8              out 0xc,R2
 005C                   .dbline 61
 005C 0F5F              subi R16,255  ; offset = 1
 005E 1F4F              sbci R17,255
 0060                   .dbline 62
 0060           L13:
 0060                   .dbline 56
 0060 F801              movw R30,R16
 0062 2080              ldd R2,z+0
 0064 2220              tst R2
 0066 A9F7              brne L16
 0068           L18:
 0068                   .dbline 66
 0068           L19:
 0068                   .dbline 65
 0068           ;               ; /* wait for empty transmit buffer */
 0068           ; UDR = *s; /* start transmittion */
 0068           ; 
 0068           ; s++;
 0068           ; }
 0068           ; 
 0068           ; 
 0068           ; while ( !(UCSRA & (1<<UDRE)) )
 0068 5D9B              sbis 0xb,5
 006A FECF              rjmp L18
 006C                   .dbline 67
 006C           ;               ; /* wait for empty transmit buffer */
 006C           ; UDR = 0x0a; /* start transmittion */
 006C 8AE0              ldi R24,10
 006E 8CB9              out 0xc,R24
 0070                   .dbline 69
 0070           ; //while ( !(UCSRA & (1<<UDRE)) )
 0070           ;               ; /* wait for empty transmit buffer */
 0070                   .dbline 71
 0070           ; //UDR = 0x0d; /* start transmittion */
 0070           ; return 1;
 0070 01E0              ldi R16,1
 0072 10E0              ldi R17,0
 0074                   .dbline -2
 0074           L11:
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r s 16 pc
 0076                   .dbend
 0076                   .dbfunc e PutInt _PutInt fV
 0076           ;      tempdata1 -> R20
 0076           ;      tempdata5 -> R10
 0076           ;      tempdata4 -> y+3
 0076           ;      tempdata3 -> y+2
 0076           ;      tempdata2 -> y+1
 0076           ;      firstzero -> y+0
 0076           ;       tempdata -> R12
 0076           ;              i -> R14
 0076           ;        intdata -> y+14
                        .even
 0076           _PutInt::
 0076 1A93              st -y,r17
 0078 0A93              st -y,r16
 007A 00D0              rcall push_gset5
 007C 2497              sbiw R28,4
 007E                   .dbline -1
 007E                   .dbline 74
 007E           ; }
 007E           ; void PutInt(unsigned int intdata)
 007E           ; {
 007E                   .dbline 76

⌨️ 快捷键说明

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