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

📄 usart使用.lis

📁 使用mega8的USART与计算机通信
💻 LIS
字号:
                        .module USART使用.c
                        .area data(ram, con, rel)
 0000           _f::
 0000                   .blkb 2
                        .area idata
 0000 0102              .byte 1,2
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0304              .byte 3,4
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 0500              .byte 5,0
                        .area data(ram, con, rel)
 0006                   .dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
 0006                   .dbsym e f _f A[6:6]c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 10
 0000           ; //ICC-AVR application builder : 1980-1-4 4:49:58
 0000           ; // Target : M8
 0000           ; // Crystal: 1.0000Mhz
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; unsigned char f[6]={0x01,0x02,0x03,0x04,0x05,0x00};
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 11
 0000           ;  PORTB = 0xFF;
 0000 8FEF              ldi R24,255
 0002 88BB              out 0x18,R24
 0004                   .dbline 12
 0004           ;  DDRB  = 0x00;
 0004 2224              clr R2
 0006 27BA              out 0x17,R2
 0008                   .dbline 13
 0008           ;  PORTC = 0x7F; //m103 output only
 0008 8FE7              ldi R24,127
 000A 85BB              out 0x15,R24
 000C                   .dbline 14
 000C           ;  DDRC  = 0x00;
 000C 24BA              out 0x14,R2
 000E                   .dbline 15
 000E           ;  PORTD = 0xFF;
 000E 8FEF              ldi R24,255
 0010 82BB              out 0x12,R24
 0012                   .dbline 16
 0012           ;  DDRD  = 0x02;
 0012 82E0              ldi R24,2
 0014 81BB              out 0x11,R24
 0016                   .dbline -2
 0016                   .dbline 17
 0016           ; }
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e uart0_init _uart0_init fV
                        .even
 0018           _uart0_init::
 0018                   .dbline -1
 0018                   .dbline 25
 0018           ; 
 0018           ; //UART0 initialisation
 0018           ; // desired baud rate: 9600
 0018           ; // actual: baud rate:9615 (0.2%)
 0018           ; // char size: 8 bit
 0018           ; // parity: Disabled
 0018           ; void uart0_init(void)
 0018           ; {
 0018                   .dbline 26
 0018           ;  UCSRB = 0x00; //disable while setting baud rate
 0018 2224              clr R2
 001A 2AB8              out 0xa,R2
 001C                   .dbline 27
 001C           ;  UCSRA = 0x02;//倍速
 001C 82E0              ldi R24,2
 001E 8BB9              out 0xb,R24
 0020                   .dbline 28
 0020           ;  UCSRC = 0x86;//写UCSRAC,XCK下降沿采样,异步
 0020 86E8              ldi R24,134
 0022 80BD              out 0x20,R24
 0024                   .dbline 29
 0024           ;  UBRRL = 0x0C; //set baud rate lo
 0024 8CE0              ldi R24,12
 0026 89B9              out 0x9,R24
 0028                   .dbline 30
 0028           ;  UBRRH = 0x00; //set baud rate hi
 0028 20BC              out 0x20,R2
 002A                   .dbline 31
 002A           ;  UCSRB = 0x98;//接收结束中断使能
 002A 88E9              ldi R24,152
 002C 8AB9              out 0xa,R24
 002E                   .dbline -2
 002E                   .dbline 32
 002E           ;  }
 002E           L2:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
 0030                   .dbfunc e put_char _put_char fV
 0030           ;              d -> R16
                        .even
 0030           _put_char::
 0030                   .dbline -1
 0030                   .dbline 41
 0030           ;  /*字符输入函数*/         
 0030           ; /*unsigned char getchar(void) 
 0030           ; { 
 0030           ;        while(!(UCSRA& (1<<RXC))); 
 0030           ;        return UDR; 
 0030           ; } 
 0030           ; *///UART0 发送一个字节
 0030           ; void put_char(unsigned char d)       
 0030           ; {/* 等待发送缓冲器为空 */
 0030           L4:
 0030                   .dbline 42
 0030           L5:
 0030                   .dbline 42
 0030           ; while ( !( UCSRA & (1<<UDRE)));
 0030 5D9B              sbis 0xb,5
 0032 FECF              rjmp L4
 0034                   .dbline 44
 0034           ; /* 将数据放入缓冲器,发送数据 */
 0034           ;   UDR=d;
 0034 0CB9              out 0xc,R16
 0036                   .dbline -2
 0036                   .dbline 47
 0036           ;   //while(!(UCSRA&0x40));        //等待TXC置位
 0036           ;   //UCSRA|=0x40;                 //写1清零
 0036           ; }
 0036           L3:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbsym r d 16 c
 0038                   .dbend
 0038                   .dbfunc e put_s _put_s fV
 0038           ;              s -> R20,R21
                        .even
 0038           _put_s::
 0038 00D0              rcall push_gset1
 003A A801              movw R20,R16
 003C                   .dbline -1
 003C                   .dbline 50
 003C           ;  //字符输入函数
 003C           ; void put_s(unsigned char *s) 
 003C           ; {  
 003C 05C0              rjmp L9
 003E           L8:
 003E                   .dbline 52
 003E                   .dbline 53
 003E FA01              movw R30,R20
 0040 0081              ldd R16,z+0
 0042 F6DF              rcall _put_char
 0044                   .dbline 54
 0044 4F5F              subi R20,255  ; offset = 1
 0046 5F4F              sbci R21,255
 0048                   .dbline 55
 0048           L9:
 0048                   .dbline 51
 0048           ;       while (*s) 
 0048 FA01              movw R30,R20
 004A 2080              ldd R2,z+0
 004C 2220              tst R2
 004E B9F7              brne L8
 0050                   .dbline -2
 0050                   .dbline 56
 0050           ;       { 
 0050           ;            put_char(*s); 
 0050           ;            s++; 
 0050           ;        }         
 0050           ; }
 0050           L7:
 0050 00D0              rcall pop_gset1
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r s 20 pc
 0054                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 2AC0              rjmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0054                   .dbfile C:\DOCUME~1\Administrator\桌面\maga8练习\USART\USART使用.c
 0054                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
                        .even
 0054           _uart0_rx_isr::
 0054 00D0              rcall push_lset
 0056                   .dbline -1
 0056                   .dbline 60
 0056           ; 
 0056           ; #pragma interrupt_handler uart0_rx_isr:12
 0056           ; void uart0_rx_isr(void)//接收中断RXC置1时中断
 0056           ; {
 0056                   .dbline 61
 0056           ; put_char(UDR);//接收完发送短信
 0056 0CB1              in R16,0xc
 0058 EBDF              rcall _put_char
 005A                   .dbline -2
 005A                   .dbline 64
 005A           ;  
 005A           ;  //uart has received a character in UDR
 005A           ; }
 005A           L11:
 005A 00D0              rcall pop_lset
 005C                   .dbline 0 ; func end
 005C 1895              reti
 005E                   .dbend
 005E                   .dbfunc e init_devices _init_devices fV
                        .even
 005E           _init_devices::
 005E                   .dbline -1
 005E                   .dbline 68
 005E           ; 
 005E           ; //call this routine to initialise all peripherals
 005E           ; void init_devices(void)
 005E           ; {
 005E                   .dbline 70
 005E           ;  //stop errant interrupts until set up
 005E           ;  CLI(); //disable all interrupts
 005E F894              cli
 0060                   .dbline 71
 0060           ;  port_init();
 0060 CFDF              rcall _port_init
 0062                   .dbline 72
 0062           ;  uart0_init();
 0062 DADF              rcall _uart0_init
 0064                   .dbline 74
 0064           ; 
 0064           ;  MCUCR = 0x00;
 0064 2224              clr R2
 0066 25BE              out 0x35,R2
 0068                   .dbline 75
 0068           ;  GICR  = 0x00;
 0068 2BBE              out 0x3b,R2
 006A                   .dbline 76
 006A           ;  TIMSK = 0x00; //timer interrupt sources
 006A 29BE              out 0x39,R2
 006C                   .dbline 77
 006C           ;  SEI(); //re-enable interrupts
 006C 7894              sei
 006E                   .dbline -2
 006E                   .dbline 79
 006E           ;  //all peripherals are now initialised
 006E           ; }
 006E           L12:
 006E                   .dbline 0 ; func end
 006E 0895              ret
 0070                   .dbend
 0070                   .dbfunc e delay_us _delay_us fV
 0070           ;           time -> R16,R17
                        .even
 0070           _delay_us::
 0070                   .dbline -1
 0070                   .dbline 81
 0070           ; void delay_us(int time)
 0070           ;        {     
 0070           L14:
 0070                   .dbline 83
 0070           ;         do
 0070           ;               {
 0070                   .dbline 84
 0070           ;                time--;
 0070 0150              subi R16,1
 0072 1040              sbci R17,0
 0074                   .dbline 85
 0074           ;               }       
 0074           L15:
 0074                   .dbline 86
 0074           ;         while (time>1);
 0074 81E0              ldi R24,1
 0076 90E0              ldi R25,0
 0078 8017              cp R24,R16
 007A 9107              cpc R25,R17
 007C CCF3              brlt L14
 007E                   .dbline -2
 007E                   .dbline 87
 007E           ;        }         
 007E           L13:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbsym r time 16 I
 0080                   .dbend
 0080                   .dbfunc e delay_ms _delay_ms fV
 0080           ;           time -> R20,R21
                        .even
 0080           _delay_ms::
 0080 00D0              rcall push_gset1
 0082 A801              movw R20,R16
 0084                   .dbline -1
 0084                   .dbline 89
 0084           ; void delay_ms(unsigned int time)
 0084           ;        {
 0084 05C0              rjmp L19
 0086           L18:
 0086                   .dbline 91
 0086                   .dbline 92
 0086 0EE1              ldi R16,30
 0088 10E0              ldi R17,0
 008A F2DF              rcall _delay_us
 008C                   .dbline 93
 008C 4150              subi R20,1
 008E 5040              sbci R21,0
 0090                   .dbline 94
 0090           L19:
 0090                   .dbline 90
 0090           ;          while(time!=0)
 0090 4030              cpi R20,0
 0092 4507              cpc R20,R21
 0094 C1F7              brne L18
 0096           X0:
 0096                   .dbline -2
 0096                   .dbline 95
 0096           ;                 {             
 0096           ;                  delay_us(30);
 0096           ;                  time--;
 0096           ;                 }
 0096           ;        } 
 0096           L17:
 0096 00D0              rcall pop_gset1
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbsym r time 20 i
 009A                   .dbend
 009A                   .dbfunc e main _main fV
 009A           ;              i -> R20,R21
                        .even
 009A           _main::
 009A                   .dbline -1
 009A                   .dbline 98
 009A           ; 
 009A           ; void main()
 009A           ; {int i;
 009A                   .dbline 99
 009A           ;  init_devices();
 009A E1DF              rcall _init_devices
 009C 12C0              rjmp L23
 009E           L22:
 009E                   .dbline 105
 009E           ;  /*put_s("hello donkey!");
 009E           ;  put_char(0x0a);
 009E           ;  put_char(0x0d);
 009E           ;  put_s("i love you");*/
 009E           ;  while(1)
 009E           ;  {
 009E                   .dbline 106
 009E           ;  for(i=0;i<6;i++)
 009E 4427              clr R20
 00A0 5527              clr R21
 00A2           L25:
 00A2                   .dbline 107
 00A2                   .dbline 108
 00A2 80E0              ldi R24,<_f
 00A4 90E0              ldi R25,>_f
 00A6 FA01              movw R30,R20
 00A8 E80F              add R30,R24
 00AA F91F              adc R31,R25
 00AC 0081              ldd R16,z+0
 00AE C0DF              rcall _put_char
 00B0                   .dbline 109
 00B0           L26:
 00B0                   .dbline 106
 00B0 4F5F              subi R20,255  ; offset = 1
 00B2 5F4F              sbci R21,255
 00B4                   .dbline 106
 00B4 4630              cpi R20,6
 00B6 E0E0              ldi R30,0
 00B8 5E07              cpc R21,R30
 00BA 9CF3              brlt L25
 00BC                   .dbline 111
 00BC 04E6              ldi R16,100
 00BE 10E0              ldi R17,0
 00C0 DFDF              rcall _delay_ms
 00C2                   .dbline 112
 00C2           L23:
 00C2                   .dbline 104
 00C2 EDCF              rjmp L22
 00C4           X1:
 00C4                   .dbline -2
 00C4                   .dbline 113
 00C4           ;  {
 00C4           ;  put_char(f[i]);
 00C4           ;  }//显示数字时,调proteus里面黑屏右键hex display mode
 00C4           ;  //while(1);
 00C4           ;  delay_ms(100);
 00C4           ;  }
 00C4           ;  }
 00C4           L21:
 00C4                   .dbline 0 ; func end
 00C4 0895              ret
 00C6                   .dbsym r i 20 I
 00C6                   .dbend

⌨️ 快捷键说明

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