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

📄 usart2.lis

📁 AVR单片机串口异步通信,通过电脑串口助手使电脑和单片机运行简单的数据通讯
💻 LIS
字号:
                        .module usart2.c
                        .area vector(rom, abs)
                        .org 44
 002C 0C940000          jmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0000                   .dbfile F:\LX\USART\usart2.c
 0000                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 0000           ;            dat -> R20
                        .even
 0000           _uart0_rx_isr::
 0000 0E940000          xcall push_lset
 0004 0E940000          xcall push_gset1
 0008                   .dbline -1
 0008                   .dbline 12
 0008                   .dbline 13
 0008 5F9B              sbis 0xb,7
 000A 03C0              rjmp L2
 000C                   .dbline 13
 000C                   .dbline 14
 000C 4CB1              in R20,0xc
 000E                   .dbline 15
 000E 042F              mov R16,R20
 0010 2AD0              xcall _USART_Transmit
 0012                   .dbline 16
 0012           L2:
 0012                   .dbline -2
 0012           L1:
 0012 0E940000          xcall pop_gset1
 0016 0E940000          xcall pop_lset
 001A                   .dbline 0 ; func end
 001A 1895              reti
 001C                   .dbsym r dat 20 c
 001C                   .dbend
 001C                   .dbfunc e main _main fV
 001C           ;            rec -> <dead>
                        .even
 001C           _main::
 001C                   .dbline -1
 001C                   .dbline 20
 001C           ; #include<iom16v.h>
 001C           ; #include <macros.h>
 001C           ; #define key (PIND&0x04)          //定义按键PD2
 001C           ; /*****************函数原型声明************************/
 001C           ; void USART_Init(unsigned int baud);     
 001C           ; void USART_Transmit(unsigned char dat);
 001C           ; void delayms(unsigned int t);
 001C           ; unsigned char USART_Receive(void);
 001C           ; /******************接收中断函数****************************/
 001C           ; #pragma interrupt_handler uart0_rx_isr:12
 001C           ; void uart0_rx_isr(void)
 001C           ; { unsigned char dat;
 001C           ;    if(UCSRA&(1<<RXC)){         //把要接收的数据全部接收
 001C           ;    dat=UDR; 
 001C           ;    USART_Transmit(dat);
 001C           ;    }
 001C           ; }     
 001C           ; /*****************************************************/
 001C           ; void main(void)
 001C           ; { unsigned char rec;
 001C                   .dbline 21
 001C           ;     PORTB=0xff;
 001C 8FEF              ldi R24,255
 001E 88BB              out 0x18,R24
 0020                   .dbline 22
 0020           ;     DDRB=0xff;
 0020 87BB              out 0x17,R24
 0022                   .dbline 23
 0022           ;     PORTD=0x07;
 0022 87E0              ldi R24,7
 0024 82BB              out 0x12,R24
 0026                   .dbline 24
 0026           ;       DDRD=0x02;
 0026 82E0              ldi R24,2
 0028 81BB              out 0x11,R24
 002A                   .dbline 25
 002A           ;       UCSRA=0x00;
 002A 2224              clr R2
 002C 2BB8              out 0xb,R2
 002E                   .dbline 26
 002E           ;     USART_Init(71);            //波特为9600,外部晶振11.0592
 002E 07E4              ldi R16,71
 0030 10E0              ldi R17,0
 0032 0FD0              xcall _USART_Init
 0034                   .dbline 27
 0034           ;       SEI();
 0034 7894              sei
 0036 0BC0              xjmp L6
 0038           L5:
 0038                   .dbline 29
 0038           ;     while(1)
 0038           ;       {       
 0038                   .dbline 30
 0038           ;          if(key==0)
 0038 8299              sbic 0x10,2
 003A 09C0              rjmp L8
 003C                   .dbline 31
 003C           ;            {                     //按键按下发送一字节数据
 003C                   .dbline 32
 003C           ;            delayms(10);
 003C 0AE0              ldi R16,10
 003E 10E0              ldi R17,0
 0040 1AD0              xcall _delayms
 0042                   .dbline 33
 0042           ;                if(key==0){
 0042 8299              sbic 0x10,2
 0044 04C0              rjmp L10
 0046                   .dbline 33
 0046           L12:
 0046                   .dbline 34
 0046           L13:
 0046                   .dbline 34
 0046           ;                while(!key);
 0046 829B              sbis 0x10,2
 0048 FECF              rjmp L12
 004A                   .dbline 35
 004A           ;                USART_Transmit(0x22);
 004A 02E2              ldi R16,34
 004C 0CD0              xcall _USART_Transmit
 004E                   .dbline 36
 004E           ;                          }
 004E           L10:
 004E                   .dbline 37
 004E           ;            }
 004E           L8:
 004E                   .dbline 38
 004E           L6:
 004E                   .dbline 28
 004E F4CF              xjmp L5
 0050           X0:
 0050                   .dbline -2
 0050           L4:
 0050                   .dbline 0 ; func end
 0050 0895              ret
 0052                   .dbsym l rec 1 c
 0052                   .dbend
 0052                   .dbfunc e USART_Init _USART_Init fV
 0052           ;           baud -> R16,R17
                        .even
 0052           _USART_Init::
 0052                   .dbline -1
 0052                   .dbline 43
 0052           ;      }                 
 0052           ; }
 0052           ; 
 0052           ; /******************USART初始化***********************/    
 0052           ; void USART_Init(unsigned int baud)
 0052           ;  {
 0052                   .dbline 44
 0052           ;   UBRRH=(unsigned char)(baud>>8);
 0052 1801              movw R2,R16
 0054 232C              mov R2,R3
 0056 3324              clr R3
 0058 20BC              out 0x20,R2
 005A                   .dbline 45
 005A           ;   UBRRL=(unsigned char)baud;  //设定波特率
 005A 09B9              out 0x9,R16
 005C                   .dbline 46
 005C           ;   UCSRB=0x98;                 //使能接收和发送,开接收中断
 005C 88E9              ldi R24,152
 005E 8AB9              out 0xa,R24
 0060                   .dbline 47
 0060           ;   UCSRC=0x8e;                 //设置帧格式8数据位,2停止位
 0060 8EE8              ldi R24,142
 0062 80BD              out 0x20,R24
 0064                   .dbline -2
 0064           L15:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbsym r baud 16 i
 0066                   .dbend
 0066                   .dbfunc e USART_Transmit _USART_Transmit fV
 0066           ;            dat -> R16
                        .even
 0066           _USART_Transmit::
 0066                   .dbline -1
 0066                   .dbline 51
 0066           ;  }
 0066           ; /************发送函数****************************/
 0066           ; void USART_Transmit(unsigned char dat)
 0066           ;  {
 0066           L17:
 0066                   .dbline 52
 0066           L18:
 0066                   .dbline 52
 0066           ;    while(!(UCSRA&(1<<UDRE)));
 0066 5D9B              sbis 0xb,5
 0068 FECF              rjmp L17
 006A                   .dbline 53
 006A           ;    UDR=dat;
 006A 0CB9              out 0xc,R16
 006C                   .dbline -2
 006C           L16:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbsym r dat 16 c
 006E                   .dbend
 006E                   .dbfunc e USART_Receive _USART_Receive fc
                        .even
 006E           _USART_Receive::
 006E                   .dbline -1
 006E                   .dbline 57
 006E           ;  }
 006E           ; /************接收函数*****************************/
 006E           ; unsigned char USART_Receive(void)
 006E           ;  {
 006E           L21:
 006E                   .dbline 58
 006E           L22:
 006E                   .dbline 58
 006E           ;   while(!(UCSRA&(1<<RXC)));
 006E 5F9B              sbis 0xb,7
 0070 FECF              rjmp L21
 0072                   .dbline 59
 0072           ;   return UDR;
 0072 0CB1              in R16,0xc
 0074                   .dbline -2
 0074           L20:
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbend
 0076                   .dbfunc e delayms _delayms fV
 0076           ;              i -> R20,R21
 0076           ;              j -> R22,R23
 0076           ;              t -> R16,R17
                        .even
 0076           _delayms::
 0076 0E940000          xcall push_gset2
 007A                   .dbline -1
 007A                   .dbline 63
 007A           ;  }
 007A           ; /**********延时*********************************/
 007A           ; void delayms(unsigned int t)
 007A           ;  {
 007A                   .dbline 65
 007A           ;    unsigned int i,j;
 007A           ;    for(i=0;i<t;i++)
 007A 4427              clr R20
 007C 5527              clr R21
 007E 0BC0              xjmp L28
 0080           L25:
 0080                   .dbline 66
 0080 6627              clr R22
 0082 7727              clr R23
 0084 02C0              xjmp L32
 0086           L29:
 0086                   .dbline 66
 0086           L30:
 0086                   .dbline 66
 0086 6F5F              subi R22,255  ; offset = 1
 0088 7F4F              sbci R23,255
 008A           L32:
 008A                   .dbline 66
 008A 6436              cpi R22,100
 008C E0E0              ldi R30,0
 008E 7E07              cpc R23,R30
 0090 D0F3              brlo L29
 0092           L26:
 0092                   .dbline 65
 0092 4F5F              subi R20,255  ; offset = 1
 0094 5F4F              sbci R21,255
 0096           L28:
 0096                   .dbline 65
 0096 4017              cp R20,R16
 0098 5107              cpc R21,R17
 009A 90F3              brlo L25
 009C                   .dbline -2
 009C           L24:
 009C 0E940000          xcall pop_gset2
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r i 20 i
 00A2                   .dbsym r j 22 i
 00A2                   .dbsym r t 16 i
 00A2                   .dbend

⌨️ 快捷键说明

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