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

📄 usart2.lis

📁 基于MEG128芯片程序设计。主要实现LED显示等功能
💻 LIS
字号:
                        .module USART2.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVRPRJ\dy\USART2.c
                        .area vector(rom, abs)
                        .org 72
 0048 0C940000          jmp _UART0_RX_interrupt
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVRPRJ\dy\USART2.c
 0000                   .dbfunc e UART0_RX_interrupt _UART0_RX_interrupt fV
 0000           ;           Temp -> R20
                        .even
 0000           _UART0_RX_interrupt::
 0000 0A92              st -y,R0
 0002 1A92              st -y,R1
 0004 2A92              st -y,R2
 0006 3A92              st -y,R3
 0008 4A92              st -y,R4
 000A 5A92              st -y,R5
 000C 6A92              st -y,R6
 000E 7A92              st -y,R7
 0010 8A92              st -y,R8
 0012 9A92              st -y,R9
 0014 0A93              st -y,R16
 0016 1A93              st -y,R17
 0018 2A93              st -y,R18
 001A 3A93              st -y,R19
 001C 4A93              st -y,R20
 001E 8A93              st -y,R24
 0020 9A93              st -y,R25
 0022 AA93              st -y,R26
 0024 BA93              st -y,R27
 0026 EA93              st -y,R30
 0028 FA93              st -y,R31
 002A 0FB6              in R0,0x3f
 002C 0A92              st -y,R0
 002E 4A93              st -y,R20
 0030                   .dbline -1
 0030                   .dbline 5
 0030           ; #include <iom128v.h>
 0030           ; #include <macros.h>
 0030           ; #pragma interrupt_handler UART0_RX_interrupt:19
 0030           ; void UART0_RX_interrupt( void )           
 0030           ; {
 0030                   .dbline 7
 0030           ;    unsigned char Temp;
 0030           ;    Temp=UDR0;
 0030 4CB1              in R20,0xc
 0032                   .dbline 8
 0032           ;    if(Temp=='b')Buzzer();
 0032 4236              cpi R20,98
 0034 09F4              brne L2
 0036           X0:
 0036                   .dbline 8
 0036 19D0              xcall _Buzzer
 0038           L2:
 0038                   .dbline -2
 0038           L1:
 0038                   .dbline 0 ; func end
 0038 4991              ld R20,y+
 003A 0990              ld R0,y+
 003C 0FBE              out 0x3f,R0
 003E F991              ld R31,y+
 0040 E991              ld R30,y+
 0042 B991              ld R27,y+
 0044 A991              ld R26,y+
 0046 9991              ld R25,y+
 0048 8991              ld R24,y+
 004A 4991              ld R20,y+
 004C 3991              ld R19,y+
 004E 2991              ld R18,y+
 0050 1991              ld R17,y+
 0052 0991              ld R16,y+
 0054 9990              ld R9,y+
 0056 8990              ld R8,y+
 0058 7990              ld R7,y+
 005A 6990              ld R6,y+
 005C 5990              ld R5,y+
 005E 4990              ld R4,y+
 0060 3990              ld R3,y+
 0062 2990              ld R2,y+
 0064 1990              ld R1,y+
 0066 0990              ld R0,y+
 0068 1895              reti
 006A                   .dbsym r Temp 20 c
 006A                   .dbend
 006A                   .dbfunc e Buzzer _Buzzer fV
                        .even
 006A           _Buzzer::
 006A                   .dbline -1
 006A                   .dbline 11
 006A           ; }
 006A           ; void Buzzer(void)
 006A           ; {
 006A                   .dbline 12
 006A           ;        PORTB&=0xfe;                           //开蜂鸣器
 006A 88B3              in R24,0x18
 006C 8E7F              andi R24,254
 006E 88BB              out 0x18,R24
 0070                   .dbline 13
 0070           ;       delay(50);
 0070 02E3              ldi R16,50
 0072 10E0              ldi R17,0
 0074 02D0              xcall _delay
 0076                   .dbline 14
 0076           ;       PORTB|=0x01;             //关蜂鸣器
 0076 C09A              sbi 0x18,0
 0078                   .dbline -2
 0078           L4:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e delay _delay fV
 007A           ;              i -> R20,R21
 007A           ;              j -> R22,R23
 007A           ;              n -> R16,R17
                        .even
 007A           _delay::
 007A 0E940000          xcall push_xgsetF000
 007E                   .dbline -1
 007E                   .dbline 17
 007E           ; }
 007E           ; void delay(int n)
 007E           ; {
 007E                   .dbline 19
 007E           ;   int i,j;
 007E           ;   for(i=0;i<n;i++)
 007E 4427              clr R20
 0080 5527              clr R21
 0082 0AC0              xjmp L9
 0084           L6:
 0084                   .dbline 20
 0084           ;    for(j=0;j<1000;j++) 
 0084 6627              clr R22
 0086 7727              clr R23
 0088           L10:
 0088                   .dbline 21
 0088           ;     ;
 0088           L11:
 0088                   .dbline 20
 0088 6F5F              subi R22,255  ; offset = 1
 008A 7F4F              sbci R23,255
 008C                   .dbline 20
 008C 683E              cpi R22,232
 008E E3E0              ldi R30,3
 0090 7E07              cpc R23,R30
 0092 D4F3              brlt L10
 0094           X1:
 0094           L7:
 0094                   .dbline 19
 0094 4F5F              subi R20,255  ; offset = 1
 0096 5F4F              sbci R21,255
 0098           L9:
 0098                   .dbline 19
 0098 4017              cp R20,R16
 009A 5107              cpc R21,R17
 009C 9CF3              brlt L6
 009E           X2:
 009E                   .dbline -2
 009E           L5:
 009E                   .dbline 0 ; func end
 009E 0C940000          xjmp pop_xgsetF000
 00A2                   .dbsym r i 20 I
 00A2                   .dbsym r j 22 I
 00A2                   .dbsym r n 16 I
 00A2                   .dbend
 00A2                   .dbfunc e USART_Transmit _USART_Transmit fV
 00A2           ;           data -> R16
                        .even
 00A2           _USART_Transmit::
 00A2                   .dbline -1
 00A2                   .dbline 24
 00A2           ; }
 00A2           ; void USART_Transmit(char data)
 00A2           ; {
 00A2           L15:
 00A2                   .dbline 26
 00A2           ;        while(!(UCSR0A&(1<<UDRE0)))
 00A2           ;        ;
 00A2           L16:
 00A2                   .dbline 25
 00A2 5D9B              sbis 0xb,5
 00A4 FECF              rjmp L15
 00A6           X3:
 00A6                   .dbline 27
 00A6           ;        UDR0=data;
 00A6 0CB9              out 0xc,R16
 00A8                   .dbline -2
 00A8           L14:
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r data 16 c
 00AA                   .dbend
 00AA                   .dbfunc e USART_Init _USART_Init fV
 00AA           ;           baud -> R16,R17
                        .even
 00AA           _USART_Init::
 00AA                   .dbline -1
 00AA                   .dbline 31
 00AA           ; 
 00AA           ; }
 00AA           ; void USART_Init(unsigned int baud)
 00AA           ; {
 00AA                   .dbline 32
 00AA           ;  UBRR0H=(unsigned char)(baud>>8);
 00AA 1801              movw R2,R16
 00AC 232C              mov R2,R3
 00AE 3324              clr R3
 00B0 20929000          sts 144,R2
 00B4                   .dbline 33
 00B4           ;  UBRR0L=(unsigned char)baud;
 00B4 09B9              out 0x9,R16
 00B6                   .dbline 34
 00B6           ;  UCSR0B=(1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0); //接收终端使能,发送和接受使能
 00B6 88E9              ldi R24,152
 00B8 8AB9              out 0xa,R24
 00BA                   .dbline 35
 00BA           ;  UCSR0C=(1<<UCSZ00)|(1<<UCSZ01);           //设置字符长度,一个停止位,八位数据
 00BA 86E0              ldi R24,6
 00BC 80939500          sts 149,R24
 00C0                   .dbline -2
 00C0           L18:
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbsym r baud 16 i
 00C2                   .dbend
 00C2                   .dbfunc e main _main fI
                        .even
 00C2           _main::
 00C2                   .dbline -1
 00C2                   .dbline 38
 00C2           ; }
 00C2           ; main()
 00C2           ; {
 00C2                   .dbline 39
 00C2           ;   DDRB=0xff;
 00C2 8FEF              ldi R24,255
 00C4 87BB              out 0x17,R24
 00C6                   .dbline 40
 00C6           ;   PORTB=0xff;
 00C6 88BB              out 0x18,R24
 00C8                   .dbline 41
 00C8           ;   USART_Init(51);
 00C8 03E3              ldi R16,51
 00CA 10E0              ldi R17,0
 00CC EEDF              xcall _USART_Init
 00CE                   .dbline 42
 00CE           ;   USART_Transmit('s');
 00CE 03E7              ldi R16,115
 00D0 E8DF              xcall _USART_Transmit
 00D2           L20:
 00D2                   .dbline 43
 00D2           ;   while(1);
 00D2           L21:
 00D2                   .dbline 43
 00D2 FFCF              xjmp L20
 00D4           X4:
 00D4                   .dbline -2
 00D4           L19:
 00D4                   .dbline 0 ; func end
 00D4 0895              ret
 00D6                   .dbend
 00D6           ;  }
 00D6           ;   

⌨️ 快捷键说明

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