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

📄 lesson10.lis

📁 It is a common usart pogrameer
💻 LIS
字号:
                        .module lesson10.c
                        .area vector(rom, abs)
                        .org 120
 0078 0C945D00          jmp _uart_rx
                        .area data(ram, con, rel)
 0000           _flag::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
 0001                   .dbsym e flag _flag c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              i -> R20,R21
 0000           ;              j -> R22,R23
 0000           ;             ms -> R16,R17
                        .even
 0000           _delay::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 10
 0004           ; #include <iom128v.h>
 0004           ; #include <macros.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; 
 0004           ; #define  mclk   7372800
 0004           ; #pragma interrupt_handler uart_rx:31
 0004           ; uchar rdata,flag=0;
 0004           ; void delay(uint ms)
 0004           ; {
 0004                   .dbline 12
 0004           ;         uint i,j;
 0004           ;       for(i=0;i<ms;i++)
 0004 4427              clr R20
 0006 5527              clr R21
 0008 0BC0              xjmp L5
 000A           L2:
 000A                   .dbline 13
 000A           ;          {
 000A                   .dbline 14
 000A 6627              clr R22
 000C 7727              clr R23
 000E 02C0              xjmp L9
 0010           L6:
 0010                   .dbline 14
 0010           L7:
 0010                   .dbline 14
 0010 6F5F              subi R22,255  ; offset = 1
 0012 7F4F              sbci R23,255
 0014           L9:
 0014                   .dbline 14
 0014 6233              cpi R22,50
 0016 E2E0              ldi R30,2
 0018 7E07              cpc R23,R30
 001A D0F3              brlo L6
 001C                   .dbline 15
 001C           L3:
 001C                   .dbline 12
 001C 4F5F              subi R20,255  ; offset = 1
 001E 5F4F              sbci R21,255
 0020           L5:
 0020                   .dbline 12
 0020 4017              cp R20,R16
 0022 5107              cpc R21,R17
 0024 90F3              brlo L2
 0026                   .dbline -2
 0026           L1:
 0026 0E940000          xcall pop_gset2
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r i 20 i
 002C                   .dbsym r j 22 i
 002C                   .dbsym r ms 16 i
 002C                   .dbend
 002C                   .dbfunc e init_port _init_port fV
                        .even
 002C           _init_port::
 002C                   .dbline -1
 002C                   .dbline 19
 002C           ;          for(j=0;j<562;j++);
 002C           ;        }
 002C           ; }
 002C           ; void init_port();
 002C           ; void init_port()
 002C           ; {
 002C                   .dbline 20
 002C           ; DDRB=DDRB|BIT(7);
 002C BF9A              sbi 0x17,7
 002E                   .dbline 21
 002E           ;        PORTB=PORTB|BIT(7);
 002E C79A              sbi 0x18,7
 0030                   .dbline -2
 0030           L10:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbend
 0032                   .dbfunc e uart_init _uart_init fV
 0032           ;           baud -> R10,R11
                        .even
 0032           _uart_init::
 0032 0E940000          xcall push_gset3
 0036 5801              movw R10,R16
 0038                   .dbline -1
 0038                   .dbline 25
 0038           ;     
 0038           ; }
 0038           ; void uart_init(uint baud)
 0038           ; {
 0038                   .dbline 26
 0038           ;     UCSR1B=0x00; 
 0038 2224              clr R2
 003A 20929A00          sts 154,R2
 003E                   .dbline 27
 003E           ;    UCSR1A=0x00;                   //控制寄存器清零
 003E 20929B00          sts 155,R2
 0042                   .dbline 28
 0042           ;    UCSR1C=(0<<UPM10)|(3<<UCSZ10);   
 0042 86E0              ldi R24,6
 0044 80939D00          sts 157,R24
 0048                   .dbline 31
 0048           ;                                                         //选择UCSRC,异步模式,禁止                        
 0048           ;                                                      //   校验,1位停止位,8位数据位
 0048           ;    baud=mclk/16/baud-1        ;   //波特率最大为65K
 0048 1501              movw R2,R10
 004A 4424              clr R4
 004C 5524              clr R5
 004E 40E0              ldi R20,0
 0050 58E0              ldi R21,8
 0052 67E0              ldi R22,7
 0054 70E0              ldi R23,0
 0056 5A92              st -y,R5
 0058 4A92              st -y,R4
 005A 3A92              st -y,R3
 005C 2A92              st -y,R2
 005E 8A01              movw R16,R20
 0060 9B01              movw R18,R22
 0062 0E940000          xcall div32s
 0066 41E0              ldi R20,1
 0068 50E0              ldi R21,0
 006A 60E0              ldi R22,0
 006C 70E0              ldi R23,0
 006E 1801              movw R2,R16
 0070 2901              movw R4,R18
 0072 241A              sub R2,R20
 0074 350A              sbc R3,R21
 0076 460A              sbc R4,R22
 0078 570A              sbc R5,R23
 007A 5101              movw R10,R2
 007C                   .dbline 32
 007C           ;    UBRR1L=baud;                                                 
 007C A0929900          sts 153,R10
 0080                   .dbline 33
 0080           ;    UBRR1H=baud>>8;               //设置波特率
 0080 232C              mov R2,R3
 0082 3324              clr R3
 0084 20929800          sts 152,R2
 0088                   .dbline 34
 0088           ;    UCSR1B=(1<<TXEN1)|(1<<RXEN1)|(1<<RXCIE1); 
 0088 88E9              ldi R24,152
 008A 80939A00          sts 154,R24
 008E                   .dbline 36
 008E           ;                                                        //接收、发送使能,接收中断使能
 008E           ;    SREG=BIT(7);                       //全局中断开放
 008E 80E8              ldi R24,128
 0090 8FBF              out 0x3f,R24
 0092                   .dbline 37
 0092           ;    DDRD|=0X08;                        //配置TX为输出(很重要)
 0092 8B9A              sbi 0x11,3
 0094                   .dbline -2
 0094           L11:
 0094 0E940000          xcall pop_gset3
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbsym r baud 10 i
 009A                   .dbend
 009A                   .dbfunc e uart_sendB _uart_sendB fV
 009A           ;           data -> R16
                        .even
 009A           _uart_sendB::
 009A                   .dbline -1
 009A                   .dbline 41
 009A           ; 
 009A           ; }
 009A           ; void uart_sendB(uchar data)
 009A           ; {
 009A           L13:
 009A                   .dbline 42
 009A           L14:
 009A                   .dbline 42
 009A           ;    while(!(UCSR1A&(BIT(UDRE1)))) ;
 009A 20909B00          lds R2,155
 009E 25FE              sbrs R2,5
 00A0 FCCF              rjmp L13
 00A2                   .dbline 43
 00A2           ;    UDR1=data;
 00A2 00939C00          sts 156,R16
 00A6           L16:
 00A6                   .dbline 44
 00A6           L17:
 00A6                   .dbline 44
 00A6           ;    while(!(UCSR1A&(BIT(TXC1))));
 00A6 20909B00          lds R2,155
 00AA 26FE              sbrs R2,6
 00AC FCCF              rjmp L16
 00AE                   .dbline 45
 00AE           ;    UCSR1A|=BIT(TXC1);
 00AE 80919B00          lds R24,155
 00B2 8064              ori R24,64
 00B4 80939B00          sts 155,R24
 00B8                   .dbline -2
 00B8           L12:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbsym r data 16 c
 00BA                   .dbend
 00BA                   .dbfunc e uart_rx _uart_rx fV
                        .even
 00BA           _uart_rx::
 00BA 2A92              st -y,R2
 00BC 8A93              st -y,R24
 00BE 2FB6              in R2,0x3f
 00C0 2A92              st -y,R2
 00C2                   .dbline -1
 00C2                   .dbline 48
 00C2           ; }
 00C2           ; void uart_rx()
 00C2           ; {
 00C2                   .dbline 49
 00C2           ;     UCSR1B&=~BIT(RXCIE1);
 00C2 80919A00          lds R24,154
 00C6 8F77              andi R24,127
 00C8 80939A00          sts 154,R24
 00CC                   .dbline 50
 00CC           ;       rdata=UDR1;
 00CC 20909C00          lds R2,156
 00D0 20920000          sts _rdata,R2
 00D4                   .dbline 51
 00D4           ;       flag=1;
 00D4 81E0              ldi R24,1
 00D6 80930000          sts _flag,R24
 00DA                   .dbline 52
 00DA           ;       UCSR1B|=BIT(RXCIE1);
 00DA 80919A00          lds R24,154
 00DE 8068              ori R24,128
 00E0 80939A00          sts 154,R24
 00E4                   .dbline -2
 00E4           L19:
 00E4 2990              ld R2,y+
 00E6 2FBE              out 0x3f,R2
 00E8 8991              ld R24,y+
 00EA 2990              ld R2,y+
 00EC                   .dbline 0 ; func end
 00EC 1895              reti
 00EE                   .dbend
 00EE                   .dbfunc e main _main fV
                        .even
 00EE           _main::
 00EE                   .dbline -1
 00EE                   .dbline 55
 00EE           ; }
 00EE           ; void main()
 00EE           ; {
 00EE                   .dbline 59
 00EE           ; 
 00EE           ;       // unsigned int i=3; 
 00EE           ;       // unsigned char j='a';
 00EE           ;        init_port();
 00EE 9EDF              xcall _init_port
 00F0                   .dbline 60
 00F0           ;       uart_init(19200);
 00F0 00E0              ldi R16,19200
 00F2 1BE4              ldi R17,75
 00F4 9EDF              xcall _uart_init
 00F6                   .dbline 61
 00F6           ;        delay(1);
 00F6 01E0              ldi R16,1
 00F8 10E0              ldi R17,0
 00FA 82DF              xcall _delay
 00FC 17C0              xjmp L22
 00FE           L21:
 00FE                   .dbline 63
 00FE           ;       while(1)
 00FE           ;       {
 00FE                   .dbline 64
 00FE           ;          if(flag==1)
 00FE 80910000          lds R24,_flag
 0102 8130              cpi R24,1
 0104 99F4              brne L24
 0106                   .dbline 65
 0106           ;          {     
 0106                   .dbline 66
 0106           ;               uart_sendB(rdata);
 0106 00910000          lds R16,_rdata
 010A C7DF              xcall _uart_sendB
 010C 0BC0              xjmp L27
 010E           L26:
 010E                   .dbline 68
 010E                   .dbline 69
 010E C798              cbi 0x18,7
 0110                   .dbline 70
 0110 01E0              ldi R16,1
 0112 10E0              ldi R17,0
 0114 75DF              xcall _delay
 0116                   .dbline 71
 0116 C79A              sbi 0x18,7
 0118                   .dbline 72
 0118 01E0              ldi R16,1
 011A 10E0              ldi R17,0
 011C 71DF              xcall _delay
 011E                   .dbline 73
 011E 2224              clr R2
 0120 20920000          sts _flag,R2
 0124                   .dbline 74
 0124           L27:
 0124                   .dbline 67
 0124           ;             while(1)
 0124 F4CF              xjmp L26
 0126           X0:
 0126                   .dbline 75
 0126           ;                 {
 0126           ;                     PORTB=PORTB&(~BIT(7));
 0126           ;                         delay(1);
 0126           ;                        PORTB=PORTB|BIT(7);
 0126           ;                        delay(1);
 0126           ;                        flag=0;
 0126           ;             }
 0126           ;                flag=0;
 0126 2224              clr R2
 0128 20920000          sts _flag,R2
 012C                   .dbline 77
 012C           ;                 
 012C           ;          }
 012C           L24:
 012C                   .dbline 78
 012C           L22:
 012C                   .dbline 62
 012C E8CF              xjmp L21
 012E           X1:
 012E                   .dbline -2
 012E           L20:
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\SW\桌面\lesson10\lesson10.c
 0000           _rdata::
 0000                   .blkb 1
 0001                   .dbsym e rdata _rdata c

⌨️ 快捷键说明

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