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

📄 lesson1.lis

📁 另一个非常好的串口通信程序,希望大家多提出宝贵意见
💻 LIS
字号:
                        .module lesson1.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:\icc\examples.avr\lesson1\lesson1.c
 0001                   .dbsym e flag _flag c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\icc\examples.avr\lesson1\lesson1.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
 00EE           ;              i -> R22,R23
 00EE           ;              j -> R20
                        .even
 00EE           _main::
 00EE                   .dbline -1
 00EE                   .dbline 55
 00EE           ; }
 00EE           ; void main()
 00EE           ; {
 00EE                   .dbline 56
 00EE           ;       unsigned char j='a';
 00EE 41E6              ldi R20,97
 00F0                   .dbline 58
 00F0           ; 
 00F0           ;       unsigned int i=3;
 00F0 63E0              ldi R22,3
 00F2 70E0              ldi R23,0
 00F4                   .dbline 63
 00F4           ; 
 00F4           ;       // 
 00F4           ;       // 
 00F4           ;       // init_port();
 00F4           ;       uart_init(19200);
 00F4 00E0              ldi R16,19200
 00F6 1BE4              ldi R17,75
 00F8 9CDF              xcall _uart_init
 00FA                   .dbline 64
 00FA           ;        delay(1);
 00FA 01E0              ldi R16,1
 00FC 10E0              ldi R17,0
 00FE 80DF              xcall _delay
 0100                   .dbline 65
 0100           ;        uart_sendB(i);
 0100 062F              mov R16,R22
 0102 CBDF              xcall _uart_sendB
 0104                   .dbline 66
 0104           ;        delay(1);
 0104 01E0              ldi R16,1
 0106 10E0              ldi R17,0
 0108 7BDF              xcall _delay
 010A                   .dbline 67
 010A           ;        uart_sendB(j);
 010A 042F              mov R16,R20
 010C C6DF              xcall _uart_sendB
 010E                   .dbline 68
 010E           ;         uart_sendB(i);
 010E 062F              mov R16,R22
 0110 C4DF              xcall _uart_sendB
 0112                   .dbline 69
 0112           ;        delay(1);
 0112 01E0              ldi R16,1
 0114 10E0              ldi R17,0
 0116 74DF              xcall _delay
 0118                   .dbline 70
 0118           ;        uart_sendB(j);
 0118 042F              mov R16,R20
 011A BFDF              xcall _uart_sendB
 011C                   .dbline 72
 011C           ;        
 011C           ;         uart_sendB(i);
 011C 062F              mov R16,R22
 011E BDDF              xcall _uart_sendB
 0120                   .dbline 73
 0120           ;        delay(1);
 0120 01E0              ldi R16,1
 0122 10E0              ldi R17,0
 0124 6DDF              xcall _delay
 0126                   .dbline 74
 0126           ;        uart_sendB(j);
 0126 042F              mov R16,R20
 0128 B8DF              xcall _uart_sendB
 012A                   .dbline 76
 012A           ;        
 012A           ;         uart_sendB(i);
 012A 062F              mov R16,R22
 012C B6DF              xcall _uart_sendB
 012E                   .dbline 77
 012E           ;        delay(1);
 012E 01E0              ldi R16,1
 0130 10E0              ldi R17,0
 0132 66DF              xcall _delay
 0134                   .dbline 78
 0134           ;        uart_sendB(j);
 0134 042F              mov R16,R20
 0136 B1DF              xcall _uart_sendB
 0138                   .dbline 80
 0138           ;        
 0138           ;         uart_sendB(i);
 0138 062F              mov R16,R22
 013A AFDF              xcall _uart_sendB
 013C                   .dbline 81
 013C           ;        delay(1);
 013C 01E0              ldi R16,1
 013E 10E0              ldi R17,0
 0140 5FDF              xcall _delay
 0142                   .dbline 82
 0142           ;        uart_sendB(j);
 0142 042F              mov R16,R20
 0144 AADF              xcall _uart_sendB
 0146                   .dbline 84
 0146           ;        
 0146           ;         uart_sendB(i);
 0146 062F              mov R16,R22
 0148 A8DF              xcall _uart_sendB
 014A                   .dbline 85
 014A           ;        delay(1);
 014A 01E0              ldi R16,1
 014C 10E0              ldi R17,0
 014E 58DF              xcall _delay
 0150                   .dbline 86
 0150           ;        uart_sendB(j);
 0150 042F              mov R16,R20
 0152 A3DF              xcall _uart_sendB
 0154                   .dbline 89
 0154           ;        
 0154           ;        
 0154           ;         uart_sendB(i);
 0154 062F              mov R16,R22
 0156 A1DF              xcall _uart_sendB
 0158                   .dbline 90
 0158           ;        delay(1);
 0158 01E0              ldi R16,1
 015A 10E0              ldi R17,0
 015C 51DF              xcall _delay
 015E                   .dbline 91
 015E           ;        uart_sendB(j);
 015E 042F              mov R16,R20
 0160 9CDF              xcall _uart_sendB
 0162                   .dbline -2
 0162           L20:
 0162                   .dbline 0 ; func end
 0162 0895              ret
 0164                   .dbsym r i 22 i
 0164                   .dbsym r j 20 c
 0164                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\icc\examples.avr\lesson1\lesson1.c
 0000           _rdata::
 0000                   .blkb 1
 0001                   .dbsym e rdata _rdata c

⌨️ 快捷键说明

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