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

📄 lesson10.lis

📁 AVR单片机C语言编程及应用实例 适合初学者的学习研究 其中包含Atmega16中文资料及Protel部分电路图
💻 LIS
字号:
                        .module lesson10.c
                        .area vector(rom, abs)
                        .org 44
 002C 0C944B00          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 I:\AVR视频教程\视频教程\lesson10\lesson10\lesson10.c
 0001                   .dbsym e flag _flag c
                        .area text(rom, con, rel)
 0000                   .dbfile I:\AVR视频教程\视频教程\lesson10\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 <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; 
 0004           ; #define  mclk   8000000
 0004           ; #pragma interrupt_handler uart_rx:12
 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 6537              cpi R22,117
 0016 E4E0              ldi R30,4
 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                   .dbline 16
 0026           ;          for(j=0;j<1141;j++);
 0026           ;        }
 0026           ; }
 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 uart_init _uart_init fV
 002C           ;           baud -> R10,R11
                        .even
 002C           _uart_init::
 002C 0E940000          xcall push_gset3
 0030 5801              movw R10,R16
 0032                   .dbline -1
 0032                   .dbline 19
 0032           ; 
 0032           ; void uart_init(uint baud)
 0032           ; {
 0032                   .dbline 20
 0032           ;     UCSRB=0x00; 
 0032 2224              clr R2
 0034 2AB8              out 0xa,R2
 0036                   .dbline 21
 0036           ;    UCSRA=0x00;                    //控制寄存器清零
 0036 2BB8              out 0xb,R2
 0038                   .dbline 22
 0038           ;    UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);   
 0038 86E8              ldi R24,134
 003A 80BD              out 0x20,R24
 003C                   .dbline 25
 003C           ;                                                         //选择UCSRC,异步模式,禁止                        
 003C           ;                                                      //   校验,1位停止位,8位数据位
 003C           ;    baud=mclk/16/baud-1        ;   //波特率最大为65K
 003C 1501              movw R2,R10
 003E 4424              clr R4
 0040 5524              clr R5
 0042 40E2              ldi R20,32
 0044 51EA              ldi R21,161
 0046 67E0              ldi R22,7
 0048 70E0              ldi R23,0
 004A 5A92              st -y,R5
 004C 4A92              st -y,R4
 004E 3A92              st -y,R3
 0050 2A92              st -y,R2
 0052 8A01              movw R16,R20
 0054 9B01              movw R18,R22
 0056 0E940000          xcall div32s
 005A 41E0              ldi R20,1
 005C 50E0              ldi R21,0
 005E 60E0              ldi R22,0
 0060 70E0              ldi R23,0
 0062 1801              movw R2,R16
 0064 2901              movw R4,R18
 0066 241A              sub R2,R20
 0068 350A              sbc R3,R21
 006A 460A              sbc R4,R22
 006C 570A              sbc R5,R23
 006E 5101              movw R10,R2
 0070                   .dbline 26
 0070           ;    UBRRL=baud;                                                  
 0070 A9B8              out 0x9,R10
 0072                   .dbline 27
 0072           ;    UBRRH=baud>>8;                //设置波特率
 0072 232C              mov R2,R3
 0074 3324              clr R3
 0076 20BC              out 0x20,R2
 0078                   .dbline 28
 0078           ;    UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); 
 0078 88E9              ldi R24,152
 007A 8AB9              out 0xa,R24
 007C                   .dbline 30
 007C           ;                                                        //接收、发送使能,接收中断使能
 007C           ;    SREG=BIT(7);                       //全局中断开放
 007C 80E8              ldi R24,128
 007E 8FBF              out 0x3f,R24
 0080                   .dbline 31
 0080           ;    DDRD|=0X02;                        //配置TX为输出(很重要)
 0080 899A              sbi 0x11,1
 0082                   .dbline -2
 0082                   .dbline 33
 0082           ; 
 0082           ; }
 0082           L10:
 0082 0E940000          xcall pop_gset3
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbsym r baud 10 i
 0088                   .dbend
 0088                   .dbfunc e uart_sendB _uart_sendB fV
 0088           ;           data -> R16
                        .even
 0088           _uart_sendB::
 0088                   .dbline -1
 0088                   .dbline 35
 0088           ; void uart_sendB(uchar data)
 0088           ; {
 0088           L12:
 0088                   .dbline 36
 0088           L13:
 0088                   .dbline 36
 0088           ;    while(!(UCSRA&(BIT(UDRE)))) ;
 0088 5D9B              sbis 0xb,5
 008A FECF              rjmp L12
 008C                   .dbline 37
 008C           ;    UDR=data;
 008C 0CB9              out 0xc,R16
 008E           L15:
 008E                   .dbline 38
 008E           L16:
 008E                   .dbline 38
 008E           ;    while(!(UCSRA&(BIT(TXC))));
 008E 5E9B              sbis 0xb,6
 0090 FECF              rjmp L15
 0092                   .dbline 39
 0092           ;    UCSRA|=BIT(TXC);
 0092 5E9A              sbi 0xb,6
 0094                   .dbline -2
 0094                   .dbline 40
 0094           ; }
 0094           L11:
 0094                   .dbline 0 ; func end
 0094 0895              ret
 0096                   .dbsym r data 16 c
 0096                   .dbend
 0096                   .dbfunc e uart_rx _uart_rx fV
                        .even
 0096           _uart_rx::
 0096 2A92              st -y,R2
 0098 8A93              st -y,R24
 009A 2FB6              in R2,0x3f
 009C 2A92              st -y,R2
 009E                   .dbline -1
 009E                   .dbline 42
 009E           ; void uart_rx()
 009E           ; {
 009E                   .dbline 43
 009E           ;     UCSRB&=~BIT(RXCIE);
 009E 5798              cbi 0xa,7
 00A0                   .dbline 44
 00A0           ;       rdata=UDR;
 00A0 2CB0              in R2,0xc
 00A2 20920000          sts _rdata,R2
 00A6                   .dbline 45
 00A6           ;       flag=1;
 00A6 81E0              ldi R24,1
 00A8 80930000          sts _flag,R24
 00AC                   .dbline 46
 00AC           ;       UCSRB|=BIT(RXCIE);
 00AC 579A              sbi 0xa,7
 00AE                   .dbline -2
 00AE                   .dbline 47
 00AE           ; }
 00AE           L18:
 00AE 2990              ld R2,y+
 00B0 2FBE              out 0x3f,R2
 00B2 8991              ld R24,y+
 00B4 2990              ld R2,y+
 00B6                   .dbline 0 ; func end
 00B6 1895              reti
 00B8                   .dbend
 00B8                   .dbfunc e main _main fV
                        .even
 00B8           _main::
 00B8                   .dbline -1
 00B8                   .dbline 49
 00B8           ; void main()
 00B8           ; {
 00B8                   .dbline 52
 00B8           ;     //uchar i=4;
 00B8           ;       //uchar j='a';
 00B8           ;     uart_init(19200);
 00B8 00E0              ldi R16,19200
 00BA 1BE4              ldi R17,75
 00BC B7DF              xcall _uart_init
 00BE 0AC0              xjmp L21
 00C0           L20:
 00C0                   .dbline 54
 00C0           ;       while(1)
 00C0           ;       {
 00C0                   .dbline 55
 00C0           ;          if(flag)
 00C0 20900000          lds R2,_flag
 00C4 2220              tst R2
 00C6 31F0              breq L23
 00C8                   .dbline 56
 00C8           ;          {
 00C8                   .dbline 57
 00C8           ;             uart_sendB(rdata);
 00C8 00910000          lds R16,_rdata
 00CC DDDF              xcall _uart_sendB
 00CE                   .dbline 58
 00CE           ;                 flag=0;
 00CE 2224              clr R2
 00D0 20920000          sts _flag,R2
 00D4                   .dbline 59
 00D4           ;          }
 00D4           L23:
 00D4                   .dbline 60
 00D4           L21:
 00D4                   .dbline 53
 00D4 F5CF              xjmp L20
 00D6           X0:
 00D6                   .dbline -2
 00D6                   .dbline 62
 00D6           ;       }
 00D6           ;       
 00D6           ; }
 00D6           L19:
 00D6                   .dbline 0 ; func end
 00D6 0895              ret
 00D8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile I:\AVR视频教程\视频教程\lesson10\lesson10\lesson10.c
 0000           _rdata::
 0000                   .blkb 1
 0001                   .dbsym e rdata _rdata c

⌨️ 快捷键说明

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