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

📄 lesson1.lis

📁 AVR单片机视频教程的课件和每一次课的源程序是学习AVR单片机的首选
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lesson1.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:/icc/include/AVR_PQ1A.h
 0000                   .dbfunc e Delayus _Delayus fV
 0000           ;              i -> R20,R21
 0000           ;             US -> R22,R23
                        .even
 0000           _Delayus::
 0000 00D0              rcall push_gset2
 0002 602F              mov R22,R16
 0004 712F              mov R23,R17
 0006                   .dbline -1
 0006                   .dbline 28
 0006           ; /*******************************************
 0006           ;   文件:LED.C
 0006           ;   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
 0006           ;   硬件:ATMEGA16芯片
 0006           ;   日期:2006年12月10日 
 0006           ;   功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED
 0006           ;   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
 0006           ; /******************************************/
 0006           ; #include <iom16v.h>                   //包含型号头文件
 0006           ; #include <macros.h>                   //包含"位"操作头文件
 0006           ; #include <stdio.h>                    //标准输入输出头文件
 0006           ; #include <AVR_PQ1A.h>         //包含自定义常量头文件
 0006           ; 
 0006           ; /*******************************************
 0006           ; 函数名称: One_led
 0006           ; 功    能: 点亮或者熄灭指定的LED
 0006           ; 参    数: number--指定的LED
 0006           ;                 light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED
 0006           ; 返回值  : 无
 0006           ; /********************************************/
 0006           ; void One_led(uchar number,uchar light)
 0006           ; {uchar i;
 0006           ;  if(light==TRUE)                 //点亮操作
 0006           ;  {
 0006           ;   PORTB&=~BIT(number);           //输出数据
 0006           ;   PORTA|=BIT(LEDLK);     //更新数据
 0006           ;   Delayms(5);                    //调整时序
 0006           ;   PORTA&=~BIT(LEDLK);    //锁存数据
 0006                   .dbline 30
 0006           ;  }
 0006           ;  else
 0006 05E0              ldi R16,5
 0008 10E0              ldi R17,0
 000A 262F              mov R18,R22
 000C 372F              mov R19,R23
 000E 00D0              rcall mpy16s
 0010 602F              mov R22,R16
 0012 712F              mov R23,R17
 0014 7695              lsr R23
 0016 6795              ror R22
 0018 7695              lsr R23
 001A 6795              ror R22
 001C                   .dbline 31
 001C 4427              clr R20
 001E 5527              clr R21
 0020 02C0              rjmp L5
 0022           L2:
 0022                   .dbline 31
 0022           L3:
 0022                   .dbline 31
 0022 4F5F              subi R20,255  ; offset = 1
 0024 5F4F              sbci R21,255
 0026           L5:
 0026                   .dbline 31
 0026           ;  {
 0026 4617              cp R20,R22
 0028 5707              cpc R21,R23
 002A D8F3              brlo L2
 002C                   .dbline -2
 002C                   .dbline 32
 002C           ;   PORTB|=BIT(number);    //输出数据
 002C           L1:
 002C 00D0              rcall pop_gset2
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r i 20 i
 0030                   .dbsym r US 22 i
 0030                   .dbend
 0030                   .dbfunc e Delayms _Delayms fV
 0030           ;              i -> R20,R21
 0030           ;              j -> R22,R23
 0030           ;             MS -> R16,R17
                        .even
 0030           _Delayms::
 0030 00D0              rcall push_gset2
 0032                   .dbline -1
 0032                   .dbline 40
 0032           ;   PORTA|=BIT(LEDLK);     //更新数据
 0032           ;   Delayms(5);                    //调整时序
 0032           ;   PORTA&=~BIT(LEDLK);    //锁存数据
 0032           ;  }
 0032           ; }
 0032           ; /*******************************************
 0032           ; 函数名称: All_led
 0032           ; 功    能: 点亮或者熄灭全部LED
 0032                   .dbline 42
 0032           ; 参    数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
 0032           ; 返回值  : 无
 0032 4427              clr R20
 0034 5527              clr R21
 0036 0BC0              rjmp L10
 0038           L7:
 0038                   .dbline 43
 0038 6627              clr R22
 003A 7727              clr R23
 003C 02C0              rjmp L14
 003E           L11:
 003E                   .dbline 43
 003E           L12:
 003E                   .dbline 43
 003E 6F5F              subi R22,255  ; offset = 1
 0040 7F4F              sbci R23,255
 0042           L14:
 0042                   .dbline 43
 0042 6537              cpi R22,117
 0044 E4E0              ldi R30,4
 0046 7E07              cpc R23,R30
 0048 D0F3              brlo L11
 004A           L8:
 004A                   .dbline 42
 004A 4F5F              subi R20,255  ; offset = 1
 004C 5F4F              sbci R21,255
 004E           L10:
 004E                   .dbline 42
 004E 4017              cp R20,R16
 0050 5107              cpc R21,R17
 0052 90F3              brlo L7
 0054                   .dbline -2
 0054                   .dbline 44
 0054           ; /********************************************/
 0054           ; void All_led(uchar light)
 0054           L6:
 0054 00D0              rcall pop_gset2
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbsym r i 20 i
 0058                   .dbsym r j 22 i
 0058                   .dbsym r MS 16 i
 0058                   .dbend
 0058                   .dbfunc e Board_init _Board_init fV
                        .even
 0058           _Board_init::
 0058                   .dbline -1
 0058                   .dbline 52
 0058           ; {
 0058           ;  if(light)
 0058           ;  {
 0058           ;   PORTB&=~ALLLED;              //ALLLED=0xFF,使全部LED都亮
 0058           ;   PORTA|=BIT(LEDLK);   //输出数据
 0058           ;   Delayms(5);                  //调整时序
 0058           ;   PORTA&=~BIT(LEDLK);  //锁存数据
 0058           ;  }
 0058                   .dbline 53
 0058           ;  else
 0058 8FEF              ldi R24,255
 005A 8ABB              out 0x1a,R24
 005C                   .dbline 54
 005C           ;  {
 005C 87BB              out 0x17,R24
 005E                   .dbline 55
 005E           ;   PORTB|=ALLLED;               //ALLLED=0xFF,使全部LED都灭
 005E 84BB              out 0x14,R24
 0060                   .dbline 56
 0060           ;   PORTA|=BIT(LEDLK);   //输出数据
 0060 81BB              out 0x11,R24
 0062                   .dbline 58
 0062           ;   Delayms(5);                  //调整时序
 0062           ;   PORTA&=~BIT(LEDLK);  //锁存数据
 0062 2224              clr R2
 0064 2DB8              out 0xd,R2
 0066                   .dbline 60
 0066           ;  }
 0066           ; }
 0066 DE9A              sbi 0x1b,6
 0068                   .dbline 61
 0068           ; /*******************************************
 0068 AE98              cbi 0x15,6
 006A                   .dbline 62
 006A           ; 函数名称: Flow_led
 006A D998              cbi 0x1b,1
 006C                   .dbline 63
 006C           ; 功    能: 流水灯(循环一次)
 006C 88BB              out 0x18,R24
 006E                   .dbline 64
 006E           ; 参    数: MS--点亮相邻LED的时间间隔,单位是毫秒
 006E DA9A              sbi 0x1b,2
 0070                   .dbline 65
 0070           ; 返回值  : 无
 0070 05E0              ldi R16,5
 0072 10E0              ldi R17,0
 0074 C5DF              rcall _Delayus
 0076                   .dbline 66
 0076           ; /********************************************/
 0076 DA98              cbi 0x1b,2
 0078                   .dbline 68
 0078           ; void Flow_LED(uchar MS)
 0078           ; {
 0078 2224              clr R2
 007A 28BA              out 0x18,R2
 007C                   .dbline 69
 007C           ;  uchar i;
 007C DB9A              sbi 0x1b,3
 007E                   .dbline 70
 007E           ;  for(i=0;i<8;i++)     //循环8次,8个LED依次点亮
 007E 02E3              ldi R16,50
 0080 10E0              ldi R17,0
 0082 BEDF              rcall _Delayus
 0084                   .dbline 71
 0084           ;  {
 0084 DB98              cbi 0x1b,3
 0086                   .dbline 73
 0086           ;   All_led(FALSE);     //全部熄灭
 0086           ;   One_led(i,TRUE);    //点亮指定的LED
 0086 8FEF              ldi R24,255
 0088 88BB              out 0x18,R24
 008A                   .dbline 74
 008A           ;   Delayms(MS);                //延时指定的时间
 008A DC9A              sbi 0x1b,4
 008C                   .dbline 75
 008C           ;  } 
 008C 02E3              ldi R16,50
 008E 10E0              ldi R17,0
 0090 B7DF              rcall _Delayus
 0092                   .dbline 76
 0092           ; }
 0092 DC98              cbi 0x1b,4
 0094                   .dbline 78
 0094           ; /*******************************************
 0094           ; 函数名称: Flash_led
 0094 8FEF              ldi R24,255
 0096 82BB              out 0x12,R24
 0098                   .dbline 79
 0098           ; 功    能: 闪烁指定的LED(循环一次)
 0098 DF9A              sbi 0x1b,7
 009A                   .dbline 80
 009A           ; 参    数: number--指定的LED
 009A 02E3              ldi R16,50
 009C 10E0              ldi R17,0
 009E B0DF              rcall _Delayus
 00A0                   .dbline 81
 00A0           ;                 MS--LED闪烁的时间间隔
 00A0 DF98              cbi 0x1b,7
 00A2                   .dbline -2
 00A2                   .dbline 84
 00A2           ; 返回值  : 无
 00A2           ; /********************************************/
 00A2           ; void Flash_LED(uchar number,uchar MS)
 00A2           L15:
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbend
 00A4                   .dbfile I:\AVR视频教程\视频教程\lesson1\lesson1\lesson1.c
 00A4                   .dbfunc e One_led _One_led fV
 00A4           ;              i -> <dead>
 00A4           ;          light -> R22
 00A4           ;         number -> R20
                        .even
 00A4           _One_led::
 00A4 00D0              rcall push_gset2
 00A6 622F              mov R22,R18
 00A8 402F              mov R20,R16
 00AA                   .dbline -1
 00AA                   .dbline 22
 00AA                   .dbline 23
 00AA 6130              cpi R22,1
 00AC 71F4              brne L17
 00AE                   .dbline 24

⌨️ 快捷键说明

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