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

📄 lesson1.lis

📁 AVR单片机C语言编程及应用实例 适合初学者的学习研究 其中包含Atmega16中文资料及Protel部分电路图
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lesson1.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\iccv7avr\examples.avr\chengxu\lesson1\lesson1.c
 0000                   .dbfunc e Delayms _Delayms fV
 0000           ;              i -> R20,R21
 0000           ;              j -> R22,R23
 0000           ;             ms -> R16,R17
                        .even
 0000           _Delayms::
 0000 00D0              rcall push_xgsetF000
 0002                   .dbline -1
 0002                   .dbline 20
 0002           ; /*******************************************
 0002           ;   文件:LED.C
 0002           ;   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
 0002           ;   硬件:ATMEGA16芯片
 0002           ;   日期:2006年12月10日 
 0002           ;   功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED
 0002           ;   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
 0002           ; /******************************************/
 0002           ; #include <iom16v.h>                   //包含型号头文件
 0002           ; #include <macros.h>                   //包含"位"操作头文件
 0002           ; #define  uchar unsigned char
 0002           ; #define  uint  unsigned int 
 0002           ; /*******************************************
 0002           ; 函数名称: Delayms
 0002           ; 功    能: 延长点亮或者熄灭LED的时间
 0002           ; 参    数: ms 延长多少毫秒
 0002           ; 返回值  : 无
 0002           ; ********************************************/
 0002           ; void Delayms(uint ms)
 0002           ; {
 0002                   .dbline 22
 0002           ;     uint i,j;
 0002           ;       for(i=0;i<ms;i++)
 0002 4427              clr R20
 0004 5527              clr R21
 0006 0BC0              rjmp L5
 0008           L2:
 0008                   .dbline 23
 0008           ;          {
 0008                   .dbline 24
 0008           ;          for(j=0;j<1141;j++);
 0008 6627              clr R22
 000A 7727              clr R23
 000C 02C0              rjmp L9
 000E           L6:
 000E                   .dbline 24
 000E           L7:
 000E                   .dbline 24
 000E 6F5F              subi R22,255  ; offset = 1
 0010 7F4F              sbci R23,255
 0012           L9:
 0012                   .dbline 24
 0012 6537              cpi R22,117
 0014 E4E0              ldi R30,4
 0016 7E07              cpc R23,R30
 0018 D0F3              brlo L6
 001A           X0:
 001A                   .dbline 25
 001A           ;        }
 001A           L3:
 001A                   .dbline 22
 001A 4F5F              subi R20,255  ; offset = 1
 001C 5F4F              sbci R21,255
 001E           L5:
 001E                   .dbline 22
 001E 4017              cp R20,R16
 0020 5107              cpc R21,R17
 0022 90F3              brlo L2
 0024           X1:
 0024                   .dbline -2
 0024           L1:
 0024                   .dbline 0 ; func end
 0024 00C0              rjmp pop_xgsetF000
 0026                   .dbsym r i 20 i
 0026                   .dbsym r j 22 i
 0026                   .dbsym r ms 16 i
 0026                   .dbend
 0026                   .dbfunc e One_led _One_led fV
 0026           ;              i -> <dead>
 0026           ;          light -> R20
 0026           ;         number -> R10
                        .even
 0026           _One_led::
 0026 AA92              st -y,R10
 0028 4A93              st -y,R20
 002A 422F              mov R20,R18
 002C A02E              mov R10,R16
 002E                   .dbline -1
 002E                   .dbline 36
 002E           ; }
 002E           ; 
 002E           ; /*******************************************
 002E           ; 函数名称: One_led
 002E           ; 功    能: 点亮或者熄灭指定的LED
 002E           ; 参    数: number--指定的LED
 002E           ;                 light--为1的时候为点亮LED,为0的时候为熄灭LED
 002E           ; 返回值  : 无
 002E           ; /********************************************/
 002E           ; void One_led(uchar number,uchar light)
 002E           ; {uchar i;
 002E                   .dbline 37
 002E           ;  if(light==1)            //点亮操作
 002E 4130              cpi R20,1
 0030 51F4              brne L11
 0032           X2:
 0032                   .dbline 38
 0032           ;  {
 0032                   .dbline 39
 0032           ;   PORTA|=BIT(number);   //更新数据
 0032 01E0              ldi R16,1
 0034 1A2D              mov R17,R10
 0036 00D0              rcall lsl8
 0038 2BB2              in R2,0x1b
 003A 202A              or R2,R16
 003C 2BBA              out 0x1b,R2
 003E                   .dbline 40
 003E           ;   Delayms(10);                           //调整时序
 003E 0AE0              ldi R16,10
 0040 10E0              ldi R17,0
 0042 DEDF              rcall _Delayms
 0044                   .dbline 41
 0044           ;  }
 0044 0BC0              rjmp L12
 0046           L11:
 0046                   .dbline 43
 0046           ;  else
 0046           ;  {
 0046                   .dbline 44
 0046           ;   PORTA&=~BIT(number);   //更新数据
 0046 01E0              ldi R16,1
 0048 1A2D              mov R17,R10
 004A 00D0              rcall lsl8
 004C 202E              mov R2,R16
 004E 2094              com R2
 0050 3BB2              in R3,0x1b
 0052 3220              and R3,R2
 0054 3BBA              out 0x1b,R3
 0056                   .dbline 45
 0056           ;   Delayms(10);                           //调整时序
 0056 0AE0              ldi R16,10
 0058 10E0              ldi R17,0
 005A D2DF              rcall _Delayms
 005C                   .dbline 46
 005C           ;  }
 005C           L12:
 005C                   .dbline -2
 005C           L10:
 005C                   .dbline 0 ; func end
 005C 4991              ld R20,y+
 005E A990              ld R10,y+
 0060 0895              ret
 0062                   .dbsym l i 1 c
 0062                   .dbsym r light 20 c
 0062                   .dbsym r number 10 c
 0062                   .dbend
 0062                   .dbfunc e All_led _All_led fV
 0062           ;          light -> R10
                        .even
 0062           _All_led::
 0062 AA92              st -y,R10
 0064 A02E              mov R10,R16
 0066                   .dbline -1
 0066                   .dbline 55
 0066           ; }
 0066           ; /*******************************************
 0066           ; 函数名称: All_led
 0066           ; 功    能: 点亮或者熄灭全部LED
 0066           ; 参    数: light--为1的时候为点亮全部LED,为0的时候为熄灭全部LED
 0066           ; 返回值  : 无
 0066           ; /********************************************/
 0066           ; void All_led(uchar light)
 0066           ; {
 0066                   .dbline 56
 0066           ;  if(light)
 0066 AA20              tst R10
 0068 31F0              breq L14
 006A           X3:
 006A                   .dbline 57
 006A           ;  {
 006A                   .dbline 58
 006A           ;   PORTA=0XFF;  //输出数据
 006A 8FEF              ldi R24,255
 006C 8BBB              out 0x1b,R24
 006E                   .dbline 59
 006E           ;   Delayms(5);                  //调整时序
 006E 05E0              ldi R16,5
 0070 10E0              ldi R17,0
 0072 C6DF              rcall _Delayms
 0074                   .dbline 60
 0074           ;  }
 0074 05C0              rjmp L15
 0076           L14:
 0076                   .dbline 62
 0076           ;  else
 0076           ;  {
 0076                   .dbline 63
 0076           ;   PORTA=0X00;  //输出数据
 0076 2224              clr R2
 0078 2BBA              out 0x1b,R2
 007A                   .dbline 64
 007A           ;   Delayms(5);                  //调整时序
 007A 05E0              ldi R16,5
 007C 10E0              ldi R17,0
 007E C0DF              rcall _Delayms
 0080                   .dbline 65
 0080           ;  }
 0080           L15:
 0080                   .dbline -2
 0080           L13:
 0080                   .dbline 0 ; func end
 0080 A990              ld R10,y+
 0082 0895              ret
 0084                   .dbsym r light 10 c
 0084                   .dbend
 0084                   .dbfunc e Flow_LED _Flow_LED fV
 0084           ;              i -> R20
 0084           ;             MS -> R10
                        .even
 0084           _Flow_LED::
 0084 AA92              st -y,R10
 0086 4A93              st -y,R20
 0088 A02E              mov R10,R16
 008A                   .dbline -1
 008A                   .dbline 74
 008A           ; }
 008A           ; /*******************************************
 008A           ; 函数名称: Flow_led
 008A           ; 功    能: 流水灯(循环一次)
 008A           ; 参    数: MS--点亮相邻LED的时间间隔,单位是毫秒
 008A           ; 返回值  : 无
 008A           ; /********************************************/
 008A           ; void Flow_LED(uchar MS)
 008A           ; {
 008A                   .dbline 76
 008A           ;  uchar i;
 008A           ;  for(i=0;i<8;i++)     //循环8次,8个LED依次点亮
 008A 4427              clr R20
 008C 0BC0              rjmp L20
 008E           L17:
 008E                   .dbline 77
 008E           ;  {
 008E                   .dbline 78
 008E           ;   All_led(0); //全部熄灭
 008E 0027              clr R16

⌨️ 快捷键说明

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