📄 lesson1.lis
字号:
.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 + -