?? lesson1.lis
字號:
.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 + -