?? main.lis
字號(hào):
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\011-EEPROM-LED\main.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; i -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 18
0004 ; /*
0004 ; 實(shí)驗(yàn)十一:
0004 ;
0004 ; 片內(nèi)EEPROM讀寫實(shí)險(xiǎn)。
0004 ; 1、用內(nèi)部EEPROM記錄CPU啟動(dòng)次數(shù),并在PB口上顯示出來。
0004 ; 2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時(shí)。
0004 ; 3、進(jìn)行此實(shí)驗(yàn)請(qǐng)插上JP1的所有8個(gè)短路塊,JP7(LED_EN)短路塊。
0004 ; 4、通過此實(shí)驗(yàn),可以對(duì)對(duì)內(nèi)部EEPROM有個(gè)初步認(rèn)識(shí),了解EEPROM函數(shù)的操作。
0004 ;
0004 ; AVR mega16學(xué)習(xí)板
0004 ; www.iccavr.com
0004 ; 14:42 2007-4-9
0004 ; */
0004 ;
0004 ; #include "iom16v.h"
0004 ;
0004 ; /*延時(shí)函數(shù)*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 21
0004 41E0 ldi R20,1
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 21
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 1; a < i; a++) {
0008 .dbline 22
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 22
000C .dbline 23
000C .dbline 24
000C L7:
000C .dbline 22
000C 6395 inc R22
000E L9:
000E .dbline 22
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 25
0012 L3:
0012 .dbline 21
0012 4395 inc R20
0014 L5:
0014 .dbline 21
0014 4017 cp R20,R16
0016 C0F3 brlo L2
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset2
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r a 20 c
001E .dbsym r b 22 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e eprom_read _eprom_read fV
001E ; p_buff -> R20,R21
001E ; number -> R18
001E ; addr -> R16,R17
.even
001E _eprom_read::
001E 0E940000 xcall push_gset1
0022 4A81 ldd R20,y+2
0024 5B81 ldd R21,y+3
0026 .dbline -1
0026 .dbline 30
0026 ; for (b = 1; b; b++) {
0026 ; ;
0026 ; }
0026 ; }
0026 ; }
0026 ;
0026 ; /*EEPROM讀取函數(shù)*/
0026 ; /*addr:地址;number:長(zhǎng)度;p_buff:讀出數(shù)據(jù)存放指針*/
0026 ; void eprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff) {
0026 L11:
0026 .dbline 32
0026 L12:
0026 .dbline 32
0026 ;
0026 ; while(EECR & (1 << EEWE));
0026 E199 sbic 0x1c,1
0028 FECF rjmp L11
002A .dbline 34
002A ;
002A ; EEARH = 0x00;
002A 2224 clr R2
002C 2FBA out 0x1f,R2
002E 09C0 xjmp L15
0030 L14:
0030 .dbline 36
0030 .dbline 37
0030 1801 movw R2,R16
0032 0F5F subi R16,255 ; offset = 1
0034 1F4F sbci R17,255
0036 2EBA out 0x1e,R2
0038 .dbline 38
0038 E09A sbi 0x1c,0
003A .dbline 39
003A 2DB2 in R2,0x1d
003C FA01 movw R30,R20
003E 2192 st Z+,R2
0040 AF01 movw R20,R30
0042 .dbline 40
0042 L15:
0042 .dbline 36
0042 ;
0042 ; while(number --) {
0042 222E mov R2,R18
0044 3324 clr R3
0046 2150 subi R18,1
0048 2220 tst R2
004A 91F7 brne L14
004C .dbline -2
004C L10:
004C 0E940000 xcall pop_gset1
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r p_buff 20 pc
0052 .dbsym r number 18 c
0052 .dbsym r addr 16 i
0052 .dbend
0052 .dbfunc e eprom_write _eprom_write fV
0052 ; p_buff -> R20,R21
0052 ; number -> R18
0052 ; addr -> R16,R17
.even
0052 _eprom_write::
0052 0E940000 xcall push_gset1
0056 4A81 ldd R20,y+2
0058 5B81 ldd R21,y+3
005A .dbline -1
005A .dbline 45
005A ; EEARL = addr ++;
005A ; EECR |= (1 << EERE);
005A ; *p_buff++ = EEDR;
005A ; }
005A ; }
005A ;
005A ; /*EEPROM寫入函數(shù)*/
005A ; /*addr:地址;number:長(zhǎng)度;p_buff:寫入數(shù)據(jù)存放指針*/
005A ; void eprom_write(unsigned int addr, unsigned char number, unsigned char *p_buff) {
005A .dbline 47
005A ;
005A ; EEARH = 0x00;
005A 2224 clr R2
005C 2FBA out 0x1f,R2
005E 0CC0 xjmp L19
0060 X0:
0060 .dbline 49
0060 ;
0060 ; while(number --) {
0060 L21:
0060 .dbline 50
0060 L22:
0060 .dbline 50
0060 E199 sbic 0x1c,1
0062 FECF rjmp L21
0064 .dbline 51
0064 1801 movw R2,R16
0066 0F5F subi R16,255 ; offset = 1
0068 1F4F sbci R17,255
006A 2EBA out 0x1e,R2
006C .dbline 52
006C FA01 movw R30,R20
006E 2190 ld R2,Z+
0070 AF01 movw R20,R30
0072 2DBA out 0x1d,R2
0074 .dbline 53
0074 E29A sbi 0x1c,2
0076 .dbline 54
0076 E19A sbi 0x1c,1
0078 .dbline 55
0078 L19:
0078 .dbline 49
0078 222E mov R2,R18
007A 3324 clr R3
007C 2150 subi R18,1
007E 2220 tst R2
0080 79F7 brne L22
0082 .dbline -2
0082 L17:
0082 0E940000 xcall pop_gset1
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbsym r p_buff 20 pc
0088 .dbsym r number 18 c
0088 .dbsym r addr 16 i
0088 .dbend
0088 .dbfunc e main _main fV
0088 ; temp -> y+2
.even
0088 _main::
0088 2397 sbiw R28,3
008A .dbline -1
008A .dbline 59
008A ; while(EECR & (1 << EEWE));
008A ; EEARL = addr ++;
008A ; EEDR = *p_buff ++;
008A ; EECR |= (1 << EEMWE);
008A ; EECR |= (1 << EEWE);
008A ; }
008A ; }
008A ;
008A ; /*主函數(shù)*/
008A ; void main(void) {
008A .dbline 63
008A ;
008A ; unsigned char temp;
008A ;
008A ; DDRA = 0x00; /*方向輸入*/
008A 2224 clr R2
008C 2ABA out 0x1a,R2
008E .dbline 64
008E ; PORTA = 0xFF; /*打開上拉*/
008E 8FEF ldi R24,255
0090 8BBB out 0x1b,R24
0092 .dbline 65
0092 ; DDRB = 0xFF; /*方向輸出*/
0092 87BB out 0x17,R24
0094 .dbline 66
0094 ; PORTB = 0xFF; /*電平設(shè)置*/
0094 88BB out 0x18,R24
0096 .dbline 67
0096 ; DDRC = 0x00;
0096 24BA out 0x14,R2
0098 .dbline 68
0098 ; PORTC = 0xFF;
0098 85BB out 0x15,R24
009A .dbline 69
009A ; DDRD = 0x00;
009A 21BA out 0x11,R2
009C .dbline 70
009C ; PORTD = 0xFF;
009C 82BB out 0x12,R24
009E .dbline 72
009E ;
009E ; delay_ms(250); /*啟動(dòng)延時(shí)*/
009E 0AEF ldi R16,250
00A0 AFDF xcall _delay_ms
00A2 .dbline 73
00A2 ; eprom_read(0x10, 0x01, &temp); /*讀出記錄*/
00A2 CE01 movw R24,R28
00A4 0296 adiw R24,2
00A6 9983 std y+1,R25
00A8 8883 std y+0,R24
00AA 21E0 ldi R18,1
00AC 00E1 ldi R16,16
00AE 10E0 ldi R17,0
00B0 B6DF xcall _eprom_read
00B2 .dbline 74
00B2 ; PORTB = ~temp; /*顯示記錄*/
00B2 2A80 ldd R2,y+2
00B4 2094 com R2
00B6 28BA out 0x18,R2
00B8 .dbline 75
00B8 ; temp ++; /*刷新記錄*/
00B8 8A81 ldd R24,y+2
00BA 8F5F subi R24,255 ; addi 1
00BC 8A83 std y+2,R24
00BE .dbline 76
00BE ; eprom_write(0x10, 0x01, &temp); /*寫入記錄*/
00BE CE01 movw R24,R28
00C0 0296 adiw R24,2
00C2 9983 std y+1,R25
00C4 8883 std y+0,R24
00C6 21E0 ldi R18,1
00C8 00E1 ldi R16,16
00CA 10E0 ldi R17,0
00CC C2DF xcall _eprom_write
00CE L25:
00CE .dbline 78
00CE .dbline 79
00CE .dbline 80
00CE L26:
00CE .dbline 78
00CE FFCF xjmp L25
00D0 X1:
00D0 .dbline -2
00D0 L24:
00D0 2396 adiw R28,3
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym l temp 2 c
00D4 .dbend
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -