📄 eeprom.lis
字号:
0040 .dbline -1
0040 .dbline 88
0040 ; }
0040 ; /********************************************************
0040 ; 子程序名: usart_Init()
0040 ; 功 能: 串口初始化
0040 ; 输入参数: /
0040 ; 输出参数: /
0040 ; 描 述: /
0040 ; ********************************************************/
0040 ; void usart_Init (void)
0040 ; {
0040 .dbline 89
0040 ; CLI(); //关闭中断
0040 F894 cli
0042 .dbline 90
0042 ; UBRRL= (F_CPU/BAUDRATE/16-1)%256;
0042 83E3 ldi R24,51
0044 89B9 out 0x9,R24
0046 .dbline 91
0046 ; UBRRH= (F_CPU/BAUDRATE/16-1)/256;
0046 2224 clr R2
0048 20BC out 0x20,R2
004A .dbline 93
004A ; //UBRRL=51; //波特率寄存器,UART:9600bps,8.000MHz
004A ; UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //接收结束中断使能,RXD&TXD使能
004A 88E9 ldi R24,152
004C 8AB9 out 0xa,R24
004E .dbline 94
004E ; UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UCSZ0)|(1<<UCSZ1);
004E 86EA ldi R24,166
0050 80BD out 0x20,R24
0052 .dbline -2
0052 L19:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 .dbfunc e EEPROM_write _EEPROM_write fV
0054 ; uData -> R18
0054 ; uAddr -> R16,R17
.even
0054 _EEPROM_write::
0054 .dbline -1
0054 .dbline 106
0054 ; //访问UCSRC寄存器,偶校验,8个数据位,默认一个停止位,
0054 ; //SEI(); //开全局中断使能
0054 ; }
0054 ; /********************************************************
0054 ; 子程序名: EEPROM_write
0054 ; 功 能: 写一字节数据到片内指定地址单元
0054 ; 输入参数: /
0054 ; 输出参数: /
0054 ; 描 述: /
0054 ; ********************************************************/
0054 ; void EEPROM_write(uint uAddr,uchar uData)
0054 ; {
0054 .dbline 107
0054 ; EEAR = uAddr; //写操作的16位地址寄存器
0054 1FBB out 0x1f,R17
0056 0EBB out 0x1e,R16
0058 .dbline 108
0058 ; EEDR = uData; //写数据到数据寄存器
0058 2DBB out 0x1d,R18
005A .dbline 109
005A ; EECR |= (1<<EEMWE); //允许EEPROM操作
005A E29A sbi 0x1c,2
005C .dbline 110
005C ; EECR |= (1<<EEWE); //开始写操作
005C E19A sbi 0x1c,1
005E L21:
005E .dbline 112
005E L22:
005E .dbline 111
005E ; while (EECR & (1<<EEWE)) //等待写操作完成
005E E199 sbic 0x1c,1
0060 FECF rjmp L21
0062 .dbline -2
0062 L20:
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r uData 18 c
0064 .dbsym r uAddr 16 i
0064 .dbend
0064 .dbfunc e EEPROM_read _EEPROM_read fc
0064 ; uAddr -> R16,R17
.even
0064 _EEPROM_read::
0064 .dbline -1
0064 .dbline 122
0064 ; ;
0064 ; }
0064 ; /********************************************************
0064 ; 子程序名: EEPROM_read
0064 ; 功 能: 从片内指定地址单元读一字节数据
0064 ; 输入参数: /
0064 ; 输出参数: /
0064 ; 描 述: /
0064 ; ********************************************************/
0064 ; uchar EEPROM_read(uint uAddr)
0064 ; {
0064 L25:
0064 .dbline 124
0064 L26:
0064 .dbline 123
0064 ; while (EECR & (1<<EEWE)) //等待前一次写操作完成
0064 E199 sbic 0x1c,1
0066 FECF rjmp L25
0068 .dbline 125
0068 ; ;
0068 ; EEAR = uAddr; //写操作的16位地址寄存器
0068 1FBB out 0x1f,R17
006A 0EBB out 0x1e,R16
006C .dbline 126
006C ; EECR |= (1<<EERE); //开始读操作
006C E09A sbi 0x1c,0
006E .dbline 127
006E ; return EEDR; //输出读出的数据
006E 0DB3 in R16,0x1d
0070 .dbline -2
0070 L24:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r uAddr 16 i
0072 .dbend
0072 .dbfunc e main _main fV
0072 ; temp -> <dead>
0072 ; i -> R20
0072 ; k -> R22
0072 ; j -> R20
.even
0072 _main::
0072 .dbline -1
0072 .dbline 131
0072 ; }
0072 ; //*****************主程序**********************************
0072 ; void main (void)
0072 ; {
0072 .dbline 133
0072 ; uchar temp,i,j,k;
0072 ; mcu_Init(); //单片机初始化
0072 E3DF rcall _mcu_Init
0074 .dbline 134
0074 ; usart_Init(); //串口初始化
0074 E5DF rcall _usart_Init
0076 .dbline 135
0076 ; i=EEPROM_read(0x10); //读片内EEPROM地址为0x10的数据,
0076 00E1 ldi R16,16
0078 10E0 ldi R17,0
007A F4DF rcall _EEPROM_read
007C 402F mov R20,R16
007E .dbline 136
007E ; Send_word(i); //发送数据到PC,这个数是掉电前保存的。
007E D5DF rcall _Send_word
0080 0BC0 rjmp L30
0082 L29:
0082 .dbline 138
0082 .dbline 139
0082 D7DF rcall _receive_word
0084 402F mov R20,R16
0086 .dbline 140
0086 242F mov R18,R20
0088 00E1 ldi R16,16
008A 10E0 ldi R17,0
008C E3DF rcall _EEPROM_write
008E .dbline 142
008E 00E1 ldi R16,16
0090 10E0 ldi R17,0
0092 E8DF rcall _EEPROM_read
0094 602F mov R22,R16
0096 .dbline 143
0096 C9DF rcall _Send_word
0098 .dbline 144
0098 L30:
0098 .dbline 137
0098 F4CF rjmp L29
009A X0:
009A .dbline -2
009A L28:
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym l temp 1 c
009C .dbsym r i 20 c
009C .dbsym r k 22 c
009C .dbsym r j 20 c
009C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -