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

📄 eeprom的读写例子.bas

📁 ATmega16写EEPROM的例子 BASCOM-AVR编译
💻 BAS
字号:
 '(          Eeprom的读写例子
 几乎所有的avr丹片机都带有flash Rom、sram、eeprom存储器,flash Rom是程序存储器,不怕掉电;sram是静态数据存储器,掉电后数据会丢失;eeprom是电擦写存储器,不怕掉电,一般用来存储经常需要修改的数据。

    Eeprom的擦写一般有两种方法,一种是丹片机正常运行时自身程序对eeprom进行擦写,一种就是用编程器对eeprom进行独立的擦写。

1:下面是丹片机正常运行时自身程序对eeprom进行擦写例子:
')

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
'程序功能, 按一下INT0按键,那么PC5端口将输出0.5Hz的方波,
' 再按一下INT0按键,那么PC5端口将输出0.2Hz的方波,
'重新启动后PC5的输出频率与重新启动前的状态相同
'-------------------------------------------------------------------------------
$regfile = "m88def.dat"
$crystal = 1000000
Config Int0 = Falling                                       '定义下降沿触发INT0中断
Ddrd.2 = 0
Portd.2 = 1
Enable Interrupts                                           '打开全局中断
Enable Int0                                                 '打开INT0中断
On Int0 Int0_ok                                             '中断INT0入口
'-------------------------------------------------------------------------------
'定义变量A是字节型,并且存放在EEPROM中,存放位置由编译器自动安排
'主程序没有对 A 进行赋值,所以第一次运行时 A 的数据可能是255
Dim A As Eram Byte
Dim B As Byte
'-------------------------------------------------------------------------------
Ddrc.5 = 1
Portc.5 = 0
B = A
Do
    Waitms B
    Portc.5 = Not Portc.5                                   '取反操作
Loop
End
'-------------------------------------------------------------------------------
Int0_ok:
    If A = 100 Then
        A = 250
        Else
        A = 100
    End If
    B = A
Return

'(上面的程序也可以改写成如下:

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
$regfile = "m88def.dat"
$crystal = 1000000
Config Int0 = Falling                                       '定义下降沿触发INT0中断
Ddrd.2 = 0
Portd.2 = 1
Enable Interrupts                                           '打开全局中断
Enable Int0                                                 '打开INT0中断
On Int0 Int0_ok                                             '中断INT0入口
'-------------------------------------------------------------------------------
Dim A As Byte
'-------------------------------------------------------------------------------
Ddrc.5 = 1
Portc.5 = 0
Readeeprom A , 2                                            '读取EEPROM地址2的数值并且赋值给A
Do
    Waitms A
    Portc.5 = Not Portc.5                                   '取反操作
Loop
End
'-------------------------------------------------------------------------------
Int0_ok:
    If A = 100 Then
        A = 250
        Else
        A = 100
    End If
    Writeeeprom A , 2                                       '将A的数值保存在EEPROM的地址2中
Return

2:用编程器对eeprom进行独立的写操作时,首先必须得有准备写入的eep文件,bascom -avr可以产生这种文件 , 程序如下:

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
$regfile = "m8515.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3
Config Lcd = 16 * 2
Dim A(9) As Byte
Dim I As Byte

Cls
Waitms 100
For I = 3 To 7
    Readeeprom A(i) , I                                     '从EEPROM的地址I开始读数据,并且赋值给数组A(I)
    Lcd A(i) ; "|";
Next I
End

$eeprom                                                     '告诉编译器数组Shuzu的数据将存放在EEPROM
$eepromhex                                                  '要求编译器产生适合烧写EEPROM的hex文件
Shuzu:
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

上面的这个程序中lcd的显示结果是 4|5|6|7|8|
')

⌨️ 快捷键说明

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