'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