|
尊敬的马老师及所有大侠,辛苦了:
近日对着马老师《AVR单片机BASIC语言编程及开发》学EEPROM的操作,顺便搭了个
M8最小系统(就复位电路+3个led)验证,不料看似简单的EEPROM读写,让我晕头晕脑。
开始全用仿真验证,一点问题也没有,但只要一写到硬件M8中,执行结果问题来了
。为了最清楚观察问题,特编了个小程序,配合硬件进行验证。
'---------------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000
Dim E As Byte , X As Byte
Ddrb = &B00010001
Ddrc = &B00000001
$eeprom
Eep:
Data &H3 , &H6 '设I初值
Do
E = 0 : X = 0 '有无此行无差别
Readeeprom E , Eep '读I初值
Print "E'=" ; E
Readeeprom E
Print "Eo=" ; E
'不知何故,读得的E在硬件运行中始终=255 ,而在仿真中到是正确的
'用Readeeprom E , 1直接读也一样;用汇编语言块试过,结果也一样
X = E * 2
Print "Xo=" ; X
Lp:
Waitms 50
X = X - 1
Print "x=" ; X ; " e=" ; E '在仿真中显示正确
If E = &HFF Then Portc.0 = Not Portc.0 ' 演示时初LED不断快闪烁
'此处E 在硬件运行中始终=&HFF,且硬件的灯在闪。
'而在仿真中始终=&H7,且仿真的灯从不闪
If X < 1 Then
X = 0
Stp:
Portb.0 = Not Portb.0 ' 演示时为LED不断慢闪烁
Waitms 200
Goto Stp
End If
Portb.4 = Not Portb.4 ' 演示时初LED不断快闪烁
Goto Lp
Loop
End
'---------------------------------------------------------------------------
真不明白出了什么错,是我错?还是BASCOM-AVR IDE 1.11.9.0 的readeeprom 有
bug?敬请马老师指教。当然也欢迎其他大侠畅所欲言。不胜感谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|