|
嗨,伙计们,
这是我的第一个帖子,所以请对我宽容点
我已经花了大量的时间试图写入内部eeprom在一个16F628A没有成功。我的项目非常简单。只需一个按钮,三个led灯中的一个就能点亮这三个。当电源关闭和重新打开时,我想让led在电源关闭时,回到它们原来的状态。IE:如果两个led灯亮了,那么同样的两个led应该在电源打开时出现。
我的软件升级led没有问题,但它要么不写入EEPROM,要么在电源启动时不读取EEPROM。我已经尝试了我能想到的几乎所有方法,我怀疑我有一个分页问题,但如果有一个正确的方向,我会很感激。
我使用MPLAB IDE V8.92,用汇编语言编写和PICKIT3编程
代码紧随其后,任何指针都能收到。干杯,马克
初始化
Movlw 0x07;使端口引脚数字化
MOVWF CMCON
净水器RP0
MOVLW B ' 10000000 '
MOVWF TRISA
MOVLW B ' 00000000 '
MOVWF TRISB
CLRWDT
Movlw b '01010111';启用端口b上拉
MOVWF OPTREG
供应量RP0
供应量一国
设置端口b上的所有引脚为低(所有输出关闭)
CLRF端口;所有端口一个引脚都是输出,除了sw输入-高输入=关闭或无有源- sw输入低当有源
CLRF LAMPS_REG
CLRF ON_TIMER
CLRW
;**************** 主程序从这里开始 ******************
测试
净水器着干活;闪烁一led显示电源上电
叫HALF_SEC
供应量预计着干活
叫HALF_SEC
叫HALF_SEC
叫HALF_SEC
开始;从eeprom加载
CLRW
供应量RP0
MOVLW 0 xf1;eeprom内存中的文件地址- 0x00是eeprom中的第一个地址
净水器RP0
MOVWF EEADR
净水器EECON1 0;设置读取位
供应量RP0
MOVF EEDATA W
MOVWF LAMPS_REG;将内存放入规则中
叫LAMPS_CHECK
主要
BTFSS按钮
转到移动;按下开关,开关向下
转到主要;世馨没有按所以继续找
移动;内置照明堆栈
叫SHORT_SEC
BTFSC按钮;仔细检查,不要误推
转到主要;假新闻,所以回到循环查找
;看看哪些灯是亮着的
BTFSS LAMPS_REG 0;检查灯是否亮着
GOTO MAKE_1_ON
BTFSS LAMPS_REG 1
GOTO MAKE_2_ON
BTFSS LAMPS_REG 2
GOTO MAKE_3_ON
;在这里添加其余的灯,包括关闭所有的灯,如果他们现在都是打开的
MAKE_1_ON
净水器LAMPS_REG 0;在注册表中设置位
净水器着干活;打开灯
叫WRITE_NEW_LAMPS
转到主要
MAKE_2_ON
净水器LAMPS_REG 1
净水器OUT2
叫WRITE_NEW_LAMPS
转到主要
MAKE_3_ON
净水器LAMPS_REG 2
净水器OUT3
叫WRITE_NEW_LAMPS
转到主要
CLEAR_ALL;如果所有的灯都亮着,我们就会到达这里,我们想要清除它们
CLRF LAMPS_REG
CLRF PORTB
CLRF门
转到主要
WAITING_RELEASE
BTFSS按钮;等待按钮被释放,以避免led双超前
GOTO WAITING_RELEASE
转到主要
;************************** 下面的电话在这里 ****************************
WRITE_NEW_LAMPS;写信给eepm
MOVLW 0 xf1
净水器RP0
MOVWF EEADR
净水器雷恩
供应量RP0
MOVF LAMPS_REG W
净水器RP0
MOVWF EEDATA
MOVLW H“55”
MOVWF EECON2
MOVLW H 'AA”
MOVWF EECON2
净水器EECON1 1
BTFSC EECON1 1
转到1美元;等待写完成
供应量雷恩
供应量RP0
BTFSS按钮
转到1美元
返回
LAMPS_CHECK
BTFSC LAMPS_REG 0;检查各位置,按要求设置灯位
净水器着干活
BTFSC LAMPS_REG 1
净水器OUT2
BTFSC LAMPS_REG 2
净水器OUT3
返回
;下面是延迟例程
******************************************** 结束 *********************************************