本程序利用PIC18单片机实现了对EEPROM的读写。应用背景是”汽车里程表”,简单介绍下程序功能和流程。
单片机接受来自RA4管脚的计数脉冲信号,应用中这个脉冲信号通常由一个传感器来产生,计数脉冲被设定为上升沿触发。计数器溢出时,需要更新一个用于存储当前里程的RAM寄存器单元COUNT,可以理解为车轮转了一定圈数后,里程表的增加一定的里程数。
RB0管脚用来接收一个外部中断信号,接收到中断信号后,在中断服务程序中将COUNT的值即当前里程数保存至EEPROM的00H单元。这样可以配合外部电路实现当单片机掉电时自动保存里程表数值的功能,即汽车熄火时保存里程表,以减少对EEPROM的读写次数。
单片机启动时,首先应该到EEPROM的相应单元读取里程表的当前值,并在此基础上进行累加。
程序中为了调试方便,还将COUNT的数值同步地通过8个LED以二进制形式较直观地显示了出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | LOOP BCF INTCON, T0IF ; 清TMR0中断标志 MOVLW TMR0B MOVWF TMR0L ; 装入计数初值 253 BSF T0CON, TMR0ON ; 启动计数器 TEST BTFSS INTCON, T0IF ; 检测TMR0是否溢出 GOTO TEST INCF COUNT, F ; 计数加一 MOVFF COUNT, PORTD ; 输出,显示 GOTO LOOP WIRT_EE ; 写EEPROM BCF EECON1, EEPGD BCF EECON1, CFGS ; 设定EECON1控制寄存器 BSF EECON1, WREN ; EEPROM写使能 BCF INTCON, GIE ; 写EEPROM时需要关闭一切中断 |
