PIC单片机内部EEPROM读写程序
W_TEMP EQU 20H ; 实际上20H、A0H、120H和1A0H
STATUS_TEMP EQU 21H ;在体0中建立保护单元
PCLATH_TEMP EQU 22H ;在体0中建立保护单元
ORG 000H
GOTO A1
ORG 004H;定时中断入口地址
GOTO ZD01;
ORG 0CH
Q1 ADDWF PCL,1
RETLW 00C0H ;0
RETLW 00F9H ;1
RETLW 00A4H ;2
RETLW 00B0H ;3
RETLW 0099H ;4
RETLW 0092H ;5
RETLW 0082H ;6
RETLW 00F8H ;7
RETLW 0080H ;8
RETLW 0090H ;9
RETLW 0088H ;A
RETLW 0083H ;B
RETLW 00C6H ;C
RETLW 00A1H ;D
RETLW 0086H ;E
RETLW 008EH ;F
A1 MOVLW 1;位1显示数
MOVWF 50H;
MOVLW 2;位2显示数
MOVWF 51H;
MOVLW 3;位3显示数
MOVWF 52H;
MOVLW 4;位4显示数
MOVWF 53H;
CLRF 60H
MOVLW 4;显示位数
MOVWF 40H;
MOVLW B00000001;位码
MOVWF 41H;
MOVLW 50H;
MOVWF FSR ;间接寻址
BSF STATUS,RP0;选择体1
BCF STATUS,RP1;
MOVLW 00H;1:2TMRO比例
MOVWF OPTION_REG;分频1/2
BCF STATUS,RP0;体0
BCF STATUS,RP1;
MOVLW 0FFH;
MOVFW TMR0;初值
BCF INTCON,T0IF;清定时中断标志
BSF INTCON,T0IE;开定时中断
BSF INTCON,GIE;开总中断
;**********************************************************
; 按键修改数据程序
;**********************************************************
A2 BSF STATUS,RP0
BCF STATUS,RP1;体1
MOVLW 0FFH
MOVWF TRISB;设置B口为输入口
BCF STATUS,RP0
BCF STATUS,RP1;体0
BTFSC PORTB,0;判断B口第0位是否按下
GOTO A3;位0则按下按键
MOVLW 1;按下存1到EEPROM
MOVWF 61H;数据寄存器
CALL WR1;写数据到EEPROM
A3 BCF STATUS,RP0
BCF STATUS,RP1;体0
BTFSC PORTB,1;判断B口第1位是否按下
GOTO A4;
MOVLW 2;按下存2到EEPROM
MOVWF 61H;数据寄存器
CALL WR1;写数据到寄存器
A4 BCF STATUS,RP0;
BCF STATUS,RP1;体0
BTFSC PORTB,2;判断B口第2位是否按下
GOTO A5;
MOVLW 3;
MOVWF 61H;
CALL WR1;
A5 BCF STATUS,RP0;
BCF STATUS,RP1;
BTFSC PORTB,3;
GOTO A6;
MOVLW 4;
MOVWF 61H;
CALL WR1;
A6 BCF STATUS,RP0;
BCF STATUS,RP1;
BTFSC PORTB,4;
GOTO A7;
MOVLW 5;
MOVWF 61H;
CALL WR1;
A7 BCF STATUS,RP0;
BCF STATUS,RP1;
BTFSC PORTB,5;
GOTO A8;
MOVLW 6;
MOVWF 61H;
CALL WR1;
A8 BCF STATUS,RP0;
BCF STATUS,RP1;
BTFSC PORTB,6;
GOTO A9;
MOVLW 7;
MOVWF 61H;
CALL WR1;
A9 BCF STATUS,RP0;
BCF STATUS,RP1;
BTFSC PORTB,7;
GOTO A10;
MOVLW 8;
MOVWF 61H;
CALL WR1;
A10
CALL RD01;调用读数据程序
GOTO A2;
;***********************************************
; 写数据子程序
;***********************************************
WR1 BSF STATUS,RP0;
BSF STATUS,RP1;体3
BTFSC EECON1,WR;判断是否在写数据
GOTO $-1;
BCF STATUS,RP0;
BCF STATUS,RP1;体0
MOVFW 60H;EEPROM目标地址
BCF STATUS,RP0
BSF STATUS,RP1;体2
MOVWF EEADR;EEPROM目标地址寄存器
BCF STATUS,RP0
BCF STATUS,RP1;体0
MOVFW 61H;需写入数据
BCF STATUS,RP0
BSF STATUS,RP1;体2
MOVWF EEDATA;EEPROM数据寄存器
BSF STATUS,RP0
BSF STATUS,RP1;体3
BCF EECON1,EEPGD;选择为EEPROM模式
BSF EECON1,WREN;允许使能
;***************************************************
; 写数据5指令序列PIC特定没有为什么不允许能改变
MOVLW 55H ;
MOVWF EECON2 ;55H送EECON2
MOVLW 0AAH;
MOVWF EECON2 ;AAH送EECON2
BSF EECON1,WR ;启动写操作
;
;**************************************************
BTFSC EECON1,WR;判断是否学完成
GOTO $-1;
BCF STATUS,RP0;恢复体0
BCF STATUS,RP1;
RETURN;
;**************************************************
; 读EEPROM数据子程序
;**************************************************
RD01 BCF STATUS,RP0;
BSF STATUS,RP1;体2
MOVLW 0;目标地址
MOVWF EEADR;目标地址寄存器
BSF STATUS,RP0;
BSF STATUS,RP0;体3
BCF EECON1,EEPGD;选择EEPROM模式
BSF EECON1,RD;启动读操作
BTFSC EECON1,RD;判断是否读取完
GOTO $-1;
BCF STATUS,RP0;
BSF STATUS,RP1;体2
MOVFW EEDATA;将数据存到W中
BCF STATUS,RP0;
BCF STATUS,RP1;体0
MOVWF 53H ;将读取数存到55H
RETURN
;********************************************************
; 定时中断程序
;******************
PIC单片机内部EEPROM读写程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)