久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

PIC單片機內部EEPROM讀寫程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年09月26日   【字體:
 #INCLUDE"P16F877.inc"
   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 B'00000001';位碼
   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
;********************************************************
;   定時中斷程序
;********************************************************
ZD01  BCF  INTCON,GIE;關總中斷
   BTFSS INTCON,T0IF;判斷是否產生定時中斷
   GOTO ZD03;否跳出是繼續執行
;***************************************************
;     保護現場
   MOVWF  W_TEMP;W備份到W_TEMP中
   SWAPF  STATUS,0;STATUS半字交換后送W
   CLRF  STATUS;選擇體0為當前體備份
   MOVWF  STATUS_TEMP;將原來的STATUS送體0上的
   MOVF  PCLATH,0;PCLATH送W 
   MOVWF  PCLATH_TEMP;W送備份寄存器中
   CLRF  PCLATH ;設置為0頁
;***************************************************
   BCF  INTCON,T0IF
   BSF  STATUS,RP0;體1
   BCF  STATUS,RP1;
   MOVLW 0;
   MOVWF TRISC;RB口設為輸出口
   MOVWF TRISD;RD口設為輸出口
   BCF  STATUS,RP0;體0
   BCF  STATUS,RP1;
   MOVLW 0FFH;
   MOVWF PORTC;RB口輸出高電平
   MOVLW 0
   MOVWF PORTD;RD口輸出低電平起清屏作用
   
   MOVFW INDF;間接尋址顯示數據  
   CALL Q1;查數據表
   MOVWF PORTC;顯示斷碼輸出到RB口
   INCF FSR,1;間接尋址地址加1
   MOVFW 41H ;位碼
   MOVWF PORTD;位碼輸出到RD口
   RLF  41H,0;處理C
   RLF  41H,1;左移位碼
   DECFSZ 40H,1;判斷是否顯示完4位
   GOTO ZD02;否則繼續顯示
   MOVLW 4;顯示位數
   MOVWF 40H;
   MOVLW B'00000001';位碼
   MOVWF 41H;
   MOVLW 50H;
   MOVWF FSR ;間接尋址
ZD02  MOVLW 0FFH;
   MOVFW TMR0;重裝初值
;***************************************************
;     恢復現場
   CLRF STATUS;恢復到體0
   MOVF    PCLATH_TEMP,0;開始恢復數據 
   MOVWF PCLATH;恢復PCLATH
   SWAPF STATUS_TEMP,0
   MOVWF STATUS;恢復STATUS
   SWAPF W_TEMP,1;半字交換后放回
   SWAPF W_TEMP,0;再半字交換后送W
;***************************************************
ZD03  BSF  INTCON,GIE;開總中斷
   RETFIE ;中斷返回

;********************************************
;    數據表
;********************************************      
   END 
關閉窗口

相關文章

主站蜘蛛池模板: 日韩成人精品一区二区三区 | 青青久在线视频 | 亚洲高清视频在线观看 | 欧美xxxx网站 | 日韩国产精品一区二区三区 | 国产美女高潮 | 日韩靠逼| 亚洲精品一区二区三区蜜桃久 | 91麻豆精品国产91久久久久久久久 | 亚洲永久免费 | 国产高清一区二区 | 国产一二三区免费视频 | 久久国产精品免费一区二区三区 | 99精品国产一区二区青青牛奶 | 国产成人精品午夜 | 99精品电影| 一区二区视屏 | 一区观看 | 国产观看 | 中文字幕在线观看日韩 | 国产精品久久久久久久毛片 | 嫩草视频入口 | 91精品国产乱码麻豆白嫩 | 色先锋影音 | 欧洲免费视频 | 三级av在线| 国产精品特级片 | 日韩一区中文字幕 | a视频在线| 中文字幕91av | 国产精品久久精品 | 亚洲高清在线 | 久久蜜桃av一区二区天堂 | 91精品久久久久久久久久入口 | 国产精品久久久久999 | 欧美精品一二三 | 成人午夜视频在线观看 | 综合二区 | 91毛片网| 日韩波多野结衣 | 久久国产精品一区二区三区 |