;**********************************************************
;名称:写EEPROM
;目的:写进EEPROM的数据
;入口: EEADRBUF(存放数据地址)EEDATBUF(存放数据)
;出口:无
;**********************************************************
MOVLW DATA ;修改数值
MOVWF EEDATBUF
MOVLW ADR ;修改数值
MOVWF EEADRBUF
BANKSEL EEADRBUF ;选BANK
MOVF EEADRBUF,0 ;送地址
BANKSEL EEADR ;选BANK
MOVWF EEADR ;
BANKSEL EEDATBUF ;
MOVF EEDATBUF,0 ;送数据
BANKSEL EEDATA ;选BANK
MOVWF EEDATA ;
;
BANKSEL EECON1 ;选BANK
BCF EECON1,7 ;POINT DATA
BSF EECON1,2 ;写enable
;
BCF INTCON,7
MOVLW H'55'
MOVWF EECON2
MOVLW H'AA'
MOVWF EECON2
;
BSF EECON1,1 ;开始写
BTFSC EECON1,1 ;写操作是否完成
GOTO $ - 1
BCF EECON1,2 ;写保护
BANKSEL EEDATBUF ;选BANK0
RETURN
;***********************************
;名称:读EEPROM
;目的:读出EEPROM中XXXXH存放的数据
;入口: EEADRBUF(存放地址)
;出口:EEDATBUF(存放数据)
;***********************************
MOVLW ADR ;修改数值
MOVWF EEADRBUF
BANKSEL EEADRBUF ;选BANK
MOVF EEADRBUF,0 ;送地址
BANKSEL EEADR ;选BANK
MOVWF EEADR ;
BANKSEL EECON1 ;选BANK
BCF EECON1,7 ;POINT DATA
BSF EECON1,0 ;开始读
BANKSEL EEDATA
MOVF EEDATA,0 ;EEDAT TO W
BANKSEL EEDATBUF ;选BANK0
MOVWF EEDATBUF ;
RETURN
;***********************************
;名称:ADC
;目的:模拟数值转换为数字数值
;入口: ADCON0,ADCON1
;出口:ADERS(模拟信号的数值)
;***********************************
ADC
BANKSEL PIR1 ;Bank 0
MOVLW DATA?
MOVWF ADCON0 ;左对齐,RB5为输入
;AD转换初始化
BANKSEL PIE1 ;Bank 1
MOVLW DATA? ;外部时钟为4M
MOVWF ADCON1 ;时钟频率为Fosc/8
BANKSEL PIR1 ;Bank 0
BCF PIR1,6 ;清AD中断标志位
CALL DEL300MS
BSF ADCON0,1 ;启动转换
BTFSC ADCON0,1 ;转换结束
GOTO $-1
BCF ADCON0,0 ;关闭AD
RETURN
;********************************************************
;子程序名称:KEYSCAN
;功能:查询按键
;入口:KEY0-KEY7
;出口:FALG的相应位为1
;********************************************************
KEYSCAN ;清标志位清
CLRF FLAG
KEY0 ;按键0
BTFSC KEY0?
GOTO KEY1
CALL DEL120MS
BTFSC KEY0?
GOTO KEY1
KEY0A ;按键释放
BTFSC KEY0?
GOTO KEY0B
GOTO KEY0A
KEY0B ;按键确定
BSF FLAG,0
GOTO KSOUT
KEY1 ;按键1
BTFSC KEY1?
GOTO KEY2
CALL DEL120MS
BTFSC KEY0?
GOTO KEY2
KEY1A ;按键释放
BTFSC KEY1?
GOTO KEY1B
GOTO KEY1A
KEY1B ;按键确定
BSF FLAG,1
GOTO KSOUT
KEY2 ;按键2
BTFSC KEY2?
GOTO KEY3
CALL DEL120MS
BTFSC KEY2?
GOTO KEY3
KEY2A ;按键释放
BTFSC KEY2?
GOTO KEY2B
GOTO KEY2A
KEY2B ;按键确定
BSF FLAG,2
GOTO KSOUT
KEY3 ;按键3
BTFSC KEY3?
GOTO KEY4
CALL DEL120MS
BTFSC KEY3?
GOTO KEY4
KEY3A ;按键释放
BTFSC KEY3?
GOTO KEY3B
GOTO KEY3A
KEY3B ;按键确定
BSF FLAG,3
GOTO KSOUT
KEY4 ;按键4
BTFSC KEY4?
GOTO KEY5
CALL DEL120MS
BTFSC KEY4?
GOTO KEY5
KEY4A ;按键释放
BTFSC KEY4?
GOTO KEY4B
GOTO KEY4A
KEY4B ;按键确定
BSF FLAG,4
GOTO KSOUT
KEY5 ;按键5
BTFSC KEY5?
GOTO KEY6
CALL DEL120MS
BTFSC KEY5?
GOTO KEY6
KEY5A ;按键释放
BTFSC KEY5?
GOTO KEY5B
GOTO KEY5A
KEY5B ;按键确定
BSF FLAG,5
GOTO KSOUT
KEY6 ;按键6
BTFSC KEY6?
GOTO KEY7
CALL DEL120MS
BTFSC KEY6?
GOTO KEY7
KEY6A ;按键释放
BTFSC KEY6?
GOTO KEY6B
GOTO KEY6A
KEY6B ;按键确定
BSF FLAG,6
GOTO KSOUT
KEY7 ;按键7
BTFSC KEY7?
GOTO KEY8
CALL DEL120MS
BTFSC KEY7?
GOTO KEY8
KEY7A ;按键释放
BTFSC KEY7?
GOTO KEY7B
GOTO KEY7A
KEY7B ;按键确定
BSF FLAG,7
GOTO KSOUT
KEY8
BSF FLAG,8 ;没有按键置零位
GOTO KEYOUT
KSOUT
CALL BELL
KEYOUT
RETURN
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。