|
芯海單片機做的霧化器工程:
QQ截圖20180910103910.png (22.23 KB, 下載次數(shù): 129)
下載附件
2018-9-10 10:40 上傳
帶移動電源功能單片機源程序如下:
- ;============================================
- ; filename: 3119B_ADC_PWM.asm
- ; chip : CSU8RP3119B
- ; author :
- ; date : 2018-07-17
- ; checksum: 429F
- ;與edition 1修改點:
- ;1、負(fù)載接入,PT3.0檢電壓。電壓低于 3.24V時低壓燈閃,
- ; 由 IP5303給出負(fù)載斷開信號后取消燈閃
- ;2、霧化時檢電池電壓,低于 3.2V電池電壓低燈閃,低于 3V關(guān)霧化,燈閃 3S關(guān)
- ;3、充電接入不檢電池電壓,呼吸燈開充電
- ;============================================
- include CSU8RP3119B.inc
- ;============================================
- RB_GLOBAL EQU 07EH
- F_SLEEP EQU 0 ;休眠標(biāo)志
- F_BAT_FULL EQU 1 ;充滿標(biāo)志
- F_LOW_V EQU 2 ;電池電壓低
- F_20S_COUNT EQU 3 ;20S倒計時標(biāo)志
- F_ON_OFF_LED EQU 4 ;呼吸燈轉(zhuǎn)換
- F_LOAD_IN EQU 5 ;負(fù)載接入標(biāo)志
- F_LOAD_OFF EQU 6 ;負(fù)載斷開
-
- RB_KEY EQU 07DH
- WUHUA_DO EQU 0 ;WUHUA
- WUHUA_DO1 EQU 1 ;WUHUA DO WITH
- DC_IN EQU 2 ;DC IN LED_FLASH EQU 3 ;開霧化電壓低于 3V燈閃標(biāo)志
-
- R_KEY_FLAG EQU 07CH ;按鍵計時標(biāo)志
-
- R_PWM_COUNT EQU 07BH ;PWM計數(shù)狀態(tài)
-
- R_DEC_COUNT EQU 07AH ;倒計時 20S計數(shù)
- R_DEC_COUNT1 EQU 079H
- R_DEC_COUNT2 EQU 078H
- R_LOW_COUNT EQU 077H ;低電壓閃爍計時
- R_LOW_COUNT1 EQU 076H ;低電壓閃爍計時
-
- R_CHA_FULL_COUNT EQU 075H ;判斷是否充滿計數(shù)
- R_CHA_FULL_COUNT1 EQU 074H
-
- R_PWM2_SCAN_COUNT EQU 073H ;掃頻次數(shù)計數(shù)
- R_TM2IN EQU 072H ;最佳頻率
- R_TM2R EQU 071H ;占空比
- R_TEMP_TM2IN EQU 070H ;TM2IN 中間變量
- R_TEMP_TM2R EQU 06FH ;TM2R 中間變量
-
- R_AD_IN EQU 06EH ;AD輸入腳位設(shè)置
- R_AD_H EQU 06DH ;最佳 AD值高位
- R_AD_L EQU 06CH ;最佳 AD值低位
- R_TEMP_AD_H EQU 06BH ;AD臨時值高位
- R_TEMP_AD_L EQU 06AH ;AD臨時值低位 R_T_AD_COUNT EQU 069H ;AD轉(zhuǎn)換次數(shù)
- R_AVERAGE_COUNT EQU 068H ;取平均值移位計數(shù)
-
- R_CYCLE EQU 067H ;呼吸燈周期
- R_LEDX EQU 066H
- R_COUNT EQU 065H
-
- KEY_COUNT EQU 064H ;長按計時
- KEY_COUNT1 EQU 063H ;長按計時
-
- COUNT_LED EQU 062H ;電壓低于 3V燈閃 3S計時
- COUNT_LED1 EQU 061H
- COUNT_LED2 EQU 060H
-
- COUNT_H_L EQU 05FH ;接收充滿信號計時
-
- R_600MS_COUNT EQU 05EH ;負(fù)載拔出判斷計時
- R_600MS_COUNT1 EQU 05DH
-
- R_LOW_V_COUNT EQU 05CH ;負(fù)載接入低電壓重復(fù)檢測計數(shù)
- R_LOW_V_COUNT1 EQU 05BH ;霧化開低電壓重復(fù)檢測計數(shù)
-
- R_JUDGE_KEY EQU 05AH ;短按計時
- R_JUDGE_KEY1 EQU 059H
- ;===================================================
- =
- ; PROGRAM START ;===================================================
- =
- ORG 000H
- GOTO JP_POWER_ON
-
- ORG 004H
- GOTO INTERRUPTPROG
- ;===================================================
- =
- ; 中斷部分
- ;===================================================
- =
- INTERRUPTPROG:
- ;----------------------------------------------------
- PUSH
- BTFSC INTF,TM0IF
- GOTO INT_TM0CON_PRO ;定時器 0中斷
-
- GOTO INTERRUPTPROG_EXIT
- ;===================================================
- =======
- INT_TM0CON_PRO: ;定時器 0中斷 125us
- ;----------------------------------------------------------
- BCF INTF,TM0IF
- ;;==================================================
- ========
- ;;==================================================
- ========
- INT_TM0CON_N00: ;檢按鍵
- ;==================================================
- ==========
- BTFSC PT1,1 GOTO CHECK_DO_WITH_KEY
-
- BTFSC R_KEY_FLAG,1
- GOTO CHECK_KEY_TIME00
-
- CLRF R_JUDGE_KEY
- BSF R_KEY_FLAG,0
- INCF R_JUDGE_KEY1,1
- MOVLW 120 ;15MS
- XORWF R_JUDGE_KEY1,0
- BTFSS STATUS,Z
- GOTO INT_TCC_DO_W00134
-
- CLRF R_JUDGE_KEY1
- BCF R_KEY_FLAG,0
- BSF R_KEY_FLAG,1
- BCF R_KEY_FLAG,2
- BCF R_KEY_FLAG,3
- CLRF KEY_COUNT
- CLRF KEY_COUNT1
- GOTO INT_TCC_DO_W00134
- ;;--------------------------------------------------------
- CHECK_DO_WITH_KEY:
- ;;--------------------------------------------------------
- CLRF R_JUDGE_KEY1
- ;;---------------------------------------------------------
- BTFSS R_KEY_FLAG,1
- GOTO CHECK_KEY_TIME01
-
- INCF R_JUDGE_KEY,1 MOVLW 40 ;5MS
- XORWF R_JUDGE_KEY,0
- BTFSS STATUS,Z
- GOTO INT_TCC_DO_W00134
-
- CLRF R_JUDGE_KEY
- BCF R_KEY_FLAG,1
- ;;---------------------------------------------------------------
- BTFSC R_KEY_FLAG,3
- GOTO CLR_KEY_TIME_N00
-
- BSF R_KEY_FLAG,4 ;;ONE KEY DOWN SIGN
- ;;--------------------------------------------------------------
- CLR_KEY_TIME_N00:
- ;;----------------------------------------------------------------
- BCF R_KEY_FLAG,0
- BCF R_KEY_FLAG,1
- BCF R_KEY_FLAG,2
- BCF R_KEY_FLAG,3
- CLRF KEY_COUNT
- CLRF KEY_COUNT1
- GOTO INT_TCC_DO_W00134
- ;;------------------------------------------------------------
- CHECK_KEY_TIME01:
- ;;------------------------------------------------------------
- BTFSS R_KEY_FLAG,0
- GOTO INT_TCC_DO_W00134
-
- INCF R_JUDGE_KEY,1
- MOVLW 40 ;5MS XORWF R_JUDGE_KEY,0
- BTFSS STATUS,Z
- GOTO INT_TCC_DO_W00134
-
- CLRF R_JUDGE_KEY
- BCF R_KEY_FLAG,0
- GOTO INT_TCC_DO_W00134
- ;;--------------------------------------------------------------
- CHECK_KEY_TIME00:
- ;;--------------------------------------------------------------
- BTFSC R_KEY_FLAG,3
- GOTO INT_TCC_DO_W00134
- ;;--------------------------------------------------------------
- INCF KEY_COUNT,1
- MOVLW 200
- XORWF KEY_COUNT,0 ;;25MS
- BTFSS STATUS,Z
- GOTO INT_TCC_DO_W00134
-
- CLRF KEY_COUNT
-
- INCF KEY_COUNT1,1
- MOVLW 60
- XORWF KEY_COUNT1,0 ;;1.5S
- BTFSS STATUS,Z
- GOTO INT_TCC_DO_W00134
-
- CLRF KEY_COUNT1
- BSF R_KEY_FLAG,2 ;;LONG KEY DOWN SIGN
- BSF R_KEY_FLAG,3 ;;------------------------------------------------------------
- INT_TCC_DO_W00134:
- ;;---------------------------------------------------------
- BTFSS RB_GLOBAL,F_LOAD_IN
- GOTO INT_TM0CON_N001
-
- BTFSC RB_GLOBAL,F_LOW_V
- GOTO INT_TM0CON_N0023
-
- BTFSC PT1,4
- GOTO CLR_COUNT_NEXT021343
- ;;------------------------------------------------------
- INT_TM0CON_N00234: ;負(fù)載拔出判斷
- ;;--------------------------------------------------------
- INCF R_600MS_COUNT,1
- MOVLW 200 ;25MS
- XORWF R_600MS_COUNT,0
- BTFSS STATUS,Z
- GOTO INT_TM0CON_N001
-
- CLRF R_600MS_COUNT
- INCF R_600MS_COUNT1,1 ;25*24=600MS
- MOVLW 24
- XORWF R_600MS_COUNT1,0
- BTFSS STATUS,Z
- GOTO INT_TM0CON_N001
-
- CLRF R_600MS_COUNT1
- BSF RB_GLOBAL,F_LOAD_OFF ;600ms低,負(fù)載拔出 GOTO INT_TM0CON_N001
- ;;--------------------------------------------------------------
- CLR_COUNT_NEXT021343:
- ;;--------------------------------------------------------------
- CLRF R_600MS_COUNT
- CLRF R_600MS_COUNT1
- GOTO INT_TM0CON_N001
- ;-----------------------------------------------------------------
- INT_TM0CON_N0023:
- ;;----------------------------------------------------------------
- BTFSC PT1,4
- GOTO CLR_COUNT_NEXT021343
-
- GOTO INT_TM0CON_N00234
- ;;==================================================
- ==============
- INT_TM0CON_N001: ;開霧化電池電壓低于 3V燈閃 3S
- ;;==================================================
- ==============
- BTFSS RB_KEY,LED_FLASH
- GOTO DEC_DELAY_20S
-
- INCF COUNT_LED,1
- MOVLW 200
- XORWF COUNT_LED,0 ;;25MS
- BTFSS STATUS,Z
- GOTO DEC_DELAY_20S
-
- CLRF COUNT_LED
-
- INCF COUNT_LED1,1 MOVLW 10
- XORWF COUNT_LED1,0 ;;250MS
- BTFSS STATUS,Z
- GOTO DEC_DELAY_20S
-
- CLRF COUNT_LED1
-
- INCF COUNT_LED2,1
- MOVLW 12
- XORWF COUNT_LED2,0 ;;3S
- BTFSS STATUS,Z
- GOTO LED_FLASH_NEXT00
- ;;-----------------------------------------------------
- CLRF COUNT_LED2
- BCF RB_KEY,LED_FLASH
- BCF PT3,1
- GOTO DEC_DELAY_20S
- ;;------------------------------------------------------
- LED_FLASH_NEXT00:
- ;;-----------------------------------------------------
- BTFSC COUNT_LED2,0
- BCF PT3,1
-
- BTFSS COUNT_LED2,0
- BSF PT3,1
- ;===================================================
- ======
- DEC_DELAY_20S: ;短按工作 20S倒計時
- ;;--------------------------------------------------------------------
- BTFSS RB_GLOBAL,F_20S_COUNT ; GOTO JUDGE_LED
-
- INCF R_DEC_COUNT,1
- MOVLW 200 ;125US*200*40*20=20S
- XORWF R_DEC_COUNT,0
- BTFSS STATUS,Z
- GOTO JUDGE_LED
-
- CLRF R_DEC_COUNT
- INCF R_DEC_COUNT1,1
- MOVLW 40
- XORWF R_DEC_COUNT1,0
- BTFSS STATUS,Z
- GOTO JUDGE_LED
-
- CLRF R_DEC_COUNT1
- INCF R_DEC_COUNT2,1
- MOVLW 20
- XORWF R_DEC_COUNT2,0
- BTFSS STATUS,Z
- GOTO JUDGE_LED
-
- CLRF R_DEC_COUNT2
- ;------------------------------------------------------------
- BCF RB_KEY,WUHUA_DO
- BCF RB_KEY,WUHUA_DO1
- ;;---------------------------------------------------------
- BTFSS RB_KEY,DC_IN
- BCF PT3,1
- ;;------------------------------------------------------ BCF TM2CON,1
- BCF TM2CON,0
- BCF TM2CON,7 ;;OFF PWM
- BCF PT5,0
-
- BCF RB_GLOBAL,F_20S_COUNT ;置低20S倒計時標(biāo)志
- ;===================================================
- ============
- JUDGE_LED: ;充電處理
- ;===================================================
- ===========
- BTFSS RB_KEY,DC_IN ;充電是否接入
- GOTO LED_DISCHARGE ;未接入
- ;--------------------------------------------接入
- BTFSC RB_GLOBAL,F_BAT_FULL ;是否充滿
- GOTO FULL_LED ;高,已充滿
- ;---------------------------------------------判斷是否充滿
-
- BTFSC PT5,1
- GOTO DO_WITH_DELYA2S_L11
-
- INCF COUNT_H_L,1
- MOVLW 100 ;;125us*100=12.5MS
- SUBWF COUNT_H_L,0
- BTFSS STATUS,C
- GOTO DO_WITH_DELYA2S_L
-
- CLRF COUNT_H_L
- GOTO FULL_NO ;;------------------------------------------------------------
- DO_WITH_DELYA2S_L11:
- ;------------------------------------------------------------
- CLRF COUNT_H_L
- ;;------------------------------------------------------------
- DO_WITH_DELYA2S_L:
- ;;------------------------------------------------------------
- INCF R_CHA_FULL_COUNT,1
- MOVLW 200 ;125US*200*80=2S
- XORWF R_CHA_FULL_COUNT,0
- BTFSS STATUS,Z
- GOTO DO_WITH_THE_GRADUALLY
-
- CLRF R_CHA_FULL_COUNT
- INCF R_CHA_FULL_COUNT1,1
- MOVLW 80
- XORWF R_CHA_FULL_COUNT1,0
- BTFSS STATUS,Z
- GOTO DO_WITH_THE_GRADUALLY
-
- CLRF R_CHA_FULL_COUNT1
- BSF RB_GLOBAL,F_BAT_FULL ;連續(xù)檢測 2S為高,則充滿
- GOTO FULL_LED
- ;--------------------------------
- FULL_NO:
- ;--------------------------------
- CLRF R_CHA_FULL_COUNT
- CLRF R_CHA_FULL_COUNT1
- GOTO DO_WITH_THE_GRADUALLY
- ;-------------------------------- FULL_LED:
- ;--------------------------------
- BSF PT3,1
- GOTO INTERRUPTPROG_EXIT
- ;===================================================
- ============
- LED_DISCHARGE: ;電池低電壓燈閃
- ;===================================================
- ============
- BTFSS RB_GLOBAL,F_LOW_V ;電池電壓低?
- GOTO INTERRUPTPROG_EXIT ;正常
- ;---------------------------------------電壓低,燈閃
- INCF R_LOW_COUNT,1
- MOVLW 40 ;125*40*50=250MS
- XORWF R_LOW_COUNT,0
- BTFSS STATUS,Z
- GOTO INTERRUPTPROG_EXIT
-
- INCF R_LOW_COUNT1,1
- CLRF R_LOW_COUNT
- MOVLW 50
- XORWF R_LOW_COUNT1,0
- BTFSS STATUS,Z
- GOTO INTERRUPTPROG_EXIT
-
- CLRF R_LOW_COUNT1
- MOVLW 00000010B
- XORWF PT3,1
- GOTO INTERRUPTPROG_EXIT ;===================================================
- ============
- DO_WITH_THE_GRADUALLY: ;充電呼吸燈部分程序
- ;===================================================
- ============
- BTFSS RB_GLOBAL,F_ON_OFF_LED
- GOTO DO_WITH_OFF
- ;--------------------------------------------
- DO_WITH_ON: ;由亮變暗
- MOVFW R_CYCLE ;
- SUBWF R_LEDX,0 ;
- BTFSS STATUS,C ;
- GOTO DO_WITH_ON_0 ;
- ;---------------------------------------
- BCF RB_GLOBAL,F_ON_OFF_LED ;
- MOVFW R_CYCLE
- MOVWF R_LEDX
- GOTO GRADUALLY_LED_EXIT
- ;---------------------------------------
- DO_WITH_ON_0:
- INCF R_COUNT,1
- MOVFW R_LEDX
- SUBWF R_COUNT,0
- BTFSC STATUS,C
- GOTO DO_WITH_ON_1
- ;--------------------------------------
- BCF PT3,1
- GOTO GRADUALLY_LED_EXIT
- ;----------------------------------------
- DO_WITH_ON_1: MOVFW R_CYCLE
- SUBWF R_COUNT,0
- BTFSC STATUS,C
- GOTO DO_WITH_ON_2
- ;--------------------------------------
- BSF PT3,1
- GOTO GRADUALLY_LED_EXIT
- ;----------------------------------------
- DO_WITH_ON_2:
- INCF R_LEDX,1
- CLRF R_COUNT
- GOTO GRADUALLY_LED_EXIT
- ;----------------------------------------
- DO_WITH_OFF: ;由暗變亮
- MOVLW 0 ;
- XORWF R_LEDX,0 ;
- BTFSS STATUS,Z ;
- GOTO DO_WITH_OFF_0 ;
- ;----------------------------------------
- BSF RB_GLOBAL,F_ON_OFF_LED ;
- CLRF R_LEDX
- GOTO GRADUALLY_LED_EXIT
- ;----------------------------------------
- DO_WITH_OFF_0:
- INCF R_COUNT,1
- MOVFW R_LEDX
- SUBWF R_COUNT,0
- BTFSC STATUS,C
- GOTO DO_WITH_OFF_1
- ;---------------------------------------- BCF PT3,1
- GOTO GRADUALLY_LED_EXIT
- ;-----------------------------------------
- DO_WITH_OFF_1:
- MOVFW R_CYCLE
- SUBWF R_COUNT,0
- BTFSC STATUS,C
- GOTO DO_WITH_OFF_2
- ;-----------------------------------------
- BSF PT3,1
- GOTO GRADUALLY_LED_EXIT
- DO_WITH_OFF_2:
- DECF R_LEDX,1
- CLRF R_COUNT
- GOTO GRADUALLY_LED_EXIT
- ;----------------------------------------------
- GRADUALLY_LED_EXIT:
- MOVLW 100
- MOVWF R_CYCLE
- ;==============================================
- INTERRUPTPROG_EXIT: ;中斷退出
- ;==============================================
- CLRF INTF
- POP
- RETFIE
- ;===================================================
- =
- ; PROGRAM START
- ;===================================================
- =
- JP_POWER_ON: ;-----------------------------------------------------
- CALL DELAY_100MS
- CALL DELAY_100MS
- CALL DELAY_100MS
- ;----------------------------------------------------
- INIT_MCU:
- ;---------------------------------------------------
- CALL SUB_INIT_MCU
- ;===================================================
- =
- ; 主程序
- ;===================================================
- =
- MAIN:
- ;---------------------------------------------------
- CLRWDT
- NOP
- NOP
- CALL SUB_CHARGE ;充電部分
-
- CALL SUB_DISCHARGE ;電池電壓檢測程序部分
-
- CALL SUB_LOAD_IN ;負(fù)載接入部分
-
- CALL SUB_KEY ;按鍵檢測部分
-
- CALL SUB_PWM ;霧化部分
- ;------------------------------
- BTFSC RB_KEY,DC_IN GOTO MAIN
-
- BTFSC RB_KEY,WUHUA_DO
- GOTO MAIN
-
- BTFSC R_KEY_FLAG,0
- GOTO MAIN
-
- BTFSC R_KEY_FLAG,1
- GOTO MAIN
-
- BTFSC RB_KEY,LED_FLASH
- GOTO MAIN
-
- BTFSC RB_GLOBAL,F_LOAD_IN
- GOTO MAIN
-
- BTFSS PT1,1
- GOTO MAIN
-
- GOTO SUB_SLEEP
- ;===================================================
- =
- ; 按鍵
- ;===================================================
- =
- SUB_KEY:
- ;------------------------------------------------------------
- BTFSS R_KEY_FLAG,2
- GOTO CHECK_KEY_ONE00
- BCF R_KEY_FLAG,2
- ;;---------------------------------------------------------------
- BTFSC RB_KEY,WUHUA_DO
- ;;---------------------------------------------------------------
- RETURN
- ;;--------------------------------------------------------------
- BSF RB_KEY,WUHUA_DO
- BSF RB_KEY,WUHUA_DO1
-
- BTFSS RB_KEY,DC_IN
- BSF PT3,1
- ;;-----------------------------------------------------------------
- BCF RB_GLOBAL,F_20S_COUNT ;
- CLRF R_DEC_COUNT
- CLRF R_DEC_COUNT1
- CLRF R_DEC_COUNT2
- ;;---------------------------------------------------------------
- RETURN
- ;;---------------------------------------------------------------
- CHECK_KEY_ONE00:
- ;;----------------------------------------------------------------
- BTFSS R_KEY_FLAG,4
- RETURN
-
- BCF R_KEY_FLAG,4
- ;----------------------------------------------------------------
- BTFSC RB_KEY,DC_IN
- GOTO DO_WITH_KEY_ONE
-
- BTFSC RB_KEY,LED_FLASH GOTO OFF_WUHUA_DO_WOO
- ;-----------------------------------------------------短按電池電壓低于 3V關(guān)PWM
- MOVLW 00000000B
- MOVWF R_AD_IN ;AIN0輸入,參考電壓 1.4v
- CALL SUB_ADC_CONVERT ;電池電壓低于 3V,關(guān)霧化
- ;-------------------------------------------------------
- MOVLW 08H ;3/4=0.75V 0.75*4096/1.4=0892H
- SUBWF R_TEMP_AD_H,0
- BTFSS STATUS,C
- GOTO OFF_MCU_DO_W0012
-
- BTFSS STATUS,Z
- GOTO DO_WITH_KEY_ONE
-
- MOVLW 92H
- SUBWF R_TEMP_AD_L,0
- BTFSC STATUS,C
- GOTO DO_WITH_KEY_ONE
- ;;--------------------------------------------------------
- OFF_MCU_DO_W0012:
- ;;--------------------------------------------------------
- CLRF COUNT_LED
- CLRF COUNT_LED1
- CLRF COUNT_LED2
- BSF RB_KEY,LED_FLASH
- BSF PT3,1
- ;;------------------------------------------------------
- RETURN
- ;;--------------------------------------------------------------- DO_WITH_KEY_ONE:
- ;;----------------------------------------------------------------
- BTFSC RB_KEY,WUHUA_DO
- GOTO OFF_WUHUA_DO_WOO
- ;;-------------------------------------------------------------
- DO_ON_WUHUA_NEXT00:
- ;--------------------------------------------------------------
- BSF RB_KEY,WUHUA_DO
- BSF RB_KEY,WUHUA_DO1
-
- BTFSS RB_KEY,DC_IN
- BSF PT3,1
- ;;--------------------------------------------------------------------
- BSF RB_GLOBAL,F_20S_COUNT ;
- CLRF R_DEC_COUNT
- CLRF R_DEC_COUNT1
- CLRF R_DEC_COUNT2
- ;;---------------------------------------------------------------
- RETURN
- ;;----------------------------------------------------------
- OFF_WUHUA_DO_WOO:
- ;---------------------------------------------------------
- BCF RB_KEY,WUHUA_DO
- BCF RB_KEY,WUHUA_DO1
- BCF RB_GLOBAL,F_LOW_V
-
- CLRF COUNT_LED
- CLRF COUNT_LED1
- CLRF COUNT_LED2
- BCF RB_KEY,LED_FLASH ;;-------------------------------------------------------
- BTFSS RB_KEY,DC_IN
- BCF PT3,1
- ;;------------------------------------------------------
- BCF TM2CON,1
- BCF TM2CON,0
- BCF TM2CON,7 ;;OFF PWM
- BCF PT5,0
-
- BCF RB_GLOBAL,F_20S_COUNT ;
- CLRF R_DEC_COUNT
- CLRF R_DEC_COUNT1
- CLRF R_DEC_COUNT2
- ;;--------------------------------------------------------
- RETURN
- ;===================================================
- =
- ; 休眠程序
- ;===================================================
- =
- SUB_SLEEP:
- CLRF INTE
- ;---------------------------------------------------------
- CLRF SRADCON1
- CLRF SRADCON2
- ;---------------------------------------------------------
- MOVLW 11100101B ;
- MOVWF PT1EN ;PT1.1 PT1.3 PT1.4 INPUT
- MOVLW 00000010B ;
- MOVWF PT1PU ;PT1.1 PULL UP
- MOVLW 00000001B MOVWF PT1 ;PT1.0輸出高
-
- MOVLW 11111111B
- MOVWF PT3EN ;PT3設(shè)為輸出
- CLRF PT3PU
- CLRF PT3CON ;休眠全設(shè)置為數(shù)字口
- MOVLW 00000001B
- MOVWF PT3 ;PT3.0輸出高
-
- MOVLW 11111111B
- MOVWF PT5EN
- CLRF PT5PU
- CLRF PT5CON ;
- CLRF PT5
- ;----------------------------------------------------------
- CLRF TM0CON
- CLRF TM2CON
- CLRF TM3CON
- ;------------------------
- CLRF WDTCON ; 關(guān)閉WDT并設(shè)置溢出時間為 2048ms
- CLRWDT
- BSF MCK,5 ; 關(guān)閉WDT晶振
- ;----------------------------------------------------------
- CLRF INTF
- CLRF INTF2
- CLRF INTE2
-
- MOVLW 10000010B MOVWF INTE ;使能外部中斷 1 總中斷
- MOVLW 00111001B
- MOVWF PT1CON ;使能PT1.1 PT1.3 PT1.4外部中斷 1 狀態(tài)改變觸發(fā)
- ;------------------------------------------------------------------------
- SLEEP
- NOP
- NOP
- NOP
- GOTO INIT_MCU
- ;===================================================
- =
- ; 充電程序
- ;===================================================
- =
- SUB_CHARGE:
- ;;---------------------------------------------------
- BTFSC RB_KEY,DC_IN ;;
- GOTO CHECK_DC_IN_NEXT
-
- BTFSS PT1,3
- RETURN
- ;---------------------------------------
- MOVLW 20
- MOVWF 040H
- CALL DELAY_1MS ;延時 20MS
- ;---------------------------------------
- BTFSS PT1,3
- RETURN
- ;;==================================================
- BCF RB_GLOBAL,F_LOAD_IN CLRF R_600MS_COUNT
- CLRF R_600MS_COUNT1
- BCF RB_GLOBAL,F_LOAD_OFF
- ;;-------------------------------------------------------
- BCF RB_GLOBAL,F_LOW_V
- CLRF R_LOW_COUNT
- CLRF R_LOW_COUNT1
- BCF PT3,1
- ;;==================================================
- ==
- BSF RB_KEY,DC_IN
- ;;----------------------------------------------------
- BCF RB_GLOBAL,F_LOW_V
- ;---------------------------------------
- CLRF R_LOW_COUNT
- CLRF R_LOW_COUNT1
- ;;-----------------------------------------------------
- CLRF R_CHA_FULL_COUNT
- CLRF R_CHA_FULL_COUNT1
- BCF RB_GLOBAL,F_BAT_FULL
- ;;---------------------------------------------------
- CLRF COUNT_LED
- CLRF COUNT_LED1
- CLRF COUNT_LED2
- BCF RB_KEY,LED_FLASH
- BSF PT3,1
-
- CLRF COUNT_H_L
- ;;------------------------------------------------------
- RETURN ;;-----------------------------------------------------
- CHECK_DC_IN_NEXT:
- ;;------------------------------------------------------
- BTFSC PT1,3
- RETURN
- ;---------------------------------------
- MOVLW 20
- MOVWF 040H
- CALL DELAY_1MS ;延時 20MS
- ;---------------------------------------
- BTFSC PT1,3
- RETURN
-
- BCF RB_KEY,DC_IN
- ;;------------------------------------------------------
- BCF RB_GLOBAL,F_LOW_V ;
- ;---------------------------------------
- CLRF R_LOW_COUNT
- CLRF R_LOW_COUNT1
- ;;-----------------------------------------------------
- CLRF R_CHA_FULL_COUNT
- CLRF R_CHA_FULL_COUNT1
- BCF RB_GLOBAL,F_BAT_FULL
- ;;----------------------------------------------------
- BCF PT3,1
- ;;------------------------------------------------------
- BTFSC RB_KEY,WUHUA_DO
- BSF PT3,1
-
- CLRF COUNT_H_L ;;------------------------------------------------------
- RETURN
- ;===================================================
- =
- ; 負(fù)載接入程序
- ;===================================================
- =1.1KHz 460US高 460US低
- SUB_LOAD_IN:
- BTFSC RB_KEY,DC_IN ;;DC IN
- RETURN
-
- BTFSC RB_KEY,WUHUA_DO
- RETURN
- ;----------------------------------------------------
- BTFSC RB_GLOBAL,F_LOAD_IN ;;THE LOAD SIGN
- GOTO CHECK_LOAD_IN_EXIT
- ;-----------------------------------
- BTFSS PT1,4
- RETURN
-
- MOVLW 50 ;DELAY 200US
- CALL DELAY_4US
- ;------------------------------------
- BTFSS PT1,4
- RETURN
- ;----------------------------------------負(fù)載接入
- BSF RB_GLOBAL,F_LOAD_IN
-
- CLRF R_600MS_COUNT
- CLRF R_600MS_COUNT1 BCF RB_GLOBAL,F_LOAD_OFF
-
- BCF RB_GLOBAL,F_LOW_V
- CLRF R_LOW_COUNT
- CLRF R_LOW_COUNT1
- BCF PT3,1
- ;;------------------------------------------------------
- RETURN
- ;----------------------------------------------------------
- CHECK_LOAD_IN_EXIT: ;負(fù)載斷開檢測
- ;----------------------------------------------------------
- BTFSS RB_GLOBAL,F_LOAD_OFF
- GOTO DO_WITH_CHECK_BAT
- ;-----------------------------------------------------
- BCF RB_GLOBAL,F_LOAD_IN
- CLRF R_600MS_COUNT
- CLRF R_600MS_COUNT1
- BCF RB_GLOBAL,F_LOAD_OFF
- ;;----------------------------------------------------------
- BCF RB_GLOBAL,F_LOW_V
- CLRF R_LOW_COUNT
- CLRF R_LOW_COUNT1
- BCF PT3,1
- ;------------------------------------------------------------
- RETURN
- ;;-------------------------------------------------------------
- DO_WITH_CHECK_BAT:
- ;;--------------------------------------------------------------
- BTFSC RB_GLOBAL,F_LOW_V
- RETURN ;;---------------------------------------------------------------
- MOVLW 00000000B
- MOVWF R_AD_IN ;AIN0輸入 PT3.0
- CALL SUB_ADC_CONVERT ;調(diào)用AD轉(zhuǎn)換程序
- ;------------------------------------------------------------
- MOVLW 09H ;3.24/4=0.81V 0.81*4096/1.4=0942H
- SUBWF R_TEMP_AD_H,0
- BTFSS STATUS,C
- GOTO BAT_LOW_V11 ;電池電壓低
-
- BTFSS STATUS,Z
- GOTO BAT_NORMAL_V11 ;電壓正常
- ;-------------------------------------------------------------;比較低位
- MOVLW 42H
- SUBWF R_TEMP_AD_L,0
- BTFSS STATUS,C
- GOTO BAT_LOW_V11
- ;-------------------------------------------------------------
- BAT_NORMAL_V11:
- ;-------------------------------------------------------------
- CLRF R_LOW_V_COUNT
- RETURN
- ;--------------------------------------------------------------
- BAT_LOW_V11:
- ;-------------------------------------------------------------
- INCF R_LOW_V_COUNT,1
- MOVLW 100 ;連續(xù)檢到 100次電壓低 確認(rèn)有效
- XORWF R_LOW_V_COUNT,0 BTFSS STATUS,Z
- RETURN
-
- CLRF R_LOW_V_COUNT
- BSF RB_GLOBAL,F_LOW_V ;電壓低,置高 低電壓標(biāo)志
- RETURN
- ;------------------------------------------------------
- ;===================================================
- =============
- ; 電池電壓檢測程序
- ;===================================================
- =============
- SUB_DISCHARGE:
- ;-------------------------------------------------------------
- BTFSC RB_KEY,DC_IN ;;DC IN
- RETURN
- ;
- BTFSS RB_KEY,WUHUA_DO
- RETURN
- ;------------------------------------------------------電池電壓檢測
- MOVLW 00000000B
- MOVWF R_AD_IN ;AIN0輸入,參考電壓 1.4v
- CALL SUB_ADC_CONVERT ;電池電壓低于 3V,關(guān)霧化
- ;--------------------------------------
- MOVLW 08H ;3/4=0.75V 0.75*4096/1.4=0892H
- SUBWF R_TEMP_AD_H,0
- BTFSS STATUS,C
- GOTO OFF_MCU_DO_W001
-
- BTFSS STATUS,Z GOTO CHECK_BAT_V_N001
-
- MOVLW 92H
- SUBWF R_TEMP_AD_L,0
- BTFSC STATUS,C
- GOTO CHECK_BAT_V_N001
- ;;---------------------------------------------------------------
- OFF_MCU_DO_W001:
- ;;---------------------------------------------------------------
- CLRF COUNT_LED
- CLRF COUNT_LED1
- CLRF COUNT_LED2
- BSF RB_KEY,LED_FLASH
- BSF PT3,1
- ;;--------------------------------------------------------------
- BCF RB_KEY,WUHUA_DO
- BCF RB_KEY,WUHUA_DO1
- BCF RB_GLOBAL,F_LOW_V
- ;;------------------------------------------------------------
- BCF TM2CON,1
- BCF TM2CON,0
- BCF TM2CON,7 ;;OFF PWM
- BCF PT5,0
-
- BCF RB_GLOBAL,F_20S_COUNT ;
- CLRF R_DEC_COUNT
- CLRF R_DEC_COUNT1
- CLRF R_DEC_COUNT2
- RETURN
- ;;------------------------------------------------------------- CHECK_BAT_V_N001:
- ;;--------------------------------------------------------------
- MOVLW 00000000B
- MOVWF R_AD_IN ;
- CALL SUB_ADC_CONVERT ;
- ;---------------------------------------------------------------
- MOVLW 09H ;3.24/4=0.81V 0.81*4096/1.4=0942H
- SUBWF R_TEMP_AD_H,0
- BTFSS STATUS,C
- GOTO BAT_LOW_V ;電池電壓低
-
- BTFSS STATUS,Z
- GOTO BAT_NORMAL_V ;電壓正常
- ;--------------------------------------------------------------
- JUDGE_LOW:
- ;-------------------------------------------------------------;比較低位
- MOVLW 42H
- SUBWF R_TEMP_AD_L,0
- BTFSS STATUS,C
- GOTO BAT_LOW_V
- ;-------------------------------------------------------------
- BAT_NORMAL_V:
- ;-------------------------------------------------------------
- CLRF R_LOW_V_COUNT1
- RETURN
- ;--------------------------------------------------------------
- BAT_LOW_V:
- ;-------------------------------------------------------------
- INCF R_LOW_V_COUNT1,1 MOVLW 200 ;200次
- XORWF R_LOW_V_COUNT1,0
- BTFSS STATUS,Z
- RETURN
-
- BSF RB_GLOBAL,F_LOW_V ;電壓低,置高 低電壓標(biāo)志
- CLRF R_LOW_V_COUNT1
- RETURN
- ;===================================================
- =
- ; PWM
- ;===================================================
- =
- SUB_PWM:
- ;----------------------------------------------------
- BTFSS RB_KEY,WUHUA_DO1
- RETURN
-
- BCF RB_KEY,WUHUA_DO1
- ;;------------------------------------------------------
- MOVLW 16
- MOVWF R_PWM2_SCAN_COUNT ;掃頻計數(shù),掃 14次
- MOVLW 138
- MOVWF R_TEMP_TM2IN
- MOVLW 70
- MOVWF R_TEMP_TM2R
- ;-------------------------------------------------------
- BSF TM2CON,0
- BSF TM2CON,1
- BSF TM2CON,7 ;-------------------------------------------------------
- SCAN_PWM2: ;開始掃頻
- ;-------------------------------------------------------
- CLRWDT
-
- MOVFW R_TEMP_TM2IN
- MOVWF TM2IN ;頻率
- MOVFW R_TEMP_TM2R
- MOVWF TM2R ;占空比
- ;-------------------------------------------------------
- BSF TM2CON,0
- BSF TM2CON,1
- BSF TM2CON,7 ;打開PWM2
- ;-----------------------------------------------------
- MOVLW 20 ;死延時 20ms
- MOVWF 040H
- CALL DELAY_1MS
- ;--------------------------
- MOVLW 00100000B
- MOVWF R_AD_IN ;AIN2輸入 PT3.2
- CALL SUB_ADC_CONVERT ;調(diào)用AD轉(zhuǎn)換程序
- ;------------------------------------------------------------
- COMPARE_AD_H:
- ;------------------------------------------------------------
- MOVFW R_TEMP_AD_H
- SUBWF R_AD_H,0
- BTFSS STATUS,C
- GOTO SAVE_NEW_VALUE BTFSS STATUS,Z
- GOTO SCAN_INC
- ;------------------------------------------------------------
- COMPARE_AD_L:
- ;------------------------------------------------------------
- MOVFW R_TEMP_AD_L
- SUBWF R_AD_L,0
- BTFSC STATUS,C
- GOTO SCAN_INC
- ;------------------------------------------------------------
- SAVE_NEW_VALUE:
- ;------------------------------------------------------------
- MOVFW R_TEMP_AD_L
- MOVWF R_AD_L
- MOVFW R_TEMP_AD_H
- MOVWF R_AD_H
- MOVFW R_TEMP_TM2IN ;將當(dāng)前頻率保存為最佳
- MOVWF R_TM2IN
- MOVFW R_TEMP_TM2R
- MOVWF R_TM2R
- ;-------------------------------------------------------------
- SCAN_INC:
- ;--------------------------------------------------------------
- INCF R_TEMP_TM2IN,1 ;溢出值+1;頻率變大
- BTFSC R_TEMP_TM2IN,0 ;使占空比為 50%:TM2IN每+2,TM2R+1
- INCF R_TEMP_TM2R,1
-
- DECFSZ R_PWM2_SCAN_COUNT,1 ;掃頻計數(shù)-1,掃頻完成?
- GOTO SCAN_PWM2 ;----------------------------------------------------------------
- SCAN_OVER:
- ;----------------------------------------------------------------
- MOVFW R_TM2IN
- MOVWF TM2IN
- MOVFW R_TM2R
- MOVWF TM2R
- ;-------------------------------------------------------------
- RETURN
- ;===================================================
- =
- ; ADC_CONVERT
- ;===================================================
- =
- SUB_ADC_CONVERT:
- ;----------------------------------------------------
- MOVLW 10010110B
- MOVWF SRADCON1 ;使能ADC,比較器兩端信號交換,內(nèi)部參考電壓,結(jié)果
- 放在SRAD中
- MOVFW R_AD_IN
- MOVWF SRADCON2 ;AD輸入設(shè)置
- MOVLW 11001111B
- ANDWF METCH,1 ;內(nèi)部參考電壓 1.4V
- CLRWDT
- ;---------------------------------------------------
- SUB_ADC_TRANSFORM:
- ;---------------------------------------------------
- CLRF R_TEMP_AD_L
- CLRF R_TEMP_AD_H
- MOVLW 16 MOVWF R_T_AD_COUNT ;轉(zhuǎn)換16次
- ;---------------------------------------------------
- ADC_LOOP:
- ;---------------------------------------------------
- CLRWDT
- MOVLW 00000100B
- XORWF SRADCON1,1 ;OFFEX取反
- BSF SRADCON1,SRADS ;開始 AD轉(zhuǎn)換
- NOP
- BTFSC SRADCON1,SRADS ;等待AD轉(zhuǎn)換
- GOTO $-1
- ;----------------------------
- MOVFW SRADL
- ADDWF R_TEMP_AD_L,1 ;轉(zhuǎn)換結(jié)果低位存入
- MOVFW SRADH
- ADDWFC R_TEMP_AD_H,1 ;轉(zhuǎn)換結(jié)果高位存入
- ;----------------------------
- DECFSZ R_T_AD_COUNT,1
- GOTO ADC_LOOP
- ;---------------------------------------------------
- ADC_AVERAGE_16:
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
源文件PDF.pdf
(263.91 KB, 下載次數(shù): 89)
2018-9-10 10:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|