Sie sind auf Seite 1von 8

C:\Users\thejas\Desktop\Untitled.

asm
;PROGRAM FOR SMART BATTERRY CHARGER
#include <p16f73.inc>
__CONFIG _XT_OSC&_PWRTE_ON&_CP_OFF&_WDT_OFF
W_TEMP EQU 0X4F
STATUS_TEMP EQU 0X4E
PCLATH_TEMP EQU 0X4D
LCD_DATA EQU PORTB
LCD_CNTRL EQU PORTC
RS EQU 0
RW EQU 1
EN EQU 3
BCD_1 EQU 0X40
BCD_2 EQU 0X41
BCD_3 EQU 0X42
;PORTA
BUSSER EQU 5
;PORTC
OVER_LOAD_RELAY EQU 4
LED_LOW EQU 5
LED_NORMAL EQU 6
LED_FULL EQU 7
TEMP_LCD_COM EQU 0X23
TEMP_LCD_DAT EQU 0X24
PRG_ADDR_MSB EQU 0X25
PRG_ADDR_LSB EQU 0X26
PRG_DAT_MSB EQU 0X27
PRG_DAT_LSB EQU 0X28
MSG_CHR_CNTR EQU 0X29
TEMP_1 EQU 0X33
TEMP_2 EQU 0X34
TEMP_3 EQU 0X35
TEMP_4 EQU 0X36
BATTERRY_VOLTAGE EQU 0X37
TIME_COUNTER_FULL1 EQU 0X38
TIME_COUNTER_FULL2 EQU 0X39
TRICKLE_COUNTER EQU 0X3A
FLAG_BITS EQU 0X3C
TRICKKLE EQU 0
;0X30--33 ARE USED FOR DELAY ROUTINES
ORG 0x0000
START:
CALL INIT_PORTS
CALL DELAY
CALL INIT_LCD
CALL INIT_ADC
CALL INIT_PWM
BANKSEL PORTA
BSF PORTA,BUSSER
BSF PORTC,LED_LOW
BSF PORTC,LED_NORMAL
BSF PORTC,LED_FULL
; BSF PORTC,OVER_LOAD_RELAY
MOVLW 0X80 ;SELECT FIRST LINE FIRST CHARACTER
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;COMMAND TO LCD
CLRF MSG_CHR_CNTR ;CHARCTER COUNTER IN STRING RESET
MOVLW HIGH(MSG1)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG1)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X08
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
CALL DELAY
MOVLW 0XC0 ;SELECT SECOND LINE FIRST CHARACTER
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;COMMAND TO LCD
1
C:\Users\thejas\Desktop\Untitled.asm
CLRF MSG_CHR_CNTR ;CHARCTER COUNTER IN STRING RESET
MOVLW HIGH(MSG2)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG2)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X08
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
CALL DELAY
BANKSEL TEMP_LCD_COM
MOVLW 0X01
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
CALL DELAY
CLRF FLAG_BITS
BCF PORTA,BUSSER
BCF PORTC,LED_LOW
BCF PORTC,LED_NORMAL
BCF PORTC,LED_FULL
MAIN_LOOP:
;CONVERT BATTERY VOLTAGE
BANKSEL ADCON0
BSF ADCON0,GO_DONE
WAIT_SL_RDY:
BTFSC ADCON0,GO_DONE ;check conversion completed
GOTO WAIT_SL_RDY
BANKSEL ADRES
MOVF ADRES,W
MOVWF BATTERRY_VOLTAGE
BANKSEL TEMP_LCD_COM
MOVLW 0X80
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVLW HIGH(MSG3)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG3)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X05
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
MOVF BATTERRY_VOLTAGE,W
MOVWF TEMP_1 ;CONVERT AVERAGE VALUE TO BCD
CALL BIN_BCD
; MOVLW 0X02
MOVF BCD_3,W ;SEND DIGIT 1
MOVWF TEMP_4
CALL LCD_NUM_DISPLY ;display first digit
; MOVLW 0X03
MOVF BCD_2,W ;SEND DIGIT 2
MOVWF TEMP_4
CALL LCD_NUM_DISPLY ;display second digit
MOVLW '.' ;SEND DIGIT 2
CALL LCD_DIS ;display second digit
; MOVLW 0X01
MOVF BCD_1,W ;SEND DIGIT 3
MOVWF TEMP_4
CALL LCD_NUM_DISPLY ;display third digit
MOVLW 'V' ;SEND DIGIT 2
2
C:\Users\thejas\Desktop\Untitled.asm
CALL LCD_DIS ;display second digit
BTFSC FLAG_BITS,TRICKKLE
GOTO CHECK_TRICKLE
MOVF BATTERRY_VOLTAGE,W
SUBLW 0X74
BTFSS STATUS,C
GOTO CHECK_BATTERRY_FULL
MOVF BATTERRY_VOLTAGE,W
SUBLW 0X6E
BTFSS STATUS,C
GOTO BATTERRY_LOW
BANKSEL TEMP_LCD_COM
MOVLW 0XC0
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVLW HIGH(MSG7)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG7)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X09
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
BSF PORTC,LED_LOW
BCF PORTC,LED_NORMAL
BCF PORTC,LED_FULL
BCF PORTC,OVER_LOAD_RELAY
GOTO CONTROL_CHARGE
BATTERRY_LOW:
BCF FLAG_BITS,TRICKKLE
CLRF TIME_COUNTER_FULL1
CLRF TIME_COUNTER_FULL2
CLRF TRICKLE_COUNTER
BANKSEL TEMP_LCD_COM
MOVLW 0XC0
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVLW HIGH(MSG5)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG5)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X09
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
BSF PORTC,LED_LOW
BCF PORTC,LED_NORMAL
BCF PORTC,LED_FULL
BSF PORTC,OVER_LOAD_RELAY
GOTO CONTROL_CHARGE
CHECK_BATTERRY_FULL:
MOVF BATTERRY_VOLTAGE,W
SUBLW 0X89
BTFSC STATUS,C
GOTO NORMAL_LEVEL
CHECK_TRICKLE:
BANKSEL TEMP_LCD_COM
MOVLW 0XC0
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVF TIME_COUNTER_FULL2,W
SUBLW 0X08
BTFSC STATUS,Z
GOTO TRCIKLE_CHARGE
INCF TIME_COUNTER_FULL1,F
MOVF TIME_COUNTER_FULL1,W
SUBLW 0X0A
3
C:\Users\thejas\Desktop\Untitled.asm
BTFSS STATUS,Z
GOTO NO_TRCIKLE_CHARGE
CLRF TIME_COUNTER_FULL1
INCF TIME_COUNTER_FULL2,F
GOTO NO_TRCIKLE_CHARGE
TRCIKLE_CHARGE:
MOVLW HIGH(MSG6)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG6)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X09
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
BCF PORTC,LED_LOW
BCF PORTC,LED_NORMAL
BSF PORTC,LED_FULL
BSF PORTC,OVER_LOAD_RELAY
INCF TRICKLE_COUNTER,F
MOVF TRICKLE_COUNTER,W
SUBLW 0X0A
BTFSS STATUS,Z
GOTO CHECK_TRICKKLE_ON
BSF FLAG_BITS,TRICKKLE
MOVLW 0X00
BANKSEL CCPR1L
MOVWF CCPR1L
GOTO COMPLTD_VOLT_CHECK
CHECK_TRICKKLE_ON:
BANKSEL TRICKLE_COUNTER
MOVF TRICKLE_COUNTER,W
SUBLW 0X14
BTFSS STATUS,Z
GOTO COMPLTD_VOLT_CHECK
BCF FLAG_BITS,TRICKKLE
MOVLW 0XFF
BANKSEL CCPR1L
MOVWF CCPR1L
BANKSEL TRICKLE_COUNTER
CLRF TRICKLE_COUNTER
GOTO COMPLTD_VOLT_CHECK
NO_TRCIKLE_CHARGE:
BCF FLAG_BITS,TRICKKLE
MOVLW HIGH(MSG4)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG4)
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X09
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
BCF PORTC,LED_LOW
BCF PORTC,LED_NORMAL
BSF PORTC,LED_FULL
BSF PORTC,OVER_LOAD_RELAY
GOTO CONTROL_CHARGE
NORMAL_LEVEL:
BCF FLAG_BITS,TRICKKLE
CLRF TIME_COUNTER_FULL1
CLRF TIME_COUNTER_FULL2
CLRF TRICKLE_COUNTER
BANKSEL TEMP_LCD_COM
MOVLW 0XC0
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVLW HIGH(MSG4)
BANKSEL PMADRH
MOVWF PMADRH
MOVLW LOW(MSG4)
4
C:\Users\thejas\Desktop\Untitled.asm
MOVWF PMADR
BANKSEL MSG_CHR_CNTR
MOVLW 0X09
MOVWF MSG_CHR_CNTR
CALL STRNG_MSSG
BCF PORTC,LED_LOW
BSF PORTC,LED_NORMAL
BCF PORTC,LED_FULL
BSF PORTC,OVER_LOAD_RELAY
CONTROL_CHARGE:
BCF FLAG_BITS,TRICKKLE
MOVF BATTERRY_VOLTAGE,W
SUBLW 0X74
BTFSC STATUS,C
GOTO CHARGE_LOW_VOLT
MOVLW 0X74
SUBWF BATTERRY_VOLTAGE,W
MOVWF TEMP_1
SUBLW 0X16
BTFSS STATUS,C
GOTO CHARGE_FULL_VOLT
BANKSEL TEMP_LCD_COM
MOVLW 0XC0
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD
MOVLW HIGH(CHARGE_VALUE)
MOVWF PCLATH
MOVF TEMP_1,W
CALL CHARGE_VALUE
; MOVWF TEMP_2
MOVWF TEMP_1 ;CONVERT AVERAGE VALUE TO BCD
BANKSEL CCPR1L
MOVWF CCPR1L
GOTO COMPLTD_VOLT_CHECK
CHARGE_FULL_VOLT:
MOVLW 0XFA
BANKSEL CCPR1L ;SELECT A DUTY CYCLE OF 7FH 50% AS DEFAULT
MOVWF CCPR1L
GOTO COMPLTD_VOLT_CHECK
;
CHARGE_LOW_VOLT:
MOVLW 0XC8
BANKSEL CCPR1L ;SELECT A DUTY CYCLE OF 7FH 50% AS DEFAULT
MOVWF CCPR1L
COMPLTD_VOLT_CHECK:
CALL DELAY
GOTO MAIN_LOOP
;INITIALISATION OF PORTS
INIT_PORTS:
BANKSEL TRISA ;
MOVLW 0X0F ;PORT A AS ANALOGUE INPUT AND FREQUENCY IN
MOVWF TRISA
BANKSEL TRISB ;PORTB AS LCD CONTROL PORT AND RB1 AS PULSE INPUT
MOVLW 0X00
MOVWF TRISB
BANKSEL TRISC ;PORTC AS LCD DATA LINES
MOVLW 0X00
MOVWF TRISC
MOVLW 0XFF
BANKSEL PORTA
MOVWF PORTA
MOVLW 0X00
BANKSEL PORTB
MOVWF PORTB
BANKSEL PORTC
MOVLW 0X00
MOVWF PORTC
RETURN
;INITIALISATION
INIT_ADC:
5
C:\Users\thejas\Desktop\Untitled.asm
BANKSEL ADCON0
MOVLW 0X81
MOVWF ADCON0 ;CONFIGURE ADC ON RA0 AS INPUT FOSC/32 AS CLOCK IN 4MHZ
BANKSEL ADCON1
MOVLW 0X04
MOVWF ADCON1 ;configure adc inputs RA0,RA1AS ANALOGUE AND VDD REF
RETURN
;ROUTINE FOR PWM INITIALISATION
;PWM FREQUENCY OF 3.99KHZ AT 4 MHZ WITH PR2 VALUE OXFFH
INIT_PWM:
BANKSEL PR2
; MOVLW 0XFF ; PR2= FF FOR A PERIOD OF 3.9KHZ AT 4MHZ
MOVLW 0XFF ; PR2= FF FOR A PERIOD OF 19.56KHZ AT 20MHZ
MOVWF PR2
BANKSEL CCPR1L ;SELECT A DUTY CYCLE OF 7FH 50% AS DEFAULT
MOVLW 0X7F
MOVWF CCPR1L
BANKSEL CCP1CON
MOVLW 0X0C ;00001100 SELECT PWM MODE WITH LSB BITS AS ZERO
MOVWF CCP1CON
BANKSEL T2CON
MOVLW 0X04 ;00000100 TMR2 ON WITH PRESCALAR 1:1
MOVWF T2CON
BANKSEL TRISC ;SELCT CCP1 AS PWM OUTPUT
BCF TRISC,2
RETURN
;INITIALISATION OF LCD MODULE
INIT_LCD:
BANKSEL TEMP_LCD_COM
MOVLW 0X3C ;lcd declaration as 8bit/char,2rows,5x10dots/char
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;strobe command to display
MOVLW 0X0C ;screen and cursor is on,no blink
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;strobe command to display
MOVLW 0X06 ;shift cursor right
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;strobe command to display
MOVLW 0X01 ;clear memory and home cursor
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;strobe command to display
CALL DELAY
MOVLW 0X81 ;move cursor space to 3,line1
MOVWF TEMP_LCD_COM
CALL COMMAND_LCD ;strobe command to display
RETURN
;COMMAND TO LCD
COMMAND_LCD:
CALL DELAY_1
BANKSEL PORTC
MOVF TEMP_LCD_COM,W ;DATA FROM RAM TO LCD DATA PORT
MOVWF LCD_DATA
BCF LCD_CNTRL,RS ;RS LOW COMMAND REGISTER SELECTED
BCF LCD_CNTRL,RW ;RW LOW WRITE OPEARTION SELECTED
BSF LCD_CNTRL,EN ;ENABLE LCD
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;WAIT FOR DATA READING BY LCD
BCF LCD_CNTRL,EN ;DISABLE LCD
RETURN
; DATA TO LCD MODULE
LCD_DIS:
BANKSEL LCD_DATA
MOVWF LCD_DATA
CALL DELAY_1
BSF LCD_CNTRL,RS ;RS HIGH DATA REGISTER SELECTED
BCF LCD_CNTRL,RW ;RW LOW WRITE OPEARTION SELECTED
BSF LCD_CNTRL,EN ;ENABLE LCD
NOP ;WAIT FOR DATA READING BY LCD
6
C:\Users\thejas\Desktop\Untitled.asm
NOP
NOP
NOP
NOP ;WAIT FOR DATA READING BY LCD
NOP
NOP
BCF LCD_CNTRL,EN ;DISABLE LCD
RETURN
STRNG_MSSG:
BANKSEL PMCON1
BSF PMCON1,RD ;READ PROGRAM MEMORY
NOP
NOP ;WAIT FOR READ CYCLE
BANKSEL PMDATA
MOVF PMDATA,W ;STORE READ DATA (LSB)
BANKSEL PRG_DAT_LSB
MOVWF PRG_DAT_LSB
BANKSEL PMDATH
MOVF PMDATH,W
BANKSEL PRG_DAT_MSB
MOVWF PRG_DAT_MSB ;STORE RAED DATA(MSB)
DECFSZ MSG_CHR_CNTR,F
GOTO LCD_DISL
RETURN
LCD_DISL:
BCF STATUS,C
RLF PRG_DAT_LSB,F
RLF PRG_DAT_MSB,F
BCF STATUS,C
RRF PRG_DAT_LSB,F
MOVF PRG_DAT_MSB,W
CALL LCD_DIS
MOVF PRG_DAT_LSB,W
CALL LCD_DIS
BANKSEL PMADR
INCF PMADR,F
GOTO STRNG_MSSG
;******************************************************************************
;ROUTINE FOR DISPLAYING NUMBERS IN LCD
LCD_NUM_DISPLY:
MOVLW HIGH(ASCII_NUM)
MOVWF PCLATH
MOVF TEMP_4,W
CALL ASCII_NUM
CALL LCD_DIS
RETURN
;******************************BINARY TO BCD CONVERSION***********************
RETURN
;**********************DELAY SUBROUTINE******************
RETURN
;*********************LOOK UP TABLE & PRINTING DETAILS*************************************
ORG 0X0400
ASCII_NUM:
ADDWF PCL,F
dt "0123456789. "
CHARGE_VALUE:
ADDWF PCL,F
dt
0xC2,0XC4,0XC6,0XC8,0XCA,0XCC,0XCD,0XCF,0xD2,0XD4,0XD6,0XD8,0XDA,0XDC,0XDD,0XDF,0xE2,0XE4,0XE6,0XE8,0XEA,0
XEC,0XED,0XEF,
dt 0xF2,0XF4,0XF6,0XF8,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA,0XFA
MSG1:
da "SMART BATTERRY "
MSG2:
da " CHARGER "
MSG3:
da "VOLTAGE: "
MSG4:
da "CHARGING..... "
MSG5:
da "BATERRY LOW!!!!! "
MSG6:
da "TRICKLE_CHARGING...."
MSG7:
7
C:\Users\thejas\Desktop\Untitled.asm
da "LOW VOLT CUTOFF.. "
END
8

Das könnte Ihnen auch gefallen