list p=16f877a #include radix dec errorlevel -302, -207 ;#DEFINE LOOP ; if i did not use this it was givin an error symbol nt previously defined ;#DEFINE PWM80 ;#DEFINE PWM20 ;#DEFINE PWM1 REG1 equ 0X29 RES1 equ 0X30 RES2 equ 0X31 org 0X00 movlw 0XFF banksel TRISA movwf TRISA ;PORTA I/P banksel PIE1 bcf PIE1,ADIF ;DISABLE ADC INTERRUPT banksel ADCON0 movlw 0XC1 movwf ADCON0 ; RA0 AS ADC PORT movlw 0X80 banksel ADCON1 movwf ADCON1 ; PORTA FOR ADC CHANNEL..RIGHT JUSTIFICATION ;SUBROUTINE GETADC=============================== LOOP: banksel ADCON0 bsf ADCON0,GO ; start a/d conversion ADCLOOP: btfsc ADCON0,GO ;WAIT FOR CONVERSION TO FINISH goto ADCLOOP bcf PIR1,ADIF ; CLEAR CONVERSION COMPLETE FLAG ;COMPARISON WITH THE SETPOINT==================== BSF STATUS,RP0 MOVF ADRESL,W BCF STATUS,RP0 sublw .83 ;FOR SETPOINT 40 DEGREES movwf RES1 btfsc RES1,7 ; CHECK WHETHER THE MSB IS 1 ,IF SO IT MEANS ; THAT TEMP>40 HENCE CALL 80% PWMDUTYCYCLE goto PWM80 BSF STATUS,RP0 MOVF ADRESL,W BCF STATUS,RP0 sublw .73 ; FOR 35 DEGREES movwf RES2 btfsc RES2,7 ;CHECK WHETHER THE MSB IS 1 ,IF SO IT MEANS ; THAT TEMP>35 HENCE CALL 20% PWMDUTYCYCLE goto PWM20 goto PWM1 ; IF THE ABOVE TWO CONDS DOES NT SATISFY CALL ; 1% PWMDUTY CYCLE ;PWMCYCLES======================================== == PWM80: banksel PR2 movlw 0X31 movwf PR2 ; FREQUENCY IS SET FOR 10MICROSECS bcf STATUS,RP0 bcf STATUS,RP1 movlw 0X48 movwf CCPR1L movlw 0X0C movwf CCP1CON ;TRISC Setting for output banksel TRISC bcf TRISC,2;+++++++++out of range banksel T2CON ;TMR2 Prescale selection(PRESCALE TO 1:16 AND POSTSCLE TO 1:1) and TMR2 Turn On movlw 0X07 movwf T2CON goto LOOP PWM20: banksel PR2 ;FOR 20%DUTYCYCLE movlw 0X31 movwf PR2 ; FREQUENCY IS SET FOR 10MICROSECS bcf STATUS,RP0 bcf STATUS,RP1 movlw 0X0A movwf CCPR1L movlw 0X0C movwf CCP1CON ;TRISC Setting for output banksel TRISC bcf TRISC,2;++++++ out of range !!! banksel T2CON ;TMR2 Prescale selection(PRESCALE TO 1:16 AND POSTSCLE TO 1:1) and TMR2 Turn On movlw 0x07 movwf T2CON goto LOOP PWM1: banksel PR2 ; FOR 1% DUTYCYCLE movlw 0X31 movwf PR2 ; FREQUENCY IS SET FOR 10MICROSECS bcf STATUS,RP0 bcf STATUS,RP1 movlw 0X00 movwf CCPR1L movlw 0X2C movwf CCP1CON ;TRISC Setting for output banksel TRISC bcf TRISC,2 ;++++++++++++ out of range banksel T2CON ;TMR2 Prescale selection(PRESCALE TO 1:16 AND POSTSCLE TO 1:1) and TMR2 Turn On movlw 0x07 movwf T2CON goto LOOP end