;************************************************************************** ; ;TITLE PWM on AN2 controled by AD on channel AN1 and displayed on RB0-7 ;This program is a simple implementation of the PIC16C71's A/D ; ; The A/D is configured as follows: ; Vref = +5V internal. ; A/D Osc. = internal RC ; ; ;************************************************************************** #include "p16c711.inc" LIST P=16C711 __CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _CP_OFF ;-------------------------------------------------------------------------- ; Variables ;-------------------------------------------------------------------------- RAM EQU 0x0C TEMP EQU RAM+0 RESULT EQU RAM+1 COUNT1 EQU RAM+2 COUNT2 EQU RAM+3 COUNT3 EQU RAM+4 ;-------------------------------------------------------------------------- ; Program Code ;-------------------------------------------------------------------------- ORG 0x00 GOTO Start ; ;-------------------------------------------------------------------------- ; Main Program ;-------------------------------------------------------------------------- ORG 0x10 Start MOVLW B'00000000' ;set port b as outputs BSF STATUS, RP0 MOVWF TRISB BCF STATUS, RP0 CALL INITAD update CALL GETAD MOVF ADRES,W ;get a/d value MOVWF RESULT MOVWF PORTB BSF PORTB,0 ;turn pin on CLRF COUNT1 LOOP1 MOVF COUNT1,W SUBWF RESULT,W BTFSS STATUS,C ;if less than then skip BCF PORTB,0 ;turn pin off CLRF COUNT2 LOOP2 INCFSZ COUNT2,F GOTO LOOP2 INCFSZ COUNT1,F GOTO LOOP1 GOTO update ; ; This routine gets the result of an A->D convestion from AN1 ; Result is available in ADRES; ; GETAD MOVLW D'03' ;setup time >= 10uS. MOVWF TEMP SDLOOP DECFSZ TEMP, F GOTO SDLOOP BCF ADCON0,ADIF ;clear int flag BSF ADCON0,GO ;start new conversion GETADLOOP BTFSC ADCON0,NOT_DONE ;a/d done? GOTO GETADLOOP ;no then keep checking RETURN ;yes then update new value. ; ; ;InitializeAD, initializes and sets up the A/D hardware. ; INITAD BSF STATUS,RP0 ;Configure AN1 & AN0 as input MOVLW B'00000010' ;Vref as Reference MOVWF ADCON1 ; BCF STATUS,RP0 ; MOVLW B'11000001' ;RC, AN0, A/D MOVWF ADCON0 ; RETURN END