list p=16f874a include include __CONFIG _WDT_OFF ;; The purpose of this program is to test gpsim's ability to simulate a pic 16c71. ;; Specifically, the a/d converter is tested. errorlevel -302 ; Printf Command .command macro x .direct "C", x endm ;---------------------------------------------------------------------- ;---------------------------------------------------------------------- GPR_DATA UDATA_SHR x RES 1 t1 RES 1 t2 RES 1 avg_lo RES 1 avg_hi RES 1 w_temp RES 1 status_temp RES 1 ;---------------------------------------------------------------------- ; ********************* RESET VECTOR LOCATION ******************** ;---------------------------------------------------------------------- RESET_VECTOR CODE 0x000 ; processor reset vector movlw high start ; load upper byte of 'start' label movwf PCLATH ; initialize PCLATH goto start ; go to beginning of program ;; ;; Interrupt ;; movwf w_temp swapf STATUS,W movwf status_temp bcf STATUS,RP0 ;adcon0 is in bank 0 btfsc INTCON,ADIE btfsc PIR1,ADIF goto check .assert "\"FAILED 16F874a unexpected interrupt\"" nop ;; An A/D interrupt has occurred check: bsf t1,0 ;Set a flag to indicate we got the int. bcf PIR1,ADIF ;Clear the a/d interrupt swapf status_temp,w movwf STATUS swapf w_temp,F swapf w_temp,W retfie ;---------------------------------------------------------------------- ; ******************* MAIN CODE START LOCATION ****************** ;---------------------------------------------------------------------- MAIN CODE start: .sim "module library libgpsim_modules" ; Use a pullup resistor as a voltage source .sim "module load pullup V1" .sim "V1.resistance = 100.0" .sim "node na0" .sim "attach na0 V1.pin porta0" .sim "module load pullup V2" .sim "V2.resistance = 100.0" .sim "node na1" .sim "attach na1 V2.pin porta3" ;; Let's use the ADC's interrupt ; RA0 is an Analog Input. ; RA1 - RA5 are all configured as outputs. ; ; Use VDD and VSS for Voltage references. ; ; PCFG = 1110 == AN0 is the only analog input ; ADCS = 110 == FOSC/64 ; ADFM = 0 == 6 LSB of ADRESL are 0. ; bsf STATUS,RP0 ;adcon1 is in bank 1 movlw 1 movwf TRISA movlw (1<