;********************************************************************************************************************************** ;This version of the ignition coil driver software generates pulses with on times of 0.5ms to 2ms, and a frequency of 10Hz to 400Hz. ;The on time and frequency are separately controllable via two potentiometers read by the microprocessors internal A/D converter. ;********************************************************************************************************************************** list p=12F683 ; list directive to define processor #include ; processor specific variable definitions errorlevel -302 ; suppress message 302 from list file __CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTOSCIO ;RAM variables used in the program CBLOCK H'020' VAR_TABLE_OFFSET VAR_TEXT_INDEX VAR_ON_TIME VAR_PERIOD_HIGH VAR_PERIOD_LOW ENDC ;Equates ENABLE EQU D'3' LOW_SIDE EQU D'2' ;GP0= ;GP1= ;GP2= Pulse generator output ;GP3= Enable Input ;GP4= ;GP5= ORG H'000' ;Reset Vector goto PROGRAM_START ORG H'005' PROGRAM_START ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;Configuration of the Processor ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;Clear the I/O Lines bcf STATUS,RP0 clrf GPIO ;Configure IO pins as input or output as needed ;The CCP1 output used for the PWM is on GPIO #2, pin 5 of the 12F683 processor ;GPIO #0 (A/D channel #0) is used for reading the potentiometer bsf STATUS,RP0 movlw B'11111011' movwf TRISIO ;Configure to use the internal 4MHz oscillator MOVLW b'01100001' MOVWF OSCCON ;Set A/D conversion clock to Fosc/8, and configure the necessary pins as analog inputs. ;Note: The conversion process takes 11 Tad, and Tad will be 2usec for an 4MHz oscillator and these settings, so the conversion ;time will be 22usec (22 instruction cycles). MOVLW b'00011010' MOVWF ANSEL ;Set up Timer0 MOVLW b'11010010' MOVWF OPTION_REG ;Count on the internal instruction clock, assign prescaler to Timer0, set prescaler to divivde ;by 8 BCF STATUS,RP0 ;Change to Bank0 ;Turn off the comparator module bcf STATUS,RP0 movlw H'07' movwf CMCON0 ;Configure the A/D converter for left justified results, reference voltage of Vdd (5 volts), ;select ananlog channel 1, and turn the converter ON. MOVLW B'00001101' MOVWF ADCON0 BCF GPIO,LOW_SIDE ;********************************************************************************************************************************** ;Main Program Code ;********************************************************************************************************************************** ;Poll the enable pin. If the enable pin is low, generate pulses with the on time and sfrequency determined ;by readings from the analog inputs. If the enable pin is high, turn the switch OFF. CHECK_ENABLE BTFSC GPIO,ENABLE GOTO CHECK_ENABLE ;Turn the switch ON BSF GPIO,LOW_SIDE ;Read the two analog inputs (on time and repition frequency). The values read will be used to look up timing definitions ;*****Read the on time control input ;Start conversion by setting the GO/DONE bit in ADCON0 register BSF ADCON0,GO_DONE ;The A/D converter takes 22 microseconds To complete a conversion. ;Wait for the A/D conversion to complete POLL_GODONE1 BTFSC ADCON0,GO_DONE GOTO POLL_GODONE1 ;Set the A/D converter to channel 1, as this will be used for the next read (frequency select input) BCF ADCON0,CHS1 ;Read out the A/D value from ADRESH MOVFW ADRESH MOVWF VAR_TEXT_INDEX ;The value from the reading is used to look up the Timer0 value used to set the on time CALL SUB_ON_TIME_LOOKUP MOVWF VAR_ON_TIME ;Clear Timer0 overflow interrupt flag bit BCF INTCON,T0IF ;Load Timer0 with the value from the look up MOVFW VAR_ON_TIME MOVWF TMR0 ;Read the frequency control input ;Start conversion by setting the GO/DONE bit in ADCON0 register BSF ADCON0,GO_DONE ;The A/D converter takes 22 microseconds (22 instructin cycles) to complete a conversion. ;Wait for the A/D conversion to complete POLL_GODONE2 BTFSC ADCON0,GO_DONE GOTO POLL_GODONE2 ;Set the A/D converter to channel 3, as this will be used for the next read (on time select input) BSF ADCON0,CHS1 ;Read out the A/D value from ADRESH MOVFW ADRESH MOVWF VAR_TEXT_INDEX ;The value from the reading is used to look up the Timer1 values used to set the period (and hence the repetition frequency) ;Look up the high byte of the Timer1 setting from the table CALL SUB_PERIOD_HIGH_LOOKUP MOVWF VAR_PERIOD_HIGH ;Look up the low byte of the Timer1 setting from the table CALL SUB_PERIOD_LOW_LOOKUP MOVWF VAR_PERIOD_LOW ;Turn timer1 OFF, select 1:8 prescaler, use system clock MOVLW B'00010000' MOVWF T1CON ;Load the sample delay values into TMR1 high and low bytes MOVFW VAR_PERIOD_HIGH MOVWF TMR1H MOVFW VAR_PERIOD_LOW MOVWF TMR1L ;Make sure the overflow flag is cleared to begin BCF PIR1,TMR1IF ;Turn on timer 1 by setting the TMR1ON bit in T1CON BSF T1CON,TMR1ON ;Poll the Timer 0 interrupt flag to determine when the on time is complete WAIT_FOR_ON_IIME_COMPLETE BTFSS INTCON,T0IF ;INTCON register contains the Timer0 overflow interrupt flag GOTO WAIT_FOR_ON_IIME_COMPLETE ;set the output low once the on time is ended BCF GPIO,LOW_SIDE ;Poll the Timer 1 interrupt flag to determine when the period is complete WAIT_FOR_PERIOD_COMPLETE BTFSS PIR1,TMR1IF GOTO WAIT_FOR_PERIOD_COMPLETE ;Go back to the start and repeat as long as the enable line is low GOTO CHECK_ENABLE ;********************************************************************************************************************************** ;Subroutine SUB_ON_TIME_LOOKUP ;This subroutine is used to lookup the value to load into Timer0 to set the ON time of the switch. ;********************************************************************************************************************************** SUB_ON_TIME_LOOKUP MOVFW VAR_TEXT_INDEX MOVWF VAR_TABLE_OFFSET MOVLW LOW SUB_ON_TIME_LOOKUP_TABLE + 1 ADDWF VAR_TABLE_OFFSET,F MOVLW HIGH SUB_ON_TIME_LOOKUP_TABLE BTFSC STATUS,C ADDLW 1 MOVWF PCLATH MOVF VAR_TABLE_OFFSET,W CALL SUB_ON_TIME_LOOKUP_TABLE RETURN ;Return from SUB_ON_TIME_LOOKUP ;********************************************************************************************************************************** ; END of Subroutine SUB_ON_TIME_LOOKUP ;********************************************************************************************************************************** ;********************************************************************************************************************************** ;Subroutine SUB_ON_TIME_LOOKUP_TABLE ;This subroutine is called by subroutine SUB_ON_TIME_LOOKUP. The value will be in the ;W register when this subroutine returns. ;********************************************************************************************************************************** SUB_ON_TIME_LOOKUP_TABLE MOVWF PCL RETLW H'0C' ;2ms RETLW H'0D' ;2ms RETLW H'0D' ;2ms RETLW H'0E' ;2ms RETLW H'0F' ;2ms RETLW H'10' ;2ms RETLW H'10' ;2ms RETLW H'11' ;2ms RETLW H'12' ;1.9ms RETLW H'12' ;1.9ms RETLW H'13' ;1.9ms RETLW H'14' ;1.9ms RETLW H'15' ;1.9ms RETLW H'15' ;1.9ms RETLW H'16' ;1.9ms RETLW H'17' ;1.9ms RETLW H'18' ;1.9ms RETLW H'18' ;1.9ms RETLW H'19' ;1.9ms RETLW H'1A' ;1.9ms RETLW H'1B' ;1.9ms RETLW H'1B' ;1.9ms RETLW H'1C' ;1.9ms RETLW H'1D' ;1.9ms RETLW H'1D' ;1.9ms RETLW H'1E' ;1.8ms RETLW H'1F' ;1.8ms RETLW H'20' ;1.8ms RETLW H'20' ;1.8ms RETLW H'21' ;1.8ms RETLW H'22' ;1.8ms RETLW H'23' ;1.8ms RETLW H'23' ;1.8ms RETLW H'24' ;1.8ms RETLW H'25' ;1.8ms RETLW H'25' ;1.8ms RETLW H'26' ;1.8ms RETLW H'27' ;1.8ms RETLW H'28' ;1.8ms RETLW H'28' ;1.8ms RETLW H'29' ;1.8ms RETLW H'2A' ;1.8ms RETLW H'2B' ;1.7ms RETLW H'2B' ;1.7ms RETLW H'2C' ;1.7ms RETLW H'2D' ;1.7ms RETLW H'2E' ;1.7ms RETLW H'2E' ;1.7ms RETLW H'2F' ;1.7ms RETLW H'30' ;1.7ms RETLW H'30' ;1.7ms RETLW H'31' ;1.7ms RETLW H'32' ;1.7ms RETLW H'33' ;1.7ms RETLW H'33' ;1.7ms RETLW H'34' ;1.7ms RETLW H'35' ;1.7ms RETLW H'36' ;1.7ms RETLW H'36' ;1.7ms RETLW H'37' ;1.6ms RETLW H'38' ;1.6ms RETLW H'39' ;1.6ms RETLW H'39' ;1.6ms RETLW H'3A' ;1.6ms RETLW H'3B' ;1.6ms RETLW H'3B' ;1.6ms RETLW H'3C' ;1.6ms RETLW H'3D' ;1.6ms RETLW H'3E' ;1.6ms RETLW H'3E' ;1.6ms RETLW H'3F' ;1.6ms RETLW H'40' ;1.6ms RETLW H'41' ;1.6ms RETLW H'41' ;1.6ms RETLW H'42' ;1.6ms RETLW H'43' ;1.6ms RETLW H'44' ;1.5ms RETLW H'44' ;1.5ms RETLW H'45' ;1.5ms RETLW H'46' ;1.5ms RETLW H'46' ;1.5ms RETLW H'47' ;1.5ms RETLW H'48' ;1.5ms RETLW H'49' ;1.5ms RETLW H'49' ;1.5ms RETLW H'4A' ;1.5ms RETLW H'4B' ;1.5ms RETLW H'4C' ;1.5ms RETLW H'4C' ;1.5ms RETLW H'4D' ;1.5ms RETLW H'4E' ;1.5ms RETLW H'4F' ;1.5ms RETLW H'4F' ;1.5ms RETLW H'50' ;1.4ms RETLW H'51' ;1.4ms RETLW H'51' ;1.4ms RETLW H'52' ;1.4ms RETLW H'53' ;1.4ms RETLW H'54' ;1.4ms RETLW H'54' ;1.4ms RETLW H'55' ;1.4ms RETLW H'56' ;1.4ms RETLW H'57' ;1.4ms RETLW H'57' ;1.4ms RETLW H'58' ;1.4ms RETLW H'59' ;1.4ms RETLW H'59' ;1.4ms RETLW H'5A' ;1.4ms RETLW H'5B' ;1.4ms RETLW H'5C' ;1.4ms RETLW H'5C' ;1.3ms RETLW H'5D' ;1.3ms RETLW H'5E' ;1.3ms RETLW H'5F' ;1.3ms RETLW H'5F' ;1.3ms RETLW H'60' ;1.3ms RETLW H'61' ;1.3ms RETLW H'62' ;1.3ms RETLW H'62' ;1.3ms RETLW H'63' ;1.3ms RETLW H'64' ;1.3ms RETLW H'64' ;1.3ms RETLW H'65' ;1.3ms RETLW H'66' ;1.3ms RETLW H'67' ;1.3ms RETLW H'67' ;1.3ms RETLW H'68' ;1.3ms RETLW H'69' ;1.3ms RETLW H'6A' ;1.2ms RETLW H'6A' ;1.2ms RETLW H'6B' ;1.2ms RETLW H'6C' ;1.2ms RETLW H'6D' ;1.2ms RETLW H'6D' ;1.2ms RETLW H'6E' ;1.2ms RETLW H'6F' ;1.2ms RETLW H'6F' ;1.2ms RETLW H'70' ;1.2ms RETLW H'71' ;1.2ms RETLW H'72' ;1.2ms RETLW H'72' ;1.2ms RETLW H'73' ;1.2ms RETLW H'74' ;1.2ms RETLW H'75' ;1.2ms RETLW H'75' ;1.2ms RETLW H'76' ;1.1ms RETLW H'77' ;1.1ms RETLW H'78' ;1.1ms RETLW H'78' ;1.1ms RETLW H'79' ;1.1ms RETLW H'7A' ;1.1ms RETLW H'7A' ;1.1ms RETLW H'7B' ;1.1ms RETLW H'7C' ;1.1ms RETLW H'7D' ;1.1ms RETLW H'7D' ;1.1ms RETLW H'7E' ;1.1ms RETLW H'7F' ;1.1ms RETLW H'80' ;1.1ms RETLW H'80' ;1.1ms RETLW H'81' ;1.1ms RETLW H'82' ;1.1ms RETLW H'83' ;1ms RETLW H'83' ;1ms RETLW H'84' ;1ms RETLW H'85' ;1ms RETLW H'85' ;1ms RETLW H'86' ;1ms RETLW H'87' ;1ms RETLW H'88' ;1ms RETLW H'88' ;1ms RETLW H'89' ;1ms RETLW H'8A' ;1ms RETLW H'8B' ;1ms RETLW H'8B' ;1ms RETLW H'8C' ;1ms RETLW H'8D' ;1ms RETLW H'8D' ;1ms RETLW H'8E' ;1ms RETLW H'8F' ;0.9ms RETLW H'90' ;0.9ms RETLW H'90' ;0.9ms RETLW H'91' ;0.9ms RETLW H'92' ;0.9ms RETLW H'93' ;0.9ms RETLW H'93' ;0.9ms RETLW H'94' ;0.9ms RETLW H'95' ;0.9ms RETLW H'96' ;0.9ms RETLW H'96' ;0.9ms RETLW H'97' ;0.9ms RETLW H'98' ;0.9ms RETLW H'98' ;0.9ms RETLW H'99' ;0.9ms RETLW H'9A' ;0.9ms RETLW H'9B' ;0.9ms RETLW H'9B' ;0.8ms RETLW H'9C' ;0.8ms RETLW H'9D' ;0.8ms RETLW H'9E' ;0.8ms RETLW H'9E' ;0.8ms RETLW H'9F' ;0.8ms RETLW H'A0' ;0.8ms RETLW H'A1' ;0.8ms RETLW H'A1' ;0.8ms RETLW H'A2' ;0.8ms RETLW H'A3' ;0.8ms RETLW H'A3' ;0.8ms RETLW H'A4' ;0.8ms RETLW H'A5' ;0.8ms RETLW H'A6' ;0.8ms RETLW H'A6' ;0.8ms RETLW H'A7' ;0.8ms RETLW H'A8' ;0.7ms RETLW H'A9' ;0.7ms RETLW H'A9' ;0.7ms RETLW H'AA' ;0.7ms RETLW H'AB' ;0.7ms RETLW H'AC' ;0.7ms RETLW H'AC' ;0.7ms RETLW H'AD' ;0.7ms RETLW H'AE' ;0.7ms RETLW H'AE' ;0.7ms RETLW H'AF' ;0.7ms RETLW H'B0' ;0.7ms RETLW H'B1' ;0.7ms RETLW H'B1' ;0.7ms RETLW H'B2' ;0.7ms RETLW H'B3' ;0.7ms RETLW H'B4' ;0.7ms RETLW H'B4' ;0.6ms RETLW H'B5' ;0.6ms RETLW H'B6' ;0.6ms RETLW H'B7' ;0.6ms RETLW H'B7' ;0.6ms RETLW H'B8' ;0.6ms RETLW H'B9' ;0.6ms RETLW H'B9' ;0.6ms RETLW H'BA' ;0.6ms RETLW H'BB' ;0.6ms RETLW H'BC' ;0.6ms RETLW H'BC' ;0.6ms RETLW H'BD' ;0.6ms RETLW H'BE' ;0.6ms RETLW H'BF' ;0.6ms RETLW H'BF' ;0.6ms RETLW H'C0' ;0.6ms RETLW H'C1' ;0.5ms RETLW H'C1' ;0.5ms RETLW H'C2' ;0.5ms RETLW H'C3' ;0.5ms RETLW H'C4' ;0.5ms RETLW H'C4' ;0.5ms RETLW H'C5' ;0.5ms RETLW H'C6' ;0.5ms RETLW H'C7' ;0.5ms ;********************************************************************************************************************************** ; END of Subroutine SUB_ON_TIME_LOOKUP_TABLE ;********************************************************************************************************************************** ;********************************************************************************************************************************** ;Subroutine SUB_PERIOD_HIGH_LOOKUP ;This subroutine is used to lookup the high byte of the value loaded into Timer1 to set the period of the pulse repetition. ;********************************************************************************************************************************** SUB_PERIOD_HIGH_LOOKUP MOVFW VAR_TEXT_INDEX MOVWF VAR_TABLE_OFFSET MOVLW LOW SUB_PERIOD_HIGH_LOOKUP_TABLE + 1 ADDWF VAR_TABLE_OFFSET,F MOVLW HIGH SUB_PERIOD_HIGH_LOOKUP_TABLE BTFSC STATUS,C ADDLW 1 MOVWF PCLATH MOVF VAR_TABLE_OFFSET,W CALL SUB_PERIOD_HIGH_LOOKUP_TABLE RETURN ;Return from SUB_PERIOD_HIGH_LOOKUP ;********************************************************************************************************************************** ; END of Subroutine SUB_PERIOD_HIGH_LOOKUP ;********************************************************************************************************************************** ;********************************************************************************************************************************** ;Subroutine SUB_PERIOD_HIGH_LOOKUP_TABLE ;This subroutine is called by subroutine SUB_PERIOD_HIGH_LOOKUP. The value will be in the ;W register when this subroutine returns. ;********************************************************************************************************************************** SUB_PERIOD_HIGH_LOOKUP_TABLE MOVWF PCL RETLW H'3C' ;10Hz RETLW H'56' ;11.5Hz RETLW H'6A' ;13Hz RETLW H'7A' ;14.6Hz RETLW H'86' ;16.1Hz RETLW H'91' ;17.6Hz RETLW H'9A' ;19.1Hz RETLW H'A1' ;20.7Hz RETLW H'A8' ;22.2Hz RETLW H'AD' ;23.7Hz RETLW H'B2' ;25.2Hz RETLW H'B7' ;26.8Hz RETLW H'BB' ;28.3Hz RETLW H'BE' ;29.8Hz RETLW H'C1' ;31.3Hz RETLW H'C4' ;32.9Hz RETLW H'C7' ;34.4Hz RETLW H'C9' ;35.9Hz RETLW H'CC' ;37.4Hz RETLW H'CE' ;38.9Hz RETLW H'D0' ;40.5Hz RETLW H'D1' ;42Hz RETLW H'D3' ;43.5Hz RETLW H'D4' ;45Hz RETLW H'D6' ;46.6Hz RETLW H'D7' ;48.1Hz RETLW H'D8' ;49.6Hz RETLW H'DA' ;51.1Hz RETLW H'DB' ;52.7Hz RETLW H'DC' ;54.2Hz RETLW H'DD' ;55.7Hz RETLW H'DE' ;57.2Hz RETLW H'DF' ;58.8Hz RETLW H'DF' ;60.3Hz RETLW H'E0' ;61.8Hz RETLW H'E1' ;63.3Hz RETLW H'E2' ;64.8Hz RETLW H'E2' ;66.4Hz RETLW H'E3' ;67.9Hz RETLW H'E4' ;69.4Hz RETLW H'E4' ;70.9Hz RETLW H'E5' ;72.5Hz RETLW H'E5' ;74Hz RETLW H'E6' ;75.5Hz RETLW H'E6' ;77Hz RETLW H'E7' ;78.6Hz RETLW H'E7' ;80.1Hz RETLW H'E8' ;81.6Hz RETLW H'E8' ;83.1Hz RETLW H'E9' ;84.6Hz RETLW H'E9' ;86.2Hz RETLW H'E9' ;87.7Hz RETLW H'EA' ;89.2Hz RETLW H'EA' ;90.7Hz RETLW H'EB' ;92.3Hz RETLW H'EB' ;93.8Hz RETLW H'EB' ;95.3Hz RETLW H'EC' ;96.8Hz RETLW H'EC' ;98.4Hz RETLW H'EC' ;99.9Hz RETLW H'ED' ;101.4Hz RETLW H'ED' ;102.9Hz RETLW H'ED' ;104.5Hz RETLW H'ED' ;106Hz RETLW H'EE' ;107.5Hz RETLW H'EE' ;109Hz RETLW H'EE' ;110.5Hz RETLW H'EE' ;112.1Hz RETLW H'EF' ;113.6Hz RETLW H'EF' ;115.1Hz RETLW H'EF' ;116.6Hz RETLW H'EF' ;118.2Hz RETLW H'EF' ;119.7Hz RETLW H'F0' ;121.2Hz RETLW H'F0' ;122.7Hz RETLW H'F0' ;124.3Hz RETLW H'F0' ;125.8Hz RETLW H'F0' ;127.3Hz RETLW H'F1' ;128.8Hz RETLW H'F1' ;130.4Hz RETLW H'F1' ;131.9Hz RETLW H'F1' ;133.4Hz RETLW H'F1' ;134.9Hz RETLW H'F1' ;136.4Hz RETLW H'F2' ;138Hz RETLW H'F2' ;139.5Hz RETLW H'F2' ;141Hz RETLW H'F2' ;142.5Hz RETLW H'F2' ;144.1Hz RETLW H'F2' ;145.6Hz RETLW H'F2' ;147.1Hz RETLW H'F3' ;148.6Hz RETLW H'F3' ;150.2Hz RETLW H'F3' ;151.7Hz RETLW H'F3' ;153.2Hz RETLW H'F3' ;154.7Hz RETLW H'F3' ;156.3Hz RETLW H'F3' ;157.8Hz RETLW H'F4' ;159.3Hz RETLW H'F4' ;160.8Hz RETLW H'F4' ;162.3Hz RETLW H'F4' ;163.9Hz RETLW H'F4' ;165.4Hz RETLW H'F4' ;166.9Hz RETLW H'F4' ;168.4Hz RETLW H'F4' ;170Hz RETLW H'F4' ;171.5Hz RETLW H'F4' ;173Hz RETLW H'F5' ;174.5Hz RETLW H'F5' ;176.1Hz RETLW H'F5' ;177.6Hz RETLW H'F5' ;179.1Hz RETLW H'F5' ;180.6Hz RETLW H'F5' ;182.1Hz RETLW H'F5' ;183.7Hz RETLW H'F5' ;185.2Hz RETLW H'F5' ;186.7Hz RETLW H'F5' ;188.2Hz RETLW H'F5' ;189.8Hz RETLW H'F6' ;191.3Hz RETLW H'F6' ;192.8Hz RETLW H'F6' ;194.3Hz RETLW H'F6' ;195.9Hz RETLW H'F6' ;197.4Hz RETLW H'F6' ;198.9Hz RETLW H'F6' ;200.4Hz RETLW H'F6' ;202Hz RETLW H'F6' ;203.5Hz RETLW H'F6' ;205Hz RETLW H'F6' ;206.5Hz RETLW H'F6' ;208Hz RETLW H'F6' ;209.6Hz RETLW H'F7' ;211.1Hz RETLW H'F7' ;212.6Hz RETLW H'F7' ;214.1Hz RETLW H'F7' ;215.7Hz RETLW H'F7' ;217.2Hz RETLW H'F7' ;218.7Hz RETLW H'F7' ;220.2Hz RETLW H'F7' ;221.8Hz RETLW H'F7' ;223.3Hz RETLW H'F7' ;224.8Hz RETLW H'F7' ;226.3Hz RETLW H'F7' ;227.9Hz RETLW H'F7' ;229.4Hz RETLW H'F7' ;230.9Hz RETLW H'F7' ;232.4Hz RETLW H'F7' ;233.9Hz RETLW H'F7' ;235.5Hz RETLW H'F8' ;237Hz RETLW H'F8' ;238.5Hz RETLW H'F8' ;240Hz RETLW H'F8' ;241.6Hz RETLW H'F8' ;243.1Hz RETLW H'F8' ;244.6Hz RETLW H'F8' ;246.1Hz RETLW H'F8' ;247.7Hz RETLW H'F8' ;249.2Hz RETLW H'F8' ;250.7Hz RETLW H'F8' ;252.2Hz RETLW H'F8' ;253.8Hz RETLW H'F8' ;255.3Hz RETLW H'F8' ;256.8Hz RETLW H'F8' ;258.3Hz RETLW H'F8' ;259.8Hz RETLW H'F8' ;261.4Hz RETLW H'F8' ;262.9Hz RETLW H'F8' ;264.4Hz RETLW H'F8' ;265.9Hz RETLW H'F8' ;267.5Hz RETLW H'F9' ;269Hz RETLW H'F9' ;270.5Hz RETLW H'F9' ;272Hz RETLW H'F9' ;273.6Hz RETLW H'F9' ;275.1Hz RETLW H'F9' ;276.6Hz RETLW H'F9' ;278.1Hz RETLW H'F9' ;279.6Hz RETLW H'F9' ;281.2Hz RETLW H'F9' ;282.7Hz RETLW H'F9' ;284.2Hz RETLW H'F9' ;285.7Hz RETLW H'F9' ;287.3Hz RETLW H'F9' ;288.8Hz RETLW H'F9' ;290.3Hz RETLW H'F9' ;291.8Hz RETLW H'F9' ;293.4Hz RETLW H'F9' ;294.9Hz RETLW H'F9' ;296.4Hz RETLW H'F9' ;297.9Hz RETLW H'F9' ;299.5Hz RETLW H'F9' ;301Hz RETLW H'F9' ;302.5Hz RETLW H'F9' ;304Hz RETLW H'F9' ;305.5Hz RETLW H'F9' ;307.1Hz RETLW H'F9' ;308.6Hz RETLW H'F9' ;310.1Hz RETLW H'FA' ;311.6Hz RETLW H'FA' ;313.2Hz RETLW H'FA' ;314.7Hz RETLW H'FA' ;316.2Hz RETLW H'FA' ;317.7Hz RETLW H'FA' ;319.3Hz RETLW H'FA' ;320.8Hz RETLW H'FA' ;322.3Hz RETLW H'FA' ;323.8Hz RETLW H'FA' ;325.4Hz RETLW H'FA' ;326.9Hz RETLW H'FA' ;328.4Hz RETLW H'FA' ;329.9Hz RETLW H'FA' ;331.4Hz RETLW H'FA' ;333Hz RETLW H'FA' ;334.5Hz RETLW H'FA' ;336Hz RETLW H'FA' ;337.5Hz RETLW H'FA' ;339.1Hz RETLW H'FA' ;340.6Hz RETLW H'FA' ;342.1Hz RETLW H'FA' ;343.6Hz RETLW H'FA' ;345.2Hz RETLW H'FA' ;346.7Hz RETLW H'FA' ;348.2Hz RETLW H'FA' ;349.7Hz RETLW H'FA' ;351.3Hz RETLW H'FA' ;352.8Hz RETLW H'FA' ;354.3Hz RETLW H'FA' ;355.8Hz RETLW H'FA' ;357.3Hz RETLW H'FA' ;358.9Hz RETLW H'FA' ;360.4Hz RETLW H'FA' ;361.9Hz RETLW H'FA' ;363.4Hz RETLW H'FA' ;365Hz RETLW H'FA' ;366.5Hz RETLW H'FA' ;368Hz RETLW H'FA' ;369.5Hz RETLW H'FB' ;371.1Hz RETLW H'FB' ;372.6Hz RETLW H'FB' ;374.1Hz RETLW H'FB' ;375.6Hz RETLW H'FB' ;377.1Hz RETLW H'FB' ;378.7Hz RETLW H'FB' ;380.2Hz RETLW H'FB' ;381.7Hz RETLW H'FB' ;383.2Hz RETLW H'FB' ;384.8Hz RETLW H'FB' ;386.3Hz RETLW H'FB' ;387.8Hz RETLW H'FB' ;389.3Hz RETLW H'FB' ;390.9Hz RETLW H'FB' ;392.4Hz RETLW H'FB' ;393.9Hz RETLW H'FB' ;395.4Hz RETLW H'FB' ;397Hz RETLW H'FB' ;398.5Hz ;********************************************************************************************************************************** ; END of Subroutine SUB_PERIOD_HIGH_LOOKUP_TABLE ;********************************************************************************************************************************** ;********************************************************************************************************************************** ;Subroutine SUB_PERIOD_LOW_LOOKUP ;This subroutine is used to lookup the low byte of the value loaded into Timer1 to set the period of the pulse repetition. ;********************************************************************************************************************************** SUB_PERIOD_LOW_LOOKUP MOVFW VAR_TEXT_INDEX MOVWF VAR_TABLE_OFFSET MOVLW LOW SUB_PERIOD_LOW_LOOKUP_TABLE + 1 ADDWF VAR_TABLE_OFFSET,F MOVLW HIGH SUB_PERIOD_LOW_LOOKUP_TABLE BTFSC STATUS,C ADDLW 1 MOVWF PCLATH MOVF VAR_TABLE_OFFSET,W CALL SUB_PERIOD_LOW_LOOKUP_TABLE RETURN ;Return from SUB_PERIOD_LOW_LOOKUP ;********************************************************************************************************************************** ; END of Subroutine SUB_PERIOD_LOW_LOOKUP ;********************************************************************************************************************************** ;********************************************************************************************************************************** ;Subroutine SUB_PERIOD_LOW_LOOKUP_TABLE ;This subroutine is called by subroutine SUB_PERIOD_LOW_LOOKUP. The value will be in the ;W register when this subroutine returns. ;********************************************************************************************************************************** SUB_PERIOD_LOW_LOOKUP_TABLE MOVWF PCL RETLW H'F5' ;10Hz RETLW H'C7' ;11.5Hz RETLW H'92' ;13Hz RETLW H'39' ;14.6Hz RETLW H'E9' ;16.1Hz RETLW H'68' ;17.6Hz RETLW H'3B' ;19.1Hz RETLW H'C0' ;20.7Hz RETLW H'3E' ;22.2Hz RETLW H'E6' ;23.7Hz RETLW H'DF' ;25.2Hz RETLW H'47' ;26.8Hz RETLW H'35' ;28.3Hz RETLW H'BD' ;29.8Hz RETLW H'ED' ;31.3Hz RETLW H'D1' ;32.9Hz RETLW H'74' ;34.4Hz RETLW H'DD' ;35.9Hz RETLW H'14' ;37.4Hz RETLW H'1E' ;38.9Hz RETLW H'02' ;40.5Hz RETLW H'C2' ;42Hz RETLW H'63' ;43.5Hz RETLW H'E8' ;45Hz RETLW H'53' ;46.6Hz RETLW H'A7' ;48.1Hz RETLW H'E6' ;49.6Hz RETLW H'13' ;51.1Hz RETLW H'2D' ;52.7Hz RETLW H'38' ;54.2Hz RETLW H'35' ;55.7Hz RETLW H'24' ;57.2Hz RETLW H'06' ;58.8Hz RETLW H'DD' ;60.3Hz RETLW H'AA' ;61.8Hz RETLW H'6D' ;63.3Hz RETLW H'26' ;64.8Hz RETLW H'D7' ;66.4Hz RETLW H'80' ;67.9Hz RETLW H'22' ;69.4Hz RETLW H'BD' ;70.9Hz RETLW H'51' ;72.5Hz RETLW H'DF' ;74Hz RETLW H'67' ;75.5Hz RETLW H'EA' ;77Hz RETLW H'68' ;78.6Hz RETLW H'E1' ;80.1Hz RETLW H'56' ;81.6Hz RETLW H'C6' ;83.1Hz RETLW H'32' ;84.6Hz RETLW H'9B' ;86.2Hz RETLW H'FF' ;87.7Hz RETLW H'61' ;89.2Hz RETLW H'BF' ;90.7Hz RETLW H'1A' ;92.3Hz RETLW H'72' ;93.8Hz RETLW H'C7' ;95.3Hz RETLW H'1A' ;96.8Hz RETLW H'6A' ;98.4Hz RETLW H'B7' ;99.9Hz RETLW H'02' ;101.4Hz RETLW H'4B' ;102.9Hz RETLW H'92' ;104.5Hz RETLW H'D7' ;106Hz RETLW H'1A' ;107.5Hz RETLW H'5B' ;109Hz RETLW H'9A' ;110.5Hz RETLW H'D8' ;112.1Hz RETLW H'13' ;113.6Hz RETLW H'4E' ;115.1Hz RETLW H'86' ;116.6Hz RETLW H'BE' ;118.2Hz RETLW H'F3' ;119.7Hz RETLW H'28' ;121.2Hz RETLW H'5B' ;122.7Hz RETLW H'8D' ;124.3Hz RETLW H'BE' ;125.8Hz RETLW H'ED' ;127.3Hz RETLW H'1C' ;128.8Hz RETLW H'49' ;130.4Hz RETLW H'76' ;131.9Hz RETLW H'A1' ;133.4Hz RETLW H'CB' ;134.9Hz RETLW H'F5' ;136.4Hz RETLW H'1D' ;138Hz RETLW H'45' ;139.5Hz RETLW H'6B' ;141Hz RETLW H'91' ;142.5Hz RETLW H'B6' ;144.1Hz RETLW H'DB' ;145.6Hz RETLW H'FE' ;147.1Hz RETLW H'21' ;148.6Hz RETLW H'43' ;150.2Hz RETLW H'65' ;151.7Hz RETLW H'85' ;153.2Hz RETLW H'A5' ;154.7Hz RETLW H'C5' ;156.3Hz RETLW H'E4' ;157.8Hz RETLW H'02' ;159.3Hz RETLW H'20' ;160.8Hz RETLW H'3D' ;162.3Hz RETLW H'5A' ;163.9Hz RETLW H'76' ;165.4Hz RETLW H'91' ;166.9Hz RETLW H'AD' ;168.4Hz RETLW H'C7' ;170Hz RETLW H'E1' ;171.5Hz RETLW H'FB' ;173Hz RETLW H'14' ;174.5Hz RETLW H'2D' ;176.1Hz RETLW H'45' ;177.6Hz RETLW H'5D' ;179.1Hz RETLW H'75' ;180.6Hz RETLW H'8C' ;182.1Hz RETLW H'A3' ;183.7Hz RETLW H'B9' ;185.2Hz RETLW H'CF' ;186.7Hz RETLW H'E5' ;188.2Hz RETLW H'FA' ;189.8Hz RETLW H'0F' ;191.3Hz RETLW H'24' ;192.8Hz RETLW H'38' ;194.3Hz RETLW H'4C' ;195.9Hz RETLW H'60' ;197.4Hz RETLW H'73' ;198.9Hz RETLW H'86' ;200.4Hz RETLW H'99' ;202Hz RETLW H'AC' ;203.5Hz RETLW H'BE' ;205Hz RETLW H'D0' ;206.5Hz RETLW H'E2' ;208Hz RETLW H'F3' ;209.6Hz RETLW H'04' ;211.1Hz RETLW H'15' ;212.6Hz RETLW H'26' ;214.1Hz RETLW H'37' ;215.7Hz RETLW H'47' ;217.2Hz RETLW H'57' ;218.7Hz RETLW H'67' ;220.2Hz RETLW H'76' ;221.8Hz RETLW H'86' ;223.3Hz RETLW H'95' ;224.8Hz RETLW H'A4' ;226.3Hz RETLW H'B3' ;227.9Hz RETLW H'C1' ;229.4Hz RETLW H'D0' ;230.9Hz RETLW H'DE' ;232.4Hz RETLW H'EC' ;233.9Hz RETLW H'FA' ;235.5Hz RETLW H'07' ;237Hz RETLW H'15' ;238.5Hz RETLW H'22' ;240Hz RETLW H'2F' ;241.6Hz RETLW H'3C' ;243.1Hz RETLW H'49' ;244.6Hz RETLW H'56' ;246.1Hz RETLW H'62' ;247.7Hz RETLW H'6E' ;249.2Hz RETLW H'7B' ;250.7Hz RETLW H'87' ;252.2Hz RETLW H'93' ;253.8Hz RETLW H'9E' ;255.3Hz RETLW H'AA' ;256.8Hz RETLW H'B5' ;258.3Hz RETLW H'C1' ;259.8Hz RETLW H'CC' ;261.4Hz RETLW H'D7' ;262.9Hz RETLW H'E2' ;264.4Hz RETLW H'ED' ;265.9Hz RETLW H'F8' ;267.5Hz RETLW H'02' ;269Hz RETLW H'0D' ;270.5Hz RETLW H'17' ;272Hz RETLW H'21' ;273.6Hz RETLW H'2B' ;275.1Hz RETLW H'35' ;276.6Hz RETLW H'3F' ;278.1Hz RETLW H'49' ;279.6Hz RETLW H'53' ;281.2Hz RETLW H'5C' ;282.7Hz RETLW H'66' ;284.2Hz RETLW H'6F' ;285.7Hz RETLW H'78' ;287.3Hz RETLW H'82' ;288.8Hz RETLW H'8B' ;290.3Hz RETLW H'94' ;291.8Hz RETLW H'9D' ;293.4Hz RETLW H'A5' ;294.9Hz RETLW H'AE' ;296.4Hz RETLW H'B7' ;297.9Hz RETLW H'BF' ;299.5Hz RETLW H'C8' ;301Hz RETLW H'D0' ;302.5Hz RETLW H'D8' ;304Hz RETLW H'E1' ;305.5Hz RETLW H'E9' ;307.1Hz RETLW H'F1' ;308.6Hz RETLW H'F9' ;310.1Hz RETLW H'01' ;311.6Hz RETLW H'08' ;313.2Hz RETLW H'10' ;314.7Hz RETLW H'18' ;316.2Hz RETLW H'1F' ;317.7Hz RETLW H'27' ;319.3Hz RETLW H'2E' ;320.8Hz RETLW H'36' ;322.3Hz RETLW H'3D' ;323.8Hz RETLW H'44' ;325.4Hz RETLW H'4B' ;326.9Hz RETLW H'52' ;328.4Hz RETLW H'59' ;329.9Hz RETLW H'60' ;331.4Hz RETLW H'67' ;333Hz RETLW H'6E' ;334.5Hz RETLW H'75' ;336Hz RETLW H'7C' ;337.5Hz RETLW H'82' ;339.1Hz RETLW H'89' ;340.6Hz RETLW H'8F' ;342.1Hz RETLW H'96' ;343.6Hz RETLW H'9C' ;345.2Hz RETLW H'A3' ;346.7Hz RETLW H'A9' ;348.2Hz RETLW H'AF' ;349.7Hz RETLW H'B6' ;351.3Hz RETLW H'BC' ;352.8Hz RETLW H'C2' ;354.3Hz RETLW H'C8' ;355.8Hz RETLW H'CE' ;357.3Hz RETLW H'D4' ;358.9Hz RETLW H'DA' ;360.4Hz RETLW H'DF' ;361.9Hz RETLW H'E5' ;363.4Hz RETLW H'EB' ;365Hz RETLW H'F1' ;366.5Hz RETLW H'F6' ;368Hz RETLW H'FC' ;369.5Hz RETLW H'01' ;371.1Hz RETLW H'07' ;372.6Hz RETLW H'0C' ;374.1Hz RETLW H'12' ;375.6Hz RETLW H'17' ;377.1Hz RETLW H'1D' ;378.7Hz RETLW H'22' ;380.2Hz RETLW H'27' ;381.7Hz RETLW H'2C' ;383.2Hz RETLW H'32' ;384.8Hz RETLW H'37' ;386.3Hz RETLW H'3C' ;387.8Hz RETLW H'41' ;389.3Hz RETLW H'46' ;390.9Hz RETLW H'4B' ;392.4Hz RETLW H'50' ;393.9Hz RETLW H'55' ;395.4Hz RETLW H'59' ;397Hz RETLW H'5E' ;398.5Hz ;********************************************************************************************************************************** ; END of Subroutine SUB_PERIOD_LOW_LOOKUP_TABLE ;********************************************************************************************************************************** end ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;End of Program ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX