here is the entire front end...
Code:
@ __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
OSCCON = $70 'sets the oscillator speed
DEFINE OSC 8 'Oscillator speed in MHz
'http://www.picbasic.co.uk/forum/showthread.php?t=3251
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
PORTA = %00000000 ' output logic at power-up
PORTB = %00000000 ' output logic at power-up
PORTC = %00000000 ' output logic at power-up
PORTD = %00000000 ' output logic at power-up
PORTE = %00000000 ' output logic at power-up
' Set up serial UART
define HSER_RCSTA 90H ' Set Receive Status and control register
DEFINE HSER_TXSTA 24H ' set transmit status and control register
DEFINE HSER_BAUD 19200 ' baud setting 19200 115200
define HSER_CLROERR 1 ' reset on serial buffer overflow
' Define Analog parameters
ADCON1 = %10000000 'Right Justify
ANSEL = %11111111 'Analog on for AN0-AN7
ANSELH = %00000000 'AN8-13 off
Define ADC_BITS 10 ' Set number of bits in result
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 10 ' Set sampling time in uS
' Alias pins (0=Output, 1=Input)
L1 VAR PORTC.5 :TRISC.5 = 0
L2 VAR PORTD.2 :TRISD.2 = 0
L3 VAR PORTD.1 :TRISD.1 = 0
L4 VAR PORTD.0 :TRISD.0 = 0
L5 VAR PORTC.1 :TRISC.1 = 0
Sp var PORTC.2 :TRISC.2 = 0 'pulsed signal
S2 var PORTD.5 :TRISD.5 = 1 'mode switch - LCD Select Mode
S3 var PORTD.4 :TRISD.4 = 1 'mode switch - LCD Light
S1 var PORTD.7 :TRISD.7 = 1 'mode switch - Plus
S5 var PORTD.6 :TRISD.6 = 1 'mode switch - Minus
S8 var PORTB.4 :TRISB.4 = 1 'Pelco-D board - Zoom
S11 var PORTB.5 :TRISB.5 = 1 'Peclo-D board - Zoom
S7 var PORTB.1 :TRISB.1 = 1 'RC board - Mast
S10 var PORTB.3 :TRISB.3 = 1 'RC board - Mast
S6 var PORTB.2 :TRISB.2 = 1 'Video Select
'Define RAM
i var byte
j var byte
RC_Mode var Bit 'Flag to switch back and forth from arm and drive funtions
S2_Rel var BIT 'flag to see if switch is realsed
S6_Rel var BIT 'flag to see if switch is realsed
Mode_Debug var bit 'Flag for LCD Debug Mode
Mode_Debug1 var bit 'Flag for LCD Debug Mode
LCD_msg var byte 'Counter to reset LCD message Display
wsave VAR BYTE $70 SYSTEM 'value required for interupt
PreLoad VAR WORD 'Preload value for timer interupt
PreLoad = 21537
JOY1X var word ' Analog Values
JOY1Y var word
JOY2X var word
JOY2Y var word
P1 var word
Battery var word ' Battery voltage analog
Battery_r var word ' battery voltage remainder
Batt_div con 660 ' scaling value to get Volts
Batt_Alarm con 480 ' approx 7.2V
Batt_Stop con 430 ' approx 6.5V
Batt_stop1 var byte
Batt_beep var byte
Lights_Last var BIT
Video_Mode var BYTE
Video_Changed VAR BYTE
JOY1X_Trim var Byte 'trim value 128 = neutral trim, 0=-128, 256=128
JOY1Y_Trim var Byte
JOY2X_Trim var Byte
JOY2Y_Trim var Byte
Temp_Trim var BYTE
JOY1X_GainH con 6 'Gain for High end of stick 50-130% (5-13)
JOY1X_GainL con 6 'Gain for Low end of stick 50-130% (5-13)
JOY1Y_GainH con 6
JOY1Y_GainL con 6
JOY2X_GainH con 6
JOY2X_GainL con 6
JOY2Y_GainH con 6
JOY2Y_GainL con 6
P1_GainH con 10
P1_GainL con 10
JOY1X_Max con 1400 'pan
JOY1X_Min con 800 'pan
JOY1Y_Max con 1400 'tilt
JOY1Y_Min con 800 'tilt
JOY2X_Max con 1400
JOY2X_Min con 800
JOY2Y_Max con 1400
JOY2Y_Min con 800
P1_Max con 1850 'Aux Tilt
P1_Min con 450 'Aux Tilt
Pulse_Start con 400 '400us - fudge: Pulse Start (high) + chan pulse (low) = Total chan pulse
chan_adj con 9 'fudge factor for pulses (used a scope to come up with value)
Chan_Ctr con 1100
Chan1 var word 'Aile
Chan2 var word 'Elev
Chan3 var word 'Thro
Chan4 var word 'Rudd
Chan5 var word 'Gear
Chan6 var word 'Aux1
Chan7 var word 'Aux2
Chan8 var word 'Aux3
Chan1f var word 'Aile
Chan2f var word 'Elev
Chan3f var word 'Thro
Chan4f var word 'Rudd
Chan5f var word 'Gear
Chan6f var word 'Aux1
Chan7f var word 'Aux2
Chan8f var word 'Aux3
'Reverse Bits, Channel , Mode 1 (0=Normal, 1=Reverse)
Chan1_1R con 0 'Drive Turn
Chan2_1R con 1 'Drive Speed
Chan3_1R con 0 'Camera Tilt
Chan4_1R con 0 'Camera Pan
Chan5_1R con 1 'Aux Camera Tilt
'LCD Constants
LCD_CLR con 88 'clear
LCD_INSTR CON 254 'instruction command
LCD_L con 71 'move curser to position 71 [column] [row]
LCD_H CON 72 'move curser home
LCD_BL1 con 66 'backlight on, follow by minutes
LCD_BL0 con 70 'backlight off
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _RC_Pulse, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
T1CON = %00000001 ; Prescaler = 1:1, TMR1ON
TMR1L = PreLoad.LowByte
TMR1H = PreLoad.HighByte ; preload to give 22mS interrupts (at 1:1)
' /////////////////////////////////////////////////////////////////////////////
' Begin
' /////////////////////////////////////////////////////////////////////////////
high l1: pause 50: high l2: pause 50: high l3: pause 50: high l4: pause 50: high l5: pause 50
low l1: pause 50: low l2: pause 50: low l3: pause 50: low l4: pause 50: low l5: low 50
'trim values retreived from eeprom
gosub Sub_Read_EEprom
if JOY1X_Trim = 255 and JOY1Y_Trim = 255 then 'means things are zeroed out (reprogrammed), so set defaults
High L5: pause 250: low L5
JOY1X_Trim = 128
JOY1Y_Trim = 128
JOY2X_Trim = 128
JOY2Y_Trim = 128
gosub Sub_Write_EEprom
endif
@ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts
' /////////////////////////////////////////////////////////////////////////////
' Main Loop
' /////////////////////////////////////////////////////////////////////////////
mainloop: ' Main program loop
Bookmarks