You are on page 1of 3

'*****************************************************************

'* PROGRAMA FINAL *


'* CAN-SAT PIC16F819 *
'*****************************************************************

'_________________________________________
'| PATAS |
'| RB1---> Salida Comunicación/SEROUT |
'| RB2---> Entrada Comunicación/SERIN |
'| RB3---> Salida PWM |
'| RB4---> Bit de Apogeo |
'| RB5---> Detección de DESPEGUE |
'| RA7---> Conexión a Computadora |
'| RA0---> Entrada Analógica/ADCIN |
'|________________________________________ |

OUT VAR portb.1


IN VAR portb.2
PULSE VAR portb.3b
APOGEO VAR portb.4
DESPEGUE VAR portb.5
CONECT VAR porta.7

'VARIABLES
H0 VAR WORD
LowH0 VAR H0.LowByte
Temp0 VAR WORD
Temp1 VAR WORD
Dato VAR WORD[16]
LowTemp VAR Temp1.LowByte
Cont VAR BYTE
Index VAR BYTE
A VAR BYTE
Aux VAR BYTE
Frec VAR WORD

INCLUDE "modedefs.bas"
DEFINE OSC 8
; Configuracion de Medicion Analogica
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
TRISA = 255 ' Set PORTA to all input
ADCON1 = 2 ' PORTA is analog

@ device pic16F819, INTRC_OSC_NOCLKOUT, WDT_OFF, PWRT_ON,


MCLR_OFF, BOD_OFF, LVP_OFF, CPD_OFF, WRT_OFF , DEBUG_OFF,
CCPMX_ON , PROTECT_OFF
ASM
bsf status.5; Se mueve al banco del OSCCON
movlw 0x74 ; El Acc en el código que setea el OSCCON a 8MHz
movwf osccon; Se pasa el Acc al OSSCON (Queda seteado)
bcf status.5; Se vuelve al banco 0
ENDASM

PAUSE 1000
HIGH porta.6
PAUSE 100
FOR A=0 TO 15
Dato[A]=0
NEXT A

IF (DESPEGUE==1 AND CONECT==1) THEN 'En pista, sin Computadora


ADCIN 0,H0
HPWM 2,64,1000
WHILE DESPEGUE==1
PAUSE 100
WEND
ELSE
SEROUT OUT,N2400,["Obtener Datos de la EEPROM presione
D(MAYUS!!)",10,13]
SERIN IN,N2400,["D"]
READ 255,Index
FOR A=0 TO A=Index
READ A,Aux
PAUSE 5
SEROUT OUT,N2400,[#Aux,10,13]
NEXT A
SEROUT OUT,N2400,["Fin Datos",10,13]
GOTO Termine
ENDIF
;EN VUELO
Index=1
START:
Frec=0
Temp0=0
FOR A=15 TO 1 STEP -1
Dato[A]=Dato[A-1]
NEXT A
FOR A=1 TO 4
ADCIN 0,Temp1
Temp0=Temp0+Temp1
NEXT A
Temp0=Temp0/4
Temp0=Temp0-H0
GOSUB Funcion
Temp1=Temp0/4
WRITE Index,LowTemp
Dato[0]=Temp0 'para no perder el Dato de 10 bits
Index=Index+1
Cont=0
FOR A=0 TO 14
IF (Dato[A]<Dato[A+1]) THEN
Cont=Cont+1
ELSE
Cont=0
ENDIF
IF (Cont>2) THEN
WRITE 255,Index
GOTO Finvuelo
ENDIF
NEXT A
GOTO Start

Finvuelo:
HIGH APOGEO
FOR A=1 TO 4
ADCIN 0,Temp1
Temp0=Temp0+Temp1
NEXT A
Temp0=Temp0/4
Temp0=Temp0-H0
GOSUB Funcion
GOTO Finvuelo

Termine:
PAUSE 100
GOTO Termine

Funcion:
Frec = Temp0*2
Frec = Frec+1000
HPWM 2,191,Frec
RETURN

You might also like