TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Jmedina en 24 de Abril de 2006, 04:18:23
-
Saludos amigos, estoy trabajandoen un contador con el pic 16f877 pero cuando intento compilar el programa en pbp bota un error (protc.1;protc.2;protc.3 variables no definidas) cosa que no ocurria cuando las tenia como porta.1.2y3 cuando hice el contador con el 16f84 aqui les posteo una parte del programa.
k var word
digit var word
maska var byte
i var word
leddis1 var portc.3
leddis2 var portc.2
leddis3 var portc.1
trisc=%00000000
trisb=%00000000
leddis1=0
leddis2=0
leddis3=0
portb=0
-
Hola:
Imagino que tu editor es MicrocodeStudio, asegurate alli de seleccionar el pic correspondiente, de seguro estas seleccionando un pic que no tiene puerto C
-
Hola:
Imagino que tu editor es MicrocodeStudio, asegurate alli de seleccionar el pic correspondiente, de seguro estas seleccionando un pic que no tiene puerto C
Amigo gracias por tu colaboracion. MI editor es proton+lite. Donde selecciono el pic?. En asembler para trabar con un registro en el programa, al inicio damos su equivalencia (ptob equ 05h) en pbp para el 16f877 con otros registros Ej Intcon o otro. como seria?
-
Hola:
Vamos por partes, ese codigo que tu pusiste es para PBP, te lo digo porque veo la manera como declaras las variables, en pbp se usa esto:
i var word
leddis3 var portc.1
la variable seguido de VAR y el tipo de variable, si estas utilizando proton debes utilizar la sintaxis para proton, en ese lenguaje puedes declararlo asi:
Dim i as word
Symbol leddis3 = PORTC.3
y en la cabecera, en la primera linea del programa tienes que escribir que pic vas a utilizar, lo haces asi, por ejemplo:
Device 16f877a.
No te confundas con la sintaxis de PBP, si utilizas proton + pues utiliza su sintaxis... :mrgreen:
-
Lafebre, la verdad soy nuevo en esto pero el programa que utilizo es el proton+lite y he compilado algunos programas para el 16f84 usando esa sintaxis pues la aprendi en un manual de pbp que consegui en internet y por ser principiante pues no se las diferencias del microcode, pbp o proton+.
De todas formas, por o que me digiste anteriormente estube revisando el programa y encontre el error, en la parte donde se escribe el pic a utilizar loestaba poniendo asi ('device 16f877), conla comilla y el compilador lo estaba tomando como un comentario aponas se la quite ¡¡Listo!!... je je.. tambien me reconoce los otros registros del pic.
Ahora tengo otra duda, como configurar uno de los timer enmodo de captura para contar los impulsos en uno de los pines durante un segundo?
Gracias amigos por su colaboracion.
-
Hola:
Jmedina, no te va a dar errores si declaras con la sintaxis de PBP en algunos casos, pero siempre es mejor que utilices la sintaxis de Proton, fijate que cuando compiles en el cuadro de la parte de abajo te dira:
HINT: Not proton + sintax. Rcognised only for Bachward compatability. Use Dim instead!.
Con respecto a lo del timer, en la ayuda hay un ejemplo, suerte...!!! :mrgreen:
' Program that demonstrates the use of the Timer1
' interrupt for a real-time clock.
Include "PROTON_4.INC"
' Define interrupt handler
ON_INTERRUPT Goto myint
Dim TICK as Byte SYSTEM ' make sure that the variable is in bank0 if they are to be used in the interrupt handler
Dim seconds as Byte ' Elapsed seconds
Dim minutes as Word ' Elapsed minutes
minutes = 0 ' Clear time
seconds = 0
T1CON = $01 ' Turn on Timer1, prescaler = 1
INTCON = $C0 ' Enable global interrupts, peripheral interrupts
PIE1 = $01 ' Enable TMR1 overflow interrupt
Goto main ' jump over the interrupt handler and sub
' Assembly language interrupt handler
Myint:
Context Save
; Set the high register of Timer1 to cause an interrupt every
; 16384 counts (65536-16384=49152 or $C000). At 4MHz, prescale
; set to 1, this equates to a tick every 16384uS. This works
; out to about 61 ticks per second, with a slight error. The
; error could be reduced substantially by setting the TMR1L
; register and playing with different values for the prescaler
; and the ticks per second.
Movlw $C0 ; Prepare to set TMR1 high register
Movwf TMR1H ; Set TMR1H to C0h
Incf TICK,F ; INCREMENT TICK COUNT
Bcf PIR1, 0 ; Clear interrupt flag
Context Restore
' Subroutine to update the minutes and seconds variables
get_time:
' Update the time when needed. The TICK variable will
' overflow if you don't update within 4 seconds. This could
' be done in the interrupt handler, but it's easier to do
' it in PicBasic, and you usually want the interrupt handler
' to be as short and fast as possible.
PIE1 = 0 ' Mask the interrupt while we're messing with TICK
seconds = seconds + (tick / 61) ' Add the accumulated seconds
tick = tick // 61 ' Retain the left-over ticks
PIE1 = $01 ' Interrupt on again
minutes = minutes + (seconds / 60) ' Add the accumulated minutes
seconds = seconds // 60 ' Retain the left-over seconds
Return ' Return to the main program
main:
' **************************************************************
' Begin program code here. The minutes and seconds variables can
' be used in your code. The time will be updated when you call the
' get_time routine. Disable interrupts while executing timing-critical
' commands, like serial communications.
Print $fe,1 ' Clear LCD
loops VAR WORD
loops = 0
loop:
loops = loops + 1
Print $fe,$C0,"Loops Counted: ", DEC5 loops
GoSub get_time ' Update minutes and seconds
Print $fe, 2, "Time: ",DEC5 minutes, ":", DEC2 seconds ' Display the elapsed time
GoTo loop ' Repeat main loop
-
Ok entonces que programa utilizo para trabajar con esta sintaxis pues fue la que aprendi y como me enbarque con un proyecto en la u, por ahora no me da tiempo de ponerme a estudiar otra sintaxis.
-
Hola:
La sintaxis que tu estas utilizando es de Pic Basic Pro (PBP)...
-
Saludos Compadre.
Tengo un problema con pic6f877 hice un contador de 0 a 999 con display 7segmentos pero cuando pruebo el circuito, los pines que configure para habilitar los display solo mandan 1v y no es suficiente para exitar la base de los transistores, probe con el puerto A y luego con C y D y lo mismo, pero con el pto b donde mando los datos el voltage es de 4v aprox, no se que pueda estar pasando. Otra cosa, el pic tiene 2 entradas de voltaje (Vdd Y Vss)*2, ¿hay que mandar las dos Vss a tierra y las dos Vdd a 5v? o ¿solo con una es suficiente?. agradesco tu colaboracion.