Autor Tema: Por que este error  (Leído 1769 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Por que este error
« en: 15 de Abril de 2006, 00:47:53 »
hola:
 amigos como ven estoy aprendiendo PBP y estube dando una miradita por hay con algunos ej..
bueno con este ej. que copie del post ( contar 10 pulso y encender un led )...
del amigo lordlafebre..
Cont    var byte

TRISB=%00000001
cont=0
PORTB=0

read 0,cont

loop:
    if PORTB.0=0 then
        cont=cont+1
        write 0,cont
        pause 200
        if cont = 10 then
            high 7
            cont=10
        endif
    endif
    goto loop
end

cuando lo compilo con el micro code estudios me sale perfecto, pero cuando hago la simulacion me da un error..
ya que con este ej. quiero hacer algo parecido y que tambien fuensione en la sumulacion del proteus por que lo necesito... para ir ampliando mis conocimientos, agradeceria la ayuda....
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Por que este error
« Respuesta #1 en: 15 de Abril de 2006, 03:19:15 »
Hola:

BLACKPIC, que error te da?

Desconectado lfguerra

  • Colaborador
  • PIC10
  • *****
  • Mensajes: 22
Re: Por que este error
« Respuesta #2 en: 15 de Abril de 2006, 17:17:58 »
BLACKPIC, si el microcode te compila bien quiere decir que no tienes problemas de sintaxis, mira  como estas haciendo la simulación y describe mejor tu problema para te podamos ayudar.
Saludos desde Medellin

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Por que este error
« Respuesta #3 en: 15 de Abril de 2006, 17:27:43 »
Hola:

Solo aclaro algo, BLACKPIC, proteus no simula lo que es la eeprom del micro, ahora recuerdo ese programa el cual sacaste el codigo... pruebalo en tu circuito real y veras que funciona bien.


Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: Por que este error
« Respuesta #4 en: 18 de Abril de 2006, 00:32:56 »
buenos amigos creo como dice lordlafebre el proteus no simula lo que esta en la eeprom del micro...

pero este ej lo simala bien..

'Contador de 10,20,30,40 pulsos con señalizacion en
'LCD y leds
'Codigo realizado por:
'MORFEUS - Colombia
'Giovanni Lafebre (LordLafebre) - Cuenca - Ecuador

'-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
'----DEFINICION DEL VALOR DE OSCILADOR A UTILIZAR
define OSC 4

'---------VARIABLES UTILIZADAS
Cont var byte 'VARIABLE PARA EL 1º CONTEO
Cont1 var byte'VARIABLE PARA EL 2º CONTEO
Cont2 var byte 'VARIABLE PARA EL 3º CONTEO
Cont4 var byte 'VARIABLE PARA EL 4º CONTEO
temp var byte 'VARIABLE PARA ALMACENAR DATO EN LA EEPROM Y SABER SI EL
'PROGRAMA SE ESTA EJECUTANDO LA PRIMERA VES

'----CONFIGURACION DEL PUERTO C 4 PRIMEROS BITS COMO ENTRADA LOS 4
'ULTIMOS COMO SALIDA
TRISC=%00001111

'TIEMPO DE ESPERA PARA EL LCD
pause 250

'mensaje para mostrar el estado de los 4 pulsadores
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

'se asigna 0 a la primera posicion de la eeprom(0) sirve para indicar que nunca
'se ha ejecutado este programa
eeprom 0,[0]

'carga el valor de la eeprom de la direccion 0 en la variable temp
read 0,temp

'si el programa nunca ha sido ejecutado salta a la subrutina grabar
if temp=0 then grabar

'lee los estados de la posicion de memoria para saber los valores
'de los contadores
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

'muestra en el lcd los valores de las variables
lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

'condicional para saber si ha contado 10 veces
if cont >= 10 then
gosub EncenderLED
endif
'condicional para saber si ha contado 20 veces
if cont1 >= 20 then
gosub EncenderLED1
endif
'condicional para saber si ha contado 30 veces
if cont2 >= 30 then
gosub EncenderLED2
endif
'condicional para saber si ha contado 40 veces
if Cont4 >= 40 then
gosub EncenderLED3
endif
'si estas condiciones se cumplen salta a cada subrutina descrita


'programa principal
loop:
'todos los siguientes condicionales funcionan de la misma manera
'pero con diferentes pines y variables, pero el concepto es el mismo
'--------------------------------------------------------------------
'si el pulsante en C0 ha sido presionado
    if PORTC.0=0 then
'incrementa al contador en 1   
        cont=cont+1
'almacema en la posicion de memoria el valor actual de cont
        write 1,cont
'si cont iguala o supera a 10(que indicaria que el conteo se ha cumplido)
'entonces salta a la subrrutina que enciende el led para mostrar que el
'conteo se ha cumplido
        if cont >= 10 then
            gosub EncenderLED
        endif
'muestra en el display el valor actual de cont, permitiendo ver el conteo
'exacto, es decir el numero de veces que se a pulsado el boton
        lcdout $FE,$C0,dec3 cont
'tiempo de antirrebote de tecla, para que el conteo no se haga de una manera
'muy rapida
        pause 200
    endif
'--------------------------------------------------------------------
'todos los demas condicionales hacen la misma funcion
'--------------------------------------------------------------------
    if PORTC.1=0 then
        cont1=cont1+1
        write 2,cont1
        if cont1 >= 20 then
            gosub EncenderLED1
        endif
        lcdout $FE,$C4,dec3 cont1
        pause 200
    endif

    if PORTC.2=0 then
        cont2=cont2+1
        write 3,cont2
        if cont2 >= 30 then
            gosub EncenderLED2
        endif
        lcdout $FE,$C8,dec3 cont2
        pause 200
    endif

    if PORTC.3=0 then
        Cont4=Cont4+1
        write 4,Cont4
        if Cont4 >= 40 then
            gosub EncenderLED3
        endif
        lcdout $FE,$CC,dec3 Cont4
        pause 200
    endif
goto loop
'-------------------------------------------------------

'subrutina para asignar el valor inicial a la eeprom(en este caso se
'inicia desde 0)
grabar:
'enceramos todos los contadores
    cont=0:cont1=0:cont2=0:Cont4=0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop

'estas subrrutinas son para encender los leds y dejarlos encendidos en caso
'de que el conteo ha llegado a su final para cada caso
'asi mismo se asigna el valor maximo de conteo por ejemplo 10 para que en los
'condicionales donde se pregunta if cont1 >= 10 then salten a la subrutina
'adecuada y mantenga encendido el led
EncenderLED:
    high PORTC.7
    cont=10
    lcdout $FE,$C0,dec3 cont   
    return

EncenderLED1:
    high PORTC.6
    cont1=20
    lcdout $FE,$C4,dec3 cont1
    return

EncenderLED2:
    high PORTC.5
    cont2=30
    lcdout $FE,$C8,dec3 cont2
    return

EncenderLED3:
    high PORTC.4
    Cont4=40
    lcdout $FE,$CC,dec3 cont4
    return
end
 bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Por que este error
« Respuesta #5 en: 18 de Abril de 2006, 01:05:51 »
Hola:

Eso quiere decir que corregiste el error que tenias BLACKPIC?