TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: melectro en 09 de Agosto de 2006, 12:50:58
-
Hola a todos . alguien podria ayudarme con lo siguiente.
Hice un programa en PBP pero no me alcanza el 16F84 y lo trate de correr en un 16F628 pero nada ni siquiera lo pude emular en el proteus .
Agradeceria cualquier ayuda.
Gracias.
Saludos.
Jorge.
-
Hola:
Pega tu codigo para revisarlo, y si puedes tambien el esquema en proteus para probarlo.
-
Gracias por tu pronta respuesta , Lord
Esto es lo que quiero correr en el 16F628 que funciona bien en el 16F84.
Estan definidas para cuatro modos pero solo esta el programa para modo 1.
El programa lo que hace es seleccionar unidades , decenas , centenas y unidad de mil (4 digitos) Ej 0386 milisegundos , esperar este tiempo y activar una salida.
'MODO 1 EN mS 9999
'DEFINICION DE PINES
'PORTB.4 = SALIDA SONORA BEEP
'PORTB.5 = DIGITO
'PORTB.6 = POSICION U, D , C ,UM. MODO MODO1 , ... MODO4.
'PORTB.7 = START
'PORTB.2 = ENTRADA
'PORTA.0-4 = LCD
'PORTB.3 = LCD
define LCD_BITS 4
define LCD_LINES 2
U VAR BYTE ;unidad modo 1
D VAR BYTE ;decena 1
C VAR BYTE ;centena 1
UM VAR BYTE ; unidad de mil 1 9999 ms.total 10.000 ms = 10 seg.
co VAR BYTE ; variable selecciona numero , unid dec cent um .
cur VAR BYTE 'VARIABLE SELECCIONA MODO1.
ST var byte
mode var byte
t1 var word
w0 var word
U = 0 : D = 0 : c = 0 : UM = 0
co = 0 : cur = 0
PAUSE 500
lcdout $fe,1,"Melectro" , $fe,$c0 ," 2006 "
PAUSE 1500
Lcdout $fe, 1 , " Modo 1 "
'lcdinit: Lcdout $fe, 1 , "Seleccio", $fe,$c0 ,"ne Modo"
pause 1000
if portb.6 = 0 then ; SELECCIONA MODO
select case mode
mode = mode + 1
if mode > 4 then mode = 1
case 1 call modo1
case 2 call modo2
case 3 call modo3
case 4 call modo4
end select
endif
'if portb.4 = 1 then lcdinit
; ****************** MODO 1 ***************************
'MODO 1 EN mS 9999
modo1:
curs: cur = cur + 1
if cur > 4 then cur = 1
'lcdout $fe,1,"cur = ",#cur
;pause 500
if cur = 1 then call inicio_u
if cur = 2 then call inicio_d
if cur = 3 then call inicio_c
if cur = 4 then call inicio_um
goto curs
return
INICIO_U:
Lcdout $fe,1,"M1 Unid",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
pause 250
if portb.7 = 0 then call start
if portb.6 = 0 then call curs
IF PORTB.5 = 0 AND cur = 1 THEN
'Pause 250
U = U + 1
IF U > 9 THEN U = 0
endif
GOTO INICIO_U
RETURN
INICIO_D:
Lcdout $fe,1,"Dec",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
pause 250
if portb.7 = 0 then call start
if portb.6 = 0 then call curs
IF PORTB.5 = 0 AND cur = 2 THEN
;call start
'Pause 250
D = D + 1
IF D > 9 THEN D = 0
endif
GOTO INICIO_D
RETURN
INICIO_C:
Lcdout $fe,1,"cen",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
pause 250
if portb.7 = 0 then call start
if portb.6 = 0 then call curs
IF PORTB.5 = 0 AND cur = 3 THEN
;call start
'Pause 250
C = C + 1
IF C > 9 THEN C = 0
endif
GOTO INICIO_C
RETURN
INICIO_UM:
Lcdout $fe,1,"Umil",$fe,$c0,#uM,$fe,$c1,#C,$fe,$c2,#D,$fe,$c3,#U," MS"
pause 250
if portb.7 = 0 then call start
if portb.6 = 0 then call curs
IF PORTB.5 = 0 AND cur = 4 THEN
'Pause 250
Um = Um + 1
IF Um > 9 THEN Um = 0
endif
GOTO INICIO_Um
RETURN
start: 'pause 500
lcdout $fe,1," ",#UM,#C,#D,#U ," MS"
pause 100
pulsin portb.2,0,w0
if w0 <> 0 then disparo
goto start
disparo: low portb.4
T1 = (UM*1000+c*100+d*10+u)
'lcdout $fe,1," ", #T1 , " ms"
pause T1
high portb.4
pause 100
low portb.4
'pause 1000
'low portb.4
return
-
Hola:
Pues no le veo el error, lo que pensaba era que de pronto puedas estar usando el puerto A, y eso si cambia en el 628 xq tiene comparadaores y deberias apagarlos con CMCON=7, pero veo que no es el caso, programaste el micro con el Hex que compilaste para el 84?, de ser asi recompilalo para el 628. Si siques con problemas y si puedes subir el esquematico para simularlo en proteus seria mas facil para revisar el codigo y simular para hacerlo funcionar.
-
Hola Lord , si el hex corresponde al 628 creo que al usar el port a para comandar el lcd puede que ahi este el problema.
De todas maneras sigo con problemas porque quise compilar el programa final para el 628 y no me queda espacio me resulta chico.Hay otro micro compatible con el f84 de 4k?
En otro mensaje subo el circuito par simulacion de proteus.
Saludos
-
Hola:
Te puede servir uno mas avanzado como es el 16F648A. con ese tienes de sobra.
-
Hola:
Mira, estas son las caracteristicas:
Program Memory Type Standard Flash
Program Memory Size (Kbytes) 7
RAM (bytes) 256
Data EEPROM (bytes) 256
http://www.microchip.com/stellent/idcplgidcplg?IdcService=SS_GET_PAGE&nodeId=1335&dDocName=en010212
-
Hola Lord, gracias por tu sugerencia , pero en mi version de microcode studio no lo tengo , es la 2.3 , se puede editar con otra version u otro editor.
Podrias chequear el cadigo y sugerirme algo como para optimizarlo , ten presente que uso lo mismo repetida 4 veces con un pequeño cambio a la salida.
Gracias.
-
Hola:
Si quieres te lo puedo compilar para el 648a y te envio el hex para que lo pruebes.
-
Hola, ahora que veo y compilo lo poco que esta del codigo, me lanza errores, te faltan los dos puntos luego del case:
case 1: call modo1
case 2: call modo2
case 3: call modo3
case 4: call modo4
teendria que quedarte algo como eso, si te animas al 648A, enviame el .bas para dartelo compilando y te paso el Hex.
-
Gracias Lord por tu ofrecimiento , pero ya actualise mi soft.
pero me tira al compilar el siguiente errror:
Warn AVERIF4.ASM 1121 : [102] CODE CROSSES BOUNDARY @800h
alguna sugerencia ??????
Gracias
Saludos
Jorge
-
Hola,
Eso te sale al compilar con el 648A? si mal no recuerdo ese error es porque exediste el limite de memoria del dispositivo.
-
Hopsssssss
Estoy en un problema.
Sabes donde puedo conseguir el manual del MCStudio con los codigos de error????
Gracias.
-
Hola:
Pues lo siento, no lo se, y en la ayuda del MCS no lo encontre... que pic estas utilizando?
-
Hola , cambie al 16F648.
Estuve haciendo algunas pruebas y el error que te mencione antes no es de que le falta espacio ,creo que tiene que ver con alguna saignacion del pic.
De todas maneras estoy trabajando en el programa para optimizarlo y poder usar un 628 ,a ver que sale.
Saludos.