Hola a todos.Finalmente logre que funcione bien , pero la idea es optimizar el programa ya que en cierta forma tendria que repetir el mismo procedimiento tres veces mas.
Lo estipulado seria.
Modo 1 decrementar 9999 Ms.
Modo 2 decrementar 999.9 Ms.
Modo 3 decrementar 99.99 Seg.
el programa queda asi:
'MODO 1 EN mS 9999
'MODO 2 EN mS 999.9
'MODO 3 EN SEG 9999
'MODO 4 REPETICION DE N VECES POR XXXX mS.
' 60.000 mS = 1 MINUTO
' 1.000 uS = 1 SEG.
'10.000 SEG =
'DEFINICION DE PINES
'PORTB.4 = SALIDA . MAS 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
'PORTB.4 = SALIDA
'PORTB.1 = VER DISPARO LED
define LCD_BITS 4
define LCD_LINES 2
U VAR BYTE ;unidad modo 1
U2 VAR BYTE ;unidad modo 2
U3 VAR BYTE ;unidad modo 3
U4 VAR BYTE ;unidad modo 4
D VAR BYTE ;decena 1
D2 VAR BYTE ;decena 2
D3 VAR BYTE ;decena 3
D4 VAR BYTE ;decena 4
C VAR BYTE ;centena 1
C2 VAR BYTE ;centena 2
C3 VAR BYTE ;centena 3
C4 VAR BYTE ;centena 4
UM VAR BYTE ; unidad de mil 1 9999 ms.total 10.000 ms = 10 seg.
UM2 VAR BYTE ; unidad de mil 2 9999 ms.total 10.000 ms = 10 seg.
UM3 VAR BYTE ; unidad de mil 3 9999 ms.total 10.000 ms = 10 seg.
UM4 VAR BYTE ; unidad de mil 4 9999 ms.total 10.000 ms = 10 seg.
co VAR BYTE ; variable selecciona numero , unid dec cent um .
cur VAR BYTE 'VARIABLE SELECCIONA MODO1.
cur2 VAR BYTE 'VARIABLE SELECCIONA MODO2.
cur3 VAR BYTE 'VARIABLE SELECCIONA MODO3.
cur4 VAR BYTE 'VARIABLE SELECCIONA MODO4.
ST var byte
mode var byte
mode2 var byte
mode3 var byte
mode4 var byte
t1 var word
t2 var byte
t3 var byte
t4 var byte
W0 var word
U = 0 : D = 0 : c = 0 : UM = 0
co = 0 : cur = 0 :cur2 = 0:cur3 = 0 : cur4 = 0
PAUSE 500
lcdout $fe,1,"Melectro" , $fe,$c0 ,"Photo 06"
PAUSE 1500
Lcdout $fe, 1 , " Modo 1 "
; ****************** MODO 1 ***************************
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," 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
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
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
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
Um = Um + 1
IF Um > 9 THEN Um = 0
endif
GOTO INICIO_Um
RETURN
start:
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 :lcdout $fe,1," ",#UM,#C,#D,#U ," MS" ,$fe,$C0," INICIO"
T1 = (UM*1000+c*100+d*10+u)
pause T1
high portb.4
pause 100
low portb.4 :low portb.1
return
Es decir esta parte es solo para el modo 1 , y tendria que optimizarla para que ocupe menos espacio en el pic.
Agradeceria tambien si a alguien se le ocurre otra manera de implementar el programa me diera una idea para poder hacerlo ya que este es mi tercer programa en PBP.
Muchas gracias.
Saludos.
Jorge