Hola , en esta oportunidad les comento un inconveniente con el comando PAUSE.en rojo
aqui el programa.
Programado en PBP 2.46
Simulado Proteus 7.2 SP2
Compilado microcode studio 3
Defecto :el retardo no es el que marca el T1 es decir si T1=1200 =1.2 segundos y demora mas de 3 seg.
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
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 ,"06"
PAUSE 1500
Lcdout $fe, 1 , " Modo 1 "
pause 1000
modo: if portb.6 = 0 then ; SELECCIONA MODO
select case mode
mode = mode + 1
if mode > 3 then mode = 1
case 1: call curs
case 2: call curs2
case 3: call curs3
end select
endif
goto modo
; ****************** MODO 1 ***************************
curs: cur = cur + 1
if cur > 4 then cur = 1
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
alguna idea de porque el delay es diferente????