programa en microcode

necesito ayuda urgente alguien me puede ayudar con el siguiente programa necesito:

Problema , realizar un programa para micro controlador que realice lo siguiente :

•Cada vez que se presione el pulsador se enciende led_1
•En todo momento debe titilar un diodo led_2 con salida de frecuencia 20 hz
•De acuerdo al numero de veces presionado el pulsador entonces debe de cumplir la siguiente tabla
Pulsador

# veces presionado /Salida de 8 bits (LED) con una frecuencia visible avance secuencial

3 / 10000000 >>>> indefinido
5 / 00000001 <<<< 5 veces y espera
8 / 00011000 <<>> 3 veces y espera

10 / 10000001 >><<
00011000 << >> se repite el ciclo indefinidamente


tengo hecho todo,.. el problema es que no c como hacer titilar el diodo led_2 sin me afecte o dañe todo el programa.



este es mi programa:



Código:
mi_contador VAR BYTE 
num_veces Con 3 
OUT_B var byte
H VAR BYTE
I VAR BYTE

pulsador var PORTA.0 
LED_1 var PORTC.0 
trisb =%00000000
TRISA =%00000011
ADCON1 = %00000110

PORTB=0
mi_contador = 0
LED_1 = 0



INICIO :

PORTB=0 
while (pulsador == 0) 
wend
HIGH LED_1 
WHILE (pulsador == 1) 
WEND 
LOW LED_1
IF (pulsador == 1) then GOTO PULSOS 
PULSOS:
mi_contador = mi_contador +1

if (mi_contador = 10) then goSUB FINAL 
if (mi_contador = 8) then goSUB ledX_4
IF (mi_contador = 5) then goSUB ledX_3
if (mi_contador = num_veces) then goSUB ledX_2
goto inicio



LedX_2:
out_B =%00000001
PORTB = out_B

IZQ :
pause 15
out_B = OUT_B<<1
PORTB = out_B
pause 15 
IF PORTB.7 == 1 THEN LedX_2

IF (pulsador == 1) then GOTO INICIO
goto IZQ

LedX_3:
out_B =%10000000
PORTB = out_B

DER :
pause 15
out_B = OUT_B>>1
PORTB = out_B
pause 15
IF (H=5) then GOTO INICIO
IF PORTB.1 == 1 THEN H=H+1
IF PORTB.0 == 1 THEN LEDX_3

GOTO DER

ledX_4:

FOR I= 1 TO 3

out_B =%00011000
PORTB = out_B
PAUSE 30

out_B =%00100100
PORTB = out_B
PAUSE 30

out_B =%01000010
PORTB = out_B
PAUSE 30

out_B =%10000001
PORTB = out_B
PAUSE 30

NEXT I
IF (I>3) then GOTO INICIO



FINAL:

out_B =%10000001
PORTB = out_B
PAUSE 30

out_B =%01000010
PORTB = out_B
PAUSE 30

out_B =%00100100
PORTB = out_B
PAUSE 30

out_B =%00011000
PORTB = out_B
PAUSE 30

out_B =%00100100
PORTB = out_B
PAUSE 30

out_B =%01000010
PORTB = out_B
PAUSE 30

out_B =%10000001
PORTB = out_B
PAUSE 30

GOTO FINAL

End



adjunto programa y simulacion hecho en proteus:

Ver el archivo adjunto Deber robotic1.rar
 
Última edición por un moderador:
tengo hecho todo,.. el problema es que no como hacer titilar el diodo led_2 sin me afecte o dañe todo el programa.
Saludos nelson123
Una forma fácil de lograrlo sería usando la instrucción HPWM
Ya que genera PWM por hardware (Módulos CPP1 o CCP2) sin afectar al programa.
El problema es qué la frecuencia mínima a 4 MHz es de 245 Hz.

Una posible solución sería generar una frecuencia de 320Hz y luego dividirla /16 para obtener los 20Hz.
Tan solo antes de iniciar el programa, escribes.
HPWM 2,127,320 ; CCP2, 50% del ciclo activo a 320 Hertz.
Y para dividir la señal entre 16, puedes usar un 74LS93

Suerte.
 
que bestia este man.. un master...
D@rkbytes te agradezco un monton buen aporte me solucionastes el problema..
 
Última edición por un moderador:
Atrás
Arriba