buen dia miren tengo un problemilla al hacer acarreos quero prender leds verdes o leds rojos segunla entrada del puerto E puerto B leds verdes, puerto C leds rojos si prende un led verde el rojo que se encuentra en esa pocicion sufre un carry y se prende el verde de igual manera si prende un rojo sufre un acarreo el verde y prende el rojo de igual manera si esta un rojo y tiene que prewnder de nuebvo el rojo se hace un acarreo de rojo al igual sus leds correpondientes adyacentes tengo este programa si me pueden hechar una manita se los agradesco
zeta 1 es una condicion solamente E1 es entrada de senal busi o test E2 es entrada de senal verde y E2 senal de led rojo
espero su repsuesta si me envian tambien un mail esta mucho mejor ya que no tengo internet gracias. rodolfo.acuna@niokia.com
list p=16F877, f=inhx32
#include <p16F877.inc>
__CONFIG 0x3D31 ;Palabra de Config. OSC=XT, WDT=OFF, PWRTE=ON, BODEN=OFF, LVP=OFF, Sin codigo de Proteccion
;------------mapa de memoria---------
;Esto no se requiere ya estan definidos en p16F877.inc
;STATUS EQU 03 ; status esta en la dirección 03
;PORTA EQU 05 ; PUERTO A
;PORTB EQU 06 ; PUERTO B
;PORTC EQU 07 ; PUERTO C
;PORTD EQU 08 ; PUERTO D
;PORTE EQU 09 ; PUERTO E
;-------Configuración de puertos-------
ORG 0x00
GOTO inicio
inicio clrf INTCON ;Deshabilita todas las interrupciones
bcf STATUS,RP1 ;Selecciono el banco 1
bsf STATUS,RP0 ;donde esta ADCON1 y los TRIS (Dir.de Pto IN/OUT)
movlw b'00000110' ;Configura puertos A y E como IN/OUT digitales
movwf ADCON1
clrf TRISA ; Puerto A de salida
clrf TRISB ; Puerto B de salida
clrf TRISC ; Puerto C de salida
clrf TRISD ; Puerto D de salida
movlw b'00000111'
movwf TRISE ; Puerto E de entrada
bcf STATUS,RP0;cambio al banco 0
CLRF PORTA ; son limpiados las salidas
CLRF PORTB ; de todos los puertos
CLRF PORTC ; para tener apagados los leds
CLRF PORTD ; cuando se reinicie el programa
;=============================lectura de puerto y condicion==============================
amarillo1 bcf STATUS,Z ;inicializa Z=0
BTFSC PORTE,0 ; pregunta si el led amarillo esta encendido pin "0"del puerto E
GOTO zeta1 ; modifica z
GOTO amarillo1 ; si no va a preguntar de nuevo por amarillo1
zeta1 bsf STATUS,Z ;Pone Z=1
;MOVLW 0X01 ;ESTADO DE COMPARACION SE PONE A 1 PUEDE CONTINUAR EN VERDE O ROJO
GOTO amarillo2
amarillo2 BTFSC PORTE,0 ; pregunta si el led amarillo esta encendido pin "0"del puerto E
GOTO amarillo2 ; si es asi regresa a preguntar por el amarillo
btfss STATUS,Z ; Z=1? ; BTFSC STATUS,Z ;pregunta si z=1
GOTO zeta0 ;SI ES 0 REGRESA A Z 0 PARA INICIAR EL PROGRAMA
GOTO verde ; si no es asi continua con el led verde
verde ;continua si es 1
BTFSS PORTE,1 ;pregunta si el led verde esta encendo
GOTO rojo ; testea el led rojo
GOTO sec_led_ver ;secuencia de acarreo
rojo
BTFSS PORTE,2 ;pregunta si led rojo esta encendido
GOTO zeta0 ;ve a rutina para regresar z a estado 0
GOTO sec_led_roj ;secuencia de acarreo
zeta0 bcf STATUS,Z ;Pone Z=0
;MOVLW 0X00 ; para alterar la bandera de Z en el registro de estado
GOTO amarillo1 ;Y REGRESA A HOME PARA INICIAR EL TEST DE AMARILLO
sec_led_ver bsf STATUS,C ;Carry=1, 1ero Ajustamos los LED'S VERDES (Encendemos uno)
rlf PORTB,F ;Carry(1) entra en Bit0 corre los demas y bota el Bit7(Bit7 queda en el Carry)
rlf PORTA,F ;Carry(Bit7 de PORTB) entra en Bit0 corre los demas y bota el Bit7(Carry)
;el carry se queda con el Bit7 del PORTA que ya no es util
bcf STATUS,C ;Carry=0, 2do Ajustamos los LED'S ROJOS (No encendemos ninguno)
rlf PORTC,F ;Carry(0) entra en Bit0 corre los demas y bota el Bit7(Bit7 queda en el Carry)
rlf PORTD,F ;Carry(Bit7 de PORTC) entra en Bit0 corre los demas y bota el Bit7(Carry)
;el carry se queda con el Bit7 del PORTD que ya no es util
GOTO zeta0
sec_led_roj bsf STATUS,C ;Carry=1, 1ero Ajustamos los LED'S ROJOS (Encendemos uno)
rlf PORTC,F ;Carry(1) entra en Bit0 corre los demas y bota el Bit7(Bit7 queda en el Carry)
rlf PORTD,F ;Carry(Bit7 de PORTC) entra en Bit0 corre los demas y bota el Bit7(Carry)
;el carry se queda con el Bit7 del PORTD que ya no es util
bcf STATUS,C ;Carry=0, 2do Ajustamos los LED'S VERDES (No encendemos ninguno)
rlf PORTB,F ;Carry(0) entra en Bit0 corre los demas y bota el Bit7(Bit7 queda en el Carry)
rlf PORTA,F ;Carry(Bit7 de PORTB) entra en Bit0 corre los demas y bota el Bit7(Carry)
;el carry se queda con el Bit7 del PORTA que ya no es util
GOTO zeta0
END