Hola, soy nueno en el foro, la verdad que muy util , siempre entro a sacarme las dudas, pero esta vez no encontre ningun tema relacionado. Mi problema es el siguiente: Necesito hacer un programa que haga un barrido de de 7 BITS, osea que haga esto:
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
..................
0 0 0 0 0 0 1
0 0 0 0 0 1 0
..................
1 0 0 0 0 0 0
Y que se repita todo el tiempo esto. Cada secuencia de prendido de LED se prende cada 1 segundo , lo tengo que hacer con una interrupción TMR0. Tome el divisor PSA como 1:256, con el oscilador de 4 mhz, se hace una interrupcion en el timer0 cada 256Useg * 256 = 0,065s , y con el CONTADORTMR en 16, logro hacer que se produzca la introduccion cada 1 Segundo (0,065seg*16 = 1,04seg).
Hice un DEBUG desde el MPlab y veo como el puerto C ( que es el uso como salida para prender los LED) va variando correctamente, lo simule en el PIC Simulator, y el Puerto C cada 1 segundo se va cambiando y va haciendo la secuencia correcta, pero lo quiero simular en PROTEUS y no hay forma, no prende ningun LED.
El codigo es este:
list P=16F877A ;Comando que indica el Pic usado
#include "p16F877A.inc" ;Etiquetas genéricas para el Pic16F887
; CONFIG
; __config 0xFFFD
__CONFIG _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _BOREN_ON & _LVP_ON & _CPD_OFF & _WRT_OFF & _CP_OFF
W_TEMP EQU 0X21
STATUS_TEMP EQU 0X22
CONTADOR EQU 0x23
CONTADORTMR EQU 0x24
ORG 0x00
GOTO EMPEZAR
ORG 0x04
GOTO INTERRUPCION
ORG 0x05
EMPEZAR
BCF STATUS,RP1; Banco 1
BSF STATUS,RP0
CLRF TRISC
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW B'00100000'
MOVWF INTCON
BCF STATUS,RP0
CLRF PORTC
MOVLW D'6'
MOVWF TMR0
MOVLW D'8'
MOVWF CONTADORTMR
MOVLW D'12'
MOVWF CONTADOR
BSF INTCON, GIE
_INICIO
GOTO _INICIO
INTERRUPCION
;-------- RESPALDO W y STATUS
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
;--------
DECFSZ CONTADORTMR,F ;---- Si no es 0 sale de la interrupcion
GOTO SALIRINT
MOVF CONTADOR,W
CALL TABLA
MOVWF PORTC
;--------------------- RESTAURAR
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
;----------------------
MOVLW D'8' ;----- REINICIA CONTADORTMR
MOVWF CONTADORTMR
MOVLW D'6' ;----- REINICIA TMR0
MOVWF TMR0
BCF INTCON,T0IF ;----- POne la bandera de interrupcion en 0
DECFSZ CONTADOR,F
RETFIE
CALL INICIO
TABLA
ADDWF PCL,F
RETLW 0x40
RETLW 0x20
RETLW 0x10
RETLW 0x08
RETLW 0x04
RETLW 0x02
RETLW 0x01
RETLW 0x02
RETLW 0x04
RETLW 0x08
RETLW 0x10
RETLW 0x20
RETLW 0x40
INICIO
MOVLW D'12'
MOVWF CONTADOR
RETFIE
SALIRINT
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
MOVLW D'6' ;----- REINICIA TMR0
MOVWF TMR0
BCF INTCON,T0IF ;----- POne la bandera de interrupcion en 0
RETFIE
END
Y aca paso una foto de como tengo configurado la simulacion en PROTEUS
Si algiuen me podria dar una mano se lo agradeceria.