TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ErnestAl en 07 de Mayo de 2007, 19:33:28
-
Buenas, espero que alguien me pueda ayudar. Para empezar con los pics estoy realizando una secuencia de leds y dependiendo de como varie uns sw dicha secuencia tendra un determinado tiempo.
¿Alguien sabe pq siempre obtengo el mismo tiempo al simular con proteus?
;Programa para la simulacion de una serie de leds
list P=16F877
radix hex
#include <p16f877.inc> ;incluimos la libreria del PIC 16F877
;********************Zona de Etiquetas**************
temp equ 0x20 ;registro temporal
tempi equ 0x21
aux equ 0x23
;****************************************************************
;*************************************************************************************+
ORG 0x00
goto inicio
ORG 0x05
;*********************************CARGO VALOR DE REFERENCIA************
movlw b'00000001'
movwf aux
;****************COnfiguracion del controlador******************************************
inicio
bsf STATUS,RP0 ;acceso al banco 0
bcf STATUS,RP1
;*******PUERTOS******************************************
clrf PORTB ;puerta B como salida, aqui estaran los leds que vamos a usar
movlw b'00000011'
movwf PORTA ;puerta A0 y A1 entrada digital para seleccionar tiempo
bsf PORTC,5 ;Lo usaremos como boton de START
;*******CONFIGURACION DEL TMR0****************************
movlw b'10010111'
movwf OPTION_REG ;configuracion del timer0 con un preescalado de 256
clrf INTCON
bcf STATUS,5
;**************FIN DE LA CONFIGURACION ***************************
;**************COMIENZO DEL PROGRAMA****************************************
main clrf PORTB
btfsc PORTC,5
goto main
call tiempo
clrf PORTB
bsf PORTB,0
call retardo ;encendemos la primera bombilla y esperamos
call ida
call vuelta
goto inicio
;****************************rutina Programa ***********************************
ida rlf PORTB,1
call retardo
btfss PORTB,7
goto ida
return
vuelta rrf PORTB,1
call retardo
btfss PORTB,0
goto vuelta
return ;volvemos al principio
retardo movf temp,W
movwf tempi
retar movlw 0xD9 ;mi retardo de partida es un retardo de 10milisegundos
movwf OPTION_REG
bcf INTCON,2
Explora0_5 btfss INTCON,2
goto Explora0_5
decfsz tempi,1
goto retar
return
;**** SELECICON DE RETARDO********************************
tiempo
btfss PORTA,0
goto xA
goto xB
xA btfss PORTA,1
goto AA
goto BA
xB btfss PORTA,1
goto AB
goto BB
AA movlw 0x32; 50 pasado a HEX para un retardo de 0.5
movwf temp
return
BA movlw 0x14 ; 20 pasado a HEX para un retardo de 0.4
movwf temp
return
AB movlw 0x00 ; 100 pasado a HEX ,esta variable hace que nuestro contador aumente
movwf temp
return
BB movlw 0x80 ;30 pasado a HEX
movwf temp
return
end
-
inicio
bsf STATUS,RP0 ;acceso al banco 0
bcf STATUS,RP1
Aqui accedes al banco 1 y no al cero como dices en tu codigo sigo leyendo
-
;*******PUERTOS******************************************
clrf PORTB ;puerta B como salida, aqui estaran los leds que vamos a usar
movlw b'00000011'
movwf PORTA ;puerta A0 y A1 entrada digital para seleccionar tiempo
bsf PORTC,5 ;Lo usaremos como boton de START
En todas estas lineas deberias colocar TRISB, TRISA y TRISC respectivamente para hacer lo que realmente quieres ya que en el BANCO 1 hablamos de TRISX para configurar los pines como entrada o salida
-
Para trabajar de manera digital en el 16f877 deberias de mover el numero 6 decimal al ADCON1 esto hace que todos tus pines sean configurados como digitales.
-
Bueno tu error yo creo q esta en el PSA ( OPTION_REG (3) ) lo pones en cero con lo cual tu temprorizacion es alterado por el Watchdog , tendrias q ponerlo en "1" para q sea afectado por el timer0
-
aqui la imagen
-
muchas gracias por tan rapida respuesta. En cuanto llegue a casa me pondre manos a la obra para corregir los fallos.
GRACIAS!!!!!
-
No tienes pq amigo, sigue asi!!! :-)