TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: lolos123 en 25 de Enero de 2005, 13:13:00
-
Bueno a ver si me podeis echar una mano que ya me estoy volviendo loco con éste mi primer programa.
Quiero temporizar 10 segundos con un PIC16f876 usando lenguaje ensamblador e interrupciones.Estoy haciendo todo en el MPLAB IDE v7.0 y para simular estoy usando el PIC Simulator ide (por ver directamente en la imagen del microcontrolador si he conigurado bien puertas, lucecitas al activarse salida etc).
Para temporizar uso T1 que cargo con 3036, uso prescaler 8 y si no estoy confundido eso debe temporizar 0.5 seg que si cuento 20 veces pues me debería temporizar 10 segundos. Uso algunas salidas para ver en la simulacion si va o no por donde debería.
Os pongo el codigo que he escrito
list p=16f876
radix hex
#include p16f876.inc
conT1 equ 0x20;posicion de memoria
org 0x00
goto INICIO
org 0x04
goto INTERRUPCION
org 0x05
;identificacion de la interrupcion
INTERRUPCION clrwdt
btfss PIR1,0;si esta el flag de T1 a 1 salta a timer1
retfie
timer1 decfsz conT1,1;decremento CONT1
goto no_finT1
si_finT1 bcf T1CON,0 ;si ha contado 20, para el T1
clrf PORTB
movlw 0xff
movwf PORTB ;activo salidas puerta B
movlw 0xDC
movwf TMR1L
movlw 0xB
movwf TMR1H
movlw 0x14
movwf conT1 bcf PIR1,0 ;repone el flag a 0
retfie
no_finT1 bsf PORTA,2 movlw 0xDC
movwf TMR1L
movlw 0xB
movwf TMR1H ;
retfie
INICIO clrwdt
;configuracion PUERTAS E/S
bcf STATUS,RP0
bcf STATUS,RP1 ;BANCO 0
clrf PORTA ;borro bascula de datos (bits) Puerta A
clrf PORTB ;borro bascula de datos (bits) Puerta B
clrf PORTC ;borro bascula de datos (bits) Puerta C
bsf STATUS,RP0 ;BANCO1
movlw 0x00
movwf TRISA ;configura Puerta A como salidas
movlw 0x00
movwf TRISB ;configura Puerta B como salidas
movlw 0X80 ; EN BINARIO 10000000
movwf TRISC ;cofiguracion Pueta C, Rx(RC7) entrada, Tx(RC6)salida, resto salida
;CONFIGURACION T1
bcf STATUS,RP0
bcf STATUS,RP1 ;BANCO 0
clrf TMR1L
clrf TMR1H
movlw 0x30
movwf T1CON
movlw 0x14
movwf conT1
movlw 0xDC
movwf TMR1L
movlw 0xB
movwf TMR1H
bsf STATUS,RP0 ;BANCO 1
bsf PIE1,0
Principal
bcf STATUS,RP0 ;BANCO 0
bsf PORTC,4
bsf T1CON,0 ;arranco el T1
BUCLE clrwdt
GOTO BUCLE
end
Pues creo que falla algo porque no parece que decrementa el contador ni temporiza 10 segundos.
Agradezco cualquier comentario y sugerencia.
Gracias por vuestro tiempo
-
Hola amigo, viendo tu programa rapidamente veo que no haz declarado las salidas del puerto A como digitales, recuerda que eso se declara en adcon, checa eso.
tambien que paso con el registro intcon que es donde habilitas las interrupciones gie, pie...