TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: lolos123 en 25 de Enero de 2005, 13:13:00

Título: ayuda con mi primer programa
Publicado 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
Título: RE: ayuda con mi primer programa
Publicado por: RALF2 en 29 de Enero de 2005, 00:28:00
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...