Microcontroladores PIC16FXX: Puertos de entrada/salida digitales y Contadores 0 y 1 Estructura del microcontrolador Patillado y periférico de la Familia 16FXX Los líneas de entrada/salida tienen las siguientes características: Manipulan corrientes altas (25 mA) para controlar LEDs directamente Se pueden programar para generar interrupciones cuando cambia un pin Pull-ups programables individualmente Estructura del puerto A Características del Puerto A PORTA es un puerto digital bidireccional El número de lineas depende del microcontrolador específico (por ejemplo 8 bits para el 16F88). La dirección de cada línea está determinada por el registro TRISA: ● TRISA bit = 1 hace que pin correspondiente de PORTA sea una entrada ● TRISA bit = 0 hace que pin correspondiente de PORTA sea una salida Despues de Power-on Reset, los pines están configurados dependiendo de la salida multiplexada. Cuando se lee el registro del PORTA, leemos el estado del mientras que cuando escribimos lo hacemos en un latch del puerto. Todas las operaciones de escritura son operaciones de lectura-modificaciónescritura: Escribir un puerto implica que los pines son leidos, su valormodificado y luego escrito en el latch. Registros asociados al Puerto A ANSEL: Analog Select Register ANS<6:0>: Selección de función de pins: 1 = Entrada analogica 0 = Entrada digital IRP: Register Bank Select bit (used for indirect addressing) 1 = Bank 2, 3 (100h-1FFh) 0 = Bank 0, 1 (00h-FFh) RP: Register Bank Select bits (used for direct addressing) 11 = Bank 3 (180h-1FFh) 10 = Bank 2 (100h-17Fh) 01 = Bank 1 (80h-FFh) 00 = Bank 0 (00h-7Fh) Configurando el Puerto A – Un ejemplo Configuración del Puert A en el PIC16F88 BANKSEL PORTA CLRF PORTA ; Select bank of PORTA ; Initialize PORTA by ; clearing output data latches BANKSEL ANSEL MOVLW 0x00 MOVWF ANSEL ; Select Bank of ANSEL ; Configure all pins as digital inputs ; MOVLW 0xFF MOVWF TRISA ; Value used to initialize data direction , Set RA<7:0> as inputs Estructura del Puerto B Características del Puerto B PORTB es un puerto digital bidireccional El número de lineas depende del microcontrolador específico (por ejemplo 8 bits para el 16F88). La dirección de cada línea está determinada por el registro TRISB: ● TRISB bit = 1 hace que pin correspondiente de PORTA sea una entrada ● TRISB bit = 0 hace que pin correspondiente de PORTA sea una salida Cada línea del PORTB despues de Power-on Reset, los pines están configurados dependiendo de la salida multiplexada. Cada línea del PORTB, tiene una resistencia de pull-up programable individualmente (CCP1CON<3:0> = 0 0 0 0 – Modo captura deshabilitado - ). Se habilita reseteando el bit RBPU (OPTION_REG<7>). Los pull-ups son deshabilitados despues de Power-on Reset. Todas las operaciones de escritura son operaciones de lectura-modificaciónescritura: Escribir un puerto implica que los pines son leidos, su valormodificado y luego escrito en el latch. Características del Puerto B Cuatro de las líneas del PORTB (RB7:RB4) pueden generar una interrupción cuando se produce un cambio en alguna de esas líneas (interrupt-on-change). Estas función se puede activar solo cuando las líneas están configuradas como salidas. Las entradas del PORTB (RB7:RB4) son comparadas con los valores almacenados en los latch del PORTB que almacenan el valor leido anteriormente, calculando una diferencia que se utiliza para generar el bit RBIF (INTCON<0>). Esta interrupción puede sacar al dispositivo del estado Sleep. El usuario puede indicar que atendio la interrupción de la siguienet manera: Cualquier operación de lectura o escritura del PORTB. Esto resetea la diferencia de comportamiento Resetear el bit RBIF. Registros asociados al Puerto B RBPU: PORTB Pull-up Enable bit 1 = PORTB pull-ups are disabled 0 = PORTB pull-ups are enabled INTEDG: Interrupt Edge Select bit 1 = Interrupt on rising edge of RB0/INT pin 0 = Interrupt on falling edge of RB0/INT pin Registro de control de inetrrupción GIE: Global Interrupt Enable bit PEIE: Peripheral Interrupt Enable bit 1 = Enables all unmasked interrupts 0 = Disables all interrupts 1 = Enables all unmasked peripheral interrupts 0 = Disables all peripheral interrupts INT0IE: RB0/INT External Interrupt Enable bit RBIE: RB Port Change Interrupt Enable bit 1 = Enables the RB0/INT external interrupt 0 = Disables the RB0/INT external interrupt 1 = Enables the RB port change interrupt 0 = Disables the RB port change interrupt INT0IF: RB0/INT External Interrupt Flag bit 1 = The RB0/INT external interrupt occurred 0 = The RB0/INT external interrupt did not occur RBIF: RB Port Change Interrupt Flag bit 1 = At least one of the RB7:RB4 pins changed 0 = None of the RB7:RB4 pins have changed Estructura del Timer0 Registros asociados al Timer0 Registros asociados al Timer0 T0CS: TMR0 Clock Source Select 1 = Transition on T0CKI pin 0 = Internal instruction cycle clock (CLKO) T0SE: TMR0 Source Edge Select 1 = Increment on high-to-low transition 0 = Increment on low-to-high transition PSA: Prescaler Assignment 1 = Prescaler is assigned to the WDT 0 = Prescaler is assigned to the Timer0 PS: Prescaler Rate Select bits Bit Value 000 001 010 011 100 101 110 111 TMR0 Rate 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT Rate 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 Estructura del Timer1 El Timer1 puede operar en uno de los siguientes tres modos: ● Como untemporizador ● Como un contador sincrono ● Como un contador asincrono Registros asociados al Timer1 Registros asociados al Timer1 T1RUN: Timer1 System Clock Status 1 = System clock is derived from Timer1 oscillator 0 = System clock is derived from another source T1CKPS: Timer1 Input Clock Prescale Select 11 = 1:8 Prescale value 10 = 1:4 Prescale value 01 = 1:2 Prescale value 00 = 1:1 Prescale value T1OSCEN: Timer1 Oscillator Enable Control 1 = Oscillator is enabled 0 = Oscillator is shut off T1SYNC: Timer1 External Clock Input Synchronization Control 1 = Do not synchronize external clock input 0 = Synchronize external clock input TMR1CS: Timer1 Clock Source Select 1 = External clock from pin (on the rising edge) 0 = Internal clock (FOSC/4) TMR1ON: Timer1 On 1 = Enables Timer1 0 = Stops Timer1 Operando con Timer1 – Ejemplo - Como leer el Timer1 cuando esta contando Operando con Timer1 – Ejemplo - Como escribir Timer1