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ón-escritura: 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 RegisterANS<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 ; Select bank of PORTACLRF PORTA ; Initialize PORTA by
; clearing output data latches
BANKSEL ANSEL ; Select Bank of ANSELMOVLW 0x00 ; Configure all pins as digital inputsMOVWF ANSEL ;
MOVLW 0xFF ; Value used to initialize data directionMOVWF TRISA , 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 individual-mente (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ón-escritura: 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óncuando 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 comosalidas.
Las entradas del PORTB (RB7:RB4) son comparadas con los valores almacena-dos en los latch del PORTB que almacenan el valor leido anteriormente, calculan-do 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 1 = Enables all unmasked interrupts0 = Disables all interrupts
PEIE: Peripheral Interrupt Enable bit 1 = Enables all unmasked peripheral interrupts0 = Disables all peripheral interrupts
INT0IE: RB0/INT External Interrupt Enable bit 1 = Enables the RB0/INT external interrupt0 = Disables the RB0/INT external interrupt
RBIE: RB Port Change Interrupt Enable bit 1 = Enables the RB port change interrupt0 = 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 transition0 = Increment on low-to-high transition
PSA: Prescaler Assignment 1 = Prescaler is assigned to the WDT0 = Prescaler is assigned to the Timer0
PS: Prescaler Rate Select bits Bit Value TMR0 Rate WDT Rate 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 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 oscillator0 = System clock is derived from another source
T1CKPS: Timer1 Input Clock Prescale Select 11 = 1:8 Prescale value10 = 1:4 Prescale value01 = 1:2 Prescale value00 = 1:1 Prescale value
T1OSCEN: Timer1 Oscillator Enable Control 1 = Oscillator is enabled0 = Oscillator is shut off
T1SYNC: Timer1 External Clock Input Synchronization Control1 = Do not synchronize external clock input0 = 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 Timer10 = Stops Timer1
Operando con Timer1 – Ejemplo -
Como leer el Timer1 cuando esta contando
Operando con Timer1 – Ejemplo -
Como escribir Timer1