Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Subrutinas de retardo
Creacin de funciones Puertos E/S
SD-2
TIPOS DE DATOS EN C
E N T E R O S
D E C I M A L E S
SD-3
OPERADORES EN C
Operadores ARITMTICOS:
OPERADORES ARITMTICOS (se opera con enteros)
Operador Operacin Suma resta Multiplicacin Divisin Mdulo (resto en una divisin)
Expresin E1 + E2 E2 E1 E1 * E2 E1 / E2 E1 % E2
+ * / %
SD-4
OPERADORES EN C
Operadores LOGICOS y de RELACIN sobre expresiones:
OPERADORES LGICOS Y DE RELACIN Operador Operacin Negacin lgica (NOT) EJEMPLO: E1 tiene el valor 0x20 (VERDADERO) y E2 tiene el valor 0x21 (VERDADERO)
Expresin
Valor en W
! && ||
> < >= <= == !=
!E1 E1 && E2 E1 | | E2
E1> E2 E1 < E2 E1 >= E2 E1 <= E2 E1 == E2 E1 != E2
SD-5
OPERADORES EN C
Operadores LOGICOS SOBRE BITS:
OPERADORES LGICOS (se opera con los bits de igual posicin de los smbolos y constantes) Operador Operacin EJEMPLO (E1 tiene el valor 0x05 y E2 tiene el valor 0x02)
Expresin
Valor en W
~
& | ^ >> <<
NOT
AND OR OR Exclusivo (XOR) Desplazar a la derecha Desplazar a la izquierda
~E1
E1 & E2 E1 | E2 E1^ E2 E1 >> E2 E1 << E2
SD-6
OPERADORES EN C
Operadores de ASIGNACIN:
Operador Operacin Asignacin aritmtica o lgica Incrementar Decrementar Sumar y asignar Restar y asignar Multiplicar y asignar Dividir y asignar Mdulo y asignar AND y asignar OR y asignar Ejemplo var = 0 var ++ var -var += k var -= k var *= k var /= k var %= k var &= k var |= k Significado var = 0 var = var + 1 var = var -1 var = var + k var = var - k var = var * k var = var / k var = var % k var = var & k var = var | k
= ++ -+= -= *= /= %= &= |=
^=
>>= <<=
XOR y asignar
Desplazar a la derecha y asignar Desplazar a la izquierda y asignar
var ^= k
var >>= k var <<= k
var = var ^ k
var = var >> k var = var << k
rol
ror
var rol 1
var ror 1
SD-7
OPERADORES EN C
Operadores de DIRECCION:
Operador
Operacin
Ejemplo
Valor en W
low
high highword
x = low etiqueta
x = high etiqueta x = highword etiqueta
SD-8
INSTRUCCIONES EN C
while(expr==1){ //accin} Ejemplo: If(expr1){ //accin 1} [else if(expr2){ //accin 2}] .. [else { //accin n}] Var=2; If(var==1){ //accin1} else if(var==2){ //accin a ejecutar} else { //accin por defecto}
Switch(variable){
Do { var++; }while(var<3); for(var=inic;condicin;paso){//accin} Ejemplo: For(var=0;var<100;var++){ //accion } Case A: //accin Break; Case B: //accin Break; Case Default: //accin Break }
SD-9
Funcin main()
CREACION DE FUNCIONES
Podemos crear nuestras propias funciones. Normalmente se ponen al final del archivo (despus de main()) Deben estar declaradas antes de usarse
Normalmente se aade una lista de declaraciones de funciones antes del main()
SD-10
ESTRUCTURA DEL PROGRAMA Se trata de programacin bsica en C, independientemente de la programacin del microcontrolador.
// AQU IRN LOS ARCHIVOS DE DEFINICIONES #include<htc.h> //Incluimos libreria del micro a usar #define _XTAL_FREQ 4000000 //Oscilador Interno de 4MHZ __CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_XT & LVP_OFF); // DECLARACIN DE VARIABLES GLOBALES Int x,y; //DECLARACIN DE FUNCIONES void funcion(void); //AQU COMIENZA EL PROGRAMA PRINCIPAL void main(void){ DECLARACIN DE VARIABLES INTERNAS DEL PROGRAMA // AQU IR EL CDIGO DEL PROGRAMA PRINCIPAL } //AQU IR EL CDIGO DE LAS FUNCIONES DEFINIDAS AL PRINCIPIO Void funcion(void){ // AQU IR EL CDIGO DE LA FUNCION }
SD-11
NO SIGUE
NO
SD-12
DECENA: 5 BINARIO: 0000 0101 HEXAD: 0x05 ASCII: 35h = 30h + 05h
UNIDAD: 4 BINARIO: %0000 0100 HEXAD: 0x04 ASCII: 34h = 30h + 04h
SD-13
INICIALIZANDO EL MICROCONTROLADOR
htc.h
Sirve para programar los registros de configuracin Debe estar en el directorio de trabajo
// Comandos Obligatorios para el funcionamiento del debugger #include<htc.h> //Incluimos libreria del micro a usar __CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_XT & LVP_OFF); #define _XTAL_FREQ 4000000 //Oscilador Interno de 4MHZ // Explicacin de los comandos de configuracin utilizados /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ //WRT_OFF = Codigo no Potegido //WDTE_OFF = Watch Dog Timer Desactivado //PWRTE_OFF = Power Activado //FOSC_XT = Osiclador cristal //LVP_OFF = Low Voltage Porgramming Desactivado /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ void main(void){ // AQU IR EL CDIGO DEL PROGRAMA }
SD-14
Data EEPROM Memory Code Protection bit In-Circuit Debugger Mode bit
// In-Circuit Debugger disabled // In-Circuit Debugger enabled // Code protection off // All program memory code-protected
SD-15
El fichero <procesador>.h (ej. <pic16F877A.h>) incluye las definiciones de todos los registros de control de perifricos. Cualquier registro de control se puede acceder de dos modos:
En formato byte al registro completo <nombre_registro> (ej. PORTA) Bit a bit: <nombre_registro>bits.<nombre_bit> o <nombre_bit> (ej. PORTAbits.RA0 o RA0)
SD-16
SD-17
ES PARTICULAR DE CADA PUERTO INCLUSO EN EL MISMO PUERTO HAY PINES CON CARACTERSTICAS DISTINTAS
ES NECESARIO SABER INTERPRETAR EL ESQUEMA INTERNO PARTICULAR PARA SABER QU CONEXIONES SE PUEDEN HACER
SD-18
Bit 6 -
Bit 5 RA5 -
Bit 4 RA4 -
Valores despus del reset por encendido (POR) o por cada de tensin (BOR) --0x 0000 --11 1111 0--- 0000
ADCON1 ADFM
81h, 181h OPTION_REG RBPU# INTEDG T0CS T0SE INTCON GIE PEIE TOIE INTE
SD-19
Bit 6 Bit 5 -
Bit 4 -
Bit 3 PCFG3
Bit 2 RE2
Bit 1 RE1
Bit 0 RE0
Valores despus del reset por encendido (POR) o por cada de tensin (BOR)
---- -xxx 0000 -111 0--- 0000
IBF ADFM
SD-20
SD-21
ZUMBADOR
SD-22
EJERCICIO 3: Escribir un programa en C para encender los LEDS EJERCICIO 4: Escribir un programa para que encienda los Leds en funcin de un pulsador. Al pulsar RA4 se encender RB1 y se apagar RB0.
#include<htc.h> //Incluimos libreria del micro a usar __CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_XT & LVP_OFF); #define _XTAL_FREQ 4000000 //Oscilador Interno de 4MHZ //Definicin de variables void main(void){ //Configuracin
SD-23
GENERACION DE RETARDOS
SD-24
Oscilador Tosc
SD-25
EJERCICIO 5: Generar un retardo con un bucle for que active y desactive el zumbador conectado a RC2.
/* PROGRAMA*/
}
EJERCICIO 6: Mostrar una secuencia que vaya encenciendo los LEDs conectados a RB0:RB3 de forma que hagan un contador binario.
SD-26
RETARDOS
MEDIANTE LA LIBRERA htc.h
NOP() Retardo de un ciclo de instruccin __delay_us(400) Retardo de x microsegundos __delay_ms(2) Retardo de x milisegundos _delay(1000) Retardo de x ciclos de instruccin
DelayUs(x) Retardo de x microsegundos DelayMs(x) Retardo de x milisegundos X es del tipo Unsigned Char < 255
SD-27
MEZCLANDO ENSAMBLADOR Y C
El cdigo en lenguaje ensamblador puede mezclarse con el cdigo en C utilizando diferentes tcnicas: 1.- Incluyendo el cdigo en ensamblador en lnea dentro del mdulo en C, que se puede hacer de dos formas diferentes: a) Utilizando las directivas #asm y #endasm al principio y al final del cdigo en ensamblador respectivamente. El bloque generado con estas directivas no obedece las reglas de flujo normales de los programas en C por lo que no se recomienda su utilizacin dentro de estructuras como if(), while() o for(). Sin embargo es la manera ms sencilla de aadir mltiples instrucciones en ensamblador. b) Utilizando la sentencia asm(); para incluir cada nica instruccin en cdigo ensamblador en cualquier punto del programa en C, la cual interactuar correctamente con las estructuras de control de flujo de programa en C. EJEMPLO:
2.- Escribiendo el cdigo en ensamblador en un mdulo separado del cdigo en C Esta es la opcin ms adecuada frente a la anterior ya que se genera un cdigo en ensamblador autocontenido en lugar de un ensamblado en lnea aunque requiere de un mayor control del compilador en C
SD-28
EJEMPLO:
SD-29
EJERCICIO 7: Escribir un programa en C para monitorizar el estado del bit RB0. Si es Alto, generar pitidos de frecuencia 1kHz, duracin 0.2 segundos cada pitido y a intervalos de 1 segundo. EJERCICIO 8: Crear una funcin que vaya iluminando los LEDS conectados a RB0:RB3 de derecha a izquierda cada 200ms y de forma indefinida.
EJERCICIO 9: Escribir un programa para leer un bit del puerto RA4, esperar 0.5 segundos y enviarlo al puerto RB1 . XTAL=4MHz
#include<htc.h> //Incluimos libreria del micro a usar __CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_XT & LVP_OFF); #define _XTAL_FREQ 4000000 //Oscilador Interno de 4MHZ #include <delay.h> void main(void){ // PROGRAMA // }