Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso PIC C18 PDF
Curso PIC C18 PDF
microcontroladores PIC
Introduccin al MPLAB C-18
Andrs Prieto-Moreno Torres andres@ifara.com
Caractersticas del MPLAB-C18 Compilador ANSI C para microcontroladores PIC18. Aprovecha las modificaciones arquitecturales de la familia de microcontroladores PIC18.
Diferente distribucin memoria de datos. Nuevas instrucciones de acceso a tablas en memoria de programa Nuevos modos de direccionamiento.
Tamao
8 bits 8 bits 8 bits 16 bits 16 bits 16 bits 16 bits 24 bits 24 bits 32 bits 32 bits
Mnimo
-128 -128 0 -32768 0 -32768 0 -8.388.608 0 -2.147.483.648 0
Mximo
127 127 255 32767 65535 32767 65535 8.388.607 16.777.215 2.147.483.647 4.294.967.295
junio-2003
Tamao
32 bits 32 bits
Exponente Mnimo
-126 -126
Exponente Mximo
128 128
junio-2003
junio-2003
2. Extern:
Indica que la variable declarada pertenece a otro mdulo, por lo que no es necesario reservar memoria para ella. Dentro de un mismo fichero fuente sirve para acceder a una variable aunque todava no se haya llegado a su declaracin. Se auto-inicializan a cero.
junio-2003
4. Static:
Variables locales a una funcin que retienen su valor en llamadas sucesivas a dicha funcin. Hay que poner static delante de la declaracin. Se inicializan a valor cero. Ahorra nmero de instrucciones para acceder a las variables.
junio-2003
junio-2003
4. Near:
Datos:La variable esta en el banco de Acceso. (acceso directo mediante a). Cdigo: El objeto esta en una zona menor de 64K.
Ifara Tecnologas S.L. 9
junio-2003
6. ROM:
La variable esta en la memoria de programa.
Ejemplos: Variable en memoria de datos Variable en cdigo cercano Variable en cdigo lejano : char data; : rom near char data; : rom far char data;
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
// Definimos un tipo nuevo typedef unsigned char BYTE; BYTE var_global = 0x0; // programa principal void main(void) { extern int var_externa; BYTE var_auto = 0x40; // declarada externa // variable local auto (PILA -> 0x500 ) // la primera zona de memoria GPR0 ( 0x80 )
static BYTE var_estatica = 0x50; // variable local esttica ( 0x80 ) // programa principal for (;;) { var_auto++ ; // 0x500 ( PILA -> 0x500 ) // 0x8x / con NEAR 0x0x break; } var_estatica++ ; // 0x8x / con NEAR Ox0x var_global++ ; var_externa++ ; // 0x8x / con NEAR 0x0x if (var_estatica==0x60) { } } // Ejemplo de declaracin de una variable extern unsigned int var_externa; // la primera zona de memoria GPR0 ( 0x80 )
junio-2003
11
Selectivas:
If If-else Switch
Bifurcacin de control:
Break, continue, goto Return Exit: No vlido en MPLAB-C18
junio-2003
12
Sentencia DO:
do { Instruccin 1 Instruccin 2 ... Instruccin n } while ( expresin ); Las instrucciones se ejecutan repetidamente hasta que el valor de la expresin sea falso, es decir cero. La expresin se evala al final
junio-2003
13
Las instrucciones se ejecutan repetidamente hasta que el valor de la exp2 sea falso, es decir cero. exp1 sirve para inicializar el contador del bucle. exp3 controla el contador del bucle. Se evala al final del mismo.
junio-2003
14
Sentencia if-else:
If ( expresin ) { Instrucciones A } else { Instrucciones B }
La expresin se evala, si es verdadera se ejecutan las instrucciones A, en caso contrario las Instrucciones B.
junio-2003
15
junio-2003
16
junio-2003
17
junio-2003
18
junio-2003
19
Punteros a memoria I
Un puntero es una variable que contiene la direccin a una zona de memoria donde reside un determinado tipo de dato. char car; // variable tipo char char *pcar; // puntero a una variable tipo char car = 0xAA; pcar = &car; // & me da la direccin de car Los punteros a memoria de datos ocupan 16 bits ! 0x501 ... 0x550 0x551 0xAA ... 0x01 0x50
junio-2003
20
Punteros a memoria II
Otra forma de acceso a los datos: char *pcar; // puntero a una variable tipo char pcar = (char *) 0x501; *pcar = 0xAA; Optimizando: 0x501 ... 0x550 0x551 0xAA ... 0x01 0x50
junio-2003
21
junio-2003
22
Cadenas constantes:
Podemos almacenarlas en la memoria de programa. Instrucciones especiales para moverlas entre la RAM y la ROM: char *strcpy (auto char *s1, auto const char *s2) char *strcpypgm2ram (auto char *s1, auto rom const char *s2) rom char *strcpyram2pgm (auto rom char *s1, auto const char *s2) rom char *strcpypgm2pgm (auto rom char *s1, auto const rom char *s2)
junio-2003
23
junio-2003
Ejemplo de uso: // byte byte.valor=0xFF; // bits byte.bit0=0; byte.bit7=byte.bit0; // grupos de bits byte.nibblel=0x5; byte.nibbleh=0xa;
25
Curso Programacin en C
microcontroladores PIC
Placa entrenadora PICDEM 2
Power on led
Zona prototipo
XT: 4 Mhz
Timer 1
Conexin ICD
junio-2003
27
Display LCD
Puerto Serie Potencimetro
eeprom
Sensor temperatura
Zumbador
junio-2003
Reset
Pulsadores
28
Alimentacin a +9v
El LED ver de Power On se debe de activar.
Grabacin en circuito
Usamos l conector telefnico para unir la PICDEM al ICD2. Se utilizan los pines RB6 y RB7
junio-2003 Ifara Tecnologas S.L. 29
junio-2003
30
junio-2003
32
junio-2003
Asncrono
junio-2003
34
Curso Programacin en C
de microcontroladores PIC
Entorno de desarrollo:
MPLAB IDE MPLAB ICD2 MPLAB C18
MPLAB IDE
Escribir Permite Compilar Depurar Simular
junio-2003
36
junio-2003
37