Академический Документы
Профессиональный Документы
Культура Документы
FUNDAMENTOS
Computadora
Se dispone de un S.O. El S.O. inicia y configura los perifricos. El S.O. brinda al usuario subrutinas para utilizar los perifricos ( system calls ).
Microcontrolador
No posee un S.O.
El usuario debe crear sus propias subrutinas para utilizar los perifricos.
Cdigo en ensamblador
ORG $EE00 configuracin de los perifricos . BRA $
Cdigo en C
ORG $EE00 cdigo de inicializacin CALL/JMP void { main(void) cdigo escrito por el usuario while(1) { } } main
Recursos
Arquitecturas de memoria
Pasaje de parmetros
Al igual que en un computadora, la pila se utiliza para el pasaje de parmetros: int funcion(char a, int b, float c,.)
Variables
Operaciones bsicas
Aritmticas Suma + Resta Multiplicacin * Divisin / Resto % Lgicas AND & OR | XOR ^
No necesariamente existe en ensamblador una instruccin para realizar cierta operacin aritmtica. Ej: Los PIC 16F no cuentan con instrucciones de multiplicacin.
En ese caso el compilador debe generar un algoritmo en assembler que ejecute esa operacin.
Volatile
Cdigo en C void findecuenta(void) { if(time == 100) { time = 0; } } Posible compilacin en ensamblador: findecuenta: LDA time CMP #!100 BNE CLR time
Volatile
Si time no cambia antes del if, la compilacin anterior es vlida. Si time proviene del mdulo timer puede modificarse entre que es cargada y el if.
Solucin
Cdigo en C: volatile int time; void findecuenta(void) { if(time == 100) { time = 0; } } Compilacin en ensamblador: findecuenta: LDA CMP BNE CLR time #!100 time
Resea de punteros
Se declaran y usan de la forma convencional: int *p; char *p; int hola; p= &hola; *p = 3; ( hola = 3 )
Punteros a RAM
int int hola; *p;
Punteros a ROM
char char p = texto; p apunta a una posicin en ROM (FLASH). *p; texto[20] = Hola mundo;
Entrada y salida
En la computadora
Acceso al I/O de entrada: a = getch(); Acceso al I/O de salida: printf(Hola mundo);
Sistema dedicado
Crear bibliotecas de funciones: LCD_printf(char *texto); LCD_Dato(char caracter); LCD_gotoxy(char x, char y);
Bits.PTAD0 = 1;
Manejo de perifricos
En PC usando system calls. En microcontroladores:
Freescale:
Asistentes de configuracin ( Processor Expert ) Funciones de biblioteca.
En PIC:
Bibliotecas.
Processor Expert
Permite configurar cualquier mdulo del microcontrolador.
Processor Expert
Pueden configurarse todos los parmetros del mdulo.
Processor Expert
Genera el cdigo de inicializacin Genera funciones para el manejo de mdulo. Genera vectores de interrupcin.
Temporizacin
Demoras cortas
Intercalando cdigo en ensamblador: unsigned char contador_1;
asm { LDA #$32 STA contador_1 dem_100us_1: NOP NOP NOP DBNZ contador_1,dem_100us_1 }
Demoras largas
Intercalando cdigo en ensamblador: unsigned char contador_1; unsigned char contador_2; unsigned char contador_3; for(contador_3 = 0; contador_3 < 100; contador_3++) for(contador_2 = 0; contador_2 < 20; contador_2++) { asm { LDA #$C8 STA contador_1 dem_1s_1: NOP NOP NOP DBNZ contador_1,dem_1s_1 } } Ttotal = 100 x 10ms = 1s Text = 20 x 500s = 10ms
Demoras largas
Mdulo timer con interrupciones: void main(void) { TI1_SetPeriodSec(1); } ISR(TI1_Interrupt) { (void)TPM1C0SC; TPM1C0SC = 0x80; (cdigo del usuario) }
Cdigo bloqueante
Durante el llamado a una funcin el programa no contina su ejecucin hasta retornar de ella. Ej: void main(void) { demora_seg(1); }
Cdigo no bloqueante
El programa puede continuar con otras tareas mientras una funcin no entregue los resultados deseados. Ej: void { } main(void)
Timer tick de la PC
Produce interrupciones cada 1ms. El usuario puede generar eventos por timer tick. El usuario no debe atender la interrupcin.
void __fastcall TForm1::Timer1Timer(TObject *Sender) { ( cdigo del usuario ) }
Interrupciones
Arquitectura PIC
Existen 1 2 vectores de interrupcin. El usuario debe determinar con un if que perifrico dispar la interrupcin.
#pragma code low_vector=0x18 void interrupt_at_low_vector(void) { _asm GOTO low_isr _endasm } #pragma code #pragma interruptlow low_isr void low_isr(void) { }
Arquitectura Freescale
El Processor Expert resuelve buena parte del cdigo. Existen vectores independientes para cada evento y perifrico. El usuario no debe atender una interrupcin. El Processor Expert genera el cdigo que lo hace.
CHAU!