Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje C PDF
Lenguaje C PDF
FUNDAMENTOS
Computadora
z
Se dispone de un S.O.
Microcontrolador
z
No posee un S.O.
Cdigo en ensamblador
ORG
$EE00
Cdigo en C
ORG
$EE00
cdigo de inicializacin
CALL/JMP
void
{
main
main(void)
cdigo escrito por el usuario
while(1)
{
}
Recursos
Arquitecturas de memoria
Pasaje de parmetros
Al igual que en un computadora, la pila se
utiliza para el pasaje de parmetros:
int
}
int
{
Desventajas:
z Llamados anidados
a funciones pueden
limitar la RAM libre.
suma(void)
dunga = dunga + donga;
}
int
{
resta(void)
dunga = dunga - donga;
Variables
En microcontroladores:
z char: 1 byte
z int: 2 bytes
z float: 4 bytes
Operaciones bsicas
Aritmticas
z Suma +
z Resta
z Multiplicacin *
z Divisin /
z Resto %
Lgicas
z AND &
z OR |
z 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.
Solucin:
Trabajar las mangintudes
multiplicadas x10, x100,
La cifra 20,3 se almacena como
203. As puede contenerse en un
tipo int.
Volatile
Cdigo en C
void findecuenta(void)
{
if(time == 100)
{
time = 0;
}
}
z
Posible compilacin en
ensamblador:
findecuenta:
LDA
time
CMP
#!100
BNE
CLR
time
Volatile
z Si
Solucin
z
Cdigo en C:
volatile
int time;
Compilacin en
ensamblador:
void findecuenta(void)
{
if(time == 100)
{
time = 0;
}
}
findecuenta:
LDA
CMP
BNE
CLR
time
#!100
time
Resea de punteros
z Se
int *p;
char *p;
int hola;
p= &hola;
*p = 3;
( hola = 3 )
Punteros a RAM
int
int
hola;
*p;
p = &hola;
*p = 3;
p apunta a una posicin en RAM.
Punteros a ROM
char
char
*p;
texto[20] = Hola mundo;
p = texto;
p apunta a una posicin en ROM (FLASH).
Punteros a RAM:
char
hola;
char
*p;
p = &hola;
Punteros a ROM:
texto[20] = me duermo;
Entrada y salida
En la computadora
z Acceso
al I/O de entrada:
a = getch();
z Acceso al I/O de salida:
printf(Hola mundo);
Sistema dedicado
z Crear
bibliotecas de funciones:
LCD_printf(char *texto);
LCD_Dato(char caracter);
LCD_gotoxy(char x, char y);
Genera textos.
z
z
z
z
sprintf(texto,
Chau);
sprintf(texto, %d,
a);
sprintf(texto, %f, d);
sprintf(texto, V =
%02.1f mV, voltios);
struct
{
byte
byte
byte
byte
byte
byte
byte
byte
}Bits;
PTAD0:1
PTAD1:1
PTAD2:1
PTAD3:1
PTAD4:1
PTAD5:1
PTAD6:1
PTAD7:1
Bits.PTAD0 = 1;
typedef
union
{
byte
Byte;
struct
{
byte
byte
byte
byte
byte
byte
byte
byte
}Bits;
}PTADSTR;
PTAD0:1
PTAD1:1
PTAD2:1
PTAD3:1
PTAD4:1
PTAD5:1
PTAD6:1
PTAD7:1
PTADSTR.Byte = 0xff;
PTADSTR.Bits.PTAD0 = 1;
PTAD_PTAD0 = 1;
Manejo de perifricos
z En
Freescale:
Asistentes de configuracin ( Processor Expert )
z Funciones de biblioteca.
z
En PIC:
z
Bibliotecas.
Processor Expert
z
Permite configurar
cualquier mdulo del
microcontrolador.
Processor Expert
z
Pueden configurarse
todos los parmetros
del mdulo.
Processor Expert
z
z
Genera el cdigo de
inicializacin
Genera funciones
para el manejo de
mdulo.
Genera vectores de
interrupcin.
A/D
Comparador
EEPROM
I2C
PWM
Temporizacin
Demoras cortas
z
unsigned char
contador_1;
asm
{
LDA #$32
STA contador_1
dem_100us_1:
NOP
NOP
NOP
DBNZ
contador_1,dem_100us_1
}
Ttotal = 50 x 2s = 100s
Tint = 10 ciclos x 200ns = 2s
Demoras largas
z
Demoras largas
z
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
z
Ej:
void
{
main(void)
ISR(TI1_Interrupt)
{
(void)TPM1C0SC;
TPM1C0SC = 0x80;
(cdigo del usuario)
}
Timer tick de la PC
z
Produce
interrupciones cada
1ms.
El usuario puede
generar eventos por
timer tick.
El usuario no debe
atender la
interrupcin.
La velocidad del
timer tick es
determinada por el
firmware.
Pueden generarse
eventos por timer
tick.
El usuario no debe
atender la
interrupcin.
void TI1_OnInterrupt(void)
{
( cdigo del usuario )
}
Interrupciones
Arquitectura PIC
z
z
Existen 1 2 vectores
de interrupcin.
El usuario debe
determinar con un if que
perifrico dispar la
interrupcin.
Arquitectura Freescale
z El
CHAU!