Escolar Documentos
Profissional Documentos
Cultura Documentos
ANSI
PARA
MICROCONTROLADO
RES
Dr. Ivo Reis Fontes
ivo@feb.unesp.br
COMPILADORES
Compiladores so programas utilizados para produzir o
cdigo executvel para uma determinada CPU a partir
do programa fonte escrito em linguagem de
programao.
Tipos de Compiladores:
Compiladores
Direto;
Dois passos.
COMPILADORES C
Histrico da Linguagem C:
Programas que executam tarefas ligadas s funes do
sistema
operacional
ou
instrues
do
microprocessador/microcontrolador normalmente necessitam
ser codificados em linguagem de montagem ( assembly).
assembly A
linguagem C foi desenvolvida para resolver este problema de
forma menos penosa e mais porttil.
A linguagem C considerada de mdio nvel por possuir
controle de fluxo e estrutura de dados de forma semelhante
s linguagem de alto nvel, e ao mesmo tempo, proporcionar
facilidades que s esto disponvel em linguagem de baixo
nvel (assembly).
assembly
O C Ansi foi projetado em 1972 nos laboratrios da Bell por
Brian W. Kernighan e Dennis M. Ritchie, para o sistema
operacional UNIX..
COMPILADORES C
Principais caractersticas da Linguagem C:
Alto nvel de portabilidade, pois programas-fonte podem ser
transportados para outras CPUs sem maiores dificuldades;
de uso geral, sendo eficiente tanto para programao de
utilitrios como para sistemas operacionais, processadores
de texto, banco de dados e sistemas aplicativos em geral;
Gera cdigo executvel compacto e rpido em relao
maioria das outras linguagens compiladas, caracterstica
desejvel para computadores que tm memria reduzida;
Total interao com o sistema operacional, insero de
cdigo assembly no programa-fonte, sendo assim, ilimitada
por software;
Sintaxe de poucos comandos e grande nmero de
operadores aritmticos e lgicos;
Estruturada e modular
Permite estruturas de dados compostos na forma de
registros e campos.
COMPILADORES C
Compiladores C so programas utilizados para
produzir o cdigo executvel para uma determinada
CPU a partir do programa fonte escrito em
linguagem de programao C.
Tipos de Compiladores:
Compiladores
Direto;
Dois passos.
PROCESSO DE COMPILAO
ESTRUTURA DO CDIGOFONTE
[</*
comentrios */>]
[< incluses de arquivos de definies >]
[< declarao de prottipos de funes >]
[< declarao de variveis globais >]
[< tipo >] main([< tipo > varivel ]){
/*
corpo da funo principal main( )...
*/
[ return(var); ]
}
[
[< tipo >]func([< lista de parmetros >])
[< declarao de parmetros >]
{
/*
corpo da funo fun( )...
*/
}
]
ENTRADA E SADA
Funes de Entrada e Sada
As funes de entrada e sada de dados de um programa C so:
VARIVEIS E CONSTANTES
Os valores que so processados por um programa C so
guardados em variveis de diversos tipos.
A formao dos nomes das variveis, funes e constantes
simblicas se d a partir de quatro regras bsicas:
Todo nome deve comear com uma letra ou com uma sublinha (_);
Os prximos caracteres podem ser letras, sublinhas ou nmeros;
O nome pode ser de qualquer tamanho (com significncia limitada a 8 ou
mais caracteres, dependendo do compilador).
Existem certos identificadores que so palavras-chave (keywords) da
linguagem e que por isso no pdem ser usados para nomear variveis e
funes:
auto
break
case
char
continue default do
double
else
entry
extern
float
for
goto
if
int
long
register return
short
sizeof
static
struct
switch
typedef union
usigned while
TIPOS DE DADOS
Cada varivel possui um tipo e em C toda varivel
utilizada em um programa deve ser previamente,
conforme a sintaxe abaixo.
<tipo> <lista de variveis>;
TIPOS DE DADOS
CONTINUAO
- Caracteres
Constantes caracteres ficam entre plics () e so
representados pelo valor ASCII:
a, A, *, 2, ?
TABELA ASCII
TABELA ASCII
EXTENDIDA
TIPOS DE DADOS
CONTINUAO
- Inteiros
Valores numricos do conjunto dos inteiros (Z) com ou sem
sinal podem assumir os valores:
-32768 x 32767 Importante: Os valores negativos so
armazenados na
forma de complemento de 2.
TIPOS DE DADOS
CONTINUAO
- Longos
Para diferenci-los das constantes do tipo int, os tipos long tm
sufixo L
3241L, 0L, 130000000L
- Hexadecimal
Os valores hexadecimais so representados com o prefixo 0x:
0x
0x41, 0Xffff, 0xa0, 0xC1da, 0xC1FE
- Ponto Flutuante
Os nmeros reais possuem ponto decimal e podem ou no ser
acompanhados de sinal:
3.14, 2.71, -5423.7265, 1.
Exemplos:
char c;
c = A
\x41 = \101
= 0x41 = 65 =
CONTINUAO
Exemplo:
int var1 = 1986;
CONTINUAO
parc_1 = 56,
parc_2 = -47,
soma;
OPERADORES
Operador de Atribuio Simples
A operao mais simples atribuio de um valor a uma varivel:
Exemplo:
var = 10;
string_1[ ] = Primeira string definida no programa!...;
Operadores Aritmticos
Os operadores aritmticos bsicos e que so comuns a todas as
linguagens de programao, so:
Soma
Subtrao
Multiplicao
Diviso
+
*
/
OPERADORES
CONTINUAO
- -var;
var--;
Exemplo:
resto = dividendo % divisor;
x = x + 1 = x++ = x +=1
OPERADORES
CONTINUAO
Operadores Relacionais
Os operadores aritmticos especficos da linguagem C so:
Se iguais
Se Menor ou Igual
Se Maior ou Igual
Se no igual
Exemplo:
If((x1==x2) && (x1 != x3)){
...
}
do{
...
}while(x3 <= 10);
==
<=
>=
!=
OPERADORES
CONTINUAO
Operadores Lgicos
Os operadores lgicos da linguagem C so:
Se e (AND)
Se ou (OR)
Se no (NOT)
&&
||
!
Exemplo:
If((x1 && x2)||(x1 && x3)){
...
}
do{
...
}while(x3 != 10);
(var2 = 2)
OPERADORES
CONTINUAO
Operador ?
O operador ? (atribuio) tem a seguinte sintaxe:
<expresso lgica> ? <expresso-1> : <expresso-2>
Operao: Se a expresso lgica for verdadeira, ento expresso-1 aplicada, do
contrrio, a expresso-2 ser aplicada.
Exemplo:
#include <stdio.h>
Main(){
char
a,b,z;
a = getchar();
b = getchar();
z = (a > b) ? a : b;
/* se o teste lgico for verdadeiro z=a, seno z=b */
printf(O maior valor = %c,z);
}
OPERADORES
CONTINUAO
Exemplos:
float
valor = 3.1415926535;
...
valor = (float) ((long) (valor * 100. + 0.5))/100.
Operao: Arredonda valor com duas casas decimais e aps a execuo da
expresso valor ser igual a 3.14.
int
valor = 0x0102;
...
valor = (int) ((char) valor);
Operao: Aps a execuo da expresso valor ser igual a 2.
OPERADORES
CONTINUAO
Precedncia de Operadores
CONTROLE DE FLUXO
Introduo
C uma linguagem com caractersticas estruturadas, isto , seus comandos
para controle de fluxo so baseados em repetio de blocos de comando,
possuindo cada bloco apenas uma entrada e uma sada bem definidas.
Define-se um comando como uma expresso seguida de um ponto-e-vrgula
( ; ); ou como um bloco de comandos delimitados por { e }; ou como um
comando de controle de fluxo.
Tomando como base esta afirmativa, so exemplos de comandos:
a) printf(Teste\n);
b) a = 2;
c) {
/* comando composto! */
a = b;
b = c;
c = a;
}
d) while ((a[i] > 0) && (i < 10))
i++;
CONTROLE DE FLUXO
CONTINUAO
Comandos:
- if
If o comando mais simples que existe em termos de controle de fluxo. Ele seleciona
a execuo de um comando se uma expresso lgica for verdadeira (quando
avaliada for diferente de zero) ou, opcionalmente, a execuo de um outro comando no
caso da expresso lgica ser falsa (quando avaliada for zero).
Sintaxe:
a) If (<expresso>)
<comando>
b) If (<expresso>)
<comando-1>
else
<comando-2>
Operao:
a) A <expresso> avaliada. Se for verdadeira o <comando> ser executado. Seno,
o prximo comando ser executado.
b) A <expresso> avaliada. Se for verdadeira o <comando-1> ser executado.
Seno, o <comando-2> ser executado.
CONTROLE DE FLUXO
Exemplos
a) If (a < 0)
printf(valor negativo);
b) if (a > 0)
z = a;
else
z = b;
c) If (a == b)
z = a + 1;
else
z = a +2;
d) If (x )
printf(x diferente de zero!);
CONTINUAO
CONTROLE DE FLUXO
CONTINUAO
- switch
A linguagem C oferece ao programador este comando que possibilita a
tomada de mltiplas decises baseada em uma expresso.
Sintaxe:
Switch ( <expresso> )
{
case <constante-1>:
<comando-1>
case <constante-1>:
<comando-2>
...
case <constante-n>:
<comando-n>
default:
<comando-z>
}
CONTROLE DE FLUXO
CONTINUAO
Operao
A <expresso> avaliada e se houver um case igual a expresso avaliada,
a execuo do programa continuar a partir do comando correspondente.
Exemplo
c = getchar( );
switch (c)
{
case 1:
insere( );
break;
case 2:
retira( );
break;
case 3:
case 4
altera( );
break;
:
list_rel( );
break;
default:
impr_erro( );
}
CONTROLE DE FLUXO
CONTINUAO
- while
O while utilizado para a execuo de um bloco de comandos enquanto
uma condio lgica for verdadeira.
Sintaxe:
while (<expresso>)
<comando>
Exemplo
while ((c=getchar( ) != 0)
{
c +=0x40;
printf(A letra maiscula digitada : %c,c);
};
while com a <expresso> vazia considerado como verdadeiro e representa um loop
infinito.
Exemplo
while ( );
equivalente a (
SJMP
* ) em assembly.
CONTROLE DE FLUXO
CONTINUAO
- for
O for um comando de repetio extremamente poderoso e um velho
conhecido das linguagens de programao. Em C ele existe em uma forma
parecida com a convencional, embora tenha uma filosofia elegante que lhe
permite construes bem mais versteis.
Sintaxe:
for (<expresso-1>; <expresso-2; expresso-3)
<comando>
equivalente a:
<expresso-1>
while (<expresso-2)
{
<comando>
expresso-3
}
Qualquer uma das partes do for pode ser omitida!
CONTROLE DE FLUXO
CONTINUAO
Exemplo
Maior = -32768;
for (i = 0; i < 100; i++)
if (val[i] > maior)
maior = val[i];
- do-while
O do-while mais conhecido em outras linguagens por uma variante com o
nome de repeat-until outra forma estruturada para controle de fluxo na
execuo repetida de um bloco de comandos enquanto uma expresso tiver
valor verdadeiro.
verdadeiro A diferena deste comando para o while que a
avaliao da expresso feita aps a execuo do comando.
Sintaxe:
do
{
<comando>
...
}while( <expresso>);
CONTROLE DE FLUXO
CONTINUAO
Exemplo
do
{
c = getchar( );
}while (c < 1 || c > 5);
- break - continue
Algumas vezes torna-se necessrio o controle da execuo de uma iterao
independentemente do teste lgico efetuado. Com esta finalidade tem-se os
comandos break e continue.
continue
- goto - rtulos
Embora seja uma linguagem estruturada, o C possui o to controvertido
comando de desvio incondicional goto.
goto
Sintaxe
goto <rtulo>
CONTROLE DE FLUXO
Exemplos
- break
while (<expresso-1)
{
.
.
.
if (expresso-2)
break;
.
.
.
}
<comando>
CONTINUAO
CONTROLE DE FLUXO
Exemplos
- continue
while (<expresso-1)
{
.
.
.
if (expresso-2)
continue;
.
.
.
}
<comando>
CONTINUAO
CONTROLE DE FLUXO
Exemplos
- goto & label
while (<expresso-1)
{
.
.
.
if (expresso-2)
goto ERRO;
.
.
.
}
ERRO:
<comando>
CONTINUAO
No DE INTERRUES:
2 EXTERNAS
2 TMRs
1 SERIAL
REGISTROS ASSOCIADOS:
IE
IP
TCON
CONTINUAO
ESQUEMA
DE INTERRUPO
EXT1
TMR1
SERIAL
IE Interrupt Enable
REGISTROS CONT.
VETOR DE INTERRUPO
Cada interrupo atendida por uma ISR (Interrupt Service Routine)
apontada para as seguintes posies de memria:
RESET
INT0
TMR0
INT1
TMR1
UART
IE0
TF0
IE1
TF1
RI+TI
00H
03H
0BH
13H
1BH
23H
O + indica OU!
ORG 50H
MOV
A,#11101110B
CLR
C
MOV
P1,A
SETB
EX1
;HABILITAR INT. EXT. 1
SETB
EA
;HABILITAR FLAG GERAL
SJMP
$
;LOOP INFINITO
;
;ROTINA PARA ATENDER A INTERRUPCAO EXTERNA 1
EXT1:
RLC
A
;ACENDER LEDS EM SEQUENCIA
MOV
P1,A
LCALL DELAY
RETI
DELAY
L1:
L2:
MOV
MOV
DJNZ
DJNZ
RET
R0,#0FFH
R1,#0FFH
R1,L2
R0,L1
USO DE
TEMPORIZADORES/CONTADORES DO
NO 8051:
8051
CONTINUAO
Temporizadores/Contadores de 16-bits:
TIMER 0 (TMR0)
TIMER 1 (TMR1)
Operao:
TEMPORIZADOR
CONTADOR
USO DE
TEMPORIZADORES/CONTADORES DO
Registros & Temporizadores/Contadores
8051 CONTINUAO
SFR associados aos TMRs:
TMOD
TCON
TMOD
Os bits do registrador TMOD (SFR) definem:
Modo de Operaao (M0/M1)
Contador/Temporizador (Contador/~Temporizador)
TCON
Os bits do registrador TCON (SFR) correspondem a:
FLAG de OVERFLOW (TF0/TF1)
FLAG de Interrupes na transio de INT0/INT1 (IE0/IE1)
RUN/STOP TMR0/TMR1 (TR0/TR1)
BORDA/NVEL para aceitar pedido de interruo (IT0/IT1)
USO DE
TEMPORIZADORES/CONTADORES
DO
Registros de Controle
8051
TMOD: CONTINUAO
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
Registros de Controle
TCON:
USO DE
TEMPORIZADORES/CONTADORES DO
MODOS
8051 CONTINUAO
MODOS
Os modos de operao de TMR0/TMR1 so ajustado atravs dos
bits M0 e M1 em TMOD
MODO 0
TIMER 0/1
MODE 0
USO DE
TEMPORIZADORES/CONTADORES DO
MODOS CONTINUAO
8051 CONTINUAO
MODO 1
TIMER 0/1
MODE 1
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
CONTINUAO
MODOS
MODO 2
TIMER 0/1
MODE 2
USO DE
TEMPORIZADORES/CONTADORES DO
MODOS
8051 CONTINUAO
MODO 3
TIMER 0
MODE 3
Neste modo o TMR1 suspende contagem e o TMR0 opera como dois Timers de 8 bits
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
EXEMPLO 1 (Assembly)
EXEMPLO 1 (Assembly)
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
EXEMPLO 1 CONT.
Calculo do valor de carga no
registros do TIMER
;LED_10HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
DEZ_HZ EQU
8800H
;N = 30720 (CLOCK=3,6864 MHz)
;RELOAD = 34816 (8800H) F = 10 Hz
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
USO DE
TEMPORIZADORES/CONTADORES
DO
EXEMPLO
1 CONT.
8051 CONTINUAO
INIC:
MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV TMOD,#61H
;TIMER 0 EM MODO 1
MOV IE,#82H
;#10000010B
MOV P1,#0
;APAGAR TODOS OS LEDS
MOV A,#11011011B
PSW.CY
A
CLR C
0 1 1 0 1 1 0 1
SETB TR0
SJMP $
;
TIM0:
RLC
ORG 100H
MOV TL0,#LOW (DEZ_HZ+2)
;REINICALIZAR
MOV TH0,#HIGH DEZ_HZ
;O CONTADOR
RLC A
MOV P1,A
RETI
Compilao & Linkedio AVOCET
END
(DIRETRIO ...\AVOCET\ASM51\>)
Comandos:
avmac51 exemplo1.asm
avlink51 exemplo1=exemplo1
USO DE
TEMPORIZADORES/CONTADORES DO
EXEMPLO 2 (Assembly)
8051 CONTINUAO
USO DE
TEMPORIZADORES/CONTADORES DO
80512 CONTINUAO
EXEMPLO
CONT.
;LED_1HZ.ASM
;
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;N = 307200 (CLOCK=3,6864 MHz)
;Impossvel!
;Adota-se: RELOAD=8800H (10 Hz)
;e CONTADOR = 10
DEZ_HZ EQU
8800H
DIVISOR EQU
10
;
ORG RESET
AJMP INIC
;
ORG TIMER0
AJMP TIM0
USO DE
TEMPORIZADORES/CONTADORES DO
80512 CONTINUAO
EXEMPLO
CONT.
;
INIC:
ORG 50H
MOV TL0,#LOW DEZ_HZ
MOV TH0,#HIGH DEZ_HZ
MOV R7,#DIVISOR
MOV TMOD,#61H
MOV IE,#82H
MOV P1,#0
MOV A,#01001001B
CLR C
SETB TR0
SJMP $
;
TIM0:
ORG 100H
MOV TL0,#LOW (DEZ_HZ+2)
MOV TH0,#HIGH DEZ_HZ
;REINICALIZAR
;O CONTADOR
USO DE
TEMPORIZADORES/CONTADORES DO
80512 CONTINUAO
EXEMPLO
CONT.
FIM :
DJNZ R7,FIM
MOV R7,#DIVISOR
RLC A
MOV P1,A
RETI
END
;DECREMENTA DIVISOR
;(EQUIV. 10 Hz/10)
USO DE
TEMPORIZADORES/CONTADORES DO
8051 3CONTINUAO
EXEMPLO
(Assembly)
No exemplo a seguir gera um trem de pulsos, conforme mostrado na figura
abaixo, utilizando a interrupo do TMR0.
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
EXEMPLO 3 CONT.
SOLUO:
Ser necessrio calcular DOIS valores de RELOAD:
1) RELOAD para 1 mseg:
1 mseg = (12 N)/FCLOCK = (12 N)/3,6864 MHz
N1mseg = (10-3 seg 3,6842106)/12 = 307,2 307
RELOAD1mseg = 65229 = FEC0H
1) RELOAD para 40 seg:
40 seg = (12 N)/FCLOCK = (12 N)/3,6864 MHz
N 40seg = (4010-6 seg 3,6842106)/12 = 12,288 12
RELOAD40seg = 65524 = FFF4H
USO DE
TEMPORIZADORES/CONTADORES DO
8051
CONTINUAO
EXEMPLO 3 CONT.
;ONDA1.ASM
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
;
SAIDA
EQU
P1.7
R_1MS
EQU
0FEC0H
;RETARDO DE 1 MILISEG
R_40MICRO
EQU
0FFF4H
;RETARDO DE 40 MICROSEG
;
ORG RESET
AJMP INICIO
;
ORG TIMER0
AJMP TIM0
;
ORG 50H
INICIO: MOV TL0,#LOW R_1MS
USO DE
TEMPORIZADORES/CONTADORES DO
8051 CONTINUAO
EXEMPLO 3 CONT.
MOV TH0,#HIGH R_1MS
MOV TMOD,#61
MOV IE,#82H
CLR SAIDA
SETB TR0
SJMP $
;
TIM0:
LB1 :
JB SAIDA,LB1
MOV TL0,#LOW (R_40MICRO+4)
MOV TH0,#HIGH R_40MICRO
SETB SAIDA
RETI
MOV TL0,#LOW (R_1MS+4)
MOV TH0,#HIGH R_1MS
CLR SAIDA
RETI
END
;TIMER 0 EM MODO 1
;EA=1 E ET0=1
;PARTIDA DO TIMER 0
;LOOP INFINITO
;2 CICLOS
;2 CICLOS
;2 CICLOS
;1 CICLO
;2 CICLOS
P0
TCON
P1
SCON
P2
IE
IEN0
P3
IP
IRCON
T2CON
ADCON
P5
(8051.H)
@ 0x80;
@ 0x88;
@ 0x90;
@ 0x98;
@ 0xA0;
@ 0xA8;
@ 0xA8;
@ 0xB0;
@ 0xB8;
@ 0xC0;
@ 0xC8;
@ 0xD8;
@ 0xF8;
P0_BITS
TCON_BITS
P1_BITS
SCON_BITS
P2_BITS
IE_BITS
IEN0_BITS
P3_BITS
IP_BITS
IRCON_BITS
T2CON_BITS
ADCON_BITS
P5_BITS
SBUF
SP
PCON
TMOD
TH0
TH1
TL0
TL1
IP1
@ 0x99;
@ 0x81;
@ 0x87;
@ 0x89;
@ 0x8C;
@ 0x8D;
@ 0x8A;
@ 0x8B;
@ 0xB9;
@ 0x80;
@ 0x88;
@ 0x90;
@ 0x98;
@ 0xA0;
@ 0xA8;
@ 0xA8;
@ 0xB0;
@ 0xB8;
@ 0xC0;
@ 0xC8;
@ 0xD8;
@ 0xF8;
(8051.H)
CCEN
CCL1
CCH1
CCL2
CCH2
CCL3
CCH3
CRCL
RCAP2L
RCAP2H
CRCH
TL2
TH2
ADDAT
DAPR
@ 0xC1;
@ 0xC2;
@ 0xC3;
@ 0xC4;
@ 0xC5;
@ 0xC6;
@ 0xC7;
@ 0xCA;
@ 0xCA;
@ 0xCB;
@ 0xCB;
@ 0xCC;
@ 0xCD;
@ 0xD9;
@ 0xDA;
TF1
TR1
TF0
TR0
IE1
IT1
IE0
@ 0x8F;
@ 0x8E;
@ 0x8D;
@ 0x8C;
@ 0x8B;
@ 0x8A;
@ 0x89;
(8051.H)
IT0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
EA
ES
ET1
EX1
ET0
EX0
RD
WR
T1
T0
INT1
INT0
TXD
RXD
@ 0x88;
@ 0x9F;
@ 0x9E;
@ 0x9D;
@ 0x9C;
@ 0x9B;
@ 0x9A;
@ 0x99;
@ 0x98;
@ 0xAF;
@ 0xAC;
@ 0xAB;
@ 0xAA;
@ 0xA9;
@ 0xA8;
@ 0xB7;
@ 0xB6;
@ 0xB5;
@ 0xB4;
@ 0xB3;
@ 0xB2;
@ 0xB1;
@ 0xB0;
(8051.H)
Interrupt vectors */
#define
#define
#define
#define
#define
#define
#define
RESET
EXTI0
TIMER0
EXTI1
TIMER1
SINT
TIMER2
0
3
11
19
27
35
43
PS
PT1
PX1
PT0
PX0
@ 0xBC;
@ 0xBB;
@ 0xBA;
@ 0xB9;
@ 0xB8;
(8051.H)
USO DE INTERRUO EM C
Interrupo
Uma rotina para tratamento de interrupo (ISR) definida atravs dos seguintes
procedimentos:
1 Ajuste dos bits dos SFRs associados interrupo que se deseja usar (int_setup.h).
int_setup.h
2 Definindo a handler ISR:
[<type>] interrupt handler ( [<parametros>] )
{
[disable();]
/* bloqueia pedidos de novas interrupes */
.
.
.
[enable();]
/* habilita pedidos de novas interrupes */
[return();]
}
3 Ajuste da ISR ao vetor de interrupo correspondente:
set_vec(vec,
handler);
set_vec
handler
PROGRAMA FONTE
Exemplo de Programa Fonte: EPD01.C
/*
Programa: EPD01.C
Funcao: Controle de 4 LEDs acionados atravs da porta P1.0 a P1.3 do 8051
Copyright: ivo@feb.unesp.br
*/
static unsigned char P1 @0x90;
main(){
unsigned char x,y;
P1 = 0xff;
while(1){
do{
x = P1;
y = x;
x >>= 4;
}while(x==0x0f);
do{
/* Faz enquanto a tecla nao for solta */
x = P1;
x >>=4;
}while(x != 0x0f);
};
}
PONTEIROS EM C
Ponteiro
Quando declarada com ponteiro a varivel conter o endereo de uma outra
varivel do mesmo tipo. (para obter o endereo de uma varivel usamos o operador &)
Sintaxe:
<tipo> *<nome_da_varivel>;
Exemplos:
unsigned char var1, var2;
unsigned char myname[ ] = {Ivo Reis Fontes!...\n};
/* o nome do vetor, myname, um ponteiro!... */
unsigned char *ponteiro;
/* cria um apontador! */
ponteiro = &var1;
var2 = *ponteiro;
ponteiro = myname;
ponteiro +=9;
var1 = *ponteiro;
ESTRUTURA E UNIO EM C
Estrutura
bastante comum a necessidade de se manipularem dados em conjunto, isto ,
grupos de variveis diferentes que mantm alguma relao em comum. A
linguagem C proporciona facilidades para o uso de variveis compostas, que
so constituidas de diversas variveis de mesmo tipo ou de tipos diferentes. A
seguir segue um exemplo clssico:
Cadastro de Funcionrios:
Nome;
Endereo;
Nome do Conjuge;
Nmero de Dependentes;
Cargo;
Salrio;
Data da Admisso.
ESTRUTURA E UNIO EM C
Sintaxe:
struct funcionario
{
char
char
char
int
char
}analista;
nome[30];
endereco[40];
telefone[8];
idade;
data_adm[10];
CONTINUAO
ESTRUTURA E UNIO EM C
CONTINUAO
Union
H situaes em que uma alocao dinmica de memria se faz necessria,
devido ao enorme espao de memria utilizado pelas variveis existentes. Fica,
pois, flagrante a necessidade de se usarem ferramentas que permitam um
aproveitamento mais econmico da memria disponvel, ou mesmo aplicaes
nas quais se necessita de diferentes interpretaes para uma mesma rea de
memria.
O tipo union bastante semelhante s estruturas, nas quais podemos ter
variveis contendo valores de mais de um tipo.
Sintaxe:
union lh_byte
{
unsigned int int_16;
struct two_byte
{
unsigned char lbyte;
unsigend char hbyte;
};
};