Escolar Documentos
Profissional Documentos
Cultura Documentos
php/Roteiro_6_EA870_2S2010
Contents
1 Roteiro 6 - Programação em C e o Real-Time Clock
2 Introdução ao Experimento de Hoje
3 Roteiro de Estudos
4 Roteiro da Aula
4.1 Exemplo 1 - Leds em C
4.1.1 - Programa LEDSC/main.c
4.2 Exemplo 2 - Cronômetro utilizando Real Time Clock - RTC
4.2.1 - Programa CRONOMETRO/main.c
5 Relatório
6 - Referências
Roteiro de Estudos
1. Por que a programação em C facilita o desenvolvimento de aplicações embarcadas?
2. Se a programação em C facilita tanto, por que ainda utiliza-se programação em Assembly?
3. Como, no meio de um código C, podemos incluir instruções em Assembly?
4. O que é o pré-processador? Quando ele é executado? Dê exemplo de algumas diretivas de pré-processador.
5. O que é o ligador (linker)? Quando ele é executado?
6. O que é um arquivo de extensão .h? Para que ele é utilizado?
7. A plataforma Coldfire/CodeWarrior utiliza carregamento absoluto ou relativo? Explique.
8. Descreva, brevemente, como funciona o sistema de tempo real (RTC) do ColdFire. (Ver referência /1/).
Roteiro da Aula
Vamos executar 2 programas exemplo no relatório de hoje.
Exemplo 1 - Leds em C
Faremos em C uma tradução praticamente direta do programa dos leds apresentado no início do curso. ATENÇÃO:
1 de 4 16/08/2010 17:14
Roteiro 6 EA870 2S2010 - DCA-Wiki http://calhau.dca.fee.unicamp.br/wiki/index.php/Roteiro_6_EA870_2S2010
quando se compila programa fonte em C pode parecer a mensagens de erro: WARNING. Isto acontece quando não se
usa a declaração de modelamento de variáveis: CAST. Veja Seção 4.3 em /9/. Sobretudo, à despeito do aviso, a
maioria das vezes compilação é realizada e o programa poderá ser executado (RUN).
- Programa LEDSC/main.c
unsigned char *DDRTC = (unsigned char*)0x40100027; // endereço do registrador que define a direção
//dos bits de PORTTC.
unsigned char *PORTTC = (unsigned char*)0x4010000F;// endereço de PORTTC
int main(void)
{
unsigned char conteudo, i, mascara;
unsigned int tempo; // variáveis auxliares
}
}
}
Crie um novo projeto no CodeWarrior e utilize o código acima como código principal (main).
Primeiramente, procure entender exatamente o que o código faz.
Dê um make, e faça o debug do projeto. Execute-o linha a linha. Veja o conteúdo das variáveis mudar ao longo
do programa.
Clique em Data>View Mixed. Veja para quais registradores foram mapeados cada variável.
O ColdFire MCF52221 contém um módulo extremamente útil: o RTC. Ele é constituído, basicamente, de contadores
em cascata, alimentados por um clock de 1Hz (1 segundo), que contam segundos, minutos, horas e até dias. Pode-se
ter uma idéia de como seu circuito funciona vendo o datapath do cap.8, /1/. Um interessante recurso do Debugger do
CodeWarrior é o I/O console: através dele, pode-se utilizar as famosas funções de input/ouput de C (scanf, printf,
getchar...). Utilizando esse recurso, faremos um simples cronômetro. Considere o programa abaixo:
- Programa CRONOMETRO/main.c
2 de 4 16/08/2010 17:14
Roteiro 6 EA870 2S2010 - DCA-Wiki http://calhau.dca.fee.unicamp.br/wiki/index.php/Roteiro_6_EA870_2S2010
void inicializaRTC ()
{
*SECONDS = 0;
*MINUTES = 0;
*HOUR = 0;
int main(void)
{
int tempo, horas, minutos, segundos;
minutos = tempo/60;
if(minutos)
tempo = tempo - (60*minutos);
segundos = tempo;
for (;;)
{
printf ("%d %d' %d'' \n", *HOUR, *MINUTES, *SECONDS);
if(*SECONDS >= segundos)
{
if(*MINUTES >= minutos)
{
if(*HOUR >= horas)
break;
}
}
}
printf(" FIM DA CONTAGEM \n ");
return 0;
Crie um novo projeto no CodeWarrior e utilize o código acima como código principal (main).
Veja como os tipos uint8, uint16... são definidos no arquivo header 'MCF52221.h'.
Baseado nisso, verifique qual o tamanho e qual a faixa de representação de cada um desses tipos (considere a
opção de 4-bytes integer do compilador).
Procure entender exatamente o que o programa faz.
Dê um make, e faça o debug. Verifique a janela I/O console.
Relatório
1. Faça o fluxograma para os programas dos exemplos 1 e 2.
2. Utilizando como base o exemplo 1, construa um programa que acenda os leds usando o seguinte padrão:
Led 1 pisca uma vez. (todos outros leds apagados)
Led 2 pisca 2 vezes. (todos outros leds acesos)
Led 3 pisca 3 vezes. (todos outros leds apagados)
Led 4 pisca 4 vezes. (todos outros leds acesos)
Reinicia o ciclo.
3. Faça o fluxograma do seu programa, feito no item 2.
4. Utilizando como base os dois exemplos, construa um programa (utilizando o RTC) que:
3 de 4 16/08/2010 17:14
Roteiro 6 EA870 2S2010 - DCA-Wiki http://calhau.dca.fee.unicamp.br/wiki/index.php/Roteiro_6_EA870_2S2010
- Referências
Refer. /1/ - MCF52223 ColdFire® Integrated Microcontroller Reference Manual - MCF52223RM.
http://www.freescale.com/files/32bit/doc/ref_manual/MCF52223RM.pdf
Refer. /4/ - Referência rápida para o MCF52223 http://www.fee.unicamp.br/EA870/referencias
/RefRapidaSet09.pdf
Refer. /5/ - Referência rápida Linguagem C - http://www.fee.unicamp.br/EA870/referencias/Apostila-
C-Coldfire.pdf
Refer. /9/ - Tutorial de programação C - Murillo Fernandes Bernardes - http://www.fee.unicamp.br/EA870
/referencias/tutorial.pdf
Retirado de "http://calhau.dca.fee.unicamp.br/wiki/index.php/Roteiro_6_EA870_2S2010"
Está página foi modificada pela última vez em 20:48, 3 August 2010.
Esta página foi acessada 6 vezes.
Política de privacidade
Sobre a DCA-Wiki
Disclaimers
4 de 4 16/08/2010 17:14