A maior rede de estudos do Brasil

Grátis
19 pág.
relatorio 3

Pré-visualização | Página 2 de 3

em que a chave acionada é de 1s). Caso a chave de 1s esteja acionada a variável volta recebe o valor inteiro 2, caso contrário, recebe o valor inteiro 4. Em seguida, checa-se se o valor correspondente à variável volta é igual a variável contador. Caso a condição seja verdadeira, ou seja, ambas as variáveis sejam iguais, a contagem é realizada utilizando-se a máscara mostrada. Caso contrário, a variável contador é apenas incrementada ao final do laço de contagem e o contador tem um atraso correspondente a 1s que é o valor da contagem a ser realizada na próxima interrupção do temporizador. 
Por conseguinte, a interrupção verifica que a variável contador é igual ao valor da variável volta entrando assim no laço de contagem por meio da máscara mostrada em sala. Por fim, o valor da variável contador retorna ao seu valor inteiro inicial, um, anterior à contagem de 1s, para que uma nova contagem seja realizada. 
De maneira análoga ocorre a contagem quando o botão SW2 estiver pressionado (contagem de 2s). Nessa situação a variável contador será incrementada 3 vezes resultando em atraso total de 4s correspondente à contagem solicitada pelo usuário.
A figura 1 seguinte mostra a imagem da tela do programa Codewarrior IDE 5.1 Freescale com o código para o problema 4.1.
Figura 1: Tela do programa Codewarrior IDE 5.1 Freescale com o problema proposto 4.1.
Um automóvel possui um sistema embarcado responsável por controlar o painel do veiculo. Digamos que o limpados de para-brisas seja acionado pela chave SW3 (bit 1), direção direita é acionado pela chave SW1 (bit 2) e a direção esquerda é acionado pela chave SW1 (bit 3). O limpador de para-brisa possui 4 velocidade, 1s, 2s, 4s, 8s. Inicialmente, o limpador de para-brisa começa com a velocidade 8s. Estando SW1 (bit 1) ativado e SW1 for pressionado, então o limpador de para-brisa aumenta a velocidade, passando para 4s, pressionado mais uma vez, passa para 2s e, pressionado outra vez passa para 1s. a chave SW2 faz o processo inverso, ou seja, estando em 1s, se for pressionado passa para 2s, pressionado SW2 outra vez passa para 4s, e, pressionado, passa para 8s. SW1 serve para aumentar a frequência do limpador de para-brisa e SW2 serve para diminuir a frequência do limpador de para-brisa. No caso do sinalizador de direção, então a frequência é de 1s. Utilize LED1 para sinalizar a frequência do limpador de para-brisa. Utilize LED2 para indicar a seta de direção esquerda, e o LED3 para indicar a seta de direção direita.
A configuração dos botões, leds e o temporizador da placa foi feita conforme tabela seguinte:
	COMPONENTE
	CONFIGURAÇÃO NO CODEWARRIOR
	SW 1 
	PP 0
	SW 2
	PP 1
	SW3_1
	PB 0
	SW3_2
	PB 1
	SW3_3
	PB 2
	LED 1
	PB 4
	LED 2
	PB 5
	LED 3
	PB 6
	LED 4
	PB 7
O temporizador foi configurado para um período de interrupção correspondente a 1000ms e a CPU com frequência de clock igual a 4 MHz.
Segue o código implementado no Codewarrior IDE 5.1 usando linguagem C para o problema. O programa presente no arquivo main.c apresenta apenas o código para habilitar o temporizador temp, conforme mostrado a seguir:
/** ###################################################################
** Filename : Project_2.c
** Project : Project_2
** Processor : MC9S12C128CFU16
** Version : Driver 01.14
** Compiler : CodeWarrior HC12 C Compiler
** Date/Time : 11/07/2011, 17:15
** Abstract :
** Main module.
** This module contains user's application code.
** Settings :
** Contents :
** No public methods
**
** ###################################################################*/
/* MODULE Project_2 */
/* Including needed modules to compile this module/procedure */
#include "Cpu.h"
#include "Events.h"
#include "parabrisa_sw31.h"
#include "dir_direita_SW32.h"
#include "dir_esquerdasw33.h"
#include "aumenta_sw1.h"
#include "dimunui_sw2.h"
#include "brisa_LED1.h"
#include "esquerda_led2.h"
#include "direria_led3.h"
#include "temp.h"
#include "sinal_LED4.h"
/* Include shared modules, which are used for whole project */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"
/* User includes (#include below this line is not maintained by Processor Expert) */
void main(void)
{
 /* Write your local variable definition here */
 /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
 PE_low_level_init();
 /*** End of Processor Expert internal initialization. ***/
 /* Write your code here */
 
 for(;;){
 
 if(parabrisa_sw31_GetVal()){
 
 temp_Enable();
 
 } else{
 
 sinal_LED4_SetVal();
 
 brisa_LED1_SetVal();
 
 temp_Disable(); 
 
 }
 
 if((!dir_direita_SW32_GetVal())&&(!dir_esquerdasw33_GetVal())){
 
 direria_led3_SetVal();
 
 esquerda_led2_SetVal();
 
 
 }
 
 if((dir_esquerdasw33_GetVal()) && (dir_direita_SW32_GetVal() )){
 
 esquerda_led2_SetVal();
 
 direria_led3_SetVal();
 
 }
 
 if((!dir_esquerdasw33_GetVal())&&(dir_direita_SW32_GetVal())){
 
 brisa_LED1_SetVal();
 direria_led3_ClrVal();
 
 }
 
 if((!dir_direita_SW32_GetVal())&&(dir_esquerdasw33_GetVal())){
 
 esquerda_led2_ClrVal();
 
 direria_led3_SetVal();
 
 
 }
 
 
 }
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
 for(;;){}
 /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
/* END Project_2 */
/*
** ###################################################################
**
** This file was created by Processor Expert 3.02 [04.44]
** for the Freescale HCS12 series of microcontrollers.
**
** ###################################################################
*/
A seguir tem-se o arquivo events.c com as instruções a serem realizadas pelo temporizador a cada interrupção.
/** ###################################################################
** Filename : Events.c
** Project : Project_2
** Processor : MC9S12C128CFU16
** Component : Events
** Version : Driver 01.04
** Compiler : CodeWarrior HC12 C Compiler
** Date/Time : 11/07/2011, 17:15
** Abstract :
** This is user's event module.
** Put your event handler code here.
** Settings :
** Contents :
** No public methods
**
** ###################################################################*/
/* MODULE Events */
#include "Cpu.h"
#include "Events.h"
/* User includes (#include below this line is not maintained by Processor Expert) */
#pragma CODE_SEG DEFAULT
/*
** ===================================================================
** Event : temp_OnInterrupt (module Events)
**
** Component : temp [TimerInt]
** Description :
** When a timer interrupt occurs this event is called (only
** when the component is enabled - <Enable> and the events are
** enabled - <EnableEvent>). This event is enabled only if a
** <interrupt service/event> is enabled.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void temp_OnInterrupt(void)
int volta=8;
int contador=1;
{
 /* Write your code here ... */
 
 if(!aumenta_sw1_GetVal()){
 
 sinal_LED4_ClrVal();
 
 volta=volta/2;
 
 if(volta<1){
 
 volta=1;
 
 }
 
 }
 
 if(!dimunui_sw2_GetVal()){
 
 sinal_LED4_ClrVal();
 
 volta=volta*2;
 
 if(volta>8){