domingo, 9 de dezembro de 2012

Desafio 4

Download desafio: http://www.4shared.com/office/SLHLW3-A/desafio4.html?
Parte do desafio (exemplo): http://www.4shared.com/rar/-kNV9Lz1/exemplo_parte_des4.html?

Neste desafio iremos, criar um programa para uma panificadora, faça o download do documento e siga as diretrizes. Neste desafio vamos usar a interrupção. Segue abaixo programa criado para a panificadora: 

#include <lpc21xx.h>                   
#include "C:\keil\lcd.h"             

#define pao_1 (1<<12)
#define pao_2 (1<<13)
#define pao_3 (1<<14)
#define liga_desliga (1<<15)
#define sensor_porta (1<<16)
#define resistencia_ligada IOSET1=(1<<24)
#define resistencia_desligada IOCLR1=(1<<24)
#define motor (1<<25)

unsigned int val;

//interrupção quando a tampa é aberta 
__irq void EINT0_IRQHandler(void)
{
lcd_clr();
lcd_puts("TAMPA ABERTA");
lcd_gotoxy(1,0);
lcd_puts("FECHAR TAMPA");
IOCLR1 = motor;
resistencia_desligada;
EXTINT = 1;   
VICVectAddr = 0;
__irq void DefISR (void) {
}
void tempo (int limite)
{
int t;
for(t=0;t<limite;t++);
}
int misturar_massa (void)
{
IOSET1 = motor;
lcd_clr();
lcd_puts("BATENDO");
tempo(9999999);
IOCLR1 = motor;
}
int atualiza (void){
ADCR  |= 0x01000000;                  
while ((ADDR & 0x80000000) == 0);   
val = ((ADDR >> 6) & 0x03FF);
}
int main(void)
{
IODIR0 = 0XFFFF0FFF; 
IODIR1 = 0XFFFFFFFF;
init_lcd();
lcd_clr();
lcd_gotoxy(0,2);
lcd_puts("PANIFICADORA");
PINSEL1 = 400001;
VPBDIV = 0X02;
ADCR = 0X00210601;
EXTMODE=0x00;     
  EXTPOLAR=0x00;    
  EXTINT=0x03;      
   VICVectAddr0 = (unsigned long) EINT0_IRQHandler;
   VICVectCntl0 = ( 0x20 | 14 );           
   VICIntEnable |= ((unsigned long)1<<14); 

   VICDefVectAddr = (unsigned long) DefISR;           /* un-assigned VIC interrupts */
while(1)
{
atualiza();
while(!(IOPIN0&(liga_desliga)))
{
lcd_clr();
lcd_puts("DESLIGADA");
}
lcd_clr();
lcd_gotoxy(0,5);
lcd_puts("LIGADA");
while(1)
{
lcd_clr();
lcd_gotoxy(0,4);
lcd_puts("ESCOLHER");
lcd_gotoxy(1,4);
lcd_puts("PROGRAMA");
if (IOPIN0&(pao_1))
{
goto pao1;
}
if (IOPIN0&(pao_2))
{
goto pao2;
}
if (IOPIN0&(pao_3))
{
goto pao3;
}
}
pao1:
while (IOPIN0&(pao_1))
{
lcd_clr();
lcd_puts("PAO 1");
misturar_massa();
lcd_clr();
lcd_puts("REPOUSO");
tempo(9999999);
goto assar1;
}
assar1:
if (val<=110)
{
resistencia_ligada;
lcd_clr();
lcd_puts("ASSANDO");
lcd_gotoxy(1,0);
lcd_puts("PAO 1");
tempo(9000000);
}
else if (val>=110)
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 1");
tempo(10000000);
goto fim1;
}
fim1:
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 1 PRONTO");
while(1);
}
pao2:
while (IOPIN0&(pao_2))
{
lcd_clr();
lcd_puts("PAO 2");
misturar_massa();
lcd_clr();
lcd_puts("REPOUSO");
tempo(9999999);
goto assar2;
}
assar2:
if (val<=220)
{
resistencia_ligada;
lcd_clr();
lcd_puts("ASSANDO");
lcd_gotoxy(1,0);
lcd_puts("PAO 2");
tempo(9000000);
}
else if (val>=220)
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 2");
tempo(10000000);
goto fim2;
}
fim2:
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 2 PRONTO");
while(1);
}
pao3:
while (IOPIN0&(pao_3))
{
lcd_clr();
lcd_puts("PAO 3");
misturar_massa();
lcd_clr();
lcd_puts("REPOUSO");
tempo(9999999);
goto assar3;
}
assar3:
if (val<=330)
{
resistencia_ligada;
lcd_clr();
lcd_puts("ASSANDO");
lcd_gotoxy(1,0);
lcd_puts("PAO 3");
tempo(9000000);
}
else if (val>=330)
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 3");
tempo(10000000);
goto fim3;
}
fim3:
{
resistencia_desligada;
lcd_clr();
lcd_puts("PAO 3 PRONTO");
while(1);
}
}
}

Circuito criado no Proteus: 

Nenhum comentário:

Postar um comentário