funcionou

download funcionou

If you can't read please download the document

Transcript of funcionou

// VARIAVEIS GLOBAIS unsigned char Texto[50]; unsigned char *Ponteiro_Texto; unsigned char ucInicial = 0; float d1,d2,d3,d4; // Prototipos de funo. void Executa_Comando(); void abre(); void fecha(); /*********************** CONFIGURAO DOS PERIFERICOS DO PWM EXTERNOS ********/ void configura_perifericos() { osccon=0X72; trisa=0XFF; ansel0= 0X00; PTCON0= 0X04; PTCON1=0X80; PWMCON0=0X5F; //esta configurando pwm impares PWMCON1=0X00; OVDCOND=0XFF; PTPERL=1501; PTPERH=1501>>8; } void ajusta_dc(float dc1,float dc2,float dc3, float dc4 ,float dc5) { PDC0L=((int)(1501*dc1))6; PDC1L=((int)(1501*dc2))6; PDC2L=((int)(1501*dc3))6; PDC3L=((int)(1501*dc4))6; } // Rotina de Tratamento de Interrupo void interrupt(){ unsigned char ucRecebe; if(PIR1.RCIF==1){ ucRecebe = UART1_Read(); if (ucRecebe == '['){ ucInicial = 1; Ponteiro_Texto = &Texto; }else if (ucInicial == 1){ *Ponteiro_Texto = ucRecebe; Ponteiro_Texto++; } if (ucRecebe == ']'){ Executa_Comando(); ucInicial = 0; } 0.5 0.75 0.98// // // // // // //L dado Caractere inicializador Indica inicializao do protocolo Reinicializa ponteiro Se chegou inicializador Recebe Dado Incrementa ponteiro// Recebeu finalizador // Executa comando // Aguarda novo inicializadorPIR1.RCIF = 0; rial } }// Zera Flag da interrupo do recebimento sevoid main() { TRISD = 0; // Inicializa o PORTD como Saida PORTD = 0; // Zera PORTD TRISB = 0; // Inicializa o PORTB como Saida PORTB = 0; // Zera PORTB TRISC = 0b00000000; // Inicializa o PORTC como Saida PORTC = 0b00000000; // Zera PORTC CCP1CON=0b00001100; //PWM mode T2CON=0b00000110; //timer2 on, prescaler 16 INTCON=0X00; // ZEROU //PIE1=0x00; //PIE2=0x00; //PIE3=0x00; PIR1=0X00; PIR2=0X00; PIR3=0X00; ADCON1 = 0X0F; // TUDO COMO DIGITAL UART1_Init(9600); // Inicializa UART a 9600bps. PIR1.RCIF = 0; PIE1.RCIE = 1; PIR1.RCIP = 1; RCON.IPEN = 1; INTCON.GIE = 1; INTCON.GIEL = 1; // Limpa Flag da interrupo de recebimento serial // Habilita interrupo de recebimento serial // Seta interrupo de alta prioridade do recebimento serial // Seleciona o modo de 2 niveis de interrupo // Habilita as interrupes de alta prioridade // Habilita as interrupes de baixa prioridadeconfigura_perifericos(); ajusta_dc(0.2,0.9,0.2,0.9,0.2); while(1); } void Executa_Comando() { if ((Texto[0] == 'P') && (Texto[1] == 'W')&& (Texto[2] == 'M')) { if (Texto[3] == '1') { switch (Texto[4]) { case 'A': abre(); break; case 'F': fecha(); break; default :PORTD = 0; break; } } } } void abre() { PORTD.RD1 = 1; } void fecha() { PORTD.RD1 = 0; }