#include <89c51rd2.h> #include //************* Definicao dos sinais de hardware ***************** // Enable da placa de sensores P1.2 Out Activo a 0 // Clock da placa de sensores P1.0 In Activo a 0 // Dados da placa de sensores P1.1 In (S6 .. S0) ////////////////////////////////////////////////////////////////// // Ligar sonar P1.3 Out Activo a 1 // Eco do sonar P3.3 In Activo a 1 ////////////////////////////////////////////////////////////////// // Direccao do motor 1 (esquerdo) P3.4 Out (1-frente 0-tras) // Direccao do motor 2 (direito) P3.5 Out (1-frente 0-tras) // PWM motor 1 (esquerdo) P1.4 Out // PWM motor 2 (direito) P1.5 Out // ************ Placa com IVs ************************************ // // TRAS // X X X D4 D3 D2 X X Leitura da Placa de IV // FRENTE // // TRAS // 0 0 0 (0x00) sobre a linha estado=0 // 0 0 1 (0x04) fugiu para a esquerda estado=1 // 0 1 1 (0x0C) fugiu para a esquerda estado=2 // 1 1 1 (0x1C) fora da linha estado=3 // 1 0 0 (0x10) fugiu para a direita estado=4 // 1 1 0 (0x18) fugiu para a direita estado=5 // FRENTE // *************************************************************** sbit enable_sensores = P1^2; //Placa de sensores de fita sbit clock_sensores = P1^0; sbit data_sensores = P1^1; bdata unsigned char Leitura_IV; unsigned char x,y,z; //************* Inicializacao do uC ****************************** void inic(void) { CKCON = 0x2f; // Clock dobrado, perifericos com 12 ciclos RCAP2H = 0xff; // T/C2 para gerar baud rate de 9600 bps RCAP2L = 0xbf; T2CON = 0x34; SCON = 0x52; // UART em modo 1 CMOD = 0; // PCA configuration CCON = 0x40; CCAPM1 = 0x42; // Configuração dos módulos para PWM CCAPM2 = 0x42; TMOD = 0x91; // T/Cs em modo de 16 bits, T/C1 GATE on (para sonar) TH0 = 0xf9; // T/C0 para gerar overflow em 1mS TL0 = 0x7E; IPL = 0x02; // Int do T/C0 com maior prioridade // IE = 0x82; // Enable da int do T/C0 // TR0 = 1; // T/C0 on } //************* Leitura dos detectores de fita ******************* unsigned char ler_IV(void) { unsigned char i, leitura; leitura=0; enable_sensores=0; for (i=1; i<8; i++) { leitura=leitura<<1; while(clock_sensores==1); if (data_sensores==1) leitura++; while(clock_sensores==0); } enable_sensores=1; return leitura; } //************* PROGRAMA PRINCIPAL ******************************* void main(void) { inic(); printf("*** Teste de Sensores de IV ***\n"); while(1) { Leitura_IV = ler_IV(); // Ler sensores Leitura_IV = Leitura_IV & 0x1C; x = 0x30; if((Leitura_IV & 0x10) == 0x10) x = 0x31; y = 0x30; if((Leitura_IV & 0x08) == 0x08) y = 0x31; z = 0x30; if((Leitura_IV & 0x04) == 0x04) z = 0x31; printf("\n\r%c %c %c",x, y, z); } }