Baixe o app para aproveitar ainda mais
Prévia do material em texto
//Modo de utilização do Timer: //Modo 1 como Contador //Diretivas de pré-processamento #include <REGX51.H> #define ACLEDS P1_4 #define ON 1 #define OFF 0 //protótipos de função void aciona_leds(void); //------------------------------------------------------- // função principal void main() { // inicialização da P2 P2=0; /*Objetivo: contador de pulsos externos. A partir do sinal de um sensor externo, conto pulsos, que poderiam ser, por exemplo, peças que passam transportadas uma esteira. O sinal de contagem externo é proveniente do pino T0 para o Timer 0 e T1 para o Timer 1 no Kit 8051, existe uma chave conectada ao pino T1 (ver esquemático) */ //Modo 1: T/~C de 16 bits: conta até 2^16 = 65535 //em decimal ou 0FFFFh em hexadecimal //Primeira coisa a ser feita: inicializar o Timer... vou //usar o Tmer 1 (poderia ser o 0) TMOD = 0x050; //01010000b ->Timer 1, no modo //contador //o valor de inicialização foi 01010000b que é //equivalente a: 80 em decimal ou 050h em hexa //qualquer um deles pode ser utilizado do { TH1 = 0x0FF; //inicializei o módulo de //contagem (ponto de //início) TL1 = 0x0F0; //vai contar de FFF0 até //FFFF, ou seja, 15 vezes TR1 = ON; //ligo o Timer 1 while (TF1==0); //fico parado aqi até o final //da contagem //Como o bit C/~T do TMOD é 1, a //contagem é externa, feita através do //pino T1 -> Ver esquema TR1 = OFF; //paro o Timer TF1= OFF; //desligo o Flag TF1 P2++; //incremento a P2 aciona_leds(); //aciono o Latchdos Leds //conectados à P2 (ver //esquema) } while(1); //retorno ao início } //---------------------------------------------------------- //Subrotina de acionamento do Latch dos Leds void aciona_leds() { ACLEDS = OFF; //"Zero" o pino ACLEDS = ON; //Aciono o pino ACLEDS = ON; //"Zero" o pino } //pulos gerados, retorna //Modo de utilização do Timer: //Timer 0: temporizador modo 2; //Diretivas de pré-processamento #include <REGX51.H> #define ACLEDS P1_4 #define ON 1 #define OFF 0 //protótipos de função void aciona_leds(void); //------------------------------------------------------- // função principal void main() { //decalaração de variáveis unsigned int var1; // inicialização da P2 P2=0; /*Objetivo: programação do timer 0 como temporizador de oito bits com recarga automática */ //Modo2: T/~C de 8 bits: conta até 2^8 //= 255 em decimal ou 0FFh em hexadecimal //Primeira coisa a ser feita: inicializar o Timer... //vou usar o Timer 0 (poderia ser //o 1) TMOD = 0x02; //00000010b ->Timer 0, no //modo temporizador com recarga //automática do { var1 = 10000; do { TR0 = ON; //ligo o Timer 0 while (TF0==0); TR0 = OFF; //paro o Timer 1 TF0= OFF;//desligo o Flag TF1 var1--; }while (var1 > 0); P2 ++; //incremento a P2 aciona_leds(); //aciono o Latchdos Leds //conectados à P2 (ver esquema) } while(1); //retorno ao início } //---------------------------------------------------------- //Subrotina de acionamento do Latch dos Leds void aciona_leds() { ACLEDS = OFF; //"Zero" o pino ACLEDS = ON; //Aciono o pino ACLEDS = ON; //"Zero" o pino } //pulos gerado, retorno //Modo de utilização do Timer: //Modo 1 como Temporizador acionado por pino externo //Diretivas de pré-processamento #include <REGX51.H> #define ACLEDS P1_4 #define ON 1 #define OFF 0 //protótipos de função void aciona_leds(void); //------------------------------------------------------- // função principal void main() { //declaração de variável unsigned char x; // inicialização da P2 P2=0; /*Objetivo: temporizador acionado externamente. A partir do sinal de um sensor externo, realizo temporização interna. Poderia ser aplicado para medir intervalos de tempo de eventos externos. o Acionamento do temporizador é feito pelo pino INT0 para o timer 0 e INT 1 para o timer 1 no Kit 8051, existe uma chave conectada ao pino INT1 (ver esquemático) */ //Modo 1: T/~C de 16 bits: conta até 2^16 = //65535 em decimal ou 0FFFFh em hexadecimal //Primeira coisa a ser feita: inicializar o Timer... //vou usar o Timer 1 (poderia ser o 0) TMOD = 144; //Timer 1, no modo contador /*o valor de inicialização foi 10010000b que é equivalente a: 144 em decimal ou 090h em hexa qualquer um deles pode ser utilizado */ do { x=2; do { TH1 = 0;//inicializei o módulo de //contagem (ponto de início) TL1 = 0; //vai contar de 0 até FFFF, ou //seja, 65535 vezes TR1= ON;//ligo o Timer 1 while (TF1 == 0);//fico parado aqi até o //final da contagem //como o bit GATE do TMOD é 1, o //acionamento do timer é ;feito pelo bit //TR e pelo INT1 TR1 = OFF; //paro o Timer 1 TF1= OFF; //desligo o Flag TF1 x--; } while (x>0); P2 ++; //incremento a P2 aciona_leds(); //aciono o Latchdos Leds //conectados à P2 (ver esquema) } while(1); //retorno ao início } //---------------------------------------------------------- //Subrotina de acionamento do Latch dos Leds void aciona_leds() { ACLEDS = OFF; //"Zero" o pino ACLEDS = ON; //Aciono o pino ACLEDS = ON; //"Zero" o pino } //pulos gerado, retorno
Compartilhar