Preview only show first 10 pages with watermark. For full document please download

Programa 6 Pmr2310 - Microprocessadores

programa do sexto lab de microprocessadores

   EMBED


Share

Transcript

/********************************************/,,,, /* ANDR LUIZ ZIMMERMANN NUSP:5437692 */,,,, /* JULIANA COSTA DE OLIVEIRA NUSP:5432220 */,,,, /* */,,,, /* TURMA:04 PROF:JUN OKAMOTO */,,,, /* DATA: 13/06/07 */,,,, /********************************************/,,,, ,,,, "#include ""\mc85\8085io.h #include ""\mc85\8085int.h",,,, ,,,, "#define ADD 0xe // base dos endere os usados do display ""ADDress #define ADD82C55 0xc3 // endere o para carregar a palavra de controle do 82C55 #define ADDPULSE 0xc2 // endere o para ""carregar o n vel l gico"" do bit 2 - produzir PWM #define BUSY 1 // constante que indica que o display est ocupado #define COHERENT 7 // flag para movimento cont nuo e concordante dos motores #define CONFIG 0x3c // comando de configura o do modo do display #define CONFMODE 1 // modo de configura o (utilizado no flag ) #define CONTRMODE 0 // modo de controle (utilizado no flag ) #define CLEAN 0x01 // comando que limpa a mem ria e o contador do display #define CW 0xc7 // endere o de envio da palavra de controle dos timers #define CW0 0x36 // programa o timer 0 para o modo 3, contagem bin ria #define CW1 0x74 // programa o timer 1 para o modo 2, contagem bin ria #define CWPI 0x90 // programa o 82C55 para operar no modo 0 com as portas B e C output e a input #define DEZ 10 // constante de valor dez #define FIVE 5 // constante de valor 5 #define FLAG 0x80 // m scara usada na consulta do flag de busy #define IMPROVE 0x06 // comando de incremento do contador do display #define INFDEFAULT 1 // inicializa o do limite inferior #define KEYS 0xe8 // constante que armazena o endere o das chaves #define KEY0 0x01 // m scara para a leitura da chave 0 #define KEY1 0x02 // m scara para a leitura da chave 1 #define KEY2 0x04 // mascara para a leitura da chave 2 #define KEY3 0x08 // mascara para a leitura da chave 3 #define KEY4 0x10 // m scara para a leitura da chave 4 #define KEY5 0x20 // m scara para a leitura da chave 5 #define KEY6 0x40 // m scara para a leitura da chave 6 #define KEY7 0x80 // m scara para a leitura da chave 7 #define LEDS 0xe4 // constante que armazena o endere eo dos LEDS #define LEVELUP1 0x04 // eleva o n vel l gico da sa da para o servo 1 #define LEVELUP2 0x08 // eleva o n vel l gico da sa da para o servo 2 #define LEVELDOWN 0x00 // muda o n vel l gico da sa da dos servos para 0 #define LIMIT 100 // limite de contagem da fun o STOP na fun o INITLCD #define LIMITTWO 350 // limite de contagem da fun o STOP #define LINEONE 0x80 // endere o da primeira linha do display #define LINETWO 0xc0 // endere o da segunda linha do display #define LSBT0 0x14 // programa o byte menos significativo de contagem do timer 0 #define LSBT1 0x00 // programa o byte menos significativo de contagem do timer 1 #define MASK 0x01 // m scara utilizada para leitura das teclas (no main) #define MAX 17 // tamanho do vetor ""s"" que armazena os strings #define MIDDLE 10 // inicializa o da largura do pulso #define MSBT0 0x00 // programa o byte mais significativo de contagem do timer 0 #define MSBT1 0x0c // programa o byte mais significativo de contagem do timer 1 #define NINE 9 // constante de valor 9 #define OFF 0x88 // comando para desligar o programa #define ONDISP 0x0f // comando para ligar o display #define ONE 1 // constante de valor um #define OPPOSITE 8 // flag para movimento cont nuo e discordante dos motores #define POSIMODE 3 // modo de posicionamento (utilizado no flag ) #define RESET 0x10 // comando que zera o cron metro #define SIX 6 // constante de valor 6 #define SIXTY 60 // constante de valor 60 #define START 0x01 // comando que inicia a contagem do cron metro #define STOP 0x01 // comando que interrompe a contagem do cron metro #define SPDDEFAULT 300 // inicializa o da velocidade #define SUPDEFAULT 16 // inicializa o do limite superior #define TEN 0x10 // constante de valor 16 #define TIMER0 0xc4 // endere o do timer 0 #define TIMER1 0xc5 // endere o do timer 1 #define TWO 0x02 // constante de valor dois #define ZERO 0x00 // constante de valor zero int width1; //vari vel global - largura do pulso para o primeiro servo int width2; //vari vel global - largura do pulso para o segundo servo /**************************************/ /* Fun o STOP: pausa temporariamente */ /* a execu o de comandos inserindo */ /* um loop vazio no programa. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /**************************************/ void stop (int limit){ int i; for(i=ZERO;i<=limit;i++); } /***************************************************************************/ /* Fun o CONFIGTIMER: configura o circuito integrado 82C54 programando */ /* o timer0 para o modo 3 e contagem bin ria com constante de valor 100d e */ /* o timer1 para o modo 2 e contagem bin ria com constante de valor 3072d. */ /* gerando pulsos peri dicos com freq encia de 10Hz usados na interrup o */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:12/04/2007 */ /***************************************************************************/ void configTimer (){ out(CW,CW0); out(TIMER0,LSBT0); out(TIMER0,MSBT0); out(CW,CW1); out(TIMER1,LSBT1); out(TIMER1,MSBT1); } /***************************************************************************/ /* Fun o CONFIG82C55: configura o 82C55 no modo 0 sendo que a porta A */ /* esta configurada para operar como input e as portas B e C como output */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:10/05/2007 */ /***************************************************************************/ void config82C55 (){ out(ADD82C55,CWPI); } /************************************************************************************/ /* Fun o MAKEPULSE: gera interrup es no processador com freq encia predeterminada */ /* pelo timer e executa uma rotina de interrup o que incrementa o contador global. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:11/04/2007 */ /************************************************************************************/ INTERRUPT (32820) makePulse (){ int i; out(ADDPULSE,LEVELUP1); for(i=ZERO;iZERO)){,,,, position1--;//decremento da vari vel que armazena a posi o do servo motor,,,, width1--;//decremento da largura de pulso,,,, stop(speed);,,,, },,,, ,,,, if((keys&KEY7)!=ZERO)//caso a chave 7 tenha sido pressionada o pr ximo modo de opera o ativado,,,, flag=CONFMODE;,,,, },,,, ,,,, while(flag==CONFMODE){//modo de configura o do servo motor,,,, keys=in(KEYS);//leitura de chaves,,,, stop(LIMITTWO);,,,, ,,,, sprintf(s,"Configuracao "");//tela inicial do LCD para o respectivo modo de opera o setCursorLCD(ADD, ONE, ONE); putStrLCD(ADD,s); //mostra a velocidade, o limite inferior do PWM e o limite superior do PMW para os quais o servo est operando sprintf(s,""v:%04d i:%02d s:%02d",speed, infLimit, supLimit); setCursorLCD(ADD, TWO, ONE);,, putStrLCD(ADD,s);,,, ,,,, if(((keys&KEY0)!=ZERO)&&(supLimit>infLimit)){,,,, supLimit--;//decremento do limite superior,,,, width1=supLimit;//atualiza o da largura do PWM,,,, width2=supLimit;,,,, position1=DEZ;//servo se movimenta para a posi o 10,,,, position2=DEZ;,,,, },,,, if((keys&KEY4)!=ZERO){,,,, supLimit++;//incremento do limite superior do PWM,,,, width1=supLimit;,,,, width2=supLimit;,,,, position1=DEZ;,,,, position2=DEZ;,,,, },,,, if(((keys&KEY1)!=ZERO)&&(infLimit>ZERO)){,,,, infLimit--;//decremento do limite inferior do PWM,,,, width1=infLimit;//atualiza o da largura do PWM,,,, width2=infLimit;,,,, position1=ZERO;//servo se movimenta para a posi o 0,,,, position2=ZERO;,,,, },,,, if(((keys&KEY5)!=ZERO)&&(infLimitZERO)),,,, speed--;//decremento da velocidade do servo(tempo de resposta),,,, ,,,, if((keys&KEY6)!=ZERO),,,, speed++;//incremento da velocidade do servo(tempo de resposta),,,, ,,,, if((keys&KEY7)!=ZERO),,,, flag=POSIMODE;//caso a chave 7 tenha sido pressionada o pr ximo modo de opera o ativado,,,, },,,, while(flag==POSIMODE){//modo de posicionamento dos motores,,,, keys=in(KEYS);//leitura de chaves,,,, stop(LIMITTWO);,,,, ,,,, sprintf(s,"Posicionamento "");//tela inicial do LCD para o respectivo modo de opera o setCursorLCD(ADD, ONE, ONE); putStrLCD(ADD,s); //mostra a posi o de cada um dos motores sprintf(s,"" x:%02d y:%02d", position2, position1);, setCursorLCD(ADD, TWO, ONE);,, putStrLCD(ADD,s);,,, ,,,, if(((keys&KEY0)!=ZERO)&&(position1>ZERO)){//decrementa a posi o do motor 1,,,, position1--;,,,, temp1--;//guarda temporariamente a nova largura do PWM do motor 1,,,, },,,, if(((keys&KEY4)!=ZERO)&&(position1ZERO)){//decrementa a posi o do motor 2,,,, position2--;,,,, temp2--;//guarda temporariamente a nova largura do PWM do motor 2,,,, },,,, if(((keys&KEY5)!=ZERO)&&(position2infLimit){//deslocamento decremental simult neo dos motores,,,, width1--;,,,, width2--;,,,, stop(speed);,,,, },,,, ,,,, if((keys&KEY2)!=ZERO)// chaveia para modo de movimento contr rio,,,, flag2=OPPOSITE;,,,, ,,,, if((keys&KEY3)!=ZERO)// p ra o movimento dos motores,,,, flag2=ZERO;,,,, ,,,, if((keys&KEY6)!=ZERO){// chaveia para modo de posicionamento,,,, flag2=ZERO;,,,, keys=KEY6;,,,, },,,, ,,,, if((keys&KEY7)!=ZERO){// chaveia para modo de controle,,,, flag=CONTRMODE;,,,, flag2=ZERO;,,,, keys=KEY6;,,,, },,,, },,,, ,,,, while(((keys&KEY3)==ZERO)&&(flag2==OPPOSITE)){//movimento cont nuo divergente,,,, keys=in(KEYS);//leitura de chaves,,,, stop(LIMITTWO);,,,, ,,,, //configura o para que os motores se movimentem em sentido contr rio,,,, width1=infLimit;,,,, width2=supLimit;,,,, stop(speed);//tempo necess rio para o posicionamento do motor,,,, ,,,, while(width1infLimit){//deslocamento reverso sincronizado dos motores,,,, width1--;,,,, width2++;,,,, stop(speed);,,,, },,,, ,,,, if((keys&KEY2)!=ZERO)// chaveia para modo de movimento contr rio,,,, flag2=COHERENT;,,,, ,,,, if((keys&KEY3)!=ZERO)// p ra o movimento dos motores,,,, flag2=ZERO;,,,, ,,,, if((keys&KEY6)!=ZERO){// chaveia para modo de posicionamento,,,, flag2=ZERO;,,,, keys=KEY6;,,,, },,,, ,,,, if((keys&KEY7)!=ZERO){// chaveia para modo de controle,,,, flag=CONTRMODE;,,,, flag2=ZERO;,,,, keys=KEY6;,,,, },,,, },,,, },,,, },,,, },,,, },,,, disable();,,,, },,,,