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

Programa 5 Pmr2310 - Microprocessadores

programa do quinto lab de microprocessadores

   EMBED


Share

Transcript

/********************************************/,,,, /* ANDR LUIZ ZIMMERMANN NUSP:5437692 */,,,, /* JULIANA COSTA DE OLIVEIRA NUSP:5432220 */,,,, /* */,,,, /* TURMA:04 PROF:JUN OKAMOTO */,,,, /* DATA: 09/05/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 CLEAN 0x01 // comando que limpa a mem ria e o contador do display #define CONFIG 0x3c // comando de configura o do modo do display #define CONFMODE 1 //modo de configura o (utilizado no flag de busy) #define CONTRMODE 0 //modo de controle (utilizado no flag de busy) #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 FIVE 5 //constante de valor 5 #define FLAG 0x80 // m scara usada na consulta do flag de busy #define INFDEFAULT 8 //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 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 LEVEL0 0x00 //n vel l gico 0 #define LEVEL1 0x04 //n vel l gico 1 #define LIMIT 100 // limite de contagem da fun o STOP na fun o INITLCD #define LIMITTWO 600 // 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 0x01 // constante de valor um #define SPDDEFAULT 100 //inicializa o da vari vel speed #define SUPDEFAULT 16 //inicializa o do limite superior #define TEN 0x10 // constante de valor dez #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 width; //vari vel global - largura do pulso /**************************************/ /* 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,LEVEL1);//n vel l gico 1 (produ o do pulso) - bit 2 for(i=ZERO;i=ONE){,,,, position--;//decremento da vari vel que armazena a posi o do servo motor,,,, width--;//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);//tratamento do debounce,,,, ,,,, 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&ONE)!=ZERO)&&(supLimit>infLimit)){,,,, supLimit--;//decremento do limite superior,,,, width=supLimit;//atualiza o da largura do PWM,,,, position=TEN;//servo se movimenta para a posi o 10,,,, },,,, if((keys&KEY4)!=ZERO){,,,, supLimit++;//incremento do limite superior do PWM,,,, width=supLimit;,,,, position=TEN;,,,, } ,,,, if(((keys&KEY1)!=ZERO)&&(infLimit>ZERO)){,,,, infLimit--;//decremento do limite inferior do PWM,,,, width=infLimit;//atualiza o da largura do PWM,,,, position=ZERO;//servo se movimenta para a posi o 0,,,, } ,,,, 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=CONTRMODE;//caso a chave 7 tenha sido pressionada retorna ao modo de opera o anterior ,,,, },,,, },,,, disable();//desabilita as interrup es,,,, },,,,