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,,,,
},,,,