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

Programa 4 Pmr2310 - Microprocessadores

programa do quarto lab de microprocessadores

   EMBED


Share

Transcript

/********************************************/ /* ANDR LUIZ ZIMMERMANN NUSP:5437692 */ /* JULIANA COSTA DE OLIVEIRA NUSP:5432220 */ /* */ /* TURMA:04 PROF:JUN OKAMOTO */ /* DATA: 26/04/07 */ /********************************************/ "#include ""\mc85\8085io.h #include ""\mc85\8085int.h" "#define ADD 0xe // base dos endere os usados do display ""ADDress #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 FLAG 0x80 // m scara usada na consulta do flag de busy #define FORWARD 0x01 // tecla 0 - incremnto da vari vel que armazena o caracter #define KEYS 0xe8 // constante que armazena o endere o das chaves #define LIMIT 100 // limite de contagem da fun o STOP na fun o INITLCD #define LIMITTWO 2000 // 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 0x64 // programa o byte menos significativo de contagem do timer 0 #define LSBT1 0x00 // programa o byte menos significativo de contagem do timer 1 #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 NULL -1 // indica n o recebimento de caracter pelo canal serial #define OFF 0x08 // comando para desligar o programa #define ONDISP 0x0f // comando para ligar o display #define ONE 0x01 // constante de valor um #define REWARD 0x02 // tecla 1 - decremento da vari vel que armazena o caracter #define SEND 0x04 // tecla 2 - envio de caracter pelo canal serial #define TEN 0x10 // constante de valor dez #define TWO 0x02 // constante de valor dois #define ZERO 0x00 // constante de valor zero /**************************************/ /* 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 GETSTATUS: verifica o status do */ /* flag de busy do display, retornando */ /* 1 se ele est ocupado e 0 se est livre*/ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /******************************************/ int getStatusLCD (int e){ int flag; flag=in(e*TEN+ONE); //a vari vel ""flag"" recebe a leitura do endere o n1h if((flag&FLAG)==ZERO) // condicional usando a m scara para o flag flag=ZERO; else flag=BUSY; return (flag); } /**************************************/ /* Fun o WAIT: pausa temporariamente */ /* a execu o de comandos inserindo */ /* um loop que cessa apenas quando o */ /* display est desocupado (flag=0). */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /**************************************/ void wait (){ int flag; flag=getStatusLCD(ADD); while(flag!=ZERO) flag=getStatusLCD (ADD); } /****************************************************************/ /* Fun o INITLCD: inicializa o display limpando a mem ria e */ /* o contador interno, configurando-o para opera o com 8 bits, */ /* 2 linhas, matriz 5x10 al m de configurar o contador para */ /* incrementar a cada passagem e por fim aciona o display. */ /* aqui a fun o STOP usada em alternativa fun o WAIT, */ /* uma vez que at este ponto o flag de busy do display pode */ /* n o funcionar corretamente. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /****************************************************************/ void initLCD (int e){ int address; address=TEN*e; // composi o interna do endere o de sa da stop(LIMIT); // comandos de configura o do display out(address,CONFIG); stop(LIMIT); out(address,CLEAN); stop(LIMIT); out(address,IMPROVE); stop(LIMIT); out(address,ONDISP); stop(LIMIT); } /***********************************************/ /* Fun o SETCURSOR: recebe a base de endere o */ /* do display, as coordenadas de onde o cursor */ /* dever ser colocado e posiciona o cursor */ /* nestas coordenadas. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /***********************************************/ void setCursorLCD (int e, int l, int c){ int cursor; if(l==ONE) // posiciona o cursor na linha um se l==1 cursor=LINEONE+c-ONE; else // posiciona o cursor na linha dois se l==2 cursor=LINETWO+c-ONE; if(getStatusLCD(e)==BUSY) // verifica se o display est livre wait(); out(e*TEN, cursor); } /***********************************************/ /* Fun o PUTCHRLCD: recebe a base de endere o */ /* do display, um caracter ""c"" e o coloca na */ /* posi o atual do display. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /***********************************************/ void putChrLCD (int e, char c){ if(getStatusLCD(e)==BUSY) // verifica se o display est livre wait(); out(TEN*e+TWO,c); // coloca o caracter no display } /***********************************************************/ /* Fun o PUTSTRLCD: recebe a base de endere o do display, */ /* um vetor ""s"" e o coloca no display chamando */ /* sucessivamente a fun o PUTCHRLCD. */ /* */ /* AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:03/04/2007 */ /***********************************************************/ void putStrLCD (int e, char *s){ int i; for(i=ZERO; s[i]!=ZERO; i++){ putChrLCD(e, s[i]); } } /***************************************************************/ /* Fun o MAIN: esta fun o envia e recebe caracteres ASCII */ /* atrav s do canal serial e apresenta os mesmos no display */ /* de LCD. */ /* */ /*AUTORES: ANDR LUIZ ZIMMERMANN */ /* JULIANA COSTA DE OLIVEIRA */ /* */ /* DATA:26/04/2007 */ /***************************************************************/ main(){ int keys;//vari vel de leitura de chaves char atual;//vari vel que armazena o caracter que ser enviado int cursor1;//vari vel para posicionamento do cursor(1a. linha) int cursor2;//vari vel para posicionamento do cursor(2a. linha) int received;//vari vel que armazena caracter recebido pelo canal serial //inicializa o das vari veis keys=ZERO; atual='0';//inicializa o: caracter a ser vizualizado no display cursor1=ONE; cursor2=ONE; initLCD(ADD);//configurando o display de LCD setCursorLCD(ADD, TWO, ONE);//posicionamento do cursor de LCD putChrLCD(ADD,atual);// apresentado o caracter armazenado em ""atual"" no display setCursorLCD(ADD, TWO, ONE);/* reposicionamento do cursor na posi o anterior - esta estrutura intercalada da fun o putChrLCD com a setCursorLCD ser adota para que o cursor seja incrementado apenas quando o caracter vizualizado no display for realmente enviado*/ while(keys!=OFF){// loop externo que mant m o programa rodando at que a tecla 7 seja pressionada keys=in(KEYS);// leitura das chaves stop(LIMITTWO);//tratamento do debounce /* bloco respons vel pelo incremento da vari vel que armazena os caracteres a serem visualizados no display*/ if(keys==FORWARD){ if((atual!='9')&&(atual!='Z')) atual=(atual+ONE); if(atual=='9') atual='A'; if(atual=='Z') atual='0'; setCursorLCD(ADD, TWO, cursor2); putChrLCD(ADD,atual); setCursorLCD(ADD, TWO, cursor2); } /* bloco respons vel pelo decremento da vari vel que armazena os caracteres a serem visualizados no display*/ if(keys==REWARD){ if((atual!='0')&&(atual!='A')) atual=(atual-ONE); if(atual=='0') atual='Z'; if(atual=='Z') atual='9'; setCursorLCD(ADD, TWO, cursor2); putChrLCD(ADD,atual); setCursorLCD(ADD, TWO, cursor2); } /* se a tecla 2 for pressionada, o caracter que est sendo visualizado no display ser enviado pelo canal serial*/ if(keys==SEND){ putchr(atual);//fun o que envia caracter pelo canal serial putChrLCD(ADD,atual); cursor2++; } received=chkchr();//fun o que verifica o recebimento de caracteres pelo canal serial if(received!=(NULL)){//se a fun o retorna -1 significa que um caracter n o foi recebido setCursorLCD(ADD, ONE, cursor1); putChrLCD(ADD,atual); cursor1++;// o cursor incrementado } } } "