Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Roteiro No 03
Fundao Universidade Federal de Rondnia, Ncleo de Cincia e Tecnologia, Departamento de Engenharia - DEE
Curso de Bacharelado em Engenharia Eltrica - Disciplina de Sistemas Microprocessados
Elaborao: Ivan S. de Oliveira - Reviso: Prof. M.Sc. Ciro Egoavil
Laboratrio de Sistemas Microprocessados
INICIALIZACAO_DISPLAY BCF RS
BCF RS MOVLW 0XCF
MOVLW 0x38 CALL ESCREVE
CALL ESCREVE BSF RS
MOVLW S
MOVLW .2 CALL ESCREVE
CALL DELAY_MS MOVLW i
CALL ESCREVE
MOVLW 0X38 MOVLW s
CALL ESCREVE CALL ESCREVE
MOVLW t
MOVLW 0X06 CALL ESCREVE
CALL ESCREVE MOVLW e
CALL ESCREVE
MOVLW 0x0C MOVLW m
CALL ESCREVE CALL ESCREVE
MOVLW a
MOVLW 0X01 CALL ESCREVE
CALL ESCREVE MOVLW s
CALL ESCREVE
MOVLW .1 MOVLW
CALL DELAY_MS CALL ESCREVE
MOVLW M
CALL ESCREVE
BCF RS MOVLW i
CALL ESCREVE desviada para o vetor de interrupes ORG 0x0004, onde
MOVLW c enviado o comando para o display deslocar a mensagem para
CALL ESCREVE a esquerda.
MOVLW r
CALL ESCREVE A Figura 1 apresenta a simulao deste programa no soft-
MOVLW o ware PROTEUS.
CALL ESCREVE
MOVLW p
CALL ESCREVE
MOVLW r
CALL ESCREVE
MOVLW o
CALL ESCREVE
MOVLW c
CALL ESCREVE
MOVLW e
CALL ESCREVE
MOVLW s
CALL ESCREVE
MOVLW s
CALL ESCREVE
MOVLW a
CALL ESCREVE
MOVLW d
CALL ESCREVE
MOVLW o
CALL ESCREVE
MOVLW s
CALL ESCREVE
BCF RS
BCF INTCON,T0IF
BSF INTCON,5
LOOP
GOTO LOOP
END
void Mensagem(void)
{
Lcd_Inst(0x92);
printf(lcd_dado, "ENGENHARIA ELETRICA");
Lcd_Inst(0xCF);
printf(lcd_dado, "Sistemas Microprocessados");
}
void Inicializa(void);
void Lcd_Inst(char dado); O cdigo iniciado com as instrues reproduzidas abaixo:
void Lcd_Dado(char dado); #include <16f877a.h>
void Mensagem(void); #fuses xt, nowdt, noprotect, put
#use delay(clock=4000000)
void main (void)
{ #define RS PIN_E0
Inicializa(); #define EN PIN_E1
Mensagem();
while(true);
} void Inicializa(void);
void Lcd_Inst(char dado);
void Inicializa(void) void Lcd_Dado(char dado);
{ void Mensagem(void);
Setup_ADC(ADC_OFF);
Set_Timer0(0);
Setup_Timer_0(RTCC_INTERNAL | RTCC_DIV_256); Neste trecho, realizado a incluso do ficheiro com as
Enable_Interrupts(INT_TIMER0);
caractersticas do PIC16F877A, microcontrolador utilizado no
Enable_Interrupts(GLOBAL);
Lcd_Inst(0x38); projeto. Posteriormente, os fusveis ou opes de gravao so
Delay_ms(2); ajustados da seguinte forma:
Lcd_Inst(0x38); Oscilador externo tipo cristal (xt);
Lcd_Inst(0x0C);
Lcd_Inst(0x06); Power-up timer (put) ligado;
Lcd_Inst(0x01); Cdigo de Proteo (noprotect) desligado;
Delay_ms(1); WatchDog Timer (nowdt) desligado;
}
Logo aps, definido a frequncia do clock e so definidos
#int_timer0 os bits de comando Enable como o bit 0 do PORTE e o RS o
void Ist_Timer0(void) bit "1"do PORTE. Em seguida so declaradas as funes que
sero utilizadas no corpo do programa. controle.
Assim como na programao em Assembly, a diretiva do
vetor reset ORG 0X0000 corresponde ao endereo de inicio VI. R ELATRIO
para a execuo do programa, na linguagem C, a funo main, Altere os programas, em Assembly e em C, mostrados
determina, tambm, o ponto inicial para a execuo.
anteriormente, para que apresente na primeira linha do display
void main (void) a frase "Sistemas Microprocessados"e na segunda linha os
{ nomes de todos os integrante do grupo. As frases devem se
Inicializa(); deslocar para a direita a cada 200 ms, sendo que o tempo de
Mensagem();
while(true); deslocamento deve ser determinado pelo estouro do Timer0.
} Elabore um relatrio apresentado ambos os cdigos e as
simulaes no PROTEUS. Relate as diferena entre as lin-
Na funo main so chamadas duas outras funes; a guagens no que diz respeito a facilidade em programar e
funo Inicializa() responsvel por realizar a configurao quantidade de memria ocupada no microcontrolador.
inicial do PIC e, tambm, do display e funo M ensagem()
responsvel por definir a mensagem que ser enviada ao R EFERNCIAS
display. Na funo main, o comando while(true) cria um [1] Souza, Vitor Amadeu, Projetando com os microcontroladores da famlia
lao que ser executado at que uma interrupo ocorra. PIC 18: Uma nova percepo, 1a Ed., So Paulo: Ensino Profissional,
2007.
Na funo Inicializa(), e desligada a converso AD [2] Souza, David Jos de, Desbravando o PIC: ampliado e atualizado para
(Setup ADC(ADC OFF)), determinado valor inicial do PIC 16F628A, 6a Ed., So Paulo: rica, 2003.
Timer0 (Set Timer0(0)) e, tambm, so habilitadas a inter- [3] Pereira, Fbio, Micrcontroladores PIC: Tcnicas Avanadas, 6a Ed., So
Paulo: rica, 2007.
rupo do T imer0 (Enable Interrupts(INT TIMER0)) e a in- [4] Apostila de Linguagem C para PIC16F877A com base no CCS - Cerne
terrupo global (Enable Interrupts(GLOBAL)). Tecnologia e Treinamento LTDA.
[5] Schildt, Herbert, C, Completo e Total, 3a Ed., So Paulo: Pearson
void Inicializa(void) Markron Books, 1997.
{
Setup_ADC(ADC_OFF);
Set_Timer0(0);
Setup_Timer_0(RTCC_INTERNAL | RTCC_DIV_256);
Enable_Interrupts(INT_TIMER0);
Enable_Interrupts(GLOBAL);
Lcd_Inst(0x38);
Delay_ms(2);
Lcd_Inst(0x38);
Lcd_Inst(0x0C);
Lcd_Inst(0x06);
Lcd_Inst(0x01);
Delay_ms(1);
}
A PNDICE
Tabela I
C OMANDOS PARA I NICIALIZAO DO D ISPLAY
LCD 16X2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linha 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
Linha 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
Tabela II
E NDEREOS DE C ARACTERES NO D ISPLAY.
Tabela III
P INAGEM DO M DULO LCD