Vous êtes sur la page 1sur 3

INIT_LCD: ; Rotina de inicializaao do LCD

CLR RS ;Indica que Instruo est sendo enviada ao Driver do LCD

;Funciont Set (High Nibble)

CLR DB7

CLR DB6

SETB DB5 ; Marcador da instruo "Function Set"

CLR DB4 ;Modo de 4-bit - Padro do EdSim51

SETB EN ;Seta Function set com borda de descida(ainda est lendo como modo de 8 bits)

CLR EN

ACALL DELAY_LCD ; Rotina de Atraso no LCD

SETB EN ; Seta novamente o High nibble do function set, mas agora no modo de 4 bits

CLR EN

SETB DB7 ; Seta o Low nibble, escolhendo modo de 2 Linhas

SETB EN ; Borda -negativa no Enable (Habilita envio do low nibble)

CLR EN

ACALL DELAY_LCD ; Rotina de Atraso no LCD

;Configurar Entry-mode

CLR RS; Enviando Instruo

CLR DB7 ;High nibble da instruo Entry-mode

CLR DB6

CLR DB5

CLR DB4

SETB EN ; Borda -negativa no Enable (Habilita envio do High nibble)

CLR EN

;Low-nibble no Entry-mode

SETB DB6 ; Marcador de Instruo

SETB DB5 ;Incrementa o cursor a cada caractere

SETB EN ; Borda -negativa no Enable (Habilita envio do low nibble)

CLR EN

ACALL DELAY_LCD ; Rotina de Atraso no LCD

;Ligar LCD

CLR RS ;Enviando Instruo

CLR DB7 ;High nibble do da instruo display on/off

CLR DB6

CLR DB5

CLR DB4

SETB EN ; Borda -negativa no Enable (Habilita envio do low nibble)

CLR EN
SETB DB7;Marcador

SETB DB6 ;Liga Display

SETB DB5 ; Liga Cursor

CLR DB4 ;Cursor NO Piscando

SETB EN ; Borda -negativa no Enable (Habilita envio do low nibble)

CLR EN

ACALL DELAY_LCD ; Rotina de Atraso no LCD

RET

WRITE_MESSAGE: ;Rotina de escrita no LCD

MOV A,#00H ; Limpa ACC

MOVC A,@A+DPTR ; Move byte de uma dada tabela para o ACC

ACALL DELAY_LCD ; Rotina de Atraso no LCD

SETB RS ;Enviando Dado

MOV C, ACC.7

MOV DB7, C

MOV C, ACC.6

MOV DB6, C

MOV C, ACC.5

MOV DB5, C

MOV C, ACC.4

MOV DB4, C ; | Envia high nibble

SETB EN ;|

CLR EN ; | Borda-negativa para setar enable

MOV C, ACC.3

MOV DB7, C

MOV C, ACC.2

MOV DB6, C

MOV C, ACC.1

MOV DB5, C

MOV C, ACC.0

MOV DB4, C ; | Envia Low nibble

SETB EN ;|

CLR EN ; | Borda-negativa para setar enable

ACALL DELAY_LCD ;Atraso LCD

INC DPTR ;Incrementa DPTR

JNZ WRITE_MESSAGE ;Escreve os caracteres at que encontre o marcador de final de mensagem'0'

RET ; Retorna

;Fcristal = 11,0581 MHZ --> Fcristal/12= 0,916MHz --> Tcristal =1,085us

;Periodo desejado= 2s. Assumindo Duty-cycle = 50%, implica que devemos ter um atraso de 1s=10000us.

;Numero de ciclos: 1000000us/1,085 us =921659 , que um valor muito grande e sugere que deveremos utilizar um loop para o timer

;Em 50ms obtemos 46080 ciclos. Assim, com 921659/46080 = 20 tem-se que precisaremos

;de 20 iteraes no Loop,onde cada iterao realizar um atraso de 50ms, totalizando ao final
; do loop 1s de atraso

;65535-46080=19455=4BFF --> Este valor ser o Valor Inicial do Timer

INICIO:

MOV TMOD,#00000001B ;TIMER 0 MODO1

DELAY: MOV CONTADOR,#20 ;Seta o contador para 20 iteraes

SETB EA ; Habilita Interrupcao

SEQ_TIMER : CLR TR0 ; Timer parado

CLR TF0; Limpa a Flag do Timer

MOV TH0,#4BH ;Carrega Valor Inicial

MOV TL0,#0FFH; Carrega Valor Inicial

CLR P1.0; Ativa Led 0

SETB TR0 ; Inicia o Timer

JNB TF0,$ ; Monitora o Flag do Timer, permanecendo neste loop infinito at

; que seja 1, indicando que a contagem foi atingida

DJNZ CONTADOR, SEQ_TIMER ; decrementa o contador e reinicia o timer

SETB P1.0 ; Apara o Led

Vous aimerez peut-être aussi