Vous êtes sur la page 1sur 5

Código implementado en lenguaje Assembler:

.include "m164pdef.inc"

.def temp=r16
.def dato=r17

.cseg
.org 0x00

inicio:
// inicializacion stack pointer
ldi temp, low(RAMEND)
out SPL, temp
ldi R16, high(RAMEND)
out SPH, temp
// configuracion puertos
// la linea de datos está en el puerto A
ldi temp, 0b1111_0000
out DDRA, temp
ldi temp, 0b0000_1111
out PORTA, temp
// las lineas RS, RW, E están en el puerto C
ldi temp, 0b0000_0111
out DDRC, temp
ldi temp, 0b1111_1000
out PORTC, temp
LCD_ini:
// inicialización de la LCD
cbi PORTC, 0
cbi PORTC, 1
ldi dato, 0x30
rcall retardo_15ms
rcall envio_dato_LCD
rcall retardo_5ms
rcall envio_dato_LCD
rcall retardo_100us
rcall envio_dato_LCD
ldi dato, 0x20
rcall retardo_100us
rcall envio_dato_LCD
ldi dato, 0x20
rcall retardo_100us
rcall envio_dato_LCD
ldi dato, 0x80
rcall envio_dato_LCD
ldi dato, 0x00
rcall envio_dato_LCD
ldi dato, 0x60
rcall envio_dato_LCD
ldi dato, 0x00
rcall envio_dato_LCD
ldi dato, 0xE0
rcall envio_dato_LCD
ldi dato, 0x00
rcall envio_dato_LCD
ldi dato, 0x10
rcall envio_dato_LCD
rcall retardo_5ms

envio_mensaje:
ldi dato, 0x00
rcall envio_dato_LCD
ldi dato, 0x20
rcall envio_dato_LCD

ldi zh,high(mensaje*2)
ldi zl,low(mensaje*2)
lazo:
lpm dato, z+
tst dato
breq mensaje2
rcall envio_char
rjmp lazo
mensaje2:
cbi PORTC, 0
ldi dato, 0xC0
rcall envio_dato_LCD
ldi dato, 0x00
rcall envio_dato_LCD

ldi zh,high(mensaje1*2)
ldi zl,low(mensaje1*2)
lazo1:
lpm dato, z+
tst dato
breq lazo2
rcall envio_char
rjmp lazo1
lazo2:
rjmp lazo2

envio_dato_LCD:
rcall retardo_40us
mov temp, dato
andi temp, 0b1111_0000
out PORTA, temp
sbi PORTC, 2
nop
cbi PORTC, 2
ret

envio_char:
sbi PORTC, 0
rcall envio_dato_LCD
swap dato
rcall envio_dato_LCD
ret

// retardos
retardo_15ms:
ldi r18, 167
ldi r19, 59
L1: dec r19
brne L1
dec r18
brne L1
ret
retardo_5ms:
ldi r18, 52
ldi r19, 242
L2: dec r19
brne L2
dec r18
brne L2
nop
ret
retardo_100us:
ldi r18, 2
ldi r19, 9
L3: dec r19
brne L3
dec r18
brne L3
ret
retardo_40us:
ldi r18, 107
L4: dec r18
brne L4
ret
mensaje:
.db " HOLA BRYAN",0
mensaje1:
.db " SAGNAY ",0,0

SIMULACIÓN REALIZADA:

LCD1
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
U1
1 40
PB0/XCK0/T0/PCINT8 PA0/ADC0/PCINT0
2 39
PB1/T1/CLKO/PCINT9 PA1/ADC1/PCINT1
3 38
PB2/AIN0/INT2/PCINT10 PA2/ADC2/PCINT2
4 37
PB3/AIN1/OC0A/PCINT11 PA3/ADC3/PCINT3
5 36
PB4/SS/OC0B/PCINT12 PA4/ADC4/PCINT4
6 35
PB5/MOSI/PCINT13 PA5/ADC5/PCINT5
7 34
PB6/MISO/PCINT14 PA6/ADC6/PCINT6
8 33
PB7/SCK/PCINT15 PA7/ADC7/PCINT7
14 22
PD0/RXD0/PCINT24 PC0/SCL/PCINT16
15 23
PD1/TXD0/PCINT25 PC1/SDA/PCINT17
16 24
PD2/INT0/RXD1/PCINT26 PC2/TCK/PCINT18
17 25
PD3/INT1/TXD1/PCINT27 PC3/TMS/PCINT19
18 26
PD4/OC1B/XCK1/PCINT28 PC4/TDO/PCINT20
19 27
PD5/OC1A/PCINT29 PC5/TDI/PCINT21
20 28
PD6/ICP/OC2B/PCINT30 PC6/TOSC1/PCINT22
21 29
PD7/OC2A/PCINT31 PC7/TOSC2/PCINT23
32 12
AREF XTAL1
30 13
AVCC XTAL2
9
RESET
ATMEGA164P
C1
1nF

Vous aimerez peut-être aussi