Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Инициализация ЖК-дисплея на ассемблере в Proteus(AVR Studio)

Денис Волков Знаток (332), открыт 3 недели назад
Должен гореть курсор, но горит мой пукан, ведь я в упор не вижу, где я про(е)считался. может у вас получится понять?(на барометр не обращайте внимания, мне до него, как до китая раком)код на ассемблере
.include "m168def.inc"
.macro uout
.if @0 < 0x40
out @0, @1
.else
sts @0, @1
.endif
.endm

.macro uin
.if @1 < 0x40
in @0, @1
.else
lds @0, @1
.endif
.endm

.set RS = 1
.set E = 0
.set RW = 7
.set D4 = 2
.set D5 = 3
.set D6 = 4
.set D7 = 5
.def temp = r16
.def col = r17
.def del1 = r18
.def del2 = r19

.cseg

.org 0
rjmp reset
.org 2
reti
.org 68
reti
reset:
ldi temp, high(ramend)
uout sph, temp
ldi temp, low(ramend)
uout spl, temp

ldi temp, 0x0F
uout ddrd, temp
ldi temp, (1<<E)
uout ddrd, temp
ldi temp, (1<<RS)|(1<<RW)
uout ddrd, temp

rcall del_5ms
rcall del_5ms
rcall del_5ms
rcall del_5ms

ldi temp, 0b00110000
swap temp
rcall send_com
rcall del_5ms

ldi temp, 0b00100000
swap temp
rcall send_com
rcall del_5ms

ldi temp, 0b00101100
rcall com_out
rcall del_5ms

ldi temp, 0b00000001
rcall com_out
rcall del_5ms

ldi temp, 0b00000110
rcall com_out

ldi temp, 0b00001111
rcall com_out

main:
rjmp main

com_out:
push temp
swap temp
andi temp, (1<<D7|1<<D6|1<<D5|1<<D4)
rcall send_com
pop temp
andi temp, (1<<D7|1<<D6|1<<D5|1<<D4)
rcall send_com
rcall del_50us
ret

send_com:
cbi portd, RS
sbi portd, E
uout portd, temp
ldi temp, 3
loop:
dec temp
brne loop
nop
cbi portd, E
ret

del_50us:
ldi temp, 134
mov del1, temp
loop_2:
dec del1
brne loop_2
nop
ret

del_5ms:
ldi temp, 244
mov del1, temp
ldi temp, 52
mov del2, temp
loop_3:
dec del1
brne loop_3
dec del2
brne loop_3
nop
ret
0 ответов
Похожие вопросы