Ja używam procka AT89C4051, w związku z czym linię scl muszę taktować ,,ręcznie”. A to jest mój program:
.device AT89C4051, Polski
.cseg 0000h
RS: .equ p3.3
RW: .equ p3.2
e: .equ p3.7
scl: .equ p3.1
sda: .equ p3.4
clr rs ;
clr rw ;
clr e ;
mov p1,#00111000b ;inicjalizacja wyświetlacza
lcall imp ;
mov p1,#00001100b ;
lcall imp ;
setb rs ;
clr 0 ;
main:
mov a, #10100000b
lcall zapis
mov a,#0 ;pierwszy bit adresowy
lcall zapis
mov a, #0 ;drugi bit adresowy
lcall zapis
mov a,#42h ;
lcall zapis ;
mov a,#43h ;
lcall zapis ;;
mov a,#44h ;
lcall zapis ;
mov a,#45h ;
lcall zapis ;
mov a,#46h ;
lcall zapis ; ,,zapisywane dane"
mov a,#47h ;
lcall zapis ;
mov a,#48h ;
lcall zapis ;
mov a,#49h ;
lcall zapis ;
mov p1,#41h ;
lcall imp
lcall stop
czekaj:
djnz 70, czekaj
djnz 71,czekaj
clr 0
mov a, #10100000b
lcall zapis
mov a,#0
lcall zapis
mov a, #0
lcall zapis
clr 0
mov a, #10100001b
lcall zapis
mov 48, #16 ;ilość odczytanych komórek
chciałbym:
lcall odczyt
mov p1,acc ;(p1 to port komunikacji z wyświetlaczem)
lcall imp
djnz 48, chciałbym
mov p1,#41h
lcall imp
lcall stop
sjmp $
zapis:
jb 0, pomiń_start
setb 0
clr sda
lcall wait
clr scl
pomiń_start:
mov 50,#8
clr scl
again:
rlc a
mov sda,c
lcall sccl
djnz 50, again
setb sda
lcall wait
setb scl
lcall wait
jb sda, error
ret
error:
mov p1,#45h ;wyświetlany znak, gdyby nie było ack
lcall imp
ret
stop:
clr scl
lcall wait
clr sda
lcall wait
setb scl
lcall wait
setb sda
ret
odczyt:
setb sda
mov 50,#9
cykl:
rlc a
lcall sscl
mov c, sda
djnz 50, cykl
clr sda
lcall sscl
ret
sscl:
clr scl
lcall wait
setb scl
lcall wait
ret
sccl:
setb scl
lcall wait
clr scl
lcall wait
ret
wait:
nop
nop
nop
nop
nop
ret
imp:
setb e
djnz 70, imp
djnz 71, imp ;impuls e na wyświetlacz
clr e
ret
Jest to najnowsza wersja (niedziałająca). Jeszcze nie testowałem programu przesłanego przez uczestnika forum. zrobię to jutro, po czym obiecuję zdać relacje

Dziękuję za pomoc