Среду виртуализации - NI Multisim 11.1
PIC 16F84A виртуальный и 16F86xx какой-то купленый (не суть)
Стандартный дисплей из мультисима на базе 44780 (собственно, там больше ничего и нет)
Что на данный момент: много рыл по различным форумам, ища возможности реализации протокола обмена данными между LCD и МК.
Нашел много всего неинтересного и/или сделанного под Proteus (не интересует!)
Сам попытался вкурить в мануалы. И вот что получилось:
Код: Выделить всё
LIST P=16F84
#INCLUDE <P16F84.INC>
; RA1 - E
; RA2 - RS
; RA3 - RW
; RB - DATA
PORTA EQU 0x05
PORTB EQU 0x06
TRISA EQU 0x85
TRISB EQU 0x86
Carry EQU 0
Zero_ EQU 2
RP0 EQU 5
RP1 EQU 6
RA0 EQU 0
RA1 EQU 1
RA2 EQU 2
RA3 EQU 3
RB0 EQU 0
RB1 EQU 1
RB2 EQU 2
RB3 EQU 3
RB4 EQU 4
RB5 EQU 5
RB6 EQU 6
RB7 EQU 7
E EQU RA1
RS EQU RA2
RW EQU RA3
D0 EQU RB0
D1 EQU RB1
D2 EQU RB2
D3 EQU RB3
D4 EQU RB4
D5 EQU RB5
D6 EQU RB6
D7 EQU RB7
BSF STATUS,RP0
MOVLW 0x00
MOVWF TRISA
MOVLW 0x00
MOVWF TRISB
MOVLW 0x00
MOVWF PORTA
MOVLW 0x00
MOVWF PORTB
CALL Delay2s
MOVLW 0x00
MOVWF PORTA
;0b00001100
MOVLW 0x0C
MOVWF PORTB
NOP
MOVLW 0x0C
MOVWF PORTB
CALL Delay4ms
;RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
;0 0 0 0 1 DL N F * *
; * * 0 1 1 1 0 0
;N = 0 - 1 line, N = 1 - 2 line count;
;F = 0 - 5*7, F = 1 - 8*10 dots;
;DL = 0 - 4bit, DL = 1 - 8bit
BCF PORTA,RS
BCF PORTA,RS
;0b00011100
MOVLW 0x1C
MOVWF PORTB
CALL Delay4ms
;11. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
; 0 0 0 0 0 0 1 D C B
;BSF STATUS,RP1
;0b11110000
MOVLW 0xF0
MOVWF PORTB
BCF PORTA,RS
BCF PORTA,RW
;13. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
; 0 0 0 0 0 0 0 1 I/D S
CALL Delay4ms
BCF PORTA,RS
BCF PORTA,RW
;0b11000000
MOVLW 0xC0
MOVWF PORTB
NOP
NOP
BCF PORTA,RS
BCF PORTA,RW
BSF PORTA,E
MOVLW 0x80
MOVWF PORTB
NOP
NOP
NOP
BCF PORTA,E
CALL Delay4ms
BSF PORTA,RS
BCF PORTA,RW
BSF PORTA,E
CALL Delay4ms
BSF PORTA,RS
BCF PORTA,RW
BCF PORTA,E
MOVLW 0xAE
MOVWF PORTB
CALL Delay4ms
BSF PORTA,RS
BCF PORTA,RW
BCF PORTA,E
NOP
return
cblock
d1
d2
d3
endc
Delay2s
;9999995 cycles
movlw 0x5A
movwf d1
movlw 0xCD
movwf d2
movlw 0x16
movwf d3
Delay2s_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay2s_0
;1 cycle
nop
return
;4 cycles (including call)
Delay4ms
;20493 cycles
movlw 0x02
movwf d1
movlw 0x11
movwf d2
Delay4ms_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay4ms_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
return
ENDморгает, включает подсветку, показывает курсор и ПЕРЕХОДИТ В ПОСЛЕДНЕЕ ЗНАКОМЕСТО на экране (т.е. 16,2)
Естественно, ничего не отображается.
может, где-то задержки неправильные, может и еще чего. В первый раз решил заняться самообразованием, и нате.
Пожалуйста, не тыкайте тапками - это больно. И ссылками тож не надо. Хватит с меня на сегодня ссылок. Лучше уж носом в лужу.
Всем спасибо.


