ПРИВЕТСТВУЮ ВСЕХ! давно не кодил на пиках. все подзабыл конкретно. если кто сможет помогите , в чем моя ошибка. нужно зажечь экран хоть каким то мусором. пока что только черный экран и вижу.
пишу на АСМ пик18Ф2520. если кому не жалко тестовый пример для вывода мусора. а то у же 2 дня мучаюсь. дисплей олед SSD1306.
мне надо хотя бы понять работает он вообще или нет. а то так можно кучу времени угрохать и не заметить что все делал правильно.
вот тупая программка. инит и послание в виде кучи байтов просто как мусор. musor-просто табилца байтов для вывода на экран. апппаратный ай2си . пойдет пример хоть для 16 пика. или может где ошибка у меня. кстати. описание на русском дисплея подсмотрел тут на радиокоте.
Код: Выделить всё
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; I2C ENABLE
CLRF SSPSTAT
CLRF SSPCON1
CLRF SSPCON2
CLRF SSPADD
CLRF SSPBUF
MOVLW 3FH ;DEC 63 (MIN = 3 FOR TIC48)
MOVWF SSPADD
MOVLW B'10000000'
MOVWF SSPSTAT
MOVLW B'00001000'
MOVWF SSPCON1
BSF SSPCON1,SSPEN ; SSP ON/OFF
MAIN_BATTERY1
;BSF SSPCON2,ACKEN
BSF SSPCON2,SEN,0 ; START
BTFSC SSPCON2,SEN,0
BRA $-2
BCF PIR1,SSPIF,0
MOVLW 0X78 ; ADRESS 0X7A 0X78
MOVWF SSPBUF,0
BTFSC SSPCON2,ACKSTAT
BRA $-2
BCF PIR1,SSPIF,0
BSF SSPCON2,ACKEN
MOVLW UPPER LCD_INIT_BYTE
MOVWF TBLPTRU
MOVLW HIGH LCD_INIT_BYTE
MOVWF TBLPTRH
MOVLW LOW LCD_INIT_BYTE
MOVWF TBLPTRL
MOVLW .36 ; КОМАНД
MOVWF COUNTER
INIT2 TBLRD*+
MOVF TABLAT,W
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT
BRA $-2
BCF PIR1,SSPIF
BSF SSPCON2,ACKEN
DECFSZ COUNTER,F
BRA INIT2
CALL STOP_BIT
BSF SSPCON2,SEN,0 ; START
BTFSC SSPCON2,SEN,0
BRA $-2
BCF PIR1,SSPIF,0
MOVLW 0X78 ; ADRESS
MOVWF SSPBUF,0
BTFSC SSPCON2,ACKSTAT
BRA $-2
BCF PIR1,SSPIF,0
BSF SSPCON2,ACKEN
MOVLW 0X40 ; DATS 40 DAT C0 COM 80
MOVWF SSPBUF,0
BTFSC SSPCON2,ACKSTAT
BRA $-2
BCF PIR1,SSPIF,0
BSF SSPCON2,ACKEN
MOVLW UPPER MUSOR
MOVWF TBLPTRU
MOVLW HIGH MUSOR
MOVWF TBLPTRH
MOVLW LOW MUSOR
MOVWF TBLPTRL
MOVLW .255
MOVWF COUNTER
INIT22 TBLRD*+
MOVF TABLAT,W
MOVWF SSPBUF
BTFSC SSPCON2,ACKSTAT
BRA $-2
BCF PIR1,SSPIF
BSF SSPCON2,ACKEN
DECFSZ COUNTER,F
BRA INIT22
CALL STOP_BIT
MAIN_BATTERY2
BRA MAIN_BATTERY2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; УСЛОВИЕ "СТОП"
STOP_BIT
BSF SSPCON2,PEN,0
BTFSC SSPCON2,PEN,0
BRA $-2
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 4000H
LCD_INIT_BYTE ; 36 BYTE
DB 0X80,0XA8,0X80,0X3F,0X80,0XD3,0X80,0X00,0X80,0X40,0X80,0XA1,0X80,0XC8,0X80,0XDA,0X80,0X12,0X80,0X81,0X80, 0X7F,0X80,0XA4,0X80,0XA6,0X80,0XD5,0X80,0X80,0X80,0X8D,0X80,0X14,0X80,0XAF
MUSOR
DB 0X80, 0XA8, 0X80, 0X3F, 0X80, 0XD3, 0X80, 0X00, 0X80, 0X40, 0X80, 0XA1, 0X80, 0XC8, 0X80, 0XDA, 0X80, 0X12, 0X80, 0X81, 0X80, 0X7F, 0X80, 0XA4, 0X80, 0XA6, 0X80, 0XD5, 0X80, 0X80, 0X80, 0X8D, 0X80, 0X14, 0X80, 0XAF
спасибо всем. индикатор включился. хотя сам не понял почему не работало до этого. вроде все было так же. вместо бит АСК просто проверял бит прерывания.
и.....заработало.
теперь будем изучать дисплей.
Код: Выделить всё
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; I2C ENABLE
CLRF SSPSTAT
CLRF SSPCON1
CLRF SSPCON2
CLRF SSPADD
CLRF SSPBUF
MOVLW 3FH ;DEC 63 (MIN = 3 FOR TIC48)
MOVWF SSPADD
MOVLW B'10000000'
MOVWF SSPSTAT
MOVLW B'00001000'
MOVWF SSPCON1
BSF SSPCON1,SSPEN ; SSP ON/OFF
MAIN_BATTERY1
BSF SSPCON2,SEN,0 ; START
BTFSC SSPCON2,SEN,0
BRA $-2
BCF PIR1,SSPIF,0
MOVLW 0X78 ; ADRESS 0X7A 0X78
MOVWF SSPBUF,0
BTFSS PIR1,SSPIF
BRA $-2
BCF PIR1,SSPIF,0
MOVLW UPPER LCD_INIT_BYTE
MOVWF TBLPTRU
MOVLW HIGH LCD_INIT_BYTE
MOVWF TBLPTRH
MOVLW LOW LCD_INIT_BYTE
MOVWF TBLPTRL
MOVLW .36 ; КОМАНД
MOVWF COUNTER
INIT2 TBLRD*+
MOVF TABLAT,W
MOVWF SSPBUF,0
BTFSS PIR1,SSPIF
BRA $-2
BCF PIR1,SSPIF
DECFSZ COUNTER,F
BRA INIT2
CALL STOP_BIT
NOP
BRA $-2