Методом проб и ошибок - разобрался, контроллер сотни 2, а то и три прошил ! Ну кто же знал, что при инициализации второй строки нужно непосредственно перед указанием адреса (b'11000000' обязательно нужно выполнить команду параметра интерфейса (0x28). Вот пример программы, может кому пригодится, программа чисто для осмысления. Может быть много лишнего, т.к. делалось и переделывалось всё по ходу , да и сам я не силён в программировании, но к делу: дисплей- acm0802c, мк-pic16f877a, 4-разр. шина данных, подкл. к порту D RS-RD2, RW-корпус, E-RD3, D4-RD4, D5-RD5, D6-RD6, D7-RD7, контрастность подключить обязательно и настроить.
#INCLUDE P16F877A.INC __CONFIG 3D39H RS EQU 2 E EQU 3 KN3 EQU 3 CBLOCK 0X20 TEMP ; временный TEMP1 ; временный для паузы TEMP2 ; временный для паузы антидребезга COUN ; счётчик циклов R1 R2 R3 R4 R5 ;рег. индикации R6 R7 R8,R9,R10,R11,R12,R13,R14 ENDC ORG 0 GOTO INIT INIT CLRF PORTA BSF STATUS,RP0; ПЕРЕХОДИМ В 1-Й БАНК MOVLW 0X06 MOVWF ADCON1 MOVLW B'00001110' MOVWF TRISA^80H MOVLW B'10000000'; ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ОТКЛ. MOVWF OPTION_REG^80H;ПРЕРЫВАНИЯ ЗАПРЕЩЕНЫ MOVLW .0 MOVWF INTCON ;ПРЕР. ЗАПРЕЩЕНЫ MOVLW .0 MOVWF TRISB^80H ;ВСЕ НА ВЫХОД MOVWF TRISD^80H BCF STATUS,RP0; ПЕРЕХОД В 0-Й БАНК CLRF PORTA CLRF PORTD CLRF PORTD CLRF TEMP CLRF COUN CLRF R1 CLRF R2 CLRF R3 CLRF R4 CLRF R5 CLRF R6 CLRF R7 CLRF R8 MOVLW .30 MOVWF TEMP1 ; 30мс пауза CALL PAUSE1 ;========================================== ;ИНИЦИАЛИЗАЦИЯ ЖКИ ;========================================== INIT_JKI MOVLW 03H ;СБРОС CALL ZAGR ;ПЕРЕДАЧА КОМАНДЫ CALL STROB ;ПРОСТРОБИРУЕМ MOVLW 03H CALL ZAGR CALL STROB ;ПРОСТРОБИРУЕМ MOVLW 03H CALL ZAGR CALL STROB ;ПРОСТРОБИРУЕМ MOVLW 28H ;4РАЗР.,2СТР.,5X7 CALL ZAGR CALL STROB MOVLW 08H ;ОТКЛ.ДИСПЛ. ,ЗАПР.КУРС. ,ЗАПР.МЕРЦ.КУРСОРА. CALL ZAGR CALL STROB MOVLW 01H ;СТИРАНИЕ ДИСПЛЕЯ CALL ZAGR CALL STROB MOVLW 10H ;ЗАПРЕТ СДВИГА ИЗОБРАЖЕНИЯ CALL ZAGR CALL STROB MOVLW 06H ;ИНКРЕМЕНТИРОВАНИЕ ПОЗИЦИИ КУРСОРА CALL ZAGR CALL STROB MOVLW 02H ;ВОЗВРАТ КУРСОРА CALL ZAGR CALL STROB MOVLW 28H ;4РАЗР.,2СТР.,5X7 CALL ZAGR CALL STROB MOVLW H'0C' ;ВКЛ. ДИСПЛЕЯ CALL ZAGR CALL STROB GOTO PROG PAUSE MOVLW .25 MOVWF TEMP1 ;25MC PAUSE1 MOVLW .255 ADDLW -1 BTFSS STATUS,2 GOTO $-2 DECFSZ TEMP1,1 GOTO PAUSE1 RETURN ;-------------------------------------------- ;ЗАГРУЗКА КОМАНДЫ ИНИЦИАЛИЗАЦИИ ЖКИ ;-------------------------------------------- ZAGR MOVWF TEMP ANDLW B'11110000' MOVWF PORTD BCF PORTD,RS CALL STROB CALL PAUSE MOVFW TEMP SWAPF TEMP,W ANDLW B'11110000' MOVWF PORTD BCF PORTD,RS CALL STROB CALL PAUSE RETURN STROB BSF PORTD,E NOP BCF PORTD,E RETURN ;----------------------------------------------------- ;ВЫВОД ЗНАЧЕНИЙ РЕГ. НА ИНДИКАЦИЮ ;----------------------------------------------------- IND_JKI MOVLW 02H ;ВОЗВРАТ КУРСОРА В ИСХ. СОСТ. CALL KOM_JKI ;ЗАПИШЕМ КОМАНДУ MOVLW 80H ;КУРСОР НА 0-Ю ПОЗИЦИЮ 1-Й СТРОКИ CALL KOM_JKI ;ЗАПИШЕМ КОМАНДУ MOVLW .6 ;ЧИСЛО ЗНАКОМЕСТ MOVWF COUN MOVLW R1 ;АДРЕС 1-ГО РЕГ. MOVWF FSR ;В FSR MOVFW INDF ;ПЕРЕМЕННУЮ С R1 В РАБОЧИЙ РЕГ. CALL ZAP_D ;ЗАПИШЕМ ДАННЫЕ DECF COUN,1 ;-1 ИЗ СЧЁТЧИКА BTFSC STATUS,2 ;ЕСЛИ ПРОСКОЧИЛИ ВСЕ 6 РЕГ.,ТО GOTO $+3 ;НА ИНДИКАЦИЮ ВТОРОЙ СТРОКИ INCF FSR,F ;ИНАЧЕ +1 К АДРЕСУ ПЕРВОГО РЕГ. GOTO $-6 ;И ЗАПИСЫВАЕМ СЛЕДУЮЩИЙ MOVLW H'28' ;-----------------------------------------------------------------------------------------------------------без этого вторая строка CALL KOM_JKI ;-----------------------------------------------------------------------------------------------------------не работает !!! MOVLW B'11000000' CALL KOM_JKI MOVLW .8 ;.....................ПОЧТИ АНОЛОГИЧНО 1-Й СТРОКЕ MOVWF COUN MOVLW R7 MOVWF FSR MOVFW INDF CALL ZAP_D INCF FSR,F DECFSZ COUN,F GOTO $-4 GOTO PROG1 ;ВЕЧНЫЙ ЦИКЛ ;----------------------------------------------------- ;ЗАГРУЖАЕМ РЕГИСТРЫ ;---------------------------------------------------- PROG MOVLW H'A9' ;у MOVWF R1 MOVLW H'50' ;р MOVWF R2 MOVLW H'41' ;а MOVWF R3 MOVLW H'21' ;! MOVWF R4 MOVLW H'21' ;! MOVWF R5 MOVLW H'21' ;! MOVWF R6 MOVLW H'50' ;р MOVWF R7 MOVLW H'41' ;а MOVWF R8 MOVLW H'A0' ;б MOVWF R9 MOVLW H'4F' ;о MOVWF R10 MOVLW H'54' ;т MOVWF R11 MOVLW H'41' ;а MOVWF R12 MOVLW H'45' ;е MOVWF R13 MOVLW H'54' ;т MOVWF R14 GOTO IND_JKI ;на индикацию PROG1 BTFSC PORTA,KN3 ; здесь если есть желание, можно передвигать изображение кнопкой, подключенной к porta,3 GOTO $-1 CALL PAUSE_KN ;антидребезг BTFSS PORTA,KN3 GOTO $-2 MOVLW B'00011000' CALL KOM_JKI GOTO PROG1 ; проверка кнопки ;-------------------------------------------------------- ;ДАННЫЕ В ЖКИ ;-------------------------------------------------------- ZAP_D MOVWF TEMP ;РАБОЧИЙ РЕГ. ВО ВРЕМЕННЫЙ ANDLW B'11110000' ;"И" С РАБОЧИМ РЕГ. MOVWF PORTD ;СТ.ПОЛУБАЙТ В ПОРТ BSF PORTD,RS ;РАЗРЕШИМ ЗАПИСЬ ДАННЫХ CALL STROB ;СТРОБ. ИМПУЛЬС CALL PAUSE3 ;ПАУЗА 40 МКС. MOVFW TEMP SWAPF TEMP,W ANDLW B'11110000' MOVWF PORTD BSF PORTD,RS CALL STROB GOTO PAUSE3 ;----------------------------------------------- ;ПЕРЕДАЧА КОМАНДЫ В ЖКИ ;---------------------------------------------- KOM_JKI MOVWF TEMP ANDLW B'11110000' MOVWF PORTD CALL STROB CALL PAUSE2 MOVFW TEMP SWAPF TEMP,W ANDLW B'11110000' MOVWF PORTD CALL STROB PAUSE2 ;1мс MOVLW .255 ADDLW -1 BTFSS STATUS,2 GOTO $-2 RETURN PAUSE3 MOVLW .10 ADDLW -1 BTFSS STATUS,2 GOTO $-2 RETURN PAUSE_KN MOVLW .45 ; пауза для антидребезга кнопки MOVWF TEMP2 MOVLW .150 ADDLW -1 BTFSS STATUS,Z GOTO $-2 DECFSZ TEMP2 GOTO $-5 RETURN END
|