PIC + FDCC1602G (на контролере SPLC780D)
Добавлено: Сб дек 19, 2009 16:46:01
Есть мысли, что же здесь не так? Делал по даташиту. На плате есть сетодиоды, которыми моргаю, чтобы убедиться в прошивке(программатор кривится иногда, пишет мол, все ок, а подпрограммы в памяти нет)
уже пожалел, что купил FDCC, начитался я про них достаточно.... но выкидывать жалко, Хнык (
Код: Выделить всё
#include <p16F887>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;--------------------------------------------------------------------
;RC4 - RS - если 0, то дисплею передается команда, 1 - данные
;RC5 -строб E - дергаем напряжение на нем - контроллер дисплея начинает писать или читать команды
;RC6 - RW - если 0 - запись, если 1 - чтение
; RA0-RA7 = DB0-DB7
org 0
;-------------------------------------------------------------------------------------------------
; установка портов контроллера
;--------------------------------------------------------------------------------------------------
bcf STATUS,RP0 ;Банк 0
bcf STATUS,RP1 ;
BCF INTCON,GIE ;запрет прерываний
CLRF PORTA ;инициализация PORTA
bsf STATUS,RP0 ;Банк 1
bcf STATUS,RP1 ;
movlw b'00000111' ; конфигурируем tmr0, типа предделитель врублен перед tmr0
movwf OPTION_REG ; устанавливаем значение предделителя на максимум (1:256)
movlw 0x06 ;
movwf ADCON1 ; Все порты PORTA цифровые входы\выходы
movlw B'00000000' ;PORTD PORTA
movwf TRISC ;на вывод
movwf TRISD ;на вывод
movwf TRISA ;на вывод
bcf STATUS,RP0 ;Банк 0
bcf STATUS,RP1 ;
; ----------------------------------------------------------------------------------------------------------------
; инициализация после включения питания
;-----------------------------------------------------------------------------------------------------------------
call wait13MS
call wait13MS
call wait13MS
call wait13MS
call wait13MS ;ждем инициализации дисплея
bsf PORTC,5 ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00110000'; устанавливаем двухстрочный режим и восьмибитное подключение
movwf PORTA
bcf PORTC,5 ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00110000'; устанавливаем двухстрочный режим и восьмибитное подключение
movwf PORTA
bcf PORTC,5 ; ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00110000' ; устанавливаем двухстрочный режим и восьмибитное подключение
movwf PORTA
bcf PORTC,5 ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00111000' ; устанавливаем двухстрочный режим и восьмибитное подключение
movwf PORTA
bcf PORTC,5 ; ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS=0 и R/W=0
movlw B'00001000'
movwf PORTA
bcf PORTC,5 ; ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ножка E, устанавливаем 1
bcf PORTC,4 ;
bcf PORTC,6 ; RS=0 и R/W=0
movlw B'00000001'
movwf PORTA
bcf PORTC,5 ; ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS=0 и R/W=0
movlw B'00000111'
movwf PORTA
bcf PORTC,5 ; ;ножка E, устанавливаем 0
call wait13MS
;-------------------------------------------------------------------------
; ЕЩЁ РАЗ ИНИЦИАЛИЗИРУЕМ (ЗАЧЕМ ЭТО НАДО - НЕ ЗНАЮ, В ДАТАШИТЕ ПРОЦЕДУРА ВЫВОДА ОПИСАНННА ИМЕННО ТАК)
;-------------------------------------------------------------------------
call wait13MS
call wait13MS
call wait13MS
call wait13MS
call wait13MS
bsf PORTC,5 ; ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00111000' ; устанавливаем двухстрочный режим и восьмибитное подключение
movwf PORTA
bcf PORTC,5 ; ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули ;
movlw B'00001110' ; включаем курсор и включаем дисплей на отображение
movwf PORTA
bcf PORTC,5 ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ;ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'00000110' ; сдвигаем курсор вправо при каждом последующем символе, увеличиваем адрес на 1
movwf PORTA
bcf PORTC,5 ;ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ;ножка E, устанавливаем 1
bsf PORTC,4
bcf PORTC,6 ; RS=0 и R/W=1
movlw B'01010111' ; выводим первый символ на первой строке
movwf PORTA
bcf PORTC,5 ; ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ножка E, устанавливаем 1
bcf PORTC,4
bcf PORTC,6 ; RS и R/W в нули
movlw B'11000000' ; переходим на вторую строку
movwf PORTA
bcf PORTC,5 ; ножка E, устанавливаем 0
call wait13MS
bsf PORTC,5 ; ножка E, устанавливаем 1
bsf PORTC,4
bcf PORTC,6 ; RS=0 и R/W=1
movlw B'01010100' ; выводим первый символ на второй строке
movwf PORTA
bcf PORTC,5 ; ножка E, устанавливаем 0
call wait13MS
;--------------------------------------------------------
;мигнуть светодиодами для верности
;--------------------------------------------------------
DIN_DIN
movlw B'11111111'
movwf PORTD
call wait13MS
movlw B'00000000'
movwf PORTD
call wait13MS
movlw B'11111111'
movwf PORTD
call wait13MS
movlw B'00000000'
movwf PORTD
call wait13MS
goto DIN_DIN
goto $ ; wait here
;---------------------------------------------------------------------------------------------------------------------
;ПОДПРОГРАММА ЗАДЕРЖКИ НА 13 МС (ТРЕБУЕМАЯ ЗАДЕРЖКА В РАЗЫ МЕНЬШЕ, НО РЕШИЛ СДЕЛАТЬ ДЛЯ ВЕРНОСТИ ЕЁ БОЛЬШОЙ)
;-------------------------------------------------------------------------------------------------------------------
wait13MS
bcf INTCON,T0IF ; сбрасываем флаг от таймера
CLRF TMR0 ; обнуляем таймер
wait
btfss INTCON,T0IF ; ждем, когда возникнет переполнение по таймеру
goto wait
bcf INTCON,T0IF ; сбрасываем флаг от таймера
return
;------------------------------------------------------------------------------------
end