PIC + FDCC1602G (на контролере SPLC780D)

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
Открыл глаза
Сообщения: 45
Зарегистрирован: Сб ноя 14, 2009 12:52:13

Сообщение floke »

Есть мысли, что же здесь не так? Делал по даташиту. На плате есть сетодиоды, которыми моргаю, чтобы убедиться в прошивке(программатор кривится иногда, пишет мол, все ок, а подпрограммы в памяти нет)

Код: Выделить всё

#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
уже пожалел, что купил FDCC, начитался я про них достаточно.... но выкидывать жалко, Хнык (
Реклама
Ответить

Вернуться в «Практика»