реклама на сайте
подробности

 
 
> Avr90s8515, программа не работает
Prevan
сообщение Apr 7 2010, 11:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 7-04-10
Пользователь №: 56 469



Доброго времени суток!
Возник вопрос, связанный с реализацией на МК 8515 программы, которая через порт А выполняет чтение данных с буфера (например число 11110000), а затем производит запись в регистр этого числа. В схеме используется дешифратор адреса на базе микросхемы 74ALS155, который осуществляет выбор через ножки МК (PС6 и PС7) буфера или регистра.
Суть микросхемы заключатеся в том, чтобы считать значения с задатчиков (число 11110000) и выдать их на светодиоды (первые четыре включены, остальные выключены).
При запуске в протеусе сама схема, кроме МК работает правильно. МК осуществляет управление дешифраторам неправильно (ножки МК PС6 и PС7 - выбор микросхемы, ножки PD6 и PD7 - стробирующие сигналы дешифратора).

Код программы:
Код
;************************************************* **********************
; Программ один раз в секунду считывает данные с входов и выводит их
;без изменений на выходы.
;************************************************* **********************
.include "c:\8515def.inc"; Подключение внешней библиотеки с описанием
; символических имен и определением адресов
; регистров микроконтроллера
.cseg
.org 0
rjmp init; Вектор прерывания по включению питания,
.org $0d;

.def inl = r3; Данные получаемые с входов
.def inh = r4;
.def outl = r5; Данные на выходы
.def outh = r6;
.def temp = r16; Временные регистры
.def temp1 = r17;
.def temp2 = r18;
; имен портов и подпрограммами
;****** Инициализация контроллера ****************************************
; выполняется при включении питания, сбросу RESET, или от
; сторожевого таймера
;************************************************* ************************
;****** Чтение данных *****************************************
read_in:
clr zl; Устанавливаем адрес первого буфера
ldi zh, $80;
ld inh, z; Читаем содержимое первого буфера
ldi zh, $40; Устанавливаем адрес второго буфера
ld inl, z; Читаем содержимое второго буфера
ret



;****** Запись данных ****************************************
write_out:
clr zl; Устанавливаем адрес первого регистра
ldi zh, $80;
st z, outh; Записываем значения в первый регистр
ldi zh, $40; Устанавливаем адрес второго регистра
st z, outl; Запмисываем значения во второй регистр
ret
;****** Формирование задержки 1с **************************************
delay1:
ldi temp2, 25;
d0: ser temp1;
d1: ldi temp, 209;
d2: dec temp;
brne d2;
dec temp1;
brne d1;
dec temp2;
brne d0;
ret;
init:
;****** Инициализация МК **********************************
ldi temp, low(RAMEND); Инициализация указателя стека
out SPL, temp; в конце внутреннего ОЗУ
ldi temp, high(RAMEND);
out SPH, temp;
ldi temp, (1<<SRE); Разрешение работы с внешним ОЗУ
out mcucr, temp;
;****** Основная программа ***********************************************
main:
rcall read_in; Вызов подпрограммы чтения данных
mov outh, inh;
mov outl, inl;
rcall write_out; Вызов подпрограммы записи данных
rcall delay1; Вызов подпрограммы формирования задержки 1с
rjmp main;


Сообщение отредактировал rezident - May 29 2010, 00:59
Причина редактирования: Оформление цитаты исходника.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Prevan
сообщение May 26 2010, 17:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 7-04-10
Пользователь №: 56 469



Нашёл в интернете примеры инициализации и функций. Дисплей загорается и выводит строчки на экран. Чтобы сделать бегущую строку я после вывода каждого символа вызываю функцию задержки, а в конце главной программы main ставлю строчку "rjmp main". После запуска прогамма зависает. Не могу понять в каком месте программа зацикливается:
CODE

;------------------------------------------------------------------------------------------

; подключаем файл
.include "8515def.inc"

.equ LCDRS = 5
.equ LCDWR = 4
.equ LCDCLK = 3
.def temp1 = r17 ; Временные регистры
.def temp2 = r18 ;
;------------------------------------------------------------------------------------------

reset:
ldi r16,high(RAMEND); инициализация указателя стека
out SPH, r16 ;
ldi r16,low(RAMEND) ;
out SPL, r16 ;
ser r16 ;
out DDRC, r16 ; устанавливает порт С на выход
ldi r16, 0x30 ; устанавливает сигналы RS и RW
out DDRC, r16 ; в LCD
ldi r16, 0x08 ; устанавливает сигнал E
out DDRD, r16 ; в LCD
rcall lcd_init ; вызывает инициализацию дисплея


;------------------------------------------------------------------------------------------

lcd_init:
rcall DEL_5MS ;Задержка 15 мс
rcall DEL_5MS ;
rcall DEL_5MS ;
ldi r16, 0x38 ; определяет 8 разр. шину данных, 5х7 точек, 2 строки
rcall lcd_cmd ;
rcall DEL_5MS ;Задержка 5.4 нс
ldi r16, 0x0C ; включить дисплей, показать курсор
rcall lcd_cmd ;
rcall DEL_5MS ;Задержка 5.4 нс
ldi r16, 0x01 ; очистить дисплей, курсор в начальную позицию
rcall lcd_cmd ;
rcall DEL_5MS ;Задержка 5.4 нс
ldi r16, 0x06 ; направление сдвига курсора вправо
rcall lcd_cmd ;
rcall DEL_100us ;Задержка 100 мкс
ret

;------------------------------------------------------------------------------------------

lcd_prt:
sbi PORTD, LCDCLK; устанавливает строб E
sbi PORTC, LCDRS ; устанавливает RS=1 (передаются данные)
out PORTA, r16 ; записывает данные в порт А
cbi PORTD, LCDCLK; сбрасывает строб Е
rjmp lcd_wait ; вызывает подпрограмму чтения BUSY флага LCD
ret

;------------------------------------------------------------------------------------------

lcd_cmd:
sbi PORTD, LCDCLK; устанавливает строб E
cbi PORTC, LCDRS ; устанавливает RS=0 (передаются команды)
out PORTA, r16 ; записывает команды в порт А
cbi PORTD, LCDCLK; сбрасывает строб Е
rjmp lcd_wait ; вызывает подпрограмму чтения BUSY флага LCD
ret

;------------------------------------------------------------------------------------------

lcd_wait:
cbi PORTC, LCDRS ; устанавливает RS=0 (передаются команды)
sbi PORTC, LCDWR ; устанавливает RW (чтение)
sbi PORTD, LCDCLK; устанавливает строб E
clr r16 ;
out DDRA, r16 ; устанавливает порт данных на вход
out PINA, r16 ; очищает данные PINA
in r16, PINA ; записывает адрес BUSY флага
cbi PORTD, LCDCLK; сбрасывает строб Е
push r16
ser r16 ;
out DDRA, r16 ; установить порт А на вывод
cbi PORTC, LCDWR ; сбросить RW снова
pop r16
sbrc r16, 7 ; если BUSY флаг пуст - вернуться (LCD не готов)
rjmp lcd_wait ; если нет - ждать готовности LCD
ret

;****** Подпрограмма формирования задержки *****************************
DEL_5MS: ;ЗАДЕРЖКА 5 МС
ldi R25,27
d: ldi R24,255
d1: dec R24
brne d1
dec R25
brne d
ret

;****** Подпрограмма формирования задержки *****************************
DEL_100us: ;ЗАДЕРЖКА 100 МКС
ldi R25,125
d2: dec R25
brne d2
ret

;****** Подпрограмма формирования задержки *****************************
del200:
ldi temp2, 5
d3: ser temp1
d4: ldi R16, 209
d5: dec R16
brne d5
dec temp1
brne d4
dec temp2
brne d3
ret
;------------------------------------------------------------------------------------------

main:
ldi r16, 0x00|0x80 ; помещает курсор в 1ю строку, первый символ
rcall lcd_cmd ; String1
ldi r16, 'S'
rcall lcd_prt
rcall del200
ldi r16, 't'
rcall lcd_prt
rcall del200
ldi r16, 'r'
rcall lcd_prt
rcall del200
ldi r16, 'i'
rcall lcd_prt
rcall del200
ldi r16, 'n'
rcall lcd_prt
rcall del200
ldi r16, 'g'
rcall lcd_prt
rcall del200
ldi r16, '1'
rcall lcd_prt



ldi r16, 0x40|0x80 ; помещает курсор во 2ю строку, второй символ
rcall lcd_cmd ; String2
ldi r16, 'S'
rcall lcd_prt
rcall del200
ldi r16, 't'
rcall lcd_prt
rcall del200
ldi r16, 'r'
rcall lcd_prt
rcall del200
ldi r16, 'i'
rcall lcd_prt
rcall del200
ldi r16, 'n'
rcall lcd_prt
rcall del200
ldi r16, 'g'
rcall lcd_prt
rcall del200
ldi r16, '2'
rcall lcd_prt
rjmp main



Сообщение отредактировал Prevan - May 26 2010, 17:31
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Prevan   Avr90s8515   Apr 7 2010, 11:38
- - domowoj   А зачем так много переключателей, зачем и к питани...   Apr 7 2010, 17:45
- - ILYAUL   Цитата(Prevan @ Apr 7 2010, 15:53) Доброг...   Apr 7 2010, 20:12
- - ae_   2 Prevan: на схеме перепутаны сигналы чтения и зап...   Apr 8 2010, 01:20
- - Prevan   Проблему с МК решил путём подключения HEX исходник...   Apr 8 2010, 01:49
|- - 777777   Микроконтроллеры придуманы для того, чтобы не став...   Apr 8 2010, 04:15
|- - Prevan   Цитата(777777 @ Apr 8 2010, 11:30) Микрок...   Apr 8 2010, 11:57
- - IgorKossak   В схеме можно оставить только переключатели (матри...   Apr 8 2010, 05:53
- - ILYAUL   Цитата(Prevan @ Apr 7 2010, 15:53) Суть м...   Apr 8 2010, 13:40
|- - Prevan   Цитата(ILYAUL @ Apr 8 2010, 20:55) У данн...   Apr 8 2010, 15:13
- - Prevan   А не знаете, можно ли код составить, не используя ...   Apr 12 2010, 14:13
|- - ILYAUL   Цитата(Prevan @ Apr 12 2010, 18:28) А не ...   Apr 12 2010, 16:14
|- - ae_   Цитата(Prevan @ Apr 12 2010, 22:28) А не ...   Apr 13 2010, 12:17
- - Prevan   Ещё раз здравствуйте! Спасибо всем за помощь. ...   Apr 20 2010, 15:50
|- - ILYAUL   Цитата(Prevan @ Apr 20 2010, 20:05) ........   Apr 20 2010, 19:19
- - domowoj   Выдерживайте все времянки , рекомендованные в ДШ и...   Apr 20 2010, 19:08
- - Prevan   Здравствуйте! Подкорректировал код с учётом за...   May 5 2010, 16:52
|- - ILYAUL   Цитата(Prevan @ May 5 2010, 20:52) Здравс...   May 5 2010, 19:02
- - Prevan   LCD LM016L (HD44780)   May 6 2010, 00:53
- - akl   Здравствуйте. Непонятно чему верить- схеме, коду и...   May 6 2010, 03:14
- - akl   "...Дисплей загорается и выводит строчки на э...   May 27 2010, 04:52
- - Prevan   akl, я скачивал пример по этой ссылке, пробовал со...   Jun 3 2010, 11:05
- - ILYAUL   Кодout DDRD,e ; конфигурируем биты e порта ...   Jun 3 2010, 20:40
|- - Prevan   Цитата(ILYAUL @ Jun 4 2010, 03:40) Кодout...   Jun 3 2010, 23:48
|- - ILYAUL   Цитата(Prevan @ Jun 4 2010, 03:48) но мне...   Jun 4 2010, 21:17
|- - Prevan   Цитата(ILYAUL @ Jun 5 2010, 04:17) {e } у...   Jun 5 2010, 02:26
- - ILYAUL   Можно всё таки вкладывать код в архиве так сложно...   Jun 6 2010, 13:46
|- - Prevan   Цитата(ILYAUL @ Jun 6 2010, 20:46) Можно ...   Jun 7 2010, 03:41
- - Prevan   Ещё раз здравствуйте! По-прежнему пытаю микрок...   Jun 11 2010, 10:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016