Проблема с кодом

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Проблема с кодом

Сообщение Algor »

Помогите пожалуйста, совсем отчаялся. Сварганил написал код MPlab не хочет его компилить ругается вот так

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

Error[113]   D:\SDB\16F628ATEMP.ASM 37 : Symbol not previously defined (_DATA_CP_OFF)
Не пойму в чем проблема ведь слово начальной конфигурации было в самом начале в шаблоне все того же MPlab, еще заметил странности попытался зачистить регистр ANSEL, что тоже не получилось

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

Error[113]   D:\SDB\16F628ATEMP.ASM 90 : Symbol not previously defined (ANSEL)
хотя проверял несколько раз такой регистр есть. если удалить эти строки то при отладке МК работает как то странно. Допустим порт А0 установлен на выход, и при подаче на него лог 1 ничего не происходит(смотрел в View->Watch) использовал стандартное средство MPLAB SIM. не работает так же ни в протеусе ни на железе(хотя не уверен что само железо рабочее). В принципе не работает уже в начале(и надеюсь только в начале) и для исправления этой ошибки схема не нужна но все же выложу(так же буду благодарен если согласитесь поискать еще ошибок, тогда в личку напишу что там вообще происходит). [url][URL=http://radikal.ru/F/i036.radikal.ru/1206/6e/a885a87c9935.jpg.html]Изображение[/url][/url]
Вложения
примечания.txt
Небольшие примечание(нужны только тем кто решился разобраться во всем коде)
(164 байт) 377 скачиваний
16F628ATEMP.ASM
собственно код
(9.25 КБ) 437 скачиваний
Реклама
Аватара пользователя
GRAF
Мудрый кот
Сообщения: 1867
Зарегистрирован: Ср янв 23, 2008 22:11:54
Откуда: Калининград

Re: Проблема с кодом

Сообщение GRAF »

Algor писал(а):проверял несколько раз такой регистр есть.
Где он есть? В МК?
В подключаемом файле (p16F628A.inc) видимо нет.

По первому слову тожо, там же написано в комментах, что эти директивы должны быть в инклюдах.
Какой-то файл вы не подключили, в котором описаны эти директивы, вот он и ругается.
Реклама
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

У PIC16F628A нет регистра ANSEL. А чтобы использовать все выводы как цифровые - надо отключить компараторы. В даташите есть пример:

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

CLRF       PORTA        ;Initialize PORTA by setting output data latches
MOVLW      0x07         ;Turn comparators off and
MOVWF      CMCON        ;enable pins for I/O functions
BCF        STATUS, RP1
BSF        STATUS, RP0  ;Select Bank1
MOVLW      0x1F         ;Value used to initialize data direction
MOVWF      TRISA        ;Set RA<4:0> as inputs
                        ;TRISA<5> always
                        ;read as ‘1’.
                        ;TRISA<7:6>
                        ;depend on oscillator
                        ;mode
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Спасибо большое отключу компараторы, позволит ли это использовать PORTA, 4 как цифровой выход(просто знаю что там свои тонкости он же подключен к таймеру счетчику), а насчет того что не все файлы подключил можно ли поподробнее. Их же всего 2 надо 16F628ATEMP.ASM и P16F628A.INC я их скинул в папку с проектом, что еще надо?
И насколько я понял из

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

TRISA<5> always
                        ;read as ‘1’.
                        ;TRISA<7:6>
порт А 5 всегда настроен на вход и настроить его на выход возможности нет?
Реклама
Эиком - электронные компоненты и радиодетали
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

Файл p16f628a.inc не нужно копировать в папку проекта, в свойствах проекта должны быть указаны пути где искать инклуды.
Константа DATA_CP_OFF пишется без подчеркивания вначале.
У PIC12 и PIC16 вывод на котором MCLR всегда работает только как цифровой вход.
Вывод RA4 с открытым стоком, его надо подтянуть резистором на Vdd.
Реклама
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Зачем присоединять RA4 через резистор к питанию, резистор должен быть на сколько, 1КОм? И как его тогда вообще можно использовать?
Реклама
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

Если регистры серии 74HC, резистор на RA4 может быть 10кОм или еще больше.
Не лучше ли будет соединить регистры последовательно (вывод DS(14) первой микросхемы вход, а далее Q7S(9) с DS следующей, SHCP(11) параллельно) и для обновления дисплея просто ввести новые данные для всех сегментов всех разрядов. С использованием 74HC595 динамическая индикация не нужна, их выходы сохраняют состояние до следующего импульса на выводе STCP (12). Выводы OE (13) можно посадить на Vss.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Немного не понятно как будет работать RA4 через резистор присоединенный к питанию, а в остальном мысль конечно интересная но оставлю уже как есть, тем более что динамическую подсветку не использую, а ОЕ довольно часто. Обновил принципиальную схему, вроде все косяки убрал. И еще насколько легко 74НС убить статикой(просто может от этого ничего не пашет)
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Изображение
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

В предыдущем варианте RA4 был использован как разрешение четвертого индикатора, тогда резистор был нужен чтобы задать высокий уровень на этом выводе.
В новом варианте RA4 не использован, значит и резистор не нужен.
Что касается 74HCxxx, просто так их не убить, нужен серьезный разряд.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Исправил код в соответствии с исправленной принципиальной схемой, и еще парочка доработок из тех что вы все мне посоветовали(спасибо всем большое), код теперь компилится но в протеусе МК по прежнему не подает признаков жизни(на железе протестирую ближе к вечеру, но почему то уверен что результат будет тот же). Помогите пожалуйста найти ошибку.
Вложения
16F628ATEMP.ASM
(9.34 КБ) 743 скачивания
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Код без коментов, так что спрашивайте. Хотя он такой примитивный что и так понятно вроде.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

В отладчике пытаюсь посмотреть как работает код, команды bsf не устанавливает нужный мне бит.(((
В смысле порт настроен правильно, выполняется BSF PORTA,1 а в меню View->Watch в этих регистрах по прежнему нули!!(
Я уже в отчаянье подскажите в чем может быть проблема??(использую отладчик MPLAB SIM)
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

В самом начале кода (стр.89)

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

	MOVLW   0x1F         ;Value used to initialize data direction
	MOVWF   TRISA
В этом случае PORTA,1 будет входом. Microchip как то посоветовал как запомнить назначение битов направления 0 - похож на O(output), 1 - I(input).
И еще, PORTA и TRISA находятся в разных банках, поэтому надо сначала выставить нужный банк, а потом модифицировать значения. Кстати это относится и к другим регистрам. Надо аккуратнее работать с банками. Есть псевдокомманда ассемблера BANKSEL, например

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

        BANKSEL PORTA
        CLRF    PORTA
        BANKSEL TRISA
        CLRF TRISA
Все выводы PORTA на выход и у всех низкий уровень.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Огромное спасибо!!! И еще такой вопрос как избежать подобных ошибок при работе с константами(или это не актуально?)?
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Проблема с кодом

Сообщение BorisSPB »

ОЗУ поделено на банки потому что в коде команды на адрес выделено 7 бит, остальные биты адреса это RP1 и RP0 регистре STATUS.
По той же причине (11 бит адреса в коде команды) прямые переходы и вызовы подпрограмм возможны в пределах страниц размером 2K. Чтобы перейти по адресу за пределами страницы, надо недостающие биты записать в PCLATH.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Последняя проблема. Отладил код. Вроде все работает, порты настроил в veiw->watch все значения меняются. в протеусе не работает
если заземлить разрешение на запись в регистрах сдвига все работает. Прогонял пошагово

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

CALL	rasshifrovka1	
	BCF	PORTA,1				
	CALL	Otobrajenie
команда BCF PORTA,1 обнуляет значение второго бита(это видно в veiw->watch) в протеусе и на железе там 1.
Как такое вообще возможно?????
Выкладываю все файлы
файл протеуса 111 как раз тот где эта нога на землю и на индикаторе все отображается(по крайней мере отображается это уже хорошо)
Вложения
sdb.rar
(72.62 КБ) 316 скачиваний
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Проблема с кодом

Сообщение otest »

команда BCF PORTA,1 обнуляет значение второго бита(это видно в veiw->watch) в протеусе и на железе там 1.
следующая команда ставит бит
CALL rasshifrovka1
BCF PORTA,1
CALL Otobrajenie
BSF PORTA,1
zaderjka
MOVLW 0C4h
MOVWF N0
cyl1
MOVLW 0FFh
MOVWF N1
cyl2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ N0,1
GOTO cyl2
DECFSZ N1,1
GOTO cyl1
RETURN
здесь бесконечный цикл
Подпрограмма Otobrajenie написана в лоб.
Algor
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Сб июн 09, 2012 23:09:42

Re: Проблема с кодом

Сообщение Algor »

Ну перед тем как устанавливается 1 вызывается подпрограмма отображения. Сегменты не подсвечиваются из чего я сделал выдод что RA1 не сбрасывается(ведь если заземлить разрешение то все в порядке). А код примитивный потому что писал еще в начале сема пока еще не сильно освоился с ассемблером и пиками вообще(да и щас еще печально как видите), так что каюсь но переписать времени нет.(хотя экзамен уже сдал так что наверно все же перепишу все как надо). А ошибки у меня в слове конфигурации, оттого и не пашет ничего, так что пока тему можно закрывать. Еще раз всем спасибо.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»