Форум РадиоКот https://radiokot.ru/forum/ |
|
Проблема с кодом https://radiokot.ru/forum/viewtopic.php?f=20&t=74008 |
Страница 1 из 1 |
Автор: | Algor [ Чт июн 14, 2012 21:44:51 ] | |||
Заголовок сообщения: | Проблема с кодом | |||
Помогите пожалуйста, совсем отчаялся. Сварганил написал код 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]![]()
|
Автор: | GRAF [ Чт июн 14, 2012 22:22:06 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Algor писал(а): проверял несколько раз такой регистр есть. Где он есть? В МК? В подключаемом файле (p16F628A.inc) видимо нет. По первому слову тожо, там же написано в комментах, что эти директивы должны быть в инклюдах. Какой-то файл вы не подключили, в котором описаны эти директивы, вот он и ругается. |
Автор: | BorisSPB [ Чт июн 14, 2012 22:35:43 ] |
Заголовок сообщения: | Re: Проблема с кодом |
У 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 [ Чт июн 14, 2012 23:23:46 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Спасибо большое отключу компараторы, позволит ли это использовать PORTA, 4 как цифровой выход(просто знаю что там свои тонкости он же подключен к таймеру счетчику), а насчет того что не все файлы подключил можно ли поподробнее. Их же всего 2 надо 16F628ATEMP.ASM и P16F628A.INC я их скинул в папку с проектом, что еще надо? И насколько я понял из Код: TRISA<5> always ;read as ‘1’. ;TRISA<7:6> порт А 5 всегда настроен на вход и настроить его на выход возможности нет? |
Автор: | BorisSPB [ Чт июн 14, 2012 23:49:24 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Файл p16f628a.inc не нужно копировать в папку проекта, в свойствах проекта должны быть указаны пути где искать инклуды. Константа DATA_CP_OFF пишется без подчеркивания вначале. У PIC12 и PIC16 вывод на котором MCLR всегда работает только как цифровой вход. Вывод RA4 с открытым стоком, его надо подтянуть резистором на Vdd. |
Автор: | Algor [ Пт июн 15, 2012 00:33:24 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Зачем присоединять RA4 через резистор к питанию, резистор должен быть на сколько, 1КОм? И как его тогда вообще можно использовать? |
Автор: | BorisSPB [ Пт июн 15, 2012 08:24:08 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Если регистры серии 74HC, резистор на RA4 может быть 10кОм или еще больше. Не лучше ли будет соединить регистры последовательно (вывод DS(14) первой микросхемы вход, а далее Q7S(9) с DS следующей, SHCP(11) параллельно) и для обновления дисплея просто ввести новые данные для всех сегментов всех разрядов. С использованием 74HC595 динамическая индикация не нужна, их выходы сохраняют состояние до следующего импульса на выводе STCP (12). Выводы OE (13) можно посадить на Vss. |
Автор: | Algor [ Пт июн 15, 2012 10:25:21 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Немного не понятно как будет работать RA4 через резистор присоединенный к питанию, а в остальном мысль конечно интересная но оставлю уже как есть, тем более что динамическую подсветку не использую, а ОЕ довольно часто. Обновил принципиальную схему, вроде все косяки убрал. И еще насколько легко 74НС убить статикой(просто может от этого ничего не пашет) |
Автор: | Algor [ Пт июн 15, 2012 10:30:28 ] |
Заголовок сообщения: | Re: Проблема с кодом |
![]() |
Автор: | BorisSPB [ Пт июн 15, 2012 12:21:17 ] |
Заголовок сообщения: | Re: Проблема с кодом |
В предыдущем варианте RA4 был использован как разрешение четвертого индикатора, тогда резистор был нужен чтобы задать высокий уровень на этом выводе. В новом варианте RA4 не использован, значит и резистор не нужен. Что касается 74HCxxx, просто так их не убить, нужен серьезный разряд. |
Автор: | Algor [ Пт июн 15, 2012 16:40:37 ] | ||
Заголовок сообщения: | Re: Проблема с кодом | ||
Исправил код в соответствии с исправленной принципиальной схемой, и еще парочка доработок из тех что вы все мне посоветовали(спасибо всем большое), код теперь компилится но в протеусе МК по прежнему не подает признаков жизни(на железе протестирую ближе к вечеру, но почему то уверен что результат будет тот же). Помогите пожалуйста найти ошибку.
|
Автор: | Algor [ Пт июн 15, 2012 16:59:33 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Код без коментов, так что спрашивайте. Хотя он такой примитивный что и так понятно вроде. |
Автор: | Algor [ Пт июн 15, 2012 18:49:14 ] |
Заголовок сообщения: | Re: Проблема с кодом |
В отладчике пытаюсь посмотреть как работает код, команды bsf не устанавливает нужный мне бит.((( В смысле порт настроен правильно, выполняется BSF PORTA,1 а в меню View->Watch в этих регистрах по прежнему нули!!( Я уже в отчаянье подскажите в чем может быть проблема??(использую отладчик MPLAB SIM) |
Автор: | BorisSPB [ Пт июн 15, 2012 19:17:35 ] |
Заголовок сообщения: | Re: Проблема с кодом |
В самом начале кода (стр.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 [ Пт июн 15, 2012 20:30:58 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Огромное спасибо!!! И еще такой вопрос как избежать подобных ошибок при работе с константами(или это не актуально?)? |
Автор: | BorisSPB [ Сб июн 16, 2012 09:15:18 ] |
Заголовок сообщения: | Re: Проблема с кодом |
ОЗУ поделено на банки потому что в коде команды на адрес выделено 7 бит, остальные биты адреса это RP1 и RP0 регистре STATUS. По той же причине (11 бит адреса в коде команды) прямые переходы и вызовы подпрограмм возможны в пределах страниц размером 2K. Чтобы перейти по адресу за пределами страницы, надо недостающие биты записать в PCLATH. |
Автор: | Algor [ Сб июн 16, 2012 14:16:16 ] | ||
Заголовок сообщения: | Re: Проблема с кодом | ||
Последняя проблема. Отладил код. Вроде все работает, порты настроил в veiw->watch все значения меняются. в протеусе не работает если заземлить разрешение на запись в регистрах сдвига все работает. Прогонял пошагово Код: CALL rasshifrovka1 BCF PORTA,1 CALL Otobrajenie команда BCF PORTA,1 обнуляет значение второго бита(это видно в veiw->watch) в протеусе и на железе там 1. Как такое вообще возможно????? Выкладываю все файлы файл протеуса 111 как раз тот где эта нога на землю и на индикаторе все отображается(по крайней мере отображается это уже хорошо)
|
Автор: | otest [ Сб июн 16, 2012 16:36:33 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Цитата: команда 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 [ Сб июн 16, 2012 19:51:38 ] |
Заголовок сообщения: | Re: Проблема с кодом |
Ну перед тем как устанавливается 1 вызывается подпрограмма отображения. Сегменты не подсвечиваются из чего я сделал выдод что RA1 не сбрасывается(ведь если заземлить разрешение то все в порядке). А код примитивный потому что писал еще в начале сема пока еще не сильно освоился с ассемблером и пиками вообще(да и щас еще печально как видите), так что каюсь но переписать времени нет.(хотя экзамен уже сдал так что наверно все же перепишу все как надо). А ошибки у меня в слове конфигурации, оттого и не пашет ничего, так что пока тему можно закрывать. Еще раз всем спасибо. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |