-
25.08.2005, 01:32 #16
- Регистрация
- 30.04.2002
- Адрес
- Липецк, Россия
- Возраст
- 55
- Сообщений
- 935
- Записей в дневнике
- 16
- Поблагодарили
- 64
- Поблагодарил
- 4
Я хоть и не считаю себя крутым "спецом-программистом" , но посоветовать кое чего могу, однако несколько непонятно... Какой пример Вам нужен ? У меня пример из даташита используется уже пару лет... Если он у вас не работает , то надо пытаться локализировать глюк ...
Сделайте вывод на ЖКИ не по кнопке, а по запуску PIC. И посмотрите , что получится...
Я Вам привел реальный пример реальной программы от RW4LED --- Вы ее посмотрели? Там есть и вывод на ЖКИ и она нормально компилируется.
Делайте какие-нибудь эксперименты и задавайте вопросы , описывая их ... А иначе сдвинуться с мертвой точки сложно...
Удачи!
RU3GA
-
25.08.2005, 17:38 #17
- Регистрация
- 11.07.2003
- Адрес
- г.Заозерск Мурманская обл.
- Возраст
- 59
- Сообщений
- 215
- Поблагодарили
- 3
- Поблагодарил
- 0
Переписал программу, убрал опрос кнопки. Но всё-равно выводится двойка во всех десяти разрядах. Мне надо выводить число в нужном мне разряде. Что не правильно? Спасибо!
-
26.08.2005, 09:06 #18
- Регистрация
- 30.04.2002
- Адрес
- Липецк, Россия
- Возраст
- 55
- Сообщений
- 935
- Записей в дневнике
- 16
- Поблагодарили
- 64
- Поблагодарил
- 4
Во-о-о-о.... Вот теперь вижу , что все работает без глюков
Все нормально!
Вместо "goto wyw" поставьте NOP --- и будет одна "двойка" в первом разряде.
Вы выводите "2" ровно десять раз --- вот она и заполняет экран. Почему именно десять раз? Так у Вас команда "btfss FSR,4" этим занимается Ваша ошибка в том , что Вы применили FSR, но его фактически не используете .
По всей видимости, Вы немного не разобрались в программе из даташита и применении FSR.
Попробую изложить простыми словами вобщем алгоритм вывода (по программе из даташита):
1. "Обзываем" первый регистр "экранной памяти" --- 0х26 как screen.
Это значит , что начиная с регистра 0х26 у нас будут лежать цифры , которые нам надо вывести. Поскольку цифр на индикаторе 10 , то у нас будут заняты 10 регистров 0х26 -- 0х2F . Сами цифры мы пока туда не положили --- мы только определили место , где они будут лежать.
2. Заполним эти регистры цифрами , что б было что выводить.
Т.е. занесите в эти регистры нужные Вам данные --- в даташите этого нет , там подразумевается , что эти данные уже там лежат.
3. Заносим в FSR значение screen.
4. Далее работаем с регистром INDF.
Почему с ним? Ведь мы его даже не объявляли?
А его и не надо объявлять --- он служебный и обращаясь к нему мы фактически обращаемся к тому регистру, адрес которого записан в FSR , а в FSR --- у нас сейчас что записано? --- 0х26 (см. пункт 3) Значит мы, обращаясь к INDF, работаем с регистром по адресу 0х26 , а там у нас что записано? --- первая цифра для вывода на экран (если Вы конечно выполнили пункт 2 )
5. Обработав регистр INDF (т.е. послав биты на индикатор), делаем инкремент FSR и переходим опять в начало цикла вывода. Теперь в FSR у нас записано 0х27 и поэтому , обращаясь к INDF , мы работаем с регистром по адресу 0х27, а там у нас записана вторая цифра для вывода на экран --- вобщем зацикливаем программу. Однако не просто зацикливаем, а проверяем --- все ли 10 цифр мы вывели на экран --- если все десять , то надо останавливаться --- вот поэтому мы в конце цикла вывода проверяем 4 бит FSR. Дело в том что в числе 0х30 ( это следующее число за 2F , а в 2F у нас хранится последняя --- 10-тая--- цифра для вывода ) появляется "1" в четвертом бите --- т.е если появилась "1" в четвертом бите FSR, то значит мы вывели все 10 цифр на экран и пора останавливаться Таким образом, начало "экранной памяти" 0х26 --- выбрано не случайно (ведь можно было выбрать 0х25 , или 0х10 --- как Вы выбрали для своей переменой ind ) , а именно для удобства проверки конца выполнения вывода на экран...
Уф... Устал по клавишам бить
Вот в свете вышеизложенного взгляните на свою программу --- у Вас FSR используется только как счетчик количества знаков для вывода , при чем значение этого счетчка -- 10 (Вы сначала "забили" в него значение 0х26 , а потом , делая с каждым циклом инкремент, проверяете , не появился ли 4 бит в FSR --- как только он появился --- подпрограмма вывода на ЖКИ у Вас заканчивается) . Вот у Вас и выводится ровно 10 двоек
P.S. Если все равно непонятно --- пишите --- будем разбираться ...
Я в свое время так намыкался по форумам , где "профи" тебе "влёт" указывают на ошибку и еще так поливают грязью по ходу дела , что исчезает само желание программировать А уж ham-ы между собой всегда легко пообщаются на любые темы --- и без всяких "напрягов"!
Удачи!
RU3GAПоследний раз редактировалось RU3GA; 27.08.2005 в 11:11.
-
31.08.2005, 12:32 #19
- Регистрация
- 11.07.2003
- Адрес
- г.Заозерск Мурманская обл.
- Возраст
- 59
- Сообщений
- 215
- Поблагодарили
- 3
- Поблагодарил
- 0
Спасибо за подсказку. Убрал команду btfss FSR,4. Переписал прогу. Всё равно выводится двойка несколько раз. Не во временных парамерах-ли вся проблема?
-
31.08.2005, 12:34 #20
- Регистрация
- 11.07.2003
- Адрес
- г.Заозерск Мурманская обл.
- Возраст
- 59
- Сообщений
- 215
- Поблагодарили
- 3
- Поблагодарил
- 0
Поторопился и не присоединил файл программы...
-
31.08.2005, 12:45 #21
- Регистрация
- 30.04.2002
- Адрес
- Липецк, Россия
- Возраст
- 55
- Сообщений
- 935
- Записей в дневнике
- 16
- Поблагодарили
- 64
- Поблагодарил
- 4
Я не пойму --- почему Вы не хотите использовать подпрограмму из даташита индикатора?
У Вас на индикаторе --- 10 цифр! Вот и выводить надо все десять --- иначе последствия будут не предсказуемы --- как у Вас.
Хотите двойку в первом разряде ? Ну так и выведите сначала 9 штук "0000" , а потом "двойку" --- вот тогда будет все "честно"... И все заработает ....
-
01.09.2005, 17:47 #22
- Регистрация
- 11.07.2003
- Адрес
- г.Заозерск Мурманская обл.
- Возраст
- 59
- Сообщений
- 215
- Поблагодарили
- 3
- Поблагодарил
- 0
Я не совсем понял, как забить 10 значений для вывода... По адресу 0x26 заносим скажем 0, по адресу 0x27 - 0, по адресу 0x28 - 0 и т.д. Потом вывод. Правильно или нет? Но ведь незначащие нули необходимо погасить. Зачем их выводить? Тяжело общаться в форуме. Вопросов масса... В даташите по умолчанию используется частота кварца 5 мгц, у меня 4 мгц. Может в этом всё дело?
-
02.09.2005, 08:52 #23
- Регистрация
- 30.04.2002
- Адрес
- Липецк, Россия
- Возраст
- 55
- Сообщений
- 935
- Записей в дневнике
- 16
- Поблагодарили
- 64
- Поблагодарил
- 4
Первоначальное сообщение от RW1ZK
Я не совсем понял, как забить 10 значений для вывода... По адресу 0x26 заносим скажем 0, по адресу 0x27 - 0, по адресу 0x28 - 0 и т.д. Потом вывод. Правильно или нет? Но ведь незначащие нули необходимо погасить. Зачем их выводить? Тяжело общаться в форуме. Вопросов масса... В даташите по умолчанию используется частота кварца 5 мгц, у меня 4 мгц. Может в этом всё дело?
При "0000" --- выводится как раз ПУСТОЙ знак на индикаторе. Ноль выводится при коде "1010"
А в остальном все верно как Вы описали --- заносим в ячейки 0х26 - 02F --- десять нужных значений. И цикл вывода на индикатор состоит из вывода ВСЕХ десяти значений --- вот тогда все будет корректно.
Тактовая частота в данном случае значения не имеет.
Заставьте работать сначала код из даташита, а уж потом его модернизируйте так как Вам нравится --- я обычно так поступаю Я честно говоря не понимаю в чем проблема. Вроде работу кода из даташита я объяснил, вопросов с Вашей стороны вроде не было --- скопируйте его мышкой к себе. Перед вызовом подпрограммы "fresh_screen" занесите 10 значений в нужные ячейки --- и у Вас сходу все заработает А уж потом меняйте то , что Вам надо и следите за тем , сохраняется ли работоспособность ...
Если тяжело в форуме --- "стучитесь" в аську : 333-903-770
Я постоянно доступен в будни днем ( на работе), часто вечером (из дома), часто в выходные (из дома). Правда я с понедельника в отпуске --- так что буду только из дома ( с 18.00 в будни и в любое время в выходные)...
Социальные закладки