Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 38 99

Zandy: Попробуйте сами открыть ссылку. Кракозябры
Правой кнопкой на странице: кодировка->кирилица(windows). Или: кодировка->дополнительно->кирилица(windows).

picmaniac: НУ ЗАДАВАЙТЕ ЖЕ ВОПРОСЫ КОНКРЕТНО!!!
По макрокомандам. Вот, к примеру:

jnz MACRO metka1 ; условный переход,
btfss STATUS,Z ; если не 0
goto metka1
endm

Допустим, мы используем её три траза, значит в тексте будет три "metka1", или как? Компилятор это в ступор не введет?
Приведите, пожалуста, пример кода с этими командами.

 

"Одно замечание - я не стал бы так делать:
bcf PORTA,OutL ; Установить RА0 в 0
bsf PORTA,OutR ; Установить RА1 в 1"

Я поправил.

61013.asm

 

Все-же лучше, рисуя алгоритмы, общепринятого придерживаться
http://science.web.tstu.ru/19.003-80.rar
Размеры блоков точно можно и не соблюдать, сейчас в этом свобода...
Zandy! У Вас в алгоритме прямоугольник и в нем "задержка 100мс"
это ведь означает, что контроллер только этим занимается..а мир в это время меняется,
кстати за это время могут еще и другую кнопку ткнуть....
Когда-то удалось посмотреть листинг контроллера клавиатуры Писюка...даа наворочено там.
И недаром, она ведь "прощает" короткий дребезг соседней от нажимаемой клавиши при быстром немного сбоку движении пальцев..

 

Zandy: вы присоединитесь или нет?
.. да я вот смотрю, на то, что Вы тут picmaniac-oм понаписали.. для меня это, ну если не "китайская", то как минимум "английская" (со словарём) грамота. Ещё немного и "присоединюсь".. - Чует моё сердце...
picmaniac: ЗАДАВАЙТЕ ЖЕ ВОПРОСЫ КОНКРЕТНО!!!
Вас наверное удивит мой вопрос, но скажите пожалуйста, я правильно понимаю, что есть какой-то стандартный набор команд, который пишется в начале ВСЕХ программ.
например: __CONFIG 3FF0h - непонятно, что это и для чего...
или: org 0 - почему "0", а не скажем 100h.., и что значит "org"?
И, самое главное, надо ли каждый наз в программах писать:
TMR0 EQU 01h
PC EQU 02h
STATUS EQU 03h
FSR EQU 04h
; pегистpы ввода/вывода
CNTRLPORT EQU 05h
DATAPORT EQU 06h
; ячейки ОЗУ
SCRATCH EQU 0Ch
DIGIT EQU 0Dh
; биты pегистpа STATUS
C EQU 0h
DC EQU 1h
Z EQU 2h
PD EQU 3h
TO EQU 4h
RP EQU 5h
; упpавляющие pегистpы
TRISA EQU 85h
TRISB EQU 86h
; слова инициализации для поpтов ввода/вывода
INITA EQU B'00000000'
INITB EQU B'00000000'
Вот в чём вопрос!? И, если не надо, то как же без них? Они ведь нужны для инициализации-то...

Zandy: Мне одному не так "позорно" будет.
Так что видите, мне более позорно, потому что я не знаю даже простЕЙШих вещей...

 

Левон: есть какой-то стандартный набор команд, который пишется в начале ВСЕХ программ.
picmaniac!, может где встречали НАИПОДРОБНЕЙШИЕ комментарии в каком-либо листинге.
Похоже, такое поможет стартовать.

 

Vlad_Petr: это ведь означает, что контроллер только этим занимается..а мир в это время меняется,
кстати за это время могут еще и другую кнопку ткнуть....

Это я понимаю, но мы работаем по конкретному заданию №3. Оно упрощено в этом смысле. Конечно, если заморачиваться дребезгом и различными вариантами нажатия кнопок по полной программе, то наверное надо делать не так. Будет другое задание, там и будем разбираться.

Левон: __CONFIG 3FF0h - непонятно, что это и для чего...
Ненаглядно, да. Здесь я виноват, каюсь. Объясню. Существуют т. н. биты конфигурации, которые надо прописывать в начале любой программы. Там можно установить различные опции, например, выбрать тип генератора, защитить программу от чтения, включить или выключить WDT и т. д. Чтобы их выставить, я поступаю очень просто. В меню MPLAB захожу в configure - configuration Bits. Там выставляю необходимые мне опции, считываю 16-ричное число в столбце Value и вставляю его в программу. Можно поступать по-другому, может более наглядно прописывать текстом, но мне кажется, что я делаю проще.

Левон: org 0 - почему "0", а не скажем 100h.., и что значит "org"?
Это директива асма, означает, с какого адреса начинается выполнение программы. Если не указана, то программа начинается с 0 адреса, поэтому "org 0", вобщем-то смысла не имеет, можно не писать, но вдруг вы начнете с другого адреса, а такое написание, как-то дисциплинирует.

Левон: И, самое главное, надо ли каждый наз в программах писать:
TMR0 EQU 01h
PC EQU 02h
STATUS EQU 03h
FSR EQU 04h
; pегистpы ввода/вывода
CNTRLPORT EQU 05h
DATAPORT EQU 06h
; ячейки ОЗУ
SCRATCH EQU 0Ch
DIGIT EQU 0Dh
; биты pегистpа STATUS

Тут дело такое. Если к проекту присоединен .INC файл, то регистры специального назначения можно и не прописывать, если вы будете пользоваться мнемоникой, как в INC файле. Также названиям стандартных битов там уже присвоены номера, поэтому в программе, вместо номера бита можно указывать название.
Регистры общего назначения, с которыми вы работаете, прописывать необходимо. Если вместо какой-то константы хотите использовать в программе буквенное обозначение, тоже надо прописывать. Тоже и с вами придуманными названиями битов - тоже надо прописывать.

Например:
Левон: слова инициализации для поpтов ввода/вывода
INITA EQU B'00000000'
INITB EQU B'00000000'

Это всего навсего означает, что в программе вместо того, чтобы писать B'00000000', вы можете записать INITA или INITB. Только и всего. Никакого потаенного смысла это не имеет, а делается для удобства чтения и понимания написанной программы.

 

Vlad_Petr: НАИПОДРОБНЕЙШИЕ комментарии в каком-либо листинге.

Цикл статей ASD в журнале Радио.

 

Splav56: Цикл статей ASD в журнале Радио.
Где бы этот цикл "качнуть" одним файлом. А то копаться в старых журналах - "многих нет, а те далече".
Левону. По поводу прописывания регистров, переменных, констант, битов и т. д. Есть тут небольшая хитрость, которой можно воспользоваться, хотя это и не методологично. При написании программы можете вставлять любые названия ваших регистров, констант, битов в виде любой мнемоники или абревиатур. При ассемблировании проекта MPLAB выдаст вам кучу ошибок. Двойной щелчок на ошибке перекинет вас в ту строчку листинга, где эта ошибка находится. Т. е, например, забыли прописать переменную - пожалуйста получите ошибку. Берете и прописываете. Здесь как раз все просто. MPLAB просто не даст вам сделать эти глупые ошибки, он сам следит за тем, чтобы с точки зрения оформления программы, все было правильно.

 

Zandy: Где бы этот цикл "качнуть" одним файлом.

У меня нету. Я распечатывал с каждого журнала.

 

Splav56: У меня нету. Я распечатывал с каждого журнала.
Не укажете номера?