MAZ Отправлено: 16.10.10 22:24. Уважаемый Михаил Алексеевич
mishandlen я удалил тему в которой Вы задали вопрос.
Сейчас не помню, где искать эту программу.
Пожалуйста, покажите Вашу программу и особенно конфигурацию.
m816ve90 mishandlen пишет:
цитата:
Вот это:
----------------------------------------------------------------------
Debug build of project `C:\Files\PIK16F877A\877.mcp' started.
Language tool versions: MPASMWIN.exe v5.36, mplink.exe v4.36, mplib.exe v4.36
Preprocessor symbol `__DEBUG' is defined.
Sat Oct 23 10:57:36 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Files\PIK16F877A\877.mcs".
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "Untitled.asm" /l"Untitled.lst" /e"Untitled.err" /d__DEBUG=1
Warning[205] C:\FILES\PIK16F877A\UNTITLED.ASM 6 : Found directive in column 1. (LIST)
Warning[205] C:\FILES\PIK16F877A\UNTITLED.ASM 7 : Found directive in column 1. (__CONFIG)
Warning[205] C:\FILES\PIK16F877A
Немного потолмачим с аглицкого:
Сии ПРЕДУПРЕЖДЕНИЯ (варнинги) гласят о крайней нежелательности написания директив и опкода в ПЕРВОЙ колонке листинга.
Сделайте отступ в две табуляции и 205-ое предупреждение исчезнет.
Кроме того, имеется неопределенный в листинге регистр - Adcon1.
Дабы исправить эту ОШИБКУ (и впредь не допускать подобного безобразия) необходимо и достаточно прочесть мой предыдущий по теме пост. Ну и исполнить рекомендацию в нем... :)
MAZ m816ve90 пишет:
цитата:
в ветке хедеров файл:
И забыть навсегда об описании регистров спецназначения, их бит, а так же синтаксиса конфигурационного слова.
Что бы не мучить читателей воспоминаниями о назначении бит конфига....
Объясните пожалуйста, слово хедеров
И если можно, что Вы имели ввиду "синтаксиса конфигурационного слова", если можно, наглядно.
Тут ветка для начинающих. Пытаемся во всем разобраться. Сам модератор - начинающий.
m816ve90 Sergey Roslik пишет:
цитата:
Можно и так, но тогда обязательно надо прописывать регистры, как указано в *.ink файле данного конроллера.
т.е. TrisB уже не прокатит, MPLab обматюкает, надо будет прописать TRISB.
Давайте поспорим на что нибудь существенное, что при выключенной в редакторе МПЛАБа чувствительности к регистру прокатит даже если чередовать заглавные с прописными.
Кроме того, должен быть порядок. Забыли написание имени спецрегистра и/или его бита - открыли хедер и скопипастили оттуда.
Читать самопридуманные имена утомительно крайне...
m816ve90 Хедер - это жаргон от header - заголовок.
В окне проекта МПЛАБа имеется ветка хедер-файлов. Нужно при создании проекта присоединить туда одноименный с примененным контроллером файл из папки MPASM Suite Микрочиповского МПЛАБа. И во второй строке прописать сакраментальное #include.
Тогда случится чудо и все правильные имена из даташита АВТОМАТИЧЕСКИ окажутся объявленными. Просто потому, что это объявление сделали трудолюбивые америкосы из нашей горячо любимой фирмы в том самом хедере( можете его открыть редактором и подивиться)... :)
Sergey Roslik m816ve90 пишет:
цитата:
Давайте поспорим на что нибудь существенное, что при выключенной в редакторе МПЛАБа чувствительности к регистру прокатит даже если чередовать заглавные с прописными.
Кроме того, должен быть порядок. Забыли написание имени спецрегистра и/или его бита - открыли хедер и скопипастили оттуда.
А теперь объясните это начинающему, который первый раз открыл MPLab.
m816ve90 Sergey Roslik пишет:
цитата:
А теперь объясните это начинающему
В верхней строке окна МПЛАБа есть пункт Project - Build Option - Project - MPASM Assembler.
В нем нужно поставит галку в окне disable case sencitivity
Однако лучше писать традиционно. Ровно как в хедере и даташите. Читать проще. Другим. Вы же обращаетесь за помощью. Потому желательно чужое время и глаза беречь. :)
m816ve90 А вообще, господа-коллеги, настоятельно рекомендую в самом начале написания листинга СКОПИРОВАТЬ в него "рыбу" из одноименного с названием контроллера файла из папки MPASM Suite/Template/Code. Таким образом у Вас будет АВТОМАТИЧЕСКИ сформирована корректная и удобочитаема шапка, обработчик прерываний и сама секция кода. Останется только объявить переменные и написать код...
MAZ цитата:
Хедер - это жаргон от header - заголовок.
Теперь понятно. То что ниже, то же понятно.
Я про синтаксис конфигурации. Может неправильно выражаюсь, как понимаю, Вы пишите про
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF ....
или про число?
Т.е. если число компилятор понимает, без хедера.
А с хедером, уже понимает буквы?
m816ve90 MAZ пишет:
цитата:
Теперь понятно. То что ниже, то же понятно.
Я про синтаксис конфигурации. Может неправильно выражаюсь, как понимаю, Вы пишите про
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF ....
или про число?
Т.е. если число компилятор понимает, без хедера.
А с хедером, уже понимает буквы?
Компилятор понимает ровно то, что описано в проекте, включая присоединенные файлы.
Когда пишешь для себя шестнадцатиричное представление конфига - Бог с ним, о вкусах не спорят (возможно автор аскет и мазохист). Но когда публикуешь сии вирши, надлежит придерживаться ОБЩЕПОНЯТНОГО написания. И тут уж без текста никак. Ну а текст тот самый в хедере и объявлен.
MAZ Я понял. Догадывался, но не проверял.
Кодом, с самого начала, показалось пользоваться неудобно.
Есть вопрос. Ладно. Сам проверю. Не буду отвлекать. Спасибо.
Очень рад, что к нам на форум приходят знающие люди, и благожелательные люди.
m816ve90 MAZ пишет:
цитата:
Есть вопрос. Ладно. Сам проверю. Не буду отвлекать.
:) Вы не отвлекаете. Можете спрашивать в любой момент. Если присутствую тут и достоверно знаю ответ - всенепременно отвечу.
MAZ Тогда с прошу, пусть наивно.
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF ....
Эту строчку надо писать самому? Ведь можно ошибиться в правописании.
Обычно пользуюсь готовой, уже не помню откуда скопировал.
m816ve90 Немного повторюсь. В открытом проекте, где ПРИСОЕДИНЕН хедер <имя контроллера>.inc откройте его, кликнув по нему мышью в окне проекта (ветка хедер файлс).
Перед Вами откроется ТЕКСТ. Самый обычный, точно такой же как в основном асм-листинге.
В самом низу этого текста будет описание бит конфиг-регистра (регистров). С комментами и правильным синтаксисом.
Если Вы желаете изменить имеющийся конфиг - замените интересующий пункт выбранным. Строго по синтаксису хедера (копипастом)
Начальный синтаксис строки __CONFIG как директива ассемблера описан в мануале на MPASM. Можно его удобно посмотреть в хелпе МПЛАБа, выбрав соответствующий топик в окне хелпера.
Но можно и не заморачиваться, просто копируя темплейты и, заменяя в них пункты конфига на свои.
Математически содержимое конфига образуется, если описание пунктов из хедера (шестнадцатиричное) логически умножить функцией побитного И. Это и записано в фрагменте из вашего поста.
MAZ Точно. А я смотрю на "загагулину". И думаю, что она мне напоминает.
Спасибо!
Sergey Roslik m816ve90 пишет:
цитата:
Однако лучше писать традиционно. Ровно как в хедере и даташите. Читать проще. Другим. Вы же обращаетесь за помощью. Потому желательно чужое время и глаза беречь
Полностью согласен, но сколько людей столько и мнений, у каждого свой "почерк" написания программ.
m816ve90 Мнения могут быть относительно просмотренного фильма или прочитанной книги. А в технике подобные "мнения" называются дурным тоном (моветон, по французски). Ежели есть желание в обязательном порядке погулять по собственным граблям - велкам. Но умные люди обычно учатся на ЧУЖИХ ошибках...
Системное изложение, системная запись, строгое следование оптимальной форме и синтаксису даст неизбежно положительный результат.
Sergey Roslik m816ve90 пишет:
цитата:
Но умные люди обычно учатся на ЧУЖИХ ошибках...
А доходит лучше на своих
Sergey Roslik ;****************************************************************************************
; Работа с DS18B20
; Процессор PIC18F2520
; Резонатор 10 MГц
; Два термодатчика, 5 реле.
;
; Flag,0 - 0 - заслонка открыта; 1 - в среднем положении.
; Flag,7 - 0 - заслонка закрыта; 1 - в среднем положении.
;
;1000 оборотов - 33 импульса.
;****************************************************************************************
List P=18F2520
#Include <P18F2520.INC>
Errorlevel 2
;***************************************************************************************
; Конфигурирование.
;***************************************************************************************
CONFIG OSC=HS ; Кв. генератор работает в режиме HS.
CONFIG WDT=ON ; WDT выключен.
CONFIG WDTPS=1024 ; Постделитель WDT 1:128
CONFIG LVP=OFF ; Режим низковольтного программирования выкл.
CONFIG PWRT=ON
CONFIG BORV=2
;***************************************************************************************
Cblock
Temp_LSB ; Младший байт температуры.
Temp_MSB ; Старший байт температуры.
TH ; Верхний предел температуры.
TL ; Нижний предел температуры.
Rez_1 ; Байт конфигурации DS18B20.
Rez_2 ; Резерв DS18B20.
Rez_3 ; Байт COUNT_REMAIN DS18B20.
Rez_4 ; Байт COUNT_PER_C DS18B20.
CRC ; Контрольная сумма DS18B20.
CRC_1 ; Расчётная контрольная сумма.
Temp ; Регистр временных данных.
Bit ; Регистр количества битов.
Bait ; Регистр количества байт данных.
Count ; Счётчик задержки.
Flag ; Флаги.
Z1 ; Регистр знака температуры.
T3 ; Регистр температуры.
SecL ; Младший регистр задержки.
SecM ; Средний регистр задержки.
SecH ; Старший регистр задержки.
Tzo_1 ; Температура, ниже которой заслонка открывается.
Tzo_2 ; Температура, ниже которой заслонка открывается.
Tzp_1 ; Температура при 2000об.
Tzp_2 ; Температура при 1500об.
Tzp_3 ; Температура при 1000об.
Pech ; Температура включения печки.
Oborot ; Обороты прогрева двигателя.
Endc
;=============================================================================================
; Начало выполнения программы, инициализация контроллера.
;=============================================================================================
org 0xf00000
; 00h 01h 02h 03h 04h 05h 06h
de .20,.13,.10,.25,.36,.35,.80
;------- Настройки по умолчанию ----------
; 00h - Уставка первого порога заслонки Tzo_1 при остывании двигателя.
; 01h - Уставка второго порога заслонки Tzo_2 при остывании двигателя.
; 02h - Уставка прогрева двигателя при 2000об Tzp_1.
; 03h - Уставка прогрева двигателя при 1500об Tzp_2.
; 04h - Уставка прогрева двигателя при 1000об Tzp_3.
; 05h - Уставка включения печки.
; 06h - Начальные обороты прогрева двигателя.
Org .0
;==================================================================================================
Эта шапка относится к моветону ?
m816ve90 Только не лучше, а ЛЕГЧЕ. Тут трудно несогласиться. Но это просто ЛЕНЬ. За которую приходится платить. Ладно, если только потерянным личным временем. А то ведь и чужим тоже...
m816ve90 Sergey Roslik пишет:
цитата:
Эта шапка относится к моветону ?
Если не считать некоторых синтаксических ошибок, нет не относится. Вполне читаемо.
ЗЫ. Точнее не ошибок, а странной неявной записи. Речь о размещении переменных с умолчательного нулевого адреса в ОЗУ.
Если пользоваться отладчиком, то в первые 16 ячеек он впишет свое. Так ичто лучше сдвинуть чуть далее.
Не понятно зачем выключать 2-ую ошибку?
MAZ m816ve90 пишет:
цитата:
А в технике подобные "мнения" называются дурным тоном (моветон, по французски).
Наверно не в технике? В технике 30 лет.
Про " мнения", "дурные тоны", "традиции", не слышал.
Законы физики, математики, логики, специальность.
Открыть того же Атабекова, помогал сыну курсовую делать, на столе лежит. Там нет этих определений.
Зато в любой книге по программированию, полно. Особенно в сети.
Если логично сделать так, и не логично по другому, то тогда понятно, и нет вопросов.
Т.е., определенное действие, должно быть оправдано, прежде всего, логикой, а не ссылкой на традиции.
Мы этих определений нахлебались, от "консультантов". Пожалуйста, не надо, наступать на больное место..
У Вас с этим проблем нет, Вы логичны.
Sergey Roslik m816ve90 пишет:
цитата:
Если не считать некоторых синтаксических ошибок, нет не относится. Вполне читаемо.
Ну уже есть к чему стремиться.
m816ve90 MAZ пишет:
цитата:
Мы этих определений нахлебались, от "консультантов".
Позвольте сразу расставить точки. Как бы это не было обидно. Я и есть такой "консультант". Если хотите.
Радиоинженер с 81-го года. ПИКи для меня ПРОФЕССИЯ. Я на них создаю продукт. Ежедневно. По 10...12 часов. Кроме выходных. Моветон - это непредсказуемый в итоге результат. И по качеству и по срокам.
Увы.
MAZ m816ve90 пишет:
цитата:
Моветон - это непредсказуемый в итоге результат.
Ну это же не логично? "Дурной тон"(mauvais ton) хорошо, пусть будет. Учил в школе французский. Тогда , в произношение звучит муле тон.
Почему не сказать, ошибочное решение, не предсказуемый результат, "не результат". Мы же русские люди?
Вы не такой "консультант", давно Вас знаю по сети. Искренне Вас уважаю, как Человека и спеца.
Про "консультанта" на соседней ветке. Когда силы кончились.
Не горячитесь. Я же честно и открыто высказал свое мнение. У Вас сложились предубеждения, расслабьтесь.
Здесь сначала думают о человеке, потом о всем остальном. Почитайте например эту ветку для примера, и сравните, что сказали бы где-то. Ни каких оскорблений и "подколов". За этим строго следим. Еще одно правило, не даем никому оскорблять наш народ.
Искренность, на искренность. Я, официально, офицер и радиоинженер с 86. Но в связи, со сложившимися обстоятельствами, пришлось больше бегать и ползать. Кто-то должен был это делать. Может порой крышу рвет, не обращайте внимания.
О такой работе как у Вас, можно только мечтать. Ну, не сложилось, о чем не жалею. Сейчас догоняю упущенное. Надеюсь и на Вашу помощь.
Вспомнил, насчет "рыбы". У нас так звали только дипломную работу, который дали переписать, т.к. 00, то на сутки. Бригадный подряд. Я писал сам, от корки до корки. Было интересно.
Rimsky m816ve90 пишет:
цитата:
настоятельно рекомендую в самом начале написания листинга СКОПИРОВАТЬ в него "рыбу" из одноименного с названием контроллера файла из папки MPASM Suite/Template/Code.
спасибо, тоже оказалось новостью....
RW1ZK Rimsky пишет:
цитата:
тоже оказалось новостью....
Ну Вы блин даёте...
Sergey Roslik m816ve90 пишет:
цитата:
Если пользоваться отладчиком, то в первые 16 ячеек он впишет свое. Так ичто лучше сдвинуть чуть далее.
Не понятно зачем выключать 2-ую ошибку?
Я пользуюсь отладчиком, всё работает, может он по умолчанию пишет в эти ячейки, а если они заняты, то в другие (свободные). С помощью шапки не трудно определить.
Удаление ошибки осталось от другого проекта видимо, я так понимаю они не выключаются, а просто не отображаются.
И в чём преимущество использования шаблона из MPLab?
MAZ Sergey Roslik пишет:
цитата:
И в чём преимущество использования шаблона из MPLab?
Я думаю, потому, что это шаблон, предложенный производителем.
И он оптимален. Тоже пользуюсь. Но, главное, как кому удобно.
Навязывать не надо, а вот убедить или убедиться нужно.
Sergey Roslik ;******************************************************************************
; This file is a basic template for assembly code for a PIC18F2520. Copy *
; this file into your project directory and modify or add to it as needed. *
; *
; Refer to the MPASM User's Guide for additional information on the *
; features of the assembler. *
; *
; Refer to the PIC18Fx420/x520 Data Sheet for additional *
; information on the architecture and instruction set. *
; *
;******************************************************************************
; *
; Filename: *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
;******************************************************************************
; *
; Files Required: P18F2520.INC *
; *
;******************************************************************************
LIST P=18F2520 ;directive to define processor
#include <P18F2520.INC> ;processor specific variable definitions
;******************************************************************************
;Configuration bits
;Microchip has changed the format for defining the configuration bits, please
;see the .inc file for futher details on notation. Below are a few examples.
; Oscillator Selection:
CONFIG OSC = LP ;LP
;******************************************************************************
;Variable definitions
; These variables are only needed if low priority interrupts are used.
; More variables may be needed to store other special function registers used
; in the interrupt routines.
CBLOCK 0x080
WREG_TEMP ;variable used for context saving
STATUS_TEMP ;variable used for context saving
BSR_TEMP ;variable used for context saving
ENDC
CBLOCK 0x000
EXAMPLE ;example of a variable in access RAM
ENDC
;******************************************************************************
;EEPROM data
; Data to be programmed into the Data EEPROM is defined here
ORG 0xf00000
DE "Test Data",0,1,2,3,4,5
;******************************************************************************
;Reset vector
; This code will start executing when a reset occurs.
ORG 0x0000
goto Main ;go to start of main code
;******************************************************************************
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs or
; when any interrupt occurs if interrupt priorities are not enabled.
ORG 0x0008
bra HighInt ;go to high priority interrupt routine
;******************************************************************************
;Low priority interrupt vector and routine
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.
ORG 0x0018
movff STATUS,STATUS_TEMP ;save STATUS register
movff WREG,WREG_TEMP ;save working register
movff BSR,BSR_TEMP ;save BSR register
; *** low priority interrupt code goes here ***
movff BSR_TEMP,BSR ;restore BSR register
movff WREG_TEMP,WREG ;restore working register
movff STATUS_TEMP,STATUS ;restore STATUS register
retfie
;******************************************************************************
;High priority interrupt routine
; The high priority interrupt code is placed here to avoid conflicting with
; the low priority interrupt vector.
HighInt:
; *** high priority interrupt code goes here ***
retfie FAST
;******************************************************************************
;Start of main program
; The main program code is placed here.
Main:
; *** main code goes here ***
;******************************************************************************
;End of program
END
Вот, я его достал. Могу я на это место вложить свой шаблон и при необходимости использовать, и каким образом?
Rimsky
Отправлено: Вчера 21:46. Rimsky пишет:
цитата:
тоже оказалось новостью....
RW1ZK пишет:
цитата:
Ну Вы блин даёте...
На самом деле, лично мне эта "рыба" как собаке пятая нога для меня оказалось новостью сам факт наличие таких заготовок
RW1ZK
Отправлено: Вчера 21:52. Rimsky пишет:
цитата:
для меня оказалось новостью сам факт наличие таких заготовок
Бывает... Раньше я тоже пользовался этим шаблоном. Потом остановился на приемлемом для меня.
MAZ
Отправлено: Вчера 21:58. Я пользуюсь, по скудности своих запасов и знаний, несколькими типами контроллеров. В свое время создал свои шаблоны из предложенных и ими пользуюсь.
Зачем мне лишние слова, которые почти не понимаю. Заменил русскими.
Мне так удобно. Т.к. всегда пользуюсь отладчиком.
программа начинается ( для средних)
org 0x000
nop ;чтобы не забыть
clrf PCLATH
Прерывание не пишу. так как бывают, все равно, разные варианты.
C 18 только теоретически, так как пока не было надобности.
Программы пишу не ради программы, а ради устройства, где она будет работать. Радиолюбители, когда то были.
Т.е. нужен обязательно, конечный, реальный, результат в железе. И "сдача в эксплуатацию".
Под 18 пока нет реального проекта.
hotographer m816ve90 пишет:
цитата:
настоятельно рекомендую в самом начале написания листинга СКОПИРОВАТЬ в него "рыбу" из одноименного с названием контроллера файла из папки MPASM Suite/Template/Code.
Классно, а я и не знал. Всем пригодится и мне.
Только вот слово "рыба" не нравится... не круто, ни разу. Может всё таки шаблон?
m816ve90 Когда я учился в школе и институте, под термином "рыба" понимался как раз шаблон. Шаблон лабораторки, шаблон сочинения и т.п. Давно это было...
Так что Вы правы. Это шаблон. Тем более, что по английски оно так и называется (tеmplate)
m816ve90
Отправлено: Вчера 22:00. Я как раз отвечаю автору вопроса.
Так что все по теме.
Прежде всего нужно определится с прерываниями.
Если не требуется приоритетная двухуровневая система, то секцию "лоу приорити" по вектору 0х18 удаляем.
Остается только 8-ой вектор с быстрым сохранением контекста (т.е. сохранять программно вовсе не нужно, а выход по retfie FAST).
Далее удаляете все переменные связанные с сохранением контекста (WREG, STATUS, BSR) из секции данных.
После этого дописываете конфиг по своему коду (подглядывая за синтаксисом в хедер).
Наконец выясняете с потребностями по флешу данных (требуется ли предварительное программирование) и соответственно удаляете или исправляете эту секцию.
Ну и наконец, пишите свое поверх оставшегося и, соблюдая форматирование шаблона.
Единственно, что хотелось бы посоветовать - используйте две табуляции от левого края до кода и две табуляции от опкода до аргумента. Так читать много приятнее.
Ну и совсем напоследок. В 18-х ПИКах есть совершенный хит. Это конечно PIC18F25K20 ( и варианты этого камня с другой памятью и числом пинов). Стоит сущие копейки 65...70 рублей. 16 МИПС (64 МГц с ПЛЛ). Три брекпойнта в отладчике.
Я его сую практически во все проекты... С точки зрения функционала - усовершенствованная копия PIC18F2520, только питание 3,6 вольта. Но это у всех новых камней так.