помощ лузерам в прогромировании МК PIC

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25124
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: помощ лузерам в прогромировании МК PIC

Сообщение КРАМ »

Возможно и это, если Вы разрешите и обслужите ВЛОЖЕННЫЕ прерывания (придется сохранять контекст дважды по уровню максимального вложения).
Можно взять более совершенную архитектуру (пик24, например) и вопрос с прерыванием прерывания будет решаться очень просто. Нужно будет только прописать приоритеты.
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: помощ лузерам в прогромировании МК PIC

Сообщение Smen »

wss60 писал(а):Значит в pic16 только одно прерывание
Прерываний много, вектор один. :wink:
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Re: помощ лузерам в прогромировании МК PIC

Сообщение Пока_без_кота »

Доброго времени суток. Тусуюсь в основном в ветке по MCS-51, так как изучаю их (нравятся они мне). Но по работе надо PIC, поэтому пришлось парралельно начать и их изучение. Интересные надо сказать процы оказались, даже не думал. Одни только табличные переходы (возврат по retlw) чего стоят :)) И вот, в процессе изучения возникло несколько вопросов: есть комада movwf (из акумулятора в регистр), а вот вместо обратной команды movfw (из регистра в аккумулятор) надо использовать movf f,0. Но если я в MPLAB IDE наберу movfw, оно выделит ее как существующую команду. Так есть ли такая команда ??? И зачем нужна команда movf f,1 - зачем переписывать регистр сам в себя ? Разве что только считать существующие значения на пинах порта...
Последний раз редактировалось Пока_без_кота Чт дек 10, 2015 15:20:30, всего редактировалось 2 раза.
driver_gv
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону
Контактная информация:

Re: помощ лузерам в прогромировании МК PIC

Сообщение driver_gv »

Ну например таким образом можно узнать число отрицательное,положительное или нулевое в регистре, так как команда влияет на флаги N и Z
Вместо 0/1 лучше писать MOVF reg,W или MOVF reg,F
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: помощ лузерам в прогромировании МК PIC

Сообщение Albert_V »

Пока_без_кота, какая команда на какие влияет флаги - всегда смотрите INSTRUCTION SET SUMMARY на ваш контроллер.
Дело в том, что у разных поколений PIC-контроллеров есть отличия в наборе команд и на какие флаги влияет "вроде бы, одна и та же" команда.
К примеру, флаги после выполнения команды INCF:
у PIC16F87X - флаг Z
У PIC18F2X/4XK22 - флаги C, DC, Z, OV, N
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Re: помощ лузерам в прогромировании МК PIC

Сообщение Пока_без_кота »

Спасибо. Вот не поленился проверить, вбил в свою программку бегущего огонька movfw вместо movf f,0 и оно работает. Хотя такой команды в списке 35 команд моего 16F84 нет))

Спойлер

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

   list   p=16F84A
   __Config 3FF1

pcl      equ   02
status   equ   03
portA   equ   05
trisA   equ   05
portB   equ   06
trisB   equ   06
pointer   equ   10
del_1   equ   11
del_2   equ   12
 
   org     0

start
   bsf      status,5   ; Выбор 1 банка памяти
   movlw   b'00011111'   ; Весь порт на ввод
   movwf   trisA      ; W в trisA
   movlw   b'00000000'   ; Весь порт на вывод
   movwf   trisB      ; W в trisB
   bcf      status,5   ; Выбор 0 банка памяти
Main   
   movlw   0         ; Потушим весь порт
   movwf   portB      ; Перенос W в portB
   movwf   pointer      ; Очищаем указатель             
Loop
   movfw   pointer      ; Указатель в аккумулятор, по нему будем вытягивать из поисковой таблицы состояние порта
   call   Table      ; Перейдем в поисковую таблицу
   movwf   portB      ; Выведем то, что взяли из нее, в порт В
   call   Delay
   incf   pointer,1   ; Увеличим указатель
   btfsc   pointer,3   ; Если 3 бит установлен, значит счетчик уже досчитал до 8 (00001000), а значит пора его обнулять
   clrf   pointer      ; Досчитали до 8, обнуляем
   goto   Loop      ; Зациклимся
;*****************************************************
Delay
   movlw   d'255'
   movwf   del_2
Reload_del_1
   movlw   d'255'
   movwf   del_1
No_reload_del
   decfsz   del_1,1
   goto   No_reload_del
   decfsz   del_2,1
   goto   Reload_del_1
   return
;******************************************************
Table
   addwf   pcl         ; Добавим значение указателя к текущему значению счетчика команд, перейдя таким образом на команду возврата с необходимым состоянием порта

   retlw   b'00000001'
   retlw   b'00000010'
   retlw   b'00000100'
   retlw   b'00001000'
   retlw   b'00010000'
   retlw   b'00100000'
   retlw   b'01000000'
   retlw   b'10000000'

   end
driver_gv
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону
Контактная информация:

Re: помощ лузерам в прогромировании МК PIC

Сообщение driver_gv »

Раздел Special Instruction Mnemonics в документе MPASM USER’S GUIDE
Там еще много других мнемоник упрощающих жизнь, например
BZ k - Branch on Zero =
BTFSC 3,2
GOTO k
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: помощ лузерам в прогромировании МК PIC

Сообщение scorpi_0n »

Я эти макросы начинающим не показывал бы. Они их путают с командами со всеми вытекающими.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: помощ лузерам в прогромировании МК PIC

Сообщение Albert_V »

scorpi_0n, полностью поддерживаю.
Лучше, пусть смотрят список команд в документации на контроллер (у Microchip-а эта информация "на поверхности").
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Re: помощ лузерам в прогромировании МК PIC

Сообщение Пока_без_кота »

Подскажите еще такой момент. В 8051 есть очень удобная команда сравнения с константой. В Пиках я пока вижу только способ побитной проверки. Например, сравнить инкрементируемую переменную с числом 13 (дес.) = 1101 (дв.). Я начиная от старшего к маладшему проверяю 3,2,0 бит на установку командами btfss, и если 3 бит установлен, проверяю 2, и в конце 0 бит. Существует ли более елегантное решение ? Потому что сравнивать таким способом например с числом 255 это как-то ...
Последний раз редактировалось Пока_без_кота Пн дек 14, 2015 09:51:44, всего редактировалось 2 раза.
driver_gv
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону
Контактная информация:

Re: помощ лузерам в прогромировании МК PIC

Сообщение driver_gv »

XORLW Constant сравнение W с константой, результат Флаг Z =1 значит равны
XORWF Reg, W/F сравнение W с регистром , результат Флаг Z =1 значит равны, модификация регистра или W

сравнение вычитанием

MOVLW CONST
SUBWF REG,W/F

Z=1 - РАВНЫ
С=1 - REG>=CONST

Для 18 серии смотрите также
CPFSEQ
CPFSGT
CPFSLT
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Re: помощ лузерам в прогромировании МК PIC

Сообщение Пока_без_кота »

driver_gv писал(а):XORLW...

Спасибо, оперативно :)))
Аватара пользователя
501
Родился
Сообщения: 12
Зарегистрирован: Сб апр 03, 2010 10:10:10

Re: помощ лузерам в прогромировании МК PIC

Сообщение 501 »

Всем привет! Прошу помощи.
Имеется схема DC-AC преобразователя, на PIC12F629 в качестве ШИМ. Рабочая частота 25 Кгц.
Схему собрал, работает отлично, но хочется разобраться, как в исходнике правильно изменить частоту, на 50Кгц, 100Кгц.
В MPLAB, в исходнике, нашёл значение call Temp, потом открыл вкладку VIEW/Programm Memory, отыскал значение 2015, если его меняю (уже в готовом HEX), например на 2018, то получаю частоту около 82кгц.

Объясните пожалуйста на пальцах, какие строчки (значения, числа) подправить, и где они вообще? где эта зависимость микросекунд, к тактовой частоте 4Мгц? как расчитать, какие формулы?

Вот, очистил в исходнике всё лишнее (комментарии), чтобы не отвлекаться, ничего не пойму, как эти буквы влияют на частоту, хоть хвост отстрели. Второй день с кодом бьюсь ((



СпойлерLIST p=12F629
#include <p12f629.inc>
__CONFIG _MCLRE_OFF & _CP_OFF & _CPD_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _BODEN_OFF
#DEFINE Pos GPIO,0
#DEFINE Neg GPIO,1
#DEFINE LED GPIO,2
#DEFINE Syn GPIO,4
CBLOCK 0x20
Clign1 : 1
Clign2 : 1
ENDC
org 0x000
bcf STATUS,RP0
clrf GPIO
movlw 0x07
movwf CMCON
bsf STATUS,RP0
clrf TRISIO
call 3FFh
movwf OSCCAL
bcf STATUS,RP0
Debut clrf GPIO
Altp0
bsf Pos
bsf Syn
call Temp
bcf Pos
nop
nop
bsf Neg
bcf Syn
call Temp
bcf Neg
goto Altp0
Temp incf Clign1,F
btfsc STATUS,Z
incf Clign2,F
btfss STATUS,Z
nop
btfsc Clign2,4
bsf LED
btfss Clign2,4
bcf LED
nop
nop
return
END
Вложения
MPLAB.rar
(72.65 КБ) 144 скачивания
Последний раз редактировалось 501 Вт дек 15, 2015 00:58:09, всего редактировалось 1 раз.
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: помощ лузерам в прогромировании МК PIC

Сообщение otest »

Это не ШИМ , а генератор прямоугольных импульсов.
Зачем править НЕХ, если есть исходник ?
Для ШИМа нужно переписать программу.
Для изменения частоты тоже нужно править весь исходник.
В МПЛАБ есть симулятор и инструменты к нему. Можно наблюдать что и где происходит.
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: помощ лузерам в прогромировании МК PIC

Сообщение Smen »

501 писал(а):как расчитать, какие формулы?
1МЦ (машинный цикл) = 1us (микросекунде)
Команда может выполняться за 1МЦ, некоторые за 2.
Тут все временнЫе задержки выполнены тупо на счётчиках, что в корне неправильно.
Грамотнее, для этой цели, использовать прерывания от таймера.
Ответить

Вернуться в «PIC»