21.12.2016, 07:43
|
|
Прохожий
Регистрация: 21.12.2016
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Код:
|
LIST p=PIC16F84A
#include ‹p16f84a.inc›
__CONFIG 0x3FF1
;============================
TEMPSTATUS equ 0x4E
TEMPW equ 0x4F
cblock 0x20 ;присвоение имён: первая запись, далее +1
TMR_COUNT ;вторая запись
IMP_COUNT_LO ;третья запись
IMP_COUNT_HI ;4 запись
RESULT_LO ;5 запись
RESULT_HI ;6 запись
endc ;конец присовоения имён
;============================
org 0x00 ;адрес начала программы
goto PIC_Initial
org 0x04 ;подпрограмма обработки прерываний
goto Interrupt
org 0x05
;============================
Interrupt: ;прерывание
movwf TEMPW ;поместить значение W в TEMPW
swapf STATUS, W ;поменять местами полубайты в STATUS, результат в W
movwf TEMPSTATUS ;поместить значение W в TEMPSTATUS
btfsc INTCON, T0IF ;если T0IF=0 (переполнения не было) в регистре INTCON, то пропустить след. каманду
goto Intrpt_of_T0
btfsc INTCON, INTF ;если INTF=0 (прерывания не было) в регистре INTCON, то пропустить след. каманду
goto Intrpt_of_INT
;============================
end_interrupt:
swapf TEMPSTATUS, W ;поменять местами полубайты в TEMPSTATUS, результат в W
movwf STATUS ;поместить значение W в статус
swapf TEMPW, F ;поменять местами полубайты в TEMPW, результат в TEMPW
swapf TEMPW, W ;поменять местами полубайты в TEMPW, результат в W
retfie ;возврат из подпрограммы обработки прерываний
;============================
PIC_Initial:
clrf PORTA
clrf PORTB
clrf TMR_COUNT
clrf IMP_COUNT_HI
clrf IMP_COUNT_LO
clrf RESULT_HI
clrf RESULT_LO
bsf STATUS, RP0 ;установить бит RP0 в регистре STATUS - выбираем 1 банк
movlw b'11010111' ;записать слово в W, инициализация TMR0
movwf OPTION_REG ;поместить значение W в OPTION_REG
bcf INTCON, T0IF ;очистить бит T0IF в регистре INTCON
bcf STATUS, RP0 ;очистить бит RP0 в регистре STATUS
clrf TMR0 ;очистить TMR0 (Configuration Interrupt)
movlw 0xF0 ;записать слово в W
movwf INTCON ;поместить значение W в INTCON
;============================
start nop
nop
nop
goto start
;============================
Intrpt_of_T0:
bcf INTCON, T0IF ;очистить бит T0IF в регистре INTCON
incf TMR_COUNT ;инкремент TMR_COUNT (увеличение)
movf TMR_COUNT, W ;перемещение содержимого TMR_COUNT в W
xorlw .16 ;исключающее ИЛИ над словом и W (десятичное число 16)
btfsc STATUS, Z ;если Z = 0 в регистре STATUS, то пропустить след. команду
goto End_Sec
movf TMR_COUNT, W ;перемещение содержимого TMR_COUNT в W
xorlw .15 ;исключающее ИЛИ над словом и W
btfss STATUS, Z ;если Z = 1 в регистре STATUS, то пропустить след. команду
goto end_interrupt
movlw .190 ;записать слово в W
movwf TMR0 ;поместить значени W в TMR0
goto end_interrupt
;============================
End_Sec:
clrf TMR_COUNT ;очистить TMR_COUNT
movf IMP_COUNT_HI, W ;перемещение содержимого IMP_COUNT_HI в W
movwf RESULT_HI ;Поместить значение W в RESULT_HI
movf IMP_COUNT_LO, W ;перемещение содержимого IMP_COUNT_LO в W
movwf RESULT_LO ;Поместить значение W в RESULT_HI
clrf IMP_COUNT_HI
clrf IMP_COUNT_LO
goto end_interrupt
;============================
Intrpt_of_INT:
bcf INTCON, INTF ;очистить бит INTF в регистре INTCON
incf IMP_COUNT_LO ;инкремент IMP_COUNT_LO (увеличение)
btfsc STATUS, Z ;если Z = 0 в регистре STATUS, то пропустить след. команду
incf IMP_COUNT_HI ;инкремент incf IMP_COUNT_HI
goto end_interrupt
;============================
end |
Последний раз редактировалось realid; 21.12.2016 в 11:04.
|
|
|
|
21.12.2016, 15:42
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,691
Сказал спасибо: 75
Сказали Спасибо 1,809 раз(а) в 655 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Сообщение от saymon
|
Код:
|
org 0x04 ;подпрограмма обработки прерываний
goto Interrupt
org 0x05
;============================
Interrupt: ;прерывание |
|
Гениально!...
..
|
|
|
Эти 2 пользователя(ей) сказали Спасибо RECTO за это сообщение:
|
|
|
22.12.2016, 00:31
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,197
Сказал спасибо: 11,131
Сказали Спасибо 3,843 раз(а) в 2,920 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
А прочитать DS и использовать его для анализа приведённого текста программы?
Описание языка ассемблера, описание работы используемого ассемблера и описание системы команд в качестве дополнительных материалов.
Сделав это Вы приобретёте огромное количество знаний о предмете, а там уже только в совсем тупиковых ситуациях вопросы можно задать.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 22.12.2016 в 00:34.
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
22.12.2016, 00:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,001
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,373 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Сообщение от mike-y-k
|
Вы приобретёте огромное количество знаний
|
а зачем - распи"дяйствовать проще
|
|
|
|
22.12.2016, 01:22
|
|
Прописка
Регистрация: 14.12.2006
Адрес: Ставрополь - Донское
Сообщений: 260
Сказал спасибо: 115
Сказали Спасибо 189 раз(а) в 78 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
какой ужаснах
это стиль программирования и комментирования "по Корабельниковски"
2ТС. пойдите на microchip.su и поройтесь там.
там сидят нормальные разработчики и студенты и исходников там до .опы
|
|
|
|
22.04.2017, 01:57
|
|
Прописка
Регистрация: 26.02.2010
Адрес: Брест
Сообщений: 241
Сказал спасибо: 10
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Просто ржал.
Листинг - иллюстрация того, как не надо писать программы.
Скорее всего, специально так написали для ТС, чтобы препод увидел и оценил. Даже при условии работоспособности программы, к "автору" у препода вопросов будет масса.
__________________
Program Memory Words Used: 4048
Program Memory Words Free: 48
|
|
|
|
22.04.2017, 12:58
|
|
Временная регистрация
Регистрация: 12.03.2007
Сообщений: 71
Сказал спасибо: 330
Сказали Спасибо 29 раз(а) в 12 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Этот листинг наверное такой-же старый как и проц, а
Коменты неизвестно ХтО писал .
Прогу в IDE и чуток напрячь моск
|
|
|
|
22.04.2017, 15:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,462
Сказал спасибо: 287
Сказали Спасибо 1,121 раз(а) в 540 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
PIC16F84A 2001 Microchip Technology Inc.
Даже я, заядлый пиковод не буду этим заниматся. Хотя еще In Production. Много чего на нем сделано. Железнейший чип. Как тук-тук примерно
Смею предложить PIC16F1938 2$ за штуку. У производителя в наличии 200 тысяч чипов. Имеется ....
5 CCP модулей, T1GATE, разрешение захвата импульсов 31нС. Питание 2,5-5,5V если гнать на 32МГц
Разумеется Только если товаром Микрочипа приходится обходится. По аборигенским причинам.
Удачи !
|
|
|
|
22.04.2017, 17:24
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Помогите разобраться с кодом программы частотомера. Для чего нужен каждый блок?
Сообщение от kiv69
|
Листинг - иллюстрация того, как не надо писать программы.
Скорее всего, специально так написали для ТС, чтобы препод увидел и оценил. Даже при условии работоспособности программы, к "автору" у препода вопросов будет масса.
|
Хм... Когда я работал со студентами, такие вопросы были всегда неизбежны. В комментариях нужно пояснять не что именно делается в той или иной инструкции, а для чего это делается.
PS: Есть книги на эту тему. Например,
http://padabum.com/d.php?id=174327
Последний раз редактировалось Bill; 22.04.2017 в 18:01.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:28.
|
|