Например TDA7294

Форум РадиоКот :: Просмотр темы - Помогите разобраться с кодом программы частотомера. Для чего
Форум РадиоКот
https://radiokot.ru/forum/

Помогите разобраться с кодом программы частотомера. Для чего
https://radiokot.ru/forum/viewtopic.php?f=58&t=139776
Страница 1 из 1

Автор:  saymon24 [ Ср дек 21, 2016 05:32:06 ]
Заголовок сообщения:  Помогите разобраться с кодом программы частотомера. Для чего

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

Автор:  Zhuk72 [ Ср дек 21, 2016 08:22:55 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Все это очень интересно, но где сам вопрос? В чем хотите разобраться?

P.S. Когда даете код, помещайте его между тегами [ code ] и [ /code ] (без пробелов). Пока есть возможность редактировать сообщение, исправьте, а то читать тяжело.

Автор:  Мурато Мяуконни [ Ср дек 21, 2016 08:36:22 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Да какой там вопрос, это не вопрос, это рыба Студер на нерест пошла. Конец декабря, курсачи, допуски, сессия. А это экземпляр студера жил весело, да беда пришла.
Сейчас у него два пути - либо в армию, там научат, либо в петлю, чтоб не мучиться.

По теме - там в коде все написано. Серьезно

Автор:  Zhuk72 [ Ср дек 21, 2016 09:08:35 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Он вопрос написал в названии темы, "Для чего", но дальше не поместилось, а в сообщении вопрос не продублировал.

Если ник содержит 2 цифры, то это обычно бывает или год рождения, или возраст. Судя по данному нику, студент в 24 года скорее всего уже отслужил 8)

Автор:  saymon24 [ Ср дек 21, 2016 11:27:01 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера.

Для чего нужен каждый блок программы, после начала прерывания?
24 это регион проживания.

Автор:  Мурато Мяуконни [ Ср дек 21, 2016 13:34:11 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Так и быть, поможем студню.
Если блоки разделены строкой ======, то
Первый блок - указание названия микроконтроллера и подключение заголовка.
Второй блок - объявление пеерменных
Третий - указание стартового адреса и адреса вектора прерываний
Далее - вход в обработчик прерываний
потом - выход из обработчика прерываний
затем - инициализация микроконтроллера, очистка регистров, подготовка к работе
следом - бесконечный цикл
после этого - сам обработчик прерывания, разбитый на два блока для обработки прерывания от таймера, там типа секунды считаются, и один блок прерывания от внешнего события.
и в конце - конец концов конца программы наконец

Автор:  otest [ Ср дек 21, 2016 14:25:05 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Цитата:
Если блоки разделены строкой ======, то

То это ни чего не значит. Где хочу там и подчёркиваю.

Автор:  Мурато Мяуконни [ Ср дек 21, 2016 14:31:43 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

Это вы про что? Вы - автор вопроса?

Автор:  saymon24 [ Ср дек 21, 2016 14:39:12 ]
Заголовок сообщения:  Re: Помогите разобраться с кодом программы частотомера. Для

спасибо за ответ!

Мурато Мяуконни писал(а):
Так и быть, поможем студню.
Если блоки разделены строкой ======, то
Первый блок - указание названия микроконтроллера и подключение заголовка.
Второй блок - объявление пеерменных
Третий - указание стартового адреса и адреса вектора прерываний
Далее - вход в обработчик прерываний
потом - выход из обработчика прерываний
затем - инициализация микроконтроллера, очистка регистров, подготовка к работе
следом - бесконечный цикл
после этого - сам обработчик прерывания, разбитый на два блока для обработки прерывания от таймера, там типа секунды считаются, и один блок прерывания от внешнего события.
и в конце - конец концов конца программы наконец

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/