| Форум РадиоКот 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 года скорее всего уже отслужил |
|
| Автор: | 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/ |
|


