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 ;возврат из подпрограммы обработки прерываний
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
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
Все это очень интересно, но где сам вопрос? В чем хотите разобраться?
P.S. Когда даете код, помещайте его между тегами [ code ] и [ /code ] (без пробелов). Пока есть возможность редактировать сообщение, исправьте, а то читать тяжело.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Да какой там вопрос, это не вопрос, это рыба Студер на нерест пошла. Конец декабря, курсачи, допуски, сессия. А это экземпляр студера жил весело, да беда пришла. Сейчас у него два пути - либо в армию, там научат, либо в петлю, чтоб не мучиться.
По теме - там в коде все написано. Серьезно
_________________ Подпись убрал вместе с автором. aen
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Так и быть, поможем студню. Если блоки разделены строкой ======, то Первый блок - указание названия микроконтроллера и подключение заголовка. Второй блок - объявление пеерменных Третий - указание стартового адреса и адреса вектора прерываний Далее - вход в обработчик прерываний потом - выход из обработчика прерываний затем - инициализация микроконтроллера, очистка регистров, подготовка к работе следом - бесконечный цикл после этого - сам обработчик прерывания, разбитый на два блока для обработки прерывания от таймера, там типа секунды считаются, и один блок прерывания от внешнего события. и в конце - конец концов конца программы наконец
_________________ Подпись убрал вместе с автором. aen
Так и быть, поможем студню. Если блоки разделены строкой ======, то Первый блок - указание названия микроконтроллера и подключение заголовка. Второй блок - объявление пеерменных Третий - указание стартового адреса и адреса вектора прерываний Далее - вход в обработчик прерываний потом - выход из обработчика прерываний затем - инициализация микроконтроллера, очистка регистров, подготовка к работе следом - бесконечный цикл после этого - сам обработчик прерывания, разбитый на два блока для обработки прерывания от таймера, там типа секунды считаются, и один блок прерывания от внешнего события. и в конце - конец концов конца программы наконец
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения