Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.12.2011, 14:58  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию PIC16 TMR0 и TMR2

Почему D1 и D3 работают синхронно? Может TMR2 не правильно настроил?
Схема и программа во вложении.
Вложения:
Тип файла: rar 22.rar (39.4 Кб, 153 просмотров)
Реклама:
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 04.12.2011, 15:49  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Прикольно. Где-то я это уже видел. Дежавю.
alvadep вне форума  
Сказали "Спасибо" alvadep
warel (28.06.2019)
Непрочитано 04.12.2011, 19:19  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Да, просто не стоило ту тему продолжать. Лучше в новой.

Сообщение от Slava-martyn Посмотреть сообщение
Избыточность нужна мне для наглядности, и сокращать программу не требуется. Вопрос в том, почему я не могу выставить другой период таймера №2 в МК? Почему он работает синхронно с TMR0?
Сообщение от alvadep Посмотреть сообщение
Вам надо еще разрешить прерывание от периферийных модулей (bsf INTCON, PEIE).
А они зачем (здесь)? При отладке в протеусе в прерывания заходит, и от TMR0 и от TMR1. От TMR2 устанавливается флаг, но почему-то одновременно с TMR0.

Сообщение от alvadep Посмотреть сообщение
В общем, это еще раз подтверждает то, что излишества только усложняют отладку.
Это ни в коей мере не относится к Вам, я понимаю, что Вы экспериментируете и пытаетесь во всем разобраться, но в реальных устройствах, чем проще, тем лучше.
Да, только для обучения, а так можно (и нужно) упрощать (оптимизировать).
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 04.12.2011, 19:22  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Выложу программу текстом на всякий случай. В архиве уже есть.
PHP код:
list p=16f877A                Выбор микроконтроллера
include "p16f877A.inc"        Подключение библиотек к компилятору
__CONFIG
(_WDT_ON)            ; Бит конфигурации выключение сторожевого таймера WDT
;---------------------------
cblock 0x71                    Начало блока переменных
;здесь можно присвоить имена регистрам с адреса 0х71 по порядку
LED                            
Ячейки для хранения переменных светодиодов
W_TEMP                        
Ячейка для сохранения значения регистра W
STATUS_TEMP                    
Ячейка для сохранения значения регистра STATUS
FLAGS                        
Ячейки для хранения флагов
endc                        
Конец блока переменных
;---------------------------
T0 EQU 0x00                    Флаг таймера TMR0
T1 EQU 0x01                    
Флаг таймера TMR1
T2 EQU 0x02                    
Флаг таймера TMR2
D0 EQU 0x00                    
Переменная светодиода D1
D1 EQU 0x01                    
Переменная светодиода D2
D2 EQU 0x02                    
Переменная светодиода D3
D3 EQU 0x03                    
Переменная светодиода D4
;---------------------------
        ; 
Начало программы
ORG 0x00                    
Адрес вектора сброса
    
GOTO        START        После сброса идти на метку START
;---------------------------
ORG 0x04                    Адрес вектора прерывания
    
GOTO        PRER        После прерывания идти на метку PRER
;---------------------------
PRER                        Метка для перехода по прерыванию
    MOVWF        W_TEMP        
Сохранить W
    SWAPF        STATUS
,W    Поменять местами полубайты STATUS и сохранить в W
    MOVWF        STATUS_TEMP    
Сохранить STATUS

    BTFSC        INTCON
,T0IF    Если T0IF установлен,
    
CALL        PRERT0        ;   то вызываем подпрограмму PRERT0

    BTFSC        PIR1
,TMR1IF    Если TMR1IF установлен,
    
CALL        PRERT1        ;   то вызываем подпрограмму PRERT1

    BTFSC        PIR1
,TMR2IF    Если TMR2IF установлен,
    
CALL        PRERT2        ;   то вызываем подпрограмму PRERT2

                            
востановление W и STATUS
    SWAPF        STATUS_TEMP
,Поменять местами полубайты STATUS_TEMP и сохранить в W
    MOVWF        STATUS        
Востановить STATUS
    SWAPF        W_TEMP
,F    Поменять местами полубайты W_TEMP и сохранить в W_TEMP
    SWAPF        W_TEMP
,W    Поменять местами полубайты W_TEMP и сохранить в W
    RETFIE
;---------------------------
START                        Метка для перехода по сбросу МК
    MOVLW        
B'00000111'    Загрузить B'10001111' в регистр W
    MOVWF        OPTION_REG    
Установить все выводы порта B как логические входы

    banksel        TRISD        
Выбор второго банка регистров
    CLRF        TRISD        
Очистка регистра-защелки порта D
    banksel        PORTD        
Выбор первого банка регистров
    CLRF        PORTD        
Очистить порт D

    BSF            LED
,D0        Установить D0
    BSF            LED
,D1        Установить D1
    BSF            LED
,D2        Установить D2
    BSF            LED
,D3        Установить D3

    CLRWDT                    
Сбросить WDT и предделитель
    CLRF        INTCON        
Выключить прерывания и сбросить T0IF
    CLRF        T1CON        
Выключить TMR1
    CLRF        T2CON        
Выключить TMR2
    CLRF        TMR0        
Сброс счётчика TMR0
    CLRF        TMR1H        
Очистить старший байт регистра TMR1
    CLRF        TMR1L        
Очистить младший байт регистра TMR1
    CLRF        TMR2        
Очистить регистр TMR2
    BSF            STATUS
,RP0    Банк 1
    CLRF        PIE1        
Выключить переферийные прерывания
    MOVLW        
b'00000111'    Предделитель включён перед TMR0коэффициент деления 1:128
    MOVWF        OPTION_REG    
;    смотри PIC16_Manual.pdf
    MOVLW        
b'11111111'    Загрузить B'11111111' в регистр W
    MOVWF        PR2            
Запись в регистр PR2 периода таймера

    BCF            STATUS
,RP0    Банк 0
    CLRF        PIR1        
Очистить флаги переферийных прерываний
    MOVLW        
b'00110100'    Предделитель перед TMR1коэффициент деления 1:8
    MOVWF        T1CON        
;    смотри PIC16_Manual.pdf
    MOVLW        
b'00111001'    Предделитель перед и после TMR2коэффициент деления 1:7 и 1:4
    MOVWF        T2CON        
;    смотри PIC16_Manual.pdf

    BSF            T1CON
,TMR1ON Включение модуля TMR1
    BSF            T2CON
,TMR2ON Включение модуля TMR2

    BSF            STATUS
,RP0    Банк 1
    BSF            INTCON
,T0IE    Разрешить прерывания от TMR0
    BSF            PIE1
,TMR1IE    Разрешить прерывания от TMR1
    BSF            PIE1
,TMR2IE Разрешить прерывания от TMR2
    BSF            INTCON
,GIE    Разрешить все прерывания
    BCF            STATUS
,RP0    Банк 0
;---------------------------
MAIN                        Метка для перехода
    CLRWDT                    
Сбросить WDT и предделитель

    BTFSC        FLAGS
,T0    Если T0 установлен,
    
CALL        LED0        ;  то вызов подпрограммы LED0

    BTFSC        FLAGS
,T1    Если T1 установлен,
    
CALL        LED1        ;  то вызов подпрограммы LED1

    BTFSC        FLAGS
,T2    Если T2 установлен,
    
CALL        LED2        ;  то вызов подпрограммы LED2

            
Инверсия переменной D3
    MOVLW        
B'00001000'    Загрузить B'00001000' в регистр W
    XORWF        LED
,F        Побитное "исключающее ИЛИ" переменной и W

    MOVF        LED
,W        Загрузить LED в регистр W
    MOVWF        PORTD        
Загрузить W в регистр PORTD

    
GOTO        MAIN        Цикл MAIN
;---------------------------
LED0                        Инверсия переменной D0 и сброс флага T0
    MOVLW        
B'00000001'    Загрузить B'00000001' в регистр W
    XORWF        LED
,F        Побитное "исключающее ИЛИ" переменной и W
    BCF            FLAGS
,T0    Сбросить флаг T0
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
LED1                        Инверсия переменной D1 и сброс флага T0
    MOVLW        
B'00000010'    Загрузить B'00000010' в регистр W
    XORWF        LED
,F        Побитное "исключающее ИЛИ" переменной и W
    BCF            FLAGS
,T1    Сбросить флаг T1
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
LED2                        Инверсия переменной D2 и сброс флага T0
    MOVLW        
B'00000100'    Загрузить B'00000100' в регистр W
    XORWF        LED
,F        Побитное "исключающее ИЛИ" переменной и W
    BCF            FLAGS
,T2    Сбросить флаг T2
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
PRERT0                        Обработка прерывания от TMR0
    BCF            INTCON
,T0IF    Сбросим флаг прерывания таймера 0
    BSF            FLAGS
,T0    Установим свой флаг прерывания
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
PRERT1                        Обработка прерывания от TMR1
    BCF            PIR1
,TMR1IF    Сбросим флаг прерывания таймера 1
    BSF            FLAGS
,T1    Установим свой флаг прерывания
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
PRERT2                        Обработка прерывания от TMR2
    BCF            PIR1
,TMR2IF    Сбросим флаг прерывания таймера 2
    BSF            FLAGS
,T2    Установим свой флаг прерывания
    
RETURN                    ; Возврат из подпрограммы
;---------------------------
END 
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 04.12.2011, 20:40  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от Slava-martyn Посмотреть сообщение
А они зачем (здесь)? При отладке в протеусе в прерывания заходит, и от TMR0 и от TMR1. От TMR2 устанавливается флаг, но почему-то одновременно с TMR0.
Без разрешения прерывания от периферийных устройств (PEIE) прерываний от TMR1 и TMR2 не будет, но флаги TMR1IF и TMR2IF будут устанавливаться. Поэтому, когда происходит переход на вектор обработки прерывания по переполнению TMR0, флаг TMR2IF уже установлен и получается синхронная работа D1 и D3.

А на счет разных "протеусов", так косяки есть везде.
alvadep вне форума  
Эти 2 пользователя(ей) сказали Спасибо alvadep за это сообщение:
Slava-martyn (11.12.2011), warel (28.06.2019)
Непрочитано 04.12.2011, 21:07  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от Slava-martyn Посмотреть сообщение
программа во вложении
Она не рабочая... и бред по сути...
Начните всё сначала... и не торопитесь освоить новое... не разобравшись с предыдущим...
Рано вы открыли новую тему...
Почитайте лучше это...
http://www.pic24.ru/doku.php/osa/art...asm_formatting
... больше пользы будет...
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 04.12.2011, 21:19  
Slava-martyn
Вид на жительство
 
Аватар для Slava-martyn
 
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
Slava-martyn на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от alvadep Посмотреть сообщение
А на счет разных "протеусов", так косяки есть везде.
Зря Вы про него так, он хороший
Добавил прерывания от периферийных устройств и всё заработало! Никогда бы не подумал что таймер это периферийное устройство, хотя, каким же ещё ему быть
А зачем INTCON в 4 банках? Клоны?
Сообщение от st_1 Посмотреть сообщение
Она не рабочая...
Странно, у меня запускается. Только добавил.
BSF INTCON,PEIE ; Разрешить прерывания от периферийных модулей
Сообщение от st_1 Посмотреть сообщение
и бред по сути...
А по подробнее?

Последний раз редактировалось Slava-martyn; 04.12.2011 в 21:24.
Slava-martyn вне форума  
Сказали "Спасибо" Slava-martyn
warel (28.06.2019)
Непрочитано 04.12.2011, 22:31  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от Slava-martyn Посмотреть сообщение
Зря Вы про него так, он хороший
Я не говорил, что он плохой, а только лишь о то, что у каждой подобной программы есть свои “тараканы”. В любом случае при возникновении вопросов обращаться нужно к первоисточникам т.е. к datasheetам.
Цитата:
А зачем INTCON в 4 банках? Клоны?
Это один регистр, только обращаться к этому регистру можно из любого банка.
alvadep вне форума  
Сказали "Спасибо" alvadep
warel (28.06.2019)
Непрочитано 05.12.2011, 00:25  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,628
Сказал спасибо: 72
Сказали Спасибо 1,790 раз(а) в 644 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от Slava-martyn Посмотреть сообщение
Никогда бы не подумал что таймер это периферийное устройство, хотя, каким же ещё ему быть
Просто внимательно смотрите в даташите по каждому модулю раздел "Регистры и биты, связанные с работой ...". Если TMR2 связан с битом PEIE, то конечно, это периферийное устройство, и этот бит нужно выставить.

Поскольку уж затронули проблему таймеров, у меня есть свой вопрос. В даташите сказано, что для уменьшения энергопотребления TMR2 может быть выключен сбросом флага TMR2ON. Так вот, собственно, сам вопрос - будет ли этот таймер сказываться на потреблении в режиме SLEEP? То есть, понятно, что генератор остановлен и таймер ничего не считает. Но как периферийное устройство он остается подключенным к общему питанию, и какую-то часть энергии потребляет... Или это совершенно не сказывается на энергопотреблении в SLLEP-режиме?
RECTO вне форума  
Сказали "Спасибо" RECTO
warel (28.06.2019)
Непрочитано 05.12.2011, 12:39  
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: PIC16 TMR0 и TMR2

Сообщение от RECTO Посмотреть сообщение
Так вот, собственно, сам вопрос - будет ли этот таймер сказываться на потреблении в режиме SLEEP?
“Есть ли жизнь на Марсе…. Науке не известно”.

Но если рассуждать логически….
В TMR1 бит включения TMR1ON используется логическим элементом, который стоит после делителя и поэтому вкл/откл модуля практически не влияет на потребление (делитель по любому крутится).
В TMR2 скорей всего TMR2ON используется до делителя и отключает только подачу тактовых импульсов, а не весь модуль. Поскольку при TMR2ON=0 в модуле TMR2 ни чего не крутится, то это и позволило говорить о снижении потребления. Следовательно, в SLEEP вкл/откл модуля TMR2 не должно влиять на потребление, хотя прямого подтверждения этому нет в даташитах.
Еще о том, что модуль не отключается полностью, может косвенно свидетельствовать тот факт, что “регистр TMR2 не очищается при записи в T2CON” (при POR и BOR TMR2 обнуляется). И еще регистры TMR2 и PR2 доступны при TMR2ON=0.

Последний раз редактировалось alvadep; 05.12.2011 в 12:43.
alvadep вне форума  
Эти 2 пользователя(ей) сказали Спасибо alvadep за это сообщение:
RECTO (05.12.2011), warel (28.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преблема с TMR0 в PIC508 cnc10 Микроконтроллеры, АЦП, память и т.д 2 24.03.2011 16:52
TMR0 pic12c508 cnc10 Микроконтроллеры, АЦП, память и т.д 7 30.04.2009 20:23
По PIC 12 C508A по поводу TMR0 cnc10 Микроконтроллеры, АЦП, память и т.д 6 28.05.2007 10:11
pic16+rs232 Superkaif Микроконтроллеры, АЦП, память и т.д 1 29.03.2007 12:52
переполнение TMR2 ??? Picallka Микроконтроллеры, АЦП, память и т.д 2 11.02.2004 21:32


Часовой пояс GMT +4, время: 14:23.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot