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

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

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

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

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

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


 
Опции темы

Подскажите по TMR0 В Pic16

Непрочитано 14.01.2013, 09:47  
Kopyl
Частый гость
 
Регистрация: 23.11.2009
Сообщений: 11
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
Kopyl на пути к лучшему
По умолчанию Подскажите по TMR0 В Pic16

Помогите разобраться с нулевым таймером в пике.
Почитал доку (pic16f62x.pdf на русском) , вроде всё понятно,
В пункте 6.0 (страница 44) написано:
"Приращение счетчика TMR0 происходит в каждом машинном цикле (если предделитель отключен)"
написал кусок кода, потом упростил, до вот такого вида, именно из за "непонятки с поведением модуля таймера"
========
list p=PIC16F628A
#include P16F628A.inc
__CONFIG _LVP_OFF &_XT_OSC &_WDT_OFF &_PWRTE_ON &_BOREN_OFF &_CP_OFF &_MCLRE_OFF &DATA_CP_OFF
;----------------------------------------------------------
Counter0 EQU 020h ;
Counter1 EQU 021h ;
;----------------------------------------------------------
ORG 0
CLRF INTCON ; Пока все прерывания запретим
GOTO INIT
;----------------------------------------------------------
ORG 4
label1
CLRF Counter0
CLRF Counter1
BCF INTCON,T0IF ; Сбрасываем признак прерывания
CLRF TMR0
RETFIE
;----------------------------------------------------------
INIT
BSF STATUS,RP0 ; Выбор банка 1
MOVLW b'00000000' ; Включаем делитель на 2 для TMR0
MOVWF OPTION_REG ;
BCF STATUS,RP0 ; Выбор банка 0

CLRF Counter0
CLRF Counter1
BSF INTCON,GIE ; Глобальное разрешение всех прерываний
BSF INTCON,T0IE ; разрешаем прерывания по таймеру TMR0
CLRF TMR0
Loop1
INCFSZ Counter0,f
GOTO Loop1
INCFSZ Counter1,f
GOTO Loop1 ; Зацикливаемся, ждем прерывания и считаем
END
=============
Код простой, по идее, должен был считать, инкрементировать Counter 0,1 и раз в 256 команд должно было возникать прерывание.
Ставлю точку прерывания на метку label1 и ожидаю , что при возникновении прерывания Counter0 у меня
должен равняться 256-3=253 такта (типо запрет на приращение счетчика на два цикла после записи, и один такт на "RETFIE")
результат трассования в MLAB IDE 8.4.4 меня озадачил:
На метке l1 -Counter0=171 Counter1=0 ( со вторым то понятно)
Ну если бы было там 250, или 125-129, я бы понял, что: "что то не так с количеством подсчитанных тактов или делителем",
но 171- это совсем не понятно...
Подскажите, ткните ссылкой, пжл, где я недочитал.
Реклама:

Последний раз редактировалось Kopyl; 14.01.2013 в 09:57.
Kopyl вне форума  
Непрочитано 14.01.2013, 10:13  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

У Вас программный цикл по Counter0 выполняется за 3 машинных цикла, а счетчик TMR0 инкрементируется каждый 2-й машинный цикл. Т.е. TMR0 инкрементируется в 1,5 раза быстрее чем Counter0.
alvadep вне форума  
Непрочитано 14.01.2013, 10:40  
Kopyl
Частый гость
 
Регистрация: 23.11.2009
Сообщений: 11
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
Kopyl на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

Сообщение от alvadep Посмотреть сообщение
У Вас программный цикл по Counter0 выполняется за 3 машинных цикла, а счетчик TMR0 инкрементируется каждый 2-й машинный цикл. Т.е. TMR0 инкрементируется в 1,5 раза быстрее чем Counter0.
Может, я и ошибаюсь, но каждая команда выполняется не за 3 а за 4 машинных цикла (такта кварца),
а в случае с INFSZ команд выполняется за 1 процессорный такт при условии, что условие не соблюдается и 2 такта, когда условие (Z) соблюдается
команда GOTO за два процессорных такта.
INCFSZ Counter0,f ;1 машинный такт
GOTO Loop1 ;2 машинных такта
1+2=3,
3*4=12 тактов кварца,
но TMR0 инкрементруется не по тактам кварца, а в каждом машинном цикле

Последний раз редактировалось Kopyl; 14.01.2013 в 10:47.
Kopyl вне форума  
Непрочитано 14.01.2013, 10:47  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

Ошибаетесь.

P.S. Для начала надо четко отделять мух от котлет, т.е. машинные циклы от тактов генератора.
Миниатюры:
Нажмите на изображение для увеличения
Название: PIC.jpg
Просмотров: 71
Размер:	55.2 Кб
ID:	42260   Нажмите на изображение для увеличения
Название: pic_tmr.jpg
Просмотров: 53
Размер:	39.9 Кб
ID:	42263  

Последний раз редактировалось alvadep; 14.01.2013 в 11:04.
alvadep вне форума  
Непрочитано 14.01.2013, 11:31  
Kopyl
Частый гость
 
Регистрация: 23.11.2009
Сообщений: 11
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
Kopyl на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

Сообщение от alvadep Посмотреть сообщение
Ошибаетесь.

P.S. Для начала надо четко отделять мух от котлет, т.е. машинные циклы от тактов генератора.
хорошо, согласен, нужно конкретизироваться:
Команда процессора выполняется за один машинный цикл 4 такта (грубо говоря кварца), кроме команд условия, в которых получен положительный результат, и команд изменяющих значение счётчика PC (сюда относится команда GOTO).
в моём случае:
Loop1
INCFSZ Counter0,f ;1 машинный цикл ( 4 такта)
GOTO Loop1 ;2 машинных цикла (8 тактов)
---
ну и если происходит переполнение Counter0 то первая команда тоже 2 машинных цикла (8 тактов). у меня до этого не доходит.
т.е. можно констатитровать, что на эти две команды уходит 3 машинных цикла, или 12 тактов.
Только вот в доке указано не про такты а про машинные циклы:
( у меня предделитель включен, делится на 2, т.е. должно быть 512 комманд)
Миниатюры:
Нажмите на изображение для увеличения
Название: TMR0.jpg
Просмотров: 49
Размер:	51.8 Кб
ID:	42264  
Kopyl вне форума  
Непрочитано 14.01.2013, 11:53  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

Ну, давайте считать вместе.
Число 171 в Counter0 получится через 171*3*4=2052 такта генератора, где 3 - количество машинных циклов (INCFSZ Counter0, GOTO Loop1), 4 - количество тактов в одном машинном цикле.
TMR0 переполнится через 256*2*4=2048 такта генератора, где 2 - делитель, 4 - количество тактов в одном машинном цикле. TMR0 без делителя инкрементируется за один машинный цикл или за 4 такта генератора.
А вообще, в пиках надо забыть про такты генератора и привязываться к машинным циклам. На начальном этапе этого будет достаточно. Раскладку одной команды по тактам разберете позже, когда освоите начальный этап.

Последний раз редактировалось alvadep; 14.01.2013 в 12:03.
alvadep вне форума  
Сказали "Спасибо" alvadep
Kopyl (14.01.2013)
Непрочитано 14.01.2013, 12:50  
Kopyl
Частый гость
 
Регистрация: 23.11.2009
Сообщений: 11
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
Kopyl на пути к лучшему
По умолчанию Re: Подскажите по TMR0 В Pic16

Спасибо огромное- разобрался:
прерывание происходит раз в 512 машинных циклов,( 256 с делителем на 2)
а на каждый инкремент уходит по 3 машинных цикла,
один на INCFSZ Counter0,f
и два наGOTO Loop1
--
а 512/3= примерно 171, что и давал мне дебагер
Kopyl вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC12F675 и TMR0 Fair88Play Микроконтроллеры, АЦП, память и т.д 12 12.07.2012 14:02
PIC16 TMR0 и TMR2 Slava-martyn Микроконтроллеры, АЦП, память и т.д 10 06.12.2011 01:58
Преблема с 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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.