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

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

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

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

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

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


 
Опции темы
Непрочитано 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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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, время: 00:23.


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