єдину Stepping приріст у 16bit Таймер

H

hhhsssmmm

Guest
Привет

Я PIC18F2420 працює через 4MHz керамического резонатора .... і компілятор використовується C18.

Я можу один крок збільшення TMR0 (8bit режим) тільки шляхом зміни TMR0L regsiter вартість від 00 - FF.Так дозволяє ....

TMR0L = 0;

Тому я можу змінити TMR0 перервати кожен крок тільки по команді TMR0L ...( то есть с 256us всі шляхи до 1us).

Тепер моє запитання, як я можу зробити аналогічний єдиний Stepping для 16bit таймер?Їм плутають, і тому їм з проханням 16bit таймер має два регістрів для initiallize .... наприклад Timer1 є initiallized від 5ms, і ви хотіли б один крок йому збільшуючи його 10ms .... у нас є ...

5ms intiallized TMR1
-----------------------
TMR1L = 78;
TMR1H = EC;

..... Тут так, як би ви, в такому ж 8bit моди, один крок у 16bit таймер аж до 10 мс?Будь ласка, може хтось допоможе мені?

спасибо
haseeb

 
Я думаю, ви зрозуміли фактичної точки таймер.Вам не доведеться збільшити собі, це робиться автоматично.Якщо ви створили таймер, лічильник,
то приріст себе на кожен процесор інструкція циклу.

Отже, якщо ви:TMR0L = 0;
NOP
NOP
NOP
NOP

Значення TMR0L тепер 4, тому що ви
вже зробили 4 інструкцій.

Ви можете prescale таймера тому він розраховує кожен другий, четвертої, 8, ....64-e ....256-м інструкції.Після того, як вона йде в атаку (і знову починається) він генерує переривання.

З PIC18Fs Ви також маєте УПК модуль, який може дійсно створити перервати після того, як таймер вартість дорівнює попередньо вибране значення в УПК спеціальні функції регістрів.Отже, замість того, один перервати на 65535 циклів навчання, ви можете зробити його генерації переривань з красивим круглим фігура інструкції 50.000 циклів,
що робить набагато простіше часу

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />
 
Дякуємо вам за відповіді.

Я добре розумію вашу точку.

Але припустимо, я, необхідних для збільшення 16bit таймер після кожного 10ms INT .... як би ви це ?.... Дозвольте мені пояснити далі ...

Припустімо, у мене був перервати утворюються на INT0 на кожні 10 мс.Отож, у INT0 ISR, я хотів би знову ініціалізіруем 16bit таймер та його приріст від 5ms .... потім на наступний INT0 приріст від 6ms .... потім на наступний INT0 приріст від 7ms т.д. .. аж до 10 мс ... потім скинута на 5ms знову на наступній INT0 ..... сенс змінити значення таймера initiallization на кожному INT0 перервати тільки один раз.

Я знаю, як це може бути зроблено тільки в тому випадку, якщо кількість заяв, і ще я можу написати потрібне значення таймера в цих заявах .... але я хочу це тим, що вона схожа на операцію, як роблять це і в 8bit таймер .. ..

для 8bit таймер, припустимо, я збільшення змінної цибулина на кожні 10 мс (INT0)
У INT0 ISR я потім присвоїти змінної лампа змінної timer0 як .....

TMR0L = цибулини;

це буде reinitiallize в timer0 до нової вартості, замість мене, не обчислити і записати потрібне значення в моїй TMR0L самоврядування.

Так що ви стежите за мене ?....... у 8-бітний таймер же чином я хотів би приріст у 16bit, а таймер.

Як це можна зробити?

Haseeb

 
Якщо вам просто необхідно збільшити на 16 бітне значення,
то чому б не оголосити змінну (не використовуйте таймер на всіх), і приріст, що кожного разу, коли мінлива бажане подію?Ви також можете встановити таймер, щоб він підраховує імпульси по конкретній Сцепляющій замість підрахунку циклів навчання.

 
Використання автоматичної перезавантаження особливістю таймера.
або пишіть анс ISR, що буде перезавантажити бажаного значення в кінці downcount.
BTW таймери дизайн downcount.тому Перезавантажити значення повинне бути FF-кол і FFFF-кол.Ви також можете вказати це в знак.

hcokДодано через 3 хвилини:користуватися цією програмою.

поджілкі
Вибачте, але вам необхідно увійти в акаунт це вкладення

 

Welcome to EDABoard.com

Sponsor

Back
Top