8052 Timer2 Interrupt

I

IanP

Guest
Ось код я використовую для Timer2 перервати:

T2Int: CLR T2CON.7
CLR T2CON.0
PUSH АКК
PUSH Пароль
МКП ScrollFreq
MOV A, ScrollFreq
CJNE A, # 0Fh, T2_Exit
SETB Scroll1Right
T2_Exit: POP Пароль
POP АКК
RETI

Я хочу бітних Scroll1Right, які будуть встановлені в 50 разів / с, 5 / S ....але, як зараз він встановлюється кожні 10-12 сек.
Що ScrollFreq встановити для переривання 00h цієї occures про 3times/sec і що є найшвидшим.
У T2CON = 00h.
Може бути, кто-то може мати свіжий погляд на вищевказаний код і з'ясувати, чому виконання настільки повільно ..

 
Привіт IanP,
Я не розумію ваше запитання, але мені здається, ви забули очистити ScrollFreq вартості.
Вона починається з 00h, по-прежнему 0FH, а потім продовжити 10H, 11H, ..., FFH, 00h, ...
Тому він використовує 256 раз за встановлення Scroll1Right,
а не 15.

 
Ні,

Вона очищується за T2Int після біт Scroll1Right встановлюється / видаляється.

Основний problm є те, що повинно Timer2 переповнення в мс, а не С.
Навіть якщо ScrollFreq є 00h вона переповнювання прибл.3!!раз / сек.

 
Як T2MOD налаштований?

Яке зміст RCAP2L і RCAP2H як ці цінності занурені в T2 на переповнення в режим таймера.

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

 
Привет
У можете використовувати цей калькулятор для отримання значення таймера перезавантаження
Вибачте, але вам необхідно увійти в акаунт це вкладення

 
C_Man,

T2MOD є 00h.
Лічильник звинувачення в зашморгу FF FFH (16-бітна autoreload) тому слід перервати після породжених 65536 пунктів.
Тепер інше питання полягає в тому, що це не 8052, а 87C51FB і всі інші переривання активні в порт перервати як вищого пріоритету (біт PS комплект).

 
Чи є у вас інші переривання?такі, як серійний перервати або будь-якого.

 
Інше 5 innterupts активно і ОК.

Int0 - PS / 2 клавіатура
Int1 - RTC
Timer0 - Тайм-аут перервати
Timer1 - швидкість
Послідовний порт Interrupt - Дані GPS / Data Logger

Проблема з цією:
Timer2 - Interrupt, які будуть використовуватися для прокручування тексту

 
Якщо ви встановите T2CON = 00h, як ви кажете, Timer2 не буде працювати на всіх,
тому я презюміровать
встановити T2CON.2 = 1 де-небудь ще у вашому коді.

Яка ваша тактової частоти?
Якщо вона становить 3,5 МГц і RCAP2L і RCAP2H так встановлений на вашому переривання 00h
ставка буде достатньо "повільним".

Правильний спосіб використання таймера полягає в тому, щоб вибрати значення RCAP2L/RCAP2H що
дає гарний таймера "пташка" - наприклад, 20 мс дасть вам перервати курс 50 / С.
Тоді ви можете розраховувати 10 перериванні отримати 5 / С.

Крім того, можна спростити вашу перервати поточний використовуючи DJNZ інструкції:

T2Int: CLR T2CON.7
CLR T2CON.0

DJNZ ScrollFreq, T2_Exit
SETB Scroll1Right

T2_Exit: RETI

ScrollFreq = 1 створить Scroll1Right перервати після 1, 2 = ScrollFreq буде встановити після 2 перериває т.д.

/ Rambo

 
Це правильно.
TR2 встановлена на самому початку коду для запуску timer2 і ET2 встановлений щоб timer2 перервати.
Годинник частота
11095200 Гц.
Що ви розумієте під "дуже повільно"?

 
ОК, а 11 МГц годинами не слід давати настільки повільними темпами перервати.
Я не знайомий з 87C51FB, але припускаючи, він ділить на 12 годин, як звичайно,
ваш короткий таймер галочкою б 1,08 з нами, і ви повинні завантажити RCAP2L/RCAP2H
з B800h отримати 20 мс таймер циклу.

Ви установите перервати пріоритетом для Timer2 бути найвищим?
Timer2 має природний пріоритет, що нижче, ніж, наприклад Timer1, який звичайно використовується
як генератора швидкість,
тому він може втручатися в Timer2 переривання.
У системі відліку слід переривати, у більшості випадків, мають найвищий пріоритет.

/ Rambo

 
У перервати пріоритет встановлений для послідовного порту, так як це найбільш важливі дані, які повинні бути зібрані.
Як timer2 підпрограма досить короткий Я намагаюся встановити як пріоритетні біти: для Timer2 і послідовний порт.
Я не хочу грати з RCAP2 реєструє, тому що швидкість в "Running текст" контролюється ScrollFreq байт, яка збільшилася / зменшилася через PS / 2 клавіатура.
Якщо це 500ms, 200 .....він дійсно не має значення, я просто хочу мати контролю про те, що відбувається.
Отже, я постараюся з пріоритетами ....

До речі, 87C51B точно так само, як 8052 8kb КВ.

 
Я думаю, може бути, з іншого переривання втручатися Timer2.
Ви повинні перевірити як зовнішніх, так перервати, напевно, вони не занадто часто переривати.
В іншому випадку це серійний перервати.Чи можете ви відправити код про перевірку й очищення TI і РИ?

 
Ось частина Ser_Int підпрограма:

Ser_Int: PUSH АКК
PUSH Пароль

JB TI, Tx_Mit1
Recv_1: CLR РИ
MOV A, RxBuffHead
МКП A
CJNE A, # RxBuff RxBuffSize, Recv_2
MOV A, # RxBuff
Recv_2: CJNE А, RxBuffTail, Recv_Ok
POP Пароль
POP АКК
RETI

Recv_Ok: MOV RxBuffHead, A
XCH A, R0
PUSH АКК
MOV A, SBUF
MOV @ R0, A
POP АКК
MOV R0, A

POP Пароль
POP АКК
RETI

Tx_Mit1: CLR TI
MOV A, TxBuffTail
CJNE А, TxBuffHead, Tx_Mit2
MOV TxBuffHead, # 00h
POP Пароль
POP АКК
RETI
Tx_Mit2: МКП A
CJNE A, # TxBuff TxBuffSize, Tx_Mit3
MOV A, # TxBuff
Tx_Mit3: MOV TxBuffTail, A
XCH A, R0
MOV SBUF, @ R0
MOV R0, A
POP Пароль
POP АКК
RETI

 
На жаль, я забув у використання зборки.Деякі проблеми, я думаю, що може відбутися з C, але не в збірці.
Від вашого всю інформацію, я не бачу нічого поганого.Але я до сих пір вважаєте, що Ваша проблема виникає тому, що більшість ваших переривання втручатися Timer2.
Вам варто спробувати відключити кожного переривання і подивитися, що відбувається, або щось подібне до цього.
Будь ласка, пост знову, якщо ваш результат гарний чи ні, або будь-якої додаткової інформації, якщо у вас є.

 

Welcome to EDABoard.com

Sponsor

Back
Top