Час затримки між переривань

G

Guest

Guest
Привіт, друзі,
Я намагаюся зробити дуже просту програму, в якій я годування двох сигналів (частота основного, квадратного хвилі) до AT89C51 ЦС для оцінки різниці в часі між ними (по одному на INT0 і INT1 на інший), але я не можу отримати правильні значення.Я пробував все, не можу зрозуміти, що помилка, яку я роблю.Шлю мою програму (зроблено в Keil C51), разом з.хтось будь ласка, допоможіть мені знайти мою помилку.

Спасибі, друзі.

Код:

Int таймер;

INT0 Void (Порожнеча) перервати 0
(
TH0 = 0x00;
TL0 = 0x00;
Tr0 = 1;
EX0 = 0;
EX1 = 1;

)

Int1 Void (Порожнеча) перервати 2
(

Tr0 = 0;
EX1 = 0;

Таймер = TH0 * 256 TL0;

TH0 = 0x00;
TL0 = 0x00;

)

Void Main () (P3 = 0x0C;

lcd_init ();EA = 1;
TMOD = (TMOD & 0xF0) | 0x01 / * Встановити режим T/C0 * /
ET0 = 1 / * включити таймер 0 переривання * /
Tr0 = 0;

IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 0;TH0 = 0x00;
TL0 = 0x00;

While (1)
(/ / Значенням таймера на ЖК)

 
Хіба у дозволять розрядний глобальний переривання?Див також до того, що найвищим пріоритетом переривання віддаватися найбільш відповідний сигнал з іншого.

 
Привіт,

Я думаю, у зробив.Але це просто перевірити чи є у вас перетворити десяткове значення відповідне шістнадцяткове значення.

 
Для вимірювання часу затримки між EXT переривань необхідно встановити біти IE1 (TCON.3) і IE0 (TCON.1) ..
Ці біти вибору між рівнем і EDGE виявлення ..Вам необхідно EDGE виявлення, тому встановити їх на "1" ..

Привіт,
IanP

 
Цитата:

Ви повинні встановити біти IE1 (TCON.3) і IE0 (TCON.1) ..

Ці біти вибору між рівнем і EDGE виявлення ..
 
Звичайно, вона повинна бути IT0 і IT1 ..Вони вибирають падіння EDGE / низького рівня ..

Привіт,
IanP

 
лат пише:Int таймер;

розрядних endtimer;
INT0 Void (Порожнеча) перервати 0

(

TH0 = 0x00;

TL0 = 0x00;

Tr0 = 1;

EX0 = 0;

EX1 = 1;

)Int1 Void (Порожнеча) перервати 2

(

Tr0 = 0;

EX1 = 0;Таймер = TH0 * 256 TL0;endtimer: = 1; вимірювання закінчитиTH0 = 0x00;

TL0 = 0x00;)Void Main () (P3 = 0x0C;lcd_init ();EA = 1;

TMOD = (TMOD & 0xF0) | 0x01 / * Встановити режим T/C0 * /ET0 = 0; вимкнути таймер перериваньTr0 = 0;IT0 = 1;

IT1 = 1;

EX1 = 0;TH0 = 0x00;

TL0 = 0x00;endtimer = 0; прапор для вимірювань закінчитиWhile (1)

(EX0 = 1; дозволити зовнішнім intterupt 0
WHILE (! Endtimer) чекає таймер measuerent/ / Значенням таймера на ЖКкінця таймера = 0; для наступного виміру
)
 

Welcome to EDABoard.com

Sponsor

Back
Top