UART буфер съхранява последните характер?

G

Guest

Guest
Имам PIC 16f877 и аз искам да се намесвам с бр.Аз съм изпращането символи чрез UART и в зависимост от тези характеристики, той активира някои пина.Но как да разбера кога са символи не се предават не повече?В момента,
направих го със закъснение, и той работи постоянно за 400ms, но след това, той става 0 за кратко perioad и тогава 5V отново.
Как мога да елиминират 0 волта период?Ако се опитам с малко (а (uart_recive = "w") (uart_read, направи неща)) той ще остава винаги в 5V до друг клавиш е натиснат,
тъй като, ако буфер остава с последния символ, doen't опресняване.
Ако не съм бил много ясен, моля, говори така.

 
От USART Получаване Прекъсване Флаг малко "(RCIF) ще бъдат определени, когато е налице характер в Получаване FIFO да бъдат прочетени.Това е малко 5 на PIR регистър.Това малко се изчиства от хардуера, когато четат характера на FIFO.

Това, което трябва да направите във вашия код е тест това малко, и ако той е настроен да прочетете герой от получавате FIFO.Ако е не е не е знак за четене.Не е необходимо да се използва закъснения.

 
още веднъж, GSM Man благодарим ти за безценната информация.Изглежда, че това
е точно това, което
аз съм търсите.
проблемът, разбира се, е изпълнението на

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Плаче или много тъжно" border="0" />

hopefuly, това ще бъде последното нещо да попитам,
тъй като проектът е за няколко дни и това е последният проблем (надявам се)
Това е кода,
аз съм с (голяма част от него)

Код:

овъглявам аз, грешка, byte_read, com_byte;

INT тона; / / Спомагателни променливи

недействителни главната () (

...
битове initialisation

Грешка = Soft_UART_Init (& PORTC, 7, 6,1200,0);докато (1)

(PORTD = 0b10000000; / / ако не направите това, друг проблем възниква

byte_read = Soft_UART_Read (& грешка); / / Прочети байт, след това тест за грешка флаг

преминаване (byte_read) (

случай "W": (

за (т = 0; Т <= 400; тона )

(Delay_ms (1);

PORTD = 0b00000001;

) Soft_UART_Write ( "W");

прекъсване;

)

случай "А" ...
 
Аз достигнали до този код, но doens't работа; ако натиснете WA единно време, то си остава в това състояние, не е върната на 0x00 ако doens't получи характер чрез UART

овъглявам byte_read, I = 0, знамето = 0; / / Променлива за съхранение на данни от UART и масив Counter
неподписан кратко cnt = 0;Код:

овъглявам byte_read, I = 0, знамето = 0;

неподписан кратко cnt = 0;# дефинира Направление PORTD

# определят Препращане 0b00000001

# определят назад 0b00000010

# определят Спри 0b00000000недействителни прекъсне () (

ако (PIR1.TMR1IF) (

cnt ;

PIR1.TMR1IF = 0;

)

ако (PIR1.RCIF) (

byte_read = UART1_Read ();

флаг = 1;

cnt = 0;

)

)недействителни главната () (

неподписан кратко J;TRISD = 0;INTCON.GIE = 1;

INTCON.PEIE = 1;

T1CON = 1;

PIE1.RCIE = 1;

PIE1.TMR1IE = 1;

UART1_Init (1200);

Посока = Спри;докато (1) (ако (знаме == 1) (

преминаване (byte_read) (

случай "W": (

Посока = Препращане;

прекъсване;

)

случай "А": (

Посока = обратно;

прекъсване;

)byte_read = 0;

флаг = 0;))ако (cnt == 152) (

Посока = Спри;

cnt = 0;))

)
 

Welcome to EDABoard.com

Sponsor

Back
Top