Я заставляю микроконтроллер 8051 связываться по беспроводной связи с компьютером. Микроконтроллер отправит строку на свой последовательный порт (DB9), и компьютер получит эту строку и будет манипулировать ею.
Моя проблема в том, что я не знаю, как заставить 8051 передавать строку только один раз. Поскольку мне нужно манипулировать строкой на конце ПК, она должна быть получена только один раз. В настоящее время, хотя в коде C я отправляю строку один раз, на моем компьютере я постоянно получаю одну и ту же строку.
Я предполагаю, что это потому, что все, что находится в SBUF, непрерывно передается. Есть ли способ, которым я могу отправить свою строку только один раз? Есть ли способ очистить SBUF?
Я попытался использовать вывод RTS (Запрос на отправку) (7-й вывод) на DB9, потому что я где-то читал, что, если я подавлю напряжение на этом выводе, это остановит поток данных в последовательный порт. Поэтому я запрограммировал мой микроконтроллер на отправку строки, а затем отправил логический уровень 0 на выходной вывод, который был подключен к моему выводу DB9 RTS. Однако это не сработало.
У кого-нибудь есть предложения? Я действительно ценю их.
EDIT
Программное обеспечение, которое я использую на ПК, - X-CTU для модулей Xbee. Это код моего микроконтроллера:
include reg51.h
void SerTx(unsigned char);
void main(void)
{
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
SerTx('O');
SerTx('N');
SerTx('L');
SerTx('Y');
}
void SerTx(unsigned char x)
{
SBUF = x;
while(TI==0);
TI = 0;
}
Может кто-нибудь проверить, действительно ли она отправляет строку только один раз?
EDIT
Похоже, Стив, Бруксмос и Нейл ударили ногтем по голове, когда они сказали, что это было то, что происходило ПОСЛЕ моей основной функции, которая вызывала проблему. Я только что попробовал предложенный код, который поставил Стив (точнее, for (;;) и определил serTX вне main), и он работал отлично. Контроллер, вероятно, перезагружен, и, следовательно, один и тот же код продолжает повторяться.
Большое спасибо за помощь! :)