Я делаю микроконтроллер 8051, который связывается с компьютером по беспроводной сети. Микроконтроллер отправит строку на свой последовательный порт (DB9), и компьютер получит эту строку и манипулирует ею.Как я могу отправить строку серийно из 8051 только ONCE?
Моя проблема в том, что я не знаю, как заставить 8051 передать строку только один раз. Поскольку мне нужно манипулировать строкой на ПК, ее нужно принимать только один раз. В настоящее время, хотя в коде C я отправляю строку один раз, на моем компьютере я получаю ту же строку непрерывно. Я предполагаю, что это происходит потому, что все, что есть в SBUF, непрерывно передается. Есть ли способ, которым я могу отправить свою строку только один раз? Есть ли способ освободить SBUF?
Я попытался использовать контакт RTS (Request to Send) (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
Похоже, Стив, brookesmoses и Нил попал в самой голове, когда они сказали, что это было то, что происходило после моей основной функции, которая была причиной проблемы. Я просто попробовал предложенный код Steve (более конкретно для for (;;) и определения serTX за пределами main), и он отлично работал. Вероятно, контроллер перезагружается и, следовательно, тот же код продолжает повторяться.
Большое спасибо за помощь! :)
Программное обеспечение, которое я использую на ПК, это X-CTU для модулей Xbee. Это код моего микроконтроллера: #include void SerTx (unsigned char); void main (void) { \t TMOD = 0x20; \t TH1 = 0xFD; \t SCON = 0x50; \t TR1 = 1; \t \t \t SerTx ('O'); \t SerTx ('N'); \t SerTx ('L'); \t SerTx ('Y'); \t void SerTx (unsigned char x) { \t SBUF = x; \t while (TI == 0); \t TI = 0; } } Возможно, кто-то подтвердит, что он фактически отправляет только одну строку? –
CodeConfused
Пожалуйста, отредактируйте свой вопрос и вставьте код, отформатированный как код, чтобы его было легче читать. –
@CodeConfused: Я рад, что все мы нашли решение! У меня есть еще два запроса. (1) По этому вопросу и всем остальным вопросам о переполнении стека, пожалуйста, отметьте ответ как «принятый», нажав на большой галочку тем, который, по вашему мнению, дает лучший ответ на ваш вопрос. Это полезно для других людей, у которых может быть один и тот же вопрос в будущем, так как они могут сразу увидеть лучший ответ. (2) В этом вопросе, пожалуйста, отформатируйте код как код. Для этого отредактируйте вопрос, выберите код и нажмите кнопку кода (это кнопка с 1 и 0 на ней). Благодарю. –