Отправка данных с 9600 бод в AT89S52, кристалл 4 МГц - PullRequest
4 голосов
/ 27 декабря 2011

Mates,

Я хочу передать данные, используя AT89S52, и мой кристалл имеет 4 МГц. Я пишу правильный код скорости передачи ниже?Или кто-нибудь из вас знает, как рассчитать скорость передачи?

Большое спасибо

void transmit_data()
 {
    TMOD = 0x20;
    TH1 = 0xfd;
    PCON &= 0x7f;
SCON = 0x50;
TCON =0x40;
while(1)
  {
    printf("a"); // transmit a along with CR & LF.
  }

}

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

Вот калькулятор, который поможет: http://www.keil.com/c51/baudrate.asp К сожалению, он показывает, насколько плох выбор кристалла 4 МГц для стандартных скоростей передачи.

1 голос
/ 27 декабря 2011

Кодируйте его с некоторыми приблизительными значениями и отправляйте 0xAA в цикле. Посмотрите на tx o / p с помощью области, измерьте ширину в битах, а затем ошибитесь ... «оптимизируйте» значения делителя. Это имеет некоторые преимущества по сравнению с поиском / чтением / усвоением огромного руководства пользователя и вычислением:

1) Это быстрее, если тебе не повезет.

2) Если выходных данных нет вообще, вы можете исправить хитрое оборудование и / или неправильную инициализацию UART и / или зарегистрировать адреса и / или назначения контактов, прежде чем тратить целую вечность, задаваясь вопросом, что вы сделали неправильно со скоростью передачи.

3) Он всегда работает, даже если формула скорости передачи данных в ручном режиме «правильная менее 100%».

4) Когда вы видите, что выход выводится правильно, но связь по-прежнему отсутствует, вы можете обвинить его в кабелях и / или DCE / DTE и / или гипертерминале и / или во всех других вещах, которые мешают работе RS232.

0 голосов
/ 04 января 2012

Лучший способ получить 9600 мегапикселей - использовать кристалл 11.0592 МГц ... погрешность 0%

...