Учитывая все вышеизложенные мнения, выкладываю всё, что у меня получилось. Т.к. подлая конструкция так и не заработала. Но логика работы изменилась. Хотя вновь завела меня в тупик.
Программу переделал. Написал подробные комментарии к каждой строчке (почти).
Теперь проверяю правильность принятия старта. До стопа пока не добрался, хоть бы один байт принять. Да, пересмотрел описание модемов, был неправ. Не могут они передавать данные по 9 бит. Меньше могут. Потому буду использовать адресацию. И потому два 9600 пакую в один 38400.
То =GM= , по пунктам:
1. Согласен, с SREG намудрил. Всё потёр, под SREG оставил свой регистр. Бит данных копируется через бит Т, потому SREG второй раз не сохраняется.
2. Непонятно, зачем обнулять счётчик, прерывание по совпадению, таймер работает в режиме СТС.
3. Упустил из виду, Count0 теперь обнуляю.
4. Почему могут быть ошибки, разве это не независимые регистры? Ну обнулил таймер, ну и что? Разве он не начнет считать с нуля с тем же прескалером?
Теперь самое главное: результат всех переделок. Этот подлый аппарат теперь изменил логику приёма данных. Если раньше была вообще никак не связанная каша с данными (хотя для каждого байта была своя каша), теперь всё подругому. Теперь я принимаю определённое кол-во нулей, а затем идут единицы. Кол-во единиц и нулей опять таки для каждого передаваемого байта свои и опять возможны два принятых байта. Логику чередования 0 и 1 я к исходным значениям привязат так и не смог. Но что самое подлое. Я как-то эксперимента ради перед отправкой на UART принятого байта пробовал отправлять свой фиксированный, заранее известный байт. И он красиво фиксируется. А после него опять начинается 0b11110000. А там где выдаётся по два байта, один байт был ПЕРЕД контрольным байтом, а один после. Это вообще выше моего понимания.
Сообщение отредактировал viktor4152 - Jan 9 2009, 20:34
Прикрепленные файлы
Proga2.txt ( 5.01 килобайт )
Кол-во скачиваний: 65