Цитата(David_Ali @ Apr 25 2013, 20:38)

вот это рабочий код на атмега16. на атмега восемь он не работает(естественно я меняю что надо по ДШ на мегу 8). кто знает что там нужно поменять скажите, и объясните почему!!)
прошу учить, а не поучать!
P.S. GGC AVRом компилирую. потому что код вижн не дает мне хекс файлов, хоть в настройках я и указываю оутпут файлы хексами. и как использовать <util/setbaud.h>??
это
не рабочий код. если он
вдруг ведет себя так, как вы предполагаете, то это свидетельствует только об одном из двух: либо вы даже и не предполагаете, как он должен себя вести, либо чисто случайно все выглядит по-вашему. поясню, почему я так считаю.
1. у вас есть прерывание ПО ПРИЕМУ символа. внутри обработчика этого прерывания вы незамедлительно считываете UDR и выдаете принятое обратно. это называется ЭХО. в терминале вы обязаны получать обратно то, что передали.
2. в основном цикле вы непрерывано и постоянно считываете UDR, при этом абсолютно не заботясь о том, есть там данные или нет. честно говоря, я никогда не интересовался, что будет происходить, если во время приема байта считывать UDR...
это порочная практика. но могу предположить, что в меге8 UDR не имеет двойной буфферизации, а в меге16 он буфферизирован. т.е. при наличии двойной буфферизации до тех пор, пока что-то не будет принято, вы считываете НОЛЬ из буфера. если же буферизации нет, то что вы считываете во время приема - я не могу даже предположить (а читать даташит не хочется, лень).
3. итак, у вас есть две точки в программе, где вы НЕЗАВИСИМО считываете UDR. по-вашему, это нормально? приведу пример: по конвейеру едут пирожки, а по бокам конвейера стоят Вася и Петя. вы надеетесь, что им обоим достанется поровну пирожков, но на самом деле это зависит от ловкости каждого. Если Вася более ловкий, то Петя останется голодным, ну возможно, иной раз все-таки что-то и ему перепадет... так вот, обработчик прерывания - это у вас шустрый Вася, а основной цикл - тормоз Петя...
вам уже намекали, что нормальная практика - это либо работать с UDR исключительно через прерывания, либо исключительно из основного цикла. но вы решили поступить по-своему. обучение всегда начинается с того, что ученик строго следует наказам учителя, и только освоив учительские методы полностью, может попытаться пойти своим путем. рекомендую и в случае с МК поступать так же точно.
P.S. как пользоваться
util/setbaud.h, написано в документации к
WinAVR. так же можете почитать и мои скромные попытки рассказать об этом:
http://www.simple-devices.ru/attachments/a...AVR_02_2011.pdfтак же есть еще немного по родственным темам:
http://www.simple-devices.ru/articles/7-so...navr-console-io (тут как раз есть исходники с примером использования
setbaud.h).