Форум восстановлен после взлома! Увы многие сообщения утеряны, остались только до 2013 года. Теперь форум копируется ежедневно, посему просьба вновь пользоваться! С уважением - админ ! (2015/08) |
Ошибка в ур №3 |
Post Reply |
Author | |
Schweik
Newbie Joined: 20 Dec 2011 Status: Offline Points: 1 |
Post Options
Thanks(0)
Posted: 20 Dec 2011 at 23:19 |
Люди добрые, а подскажите пожалуйста такую вещь - никак не понимаемую моим мозгом. Что такое в данном уроке unsigned int time_val @10;? А точнее @10 ? В учебнике сказано: ...Младший байт числа будет в регистре 10 а старший в регистре 11... Про какие регистры 10 и 11 идёт речь, если unsigned int это 2 байтовая переменная?? Спасибо заранее, а то уже долго парюсь. Edited by zyzzza - 30 Jul 2015 at 21:42 |
|
alland456
Newbie Joined: 25 Jun 2008 Location: Ukraine Status: Offline Points: 1 |
Post Options
Thanks(0)
|
А еще проще и лучше сделать так: Подключить заголовочный файл, который написал автор урока #include <m8_128.h> и изменить текст с: time_val = 0; time_val = PIND & 0b00111111; time_val = time_val + ((PINC & 0b00111111)<<6); на: time_val = 0; time_val = PIND & 0b00111111; time_val = time_val + ((u16)(PINC & 0b00111111)<<6); Так гораздо меньше памяти занимает, не нужны дополнительные переменные, и код выполняется быстрее. |
|
Domin
Newbie Joined: 01 Nov 2007 Location: Ukraine Status: Offline Points: 9 |
Post Options
Thanks(0)
|
Поправочка Вот так
time_val1 = (PINC & 0b00111111);
time_val=PIND & 0b00111111; time_val = time_val + (time_val1<<6); |
|
Domin
Newbie Joined: 01 Nov 2007 Location: Ukraine Status: Offline Points: 9 |
Post Options
Thanks(0)
|
Если будете заливать программу урока №3 в атмегу обратите внимание на строчку
time_val = time_val + ((PINC & 0b00111111)<<6);
Дело в том что продвигая замаскированное число вы выкидываете 6 старших бит вообще. А в результате получается, что не зависимо от того 0 или 1 на ножках C2-C5 в соответствующих регистрах РINС2-PINС5=0.
замените данный участок программы
time_val = 0; на
time_val = 0;
time_val1 = (PINC & 0b00111111); time_val1=PIND & 0b00111111; time_val = time_val + (time_val1<<6); ну и конечно вверху обьявите переменную time_val1.
типа так
unsigned int time_val @10, time_val1;
Все, удачию
|
|
Post Reply | |
Tweet
|
Forum Jump | Forum Permissions You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |