Print Page | Close Window

Ошибка в ур №3

Printed From: 123AVR.COM
Category: Общение и обсуждения
Forum Name: Общение по электронике
Forum Description: Тут мобщайтесь, задавайте вопросы и ждите ответы. Предлагайте темы веток - создадим!
URL: http://123avr.com/forum/forum_posts.asp?TID=67
Printed Date: 25 Oct 2018 at 20:22
Software Version: Web Wiz Forums 11.03 - http://www.webwizforums.com


Topic: Ошибка в ур №3
Posted By: Domin
Subject: Ошибка в ур №3
Date Posted: 08 Apr 2008 at 16:48
Если будете заливать программу урока №3 в атмегу обратите внимание на строчку
time_val = time_val + ((PINC & 0b00111111)<<6);
Дело в том что продвигая замаскированное число вы выкидываете 6 старших бит вообще. А в результате получается, что не зависимо от того 0 или 1 на ножках C2-C5 в соответствующих регистрах РINС2-PINС5=0.
замените данный участок программы

time_val = 0;
time_val = PIND & 0b00111111;

time_val = time_val + ((PINC & 0b00111111)<<6);

на
 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;
Все, удачию 
 



Replies:
Posted By: Domin
Date Posted: 09 Apr 2008 at 07:59

Поправочка

Вот так
time_val1 = (PINC & 0b00111111);
time_val=PIND & 0b00111111;
time_val = time_val + (time_val1<<6);


Posted By: alland456
Date Posted: 25 Jul 2008 at 10:16
Originally posted by Domin Domin wrote:

Поправочка

Вот так
time_val1 = (PINC & 0b00111111);
time_val=PIND & 0b00111111;
time_val = time_val + (time_val1<<6);


А еще проще и лучше сделать так:

Подключить заголовочный файл, который написал автор урока

#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);

Так гораздо меньше памяти занимает, не нужны дополнительные переменные, и код выполняется быстрее.





Posted By: Schweik
Date Posted: 20 Dec 2011 at 23:19

Люди добрые, а подскажите пожалуйста такую вещь - никак не понимаемую моим мозгом. Что такое в данном уроке  unsigned int time_val @10;?

А точнее @10 ?

В учебнике сказано: ...Младший байт числа будет в регистре 10 а старший в регистре 11...

Про какие регистры 10 и 11 идёт речь, если unsigned int это 2 байтовая переменная??

Спасибо заранее, а то уже долго парюсь.




Print Page | Close Window

Forum Software by Web Wiz Forums® version 11.03 - http://www.webwizforums.com
Copyright ©2001-2015 Web Wiz Ltd. - http://www.webwiz.co.uk