123AVR.COM Homepage
Forum Home Forum Home >Общение и обсуждения >Общение по электронике
  New Posts New Posts RSS Feed - Ошибка в ур №3
  FAQ FAQ  Forum Search   Register Register  Login Login

Форум восстановлен после взлома! Увы многие сообщения утеряны, остались только до 2013 года. Теперь форум копируется ежедневно, посему просьба вновь пользоваться! С уважением - админ ! (2015/08)

Ошибка в ур №3

 Post Reply Post Reply
Author
Message Reverse Sort Order
Schweik View Drop Down
Newbie
Newbie


Joined: 20 Dec 2011
Status: Offline
Points: 1
Post Options Post Options   Thanks (0) Thanks(0)   Quote Schweik Quote  Post ReplyReply Direct Link To This Post Topic: Ошибка в ур №3
    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
Back to Top
alland456 View Drop Down
Newbie
Newbie


Joined: 25 Jun 2008
Location: Ukraine
Status: Offline
Points: 1
Post Options Post Options   Thanks (0) Thanks(0)   Quote alland456 Quote  Post ReplyReply Direct Link To This Post 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);

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



Back to Top
Domin View Drop Down
Newbie
Newbie
Avatar

Joined: 01 Nov 2007
Location: Ukraine
Status: Offline
Points: 9
Post Options Post Options   Thanks (0) Thanks(0)   Quote Domin Quote  Post ReplyReply Direct Link To This Post Posted: 09 Apr 2008 at 07:59

Поправочка

Вот так
time_val1 = (PINC & 0b00111111);
time_val=PIND & 0b00111111;
time_val = time_val + (time_val1<<6);
Back to Top
Domin View Drop Down
Newbie
Newbie
Avatar

Joined: 01 Nov 2007
Location: Ukraine
Status: Offline
Points: 9
Post Options Post Options   Thanks (0) Thanks(0)   Quote Domin Quote  Post ReplyReply Direct Link To This Post 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;
Все, удачию 
 
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 11.03
Copyright ©2001-2015 Web Wiz Ltd.

Rating All.BY Rambler's Top100 ���� - �������. ������� ������