Отговори на тема  [ 22 мнения ]  Отиди на страница Предишна  1, 2
Разделяне на подпрограмите в .с фаилове. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Код:
temp = (varh<<8) + varl;


Сря Фев 24, 2010 8:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение 
miro_atc написа:
Код:
temp = (varh<<8) + varl;

Мерси, но не проработи както трябва, т.к. varh e 8bit.Ето така стана :), temp e 16bit и ротация на ляво е преместване от младшиа в старшиа байт.
Код:
   temp=varh;
   temp=(temp<<8)+varl;


Сря Фев 24, 2010 8:32 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение 
това като е unsigned char varh,
ще стане 0 след ( varh<<8 ),
трябва си кастване до unsigned int
примерно :
( (unsigned int)varh<<8 )+varl


Сря Фев 24, 2010 8:32 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение 
Cino написа:
това като е unsigned char varh,
ще стане 0 след ( varh<<8 ),
трябва си кастване до unsigned int
примерно :
( (unsigned int)varh<<8 )+varl


По този начин вече стана :).


Сря Фев 24, 2010 8:59 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Нед Яну 18, 2009 1:28 pm
Мнения: 110
Мнение 
по бързо от union няма :)


Сря Фев 24, 2010 10:09 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение 
Ааа много ви благодаря. Чак сега разбрах тази ротация :)

_________________
Ангел Димитров 95


Сря Фев 24, 2010 10:55 pm
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Окт 12, 2006 3:52 pm
Мнения: 21
Местоположение: Varna
Мнение 
Още нещо и без това темата се разводни...
Код:
   unsigned char ARGA_08,RES_0,REM_0,MTEMP;
   ARGA_08=25;
   MTEMP=8;
   RES_0=0x00;REM_0=0x00;
   _asm
         movlb   0x05
   div_loop:   
         bcf      STATUS,0,ACCESS
         RLCF   ARGA_08,1,BANKED
         rlcf   REM_0,1,BANKED
         movlw   10
         subwf   REM_0,0,ACCESS
         bnc      no_set
         movlw   10
         subwf   REM_0,1,BANKED
         bsf      STATUS,0,ACCESS
   no_set:      
         rlcf   RES_0,1,BANKED
         decfsz   MTEMP,1,BANKED
         bra   div_loop
   _endasm

В горния пример след изпълнението на инструкцията "rlcf" нищо не се променя, все едно е изпълнен Nop.Ако вместо "RLCF ARGA_08,1,BANKED" напиша "RLCF 1,1,BANKED" (ARGA_08 е в банка 5, 01 регистър) се ротира както трябва.Не искам да указвам адреса на регистъра директно, т.к. това са локални променливи и подлежат на оптимизаций, т.е. няма гаранция, че следващия път ARGA_08 ще има същия адрес.
И има ли начин да задам BSRа без да го пиша константен?

EDIT: който чете през редовете ще пита глупости :).
C18 User Guide написа:
3.2.5.3 USING C VARIABLES IN ASSEMBLY
When using C variables in assembly:
• The C variable must have global scope in the C source file.
• The C variable must be declared as an extern symbol in the assembly file.


Чет Фев 25, 2010 7:51 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 22 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни