|
KEIL, двоичная форма записи |
|
|
|
Aug 17 2006, 22:43
|
Местный
  
Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979

|
Цитата(zltigo @ Aug 18 2006, 02:14)  Цитата(viael @ Aug 18 2006, 00:26)  Какой префикс
В "C" не предусмотрено использование двоичных форматов, что в принципе правильно, поскольку достаточно тяжело для глаз. Для наглядности удобнее, например, дефинировать BIT0....BIT63 и писать в стиле BIT1|BIT7|BIT12. О... Привык что в CVAVR a=0b11011111;
|
|
|
|
|
Aug 17 2006, 23:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(viael @ Aug 18 2006, 01:43)  Привык что в CVAVR a=0b11011111; Ну так и выдерите из *.h дефиниции (не думаю, что там компилятор такое понимает) или напишите сами #define 0b00000000 0 #define 0b00000001 1 ..... #define 0b11111111 255 Но лучше не надо глаза ломать... Особенно для 32 бит 0b00001000000001000000000001000000 Про 64 вообще молчу :-)
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 18 2006, 03:48
|
Местный
  
Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979

|
Цитата(zltigo @ Aug 18 2006, 03:27)  Цитата(viael @ Aug 18 2006, 01:43)  Привык что в CVAVR a=0b11011111;
Ну так и выдерите из *.h дефиниции (не думаю, что там компилятор такое понимает) или напишите сами #define 0b00000000 0 #define 0b00000001 1 ..... #define 0b11111111 255 Но лучше не надо глаза ломать... Особенно для 32 бит 0b00001000000001000000000001000000 Про 64 вообще молчу :-) Надо только для 8 бит.Очень удобно кодировать таблицу для семисегментных индикаторов.
|
|
|
|
|
Aug 18 2006, 03:59
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(viael @ Aug 18 2006, 09:48)  Надо только для 8 бит.Очень удобно кодировать таблицу для семисегментных индикаторов.  Обозначьте сегменты дефайнами Код #ifndef _I_SEG7_DEF_ #define SEG7_A 0x01 //разряд соответствующий сегменту A #define SEG7_B 0x02 //разряд соответствующий сегменту B #define SEG7_C 0x04 //разряд соответствующий сегменту C #define SEG7_D 0x08 //разряд соответствующий сегменту D #define SEG7_E 0x10 //разряд соответствующий сегменту E #define SEG7_F 0x20 //разряд соответствующий сегменту F #define SEG7_G 0x40 //разряд соответствующий сегменту G #define SEG7_H 0x80 //разряд соответствующий сегменту H #define _I_SEG7_DEF_ 1 #endif _I_SEG7_DEF_ и пишите строки вида Код const unsigned char seg7TabNum[]= { SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_E+SEG7_F, // 0 SEG7_B+SEG7_C, // 1 SEG7_A+SEG7_B+SEG7_G+SEG7_E+SEG7_D, // 2 SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_G, // 3 SEG7_F+SEG7_G+SEG7_B+SEG7_C, // 4 SEG7_A+SEG7_F+SEG7_G+SEG7_C+SEG7_D, // 5 SEG7_A+SEG7_F+SEG7_E+SEG7_D+SEG7_C+SEG7_G, // 6 SEG7_A+SEG7_B+SEG7_C, // 7 SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_E+SEG7_F+SEG7_G, // 8 SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_F+SEG7_G // 9 }; По-моему так гораздо понятнее и удобнее. Даже если индикатор перевернете вверх ногами, то достаточно будет поменять дефайны соответствия сегментов и пинов управления ими и не трогать таблицу.
Сообщение отредактировал rezident - Aug 18 2006, 04:01
|
|
|
|
|
Apr 11 2007, 12:54
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(viael @ Aug 17 2006, 22:26)  Чето я туплю млин... Какой префикс в кейле для записи двоичных чисел, а в хелпе не нахожу  для азма - как всегда.. на хвостике h - шестнадцатиричное значение... на хвостике b - двоичное... (круглый)
|
|
|
|
|
Jun 26 2007, 07:07
|
Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 631

|
Цитата(Halfback @ Apr 4 2007, 01:59)  VAIKeil пишет ошибку деления на нуль  Если заменить операции деления и взятия модуля числа на более подходящие, получим макрос, работающий при любых условиях: Код #define BINARY(bits)\ ((unsigned int)(\ (0##bits&7)|\ ((0##bits>>3)&7)<<1|\ ((0##bits>>6)&7)<<2|\ ((0##bits>>9)&7)<<3|\ ((0##bits>>12)&7)<<4|\ ((0##bits>>15)&7)<<5|\ ((0##bits>>18)&7)<<6|\ ((0##bits>>21)&7)<<7|\ ((0##bits>>24)&7)<<8|\ ((0##bits>>27)&7)<<9|\ ((0##bits>>30)&7)<<10|\ ((0##bits>>33)&7)<<11|\ ((0##bits>>36)&7)<<12|\ ((0##bits>>39)&7)<<13|\ ((0##bits>>42)&7)<<14|\ ((0##bits>>45)&7)<<15))
|
|
|
|
Guest_=AVR=_*
|
Oct 31 2007, 17:11
|
Guests

|
Предлагаю выдать человеку Шнобелевскую премию за компиляцию посредством PN
|
|
|
|
|
Oct 31 2007, 20:09
|

Знающий
   
Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055

|
Цитата(MiklPolikov @ Oct 31 2007, 20:59)  Раньше мой Programmers Notepad понимал запись PORTB=0b00000001; А теперь почему-то не понимает. Старые программы перестали компилироватся. Так как записывать цифры по битам ? можно написать header с содержанием типа #define _0b_00000000 (0x00) ................. #define _0b_00000011 (0x03) ................. ................. #define _0b_11111111 (0xff) и включить в проект.
--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
|
|
|
|
|
Nov 1 2007, 06:21
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(MiklPolikov @ Oct 31 2007, 19:59)  Пробовал PN 2.0.5.18 , PN 2.0.6.1  Что сие значит? Цитата(MiklPolikov @ Oct 31 2007, 19:59)  Так как записывать цифры по битам ? Либо макросы написать наподобии этих: Код #define bitset(var,bitno) ((var) |= 1 << (bitno)) #define bitclr(var,bitno) ((var) &= ~(1 << (bitno))) #define bitswitch(var,bitno) ((var) ^= (1 << (bitno))) #define bittest(var,bitno) ((var) & (1 << (bitno))) Либо через сдвиг препроцессора: Код #define scl 9 #define sda 0 #define led 31 #define bit2 2 #define bit1 1 #define bit7 7 .... DWORD x,y; x |= (1<<scl)|(1<<sda)|(1<<led); // Выставление бит y &= ~((1<<bit1)|(1<<bit7)|(1<<bit2)); // Сброс бит
--------------------
Для связи email: info собака qbit.su
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|