| Автор |
Съобщение |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
@ Nikola, в момента точно това ме мъчи, как да Port1 да присвоява стойност от Variable....или с други думи да ми вдигне в 1'ца Port1.6?
|
| Съб Яну 21, 2006 1:51 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Ами ако трябва да ползваш структурата
Variable.byte = Port; /// четеш порта
Variable.bits.b6 = 1; /// променяш бита
Port = Variable.byte /// Записваш в порта
Но обикновенно компилаторите имат дефинирани макроси за работа с битовете на порта и е по удобно с тях.
|
| Съб Яну 21, 2006 2:34 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Това е ясно че ще заработи и първо то ми идва на ум, но съм сигурен че има някакъв начин чрез Variable да се подразбира Port, т.е. Variable.byte = 0xFF да е равнозначно с Port = 0xFF....прост пример, CCS C, библиотеката за LCD 16х2:
Как става това на ANSI C?
|
| Съб Яну 21, 2006 2:53 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
А това ли. Еи така
bitstr Variable @ Адреса на порта;
Така тоси union ще се намира физически на адреса на порта и няма да е нужно преди това да го четеш и след това да го пишеш
направо
Variable.bits.b6 = 1;
и компилатора ще прочете тоя адрес ще промени стоиноста и пак ще го запише там.
Само трябва да се разбереш так как стои въпроса с банките на Пиковете. Но пак виж в .h faila на компилатора трябва да имаш макроси или нещо друго за тая работа. В IAR просто си пиша
PORTA_PORTA6 = 1;
|
| Съб Яну 21, 2006 3:05 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Въпроса ми е за KEIL 8051, обаче тоя знак "@" като че ли е нонсенс за него....
|
| Съб Яну 21, 2006 3:22 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
В всички компилатори така се задава твърдо адреса на променливата.
Виж евентулано дали не е с
#pragma нещо си там
в IAR може да го направя и така
#pragma location = neobhodimiq adress
bitstr Variable
|
| Съб Яну 21, 2006 3:26 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
@Nikola, благодаря много за помоща, в KEIL се оказа че това се прави с _at_:
Обаче тук идва един проблем който снощи до 5 часа така и не разбрах как да оправя - не мога да поместя bit променлива в struct/union, т.е.
се разполага на адреси 0x90,0x91,0x92,0x93,0x94... Нямам навика да използвам такива "извратени" методи за адресиране на порт чрез структура, но вече го видях работещо и сън не ме хваща докато не разбера как става
PS. съжалявам че малко излязох от темата 
|
| Съб Яну 21, 2006 5:52 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
struct lcd_pin_map { // This structure is overlayed
char enable:1; // on to an I/O port to gain
char rs:1; // access to the LCD pins.
char rw:1; // The bits are allocated from
char unused:1; // low order up. ENABLE will
char lcddata:4; // be pin B0.
};
така става в един баит
|
| Съб Яну 21, 2006 6:23 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Наложи ми се да напиша една дребна програмка за една 12ка а се оказа че MPLAB IDE нещо се е осрала и без да я ползвам само от стоене и нещо връзката с HiTech не работи и рекох да го пробвам това MicroC.
Ами загубих близо час да го разгадавам къде какво има.
Значи това е компилатор за съвсем начинаещи. Става за запознаване с това какво е процесор и какво е C но не и за сериозно хора. Явно такава му е насоченоста. Така че ако някои сега започва това е компилатора за него не съм виждал толкова добре направен потребителски интерфеис и хелпове.
Но за малко по напреднали които си вадят хляба с програмиране не става.
Сигурно и почече от час може би загубих за тоя дето духа. А ми хареса интерфеиса.
|
| Съб Яну 28, 2006 2:04 am |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Не разбирам защо се приема, че колкото по-трудно е програмирането, толкова по-професионално е то.
Защо да се глезим със С като може и на Асемблер?
_________________ Adios
Mozfet
|
| Съб Яну 28, 2006 7:05 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Защото ми изгенерира с 20 процената по дълъг код от IAR.
Да не говорим че явно създателите му не мислят че h фаиловете са нещо важно в C to и не можеш да ги слагаш в проекта.
Като гледам организацията на всичко е мисленоче си правиш програмката в един C фаил. Нямаш генерация на coff фаил също. Нямаш настоика за начина и нивото на оптимизиция,предполагам че такава отсъства като гледам колко ми набъбна една дребна програмка за 12ка.
И още куп дразнещи неща ама не ми се занимава нито да пиша нито да споря. Който е трябвало да разбере е разбрал които не е времето си е негово и може сам да решава как да си го губи.
А за начинаещите си е супер компилатора,препоръчвам го.
|
| Съб Яну 28, 2006 7:25 pm |
|
|