Микроконтроллеры | Как в Си прочесть байт с ног AT97SAM7S64 и записать и записать его туда? |
|
---|---|---|
Добрый день! Осваиваю контроллер и Си. Никак не могу врубиться для чего маска и можно ли из нее собать что-то на подобии байта в который и пихать свой байт. Для чего мне это надо. Например PA0, PA1, PA5, PA7 .... задействованы под ЖК. Им надо управлять. Хочется сделать что-то вроде LCD = b1011; //пихаем число записанное в тексте как бинарное (тоже вопрос как это сделать!) лучше, если это будет не байт. А произвольное количество ног. Что значит такая конструкция?: P.S: не могу найти справк в. Keil mVision по СИ. Вот в PicC была... Кто знает где ее искать? |
|
|
Последнее - работа с указателями. Значение справа от знака (=) записываем в поле структуры, адрес которой берется из pSSC. В ATMega этой конструкции примерно соответствует код: lds r28,pSSC Первый вопрос не совсем понял. Хочется записать что-то наподобие PORTB = 2, и эта двойка попала бы, к примеру, в старшую тетраду? Если суть в этом, в С есть описание битовых переменных. Делается оно так: struct {char field1 : 2; x.field1 = 1; // Записываем код 01 в два старших бита байта. При выполнении этих присваиваний остальные биты байта НЕ изменяются. В реале все эти присваивания компилируются в and, lsl/lsr и прочий геморрой, но программеру эта кухня не видна. |
|
|
Ну про первый вопрос попробую понятней. У меня к контроллеру подключен ЖК-дисплей. Он соединен с разными ногами контроллера. Например, DB0 ЖК с PA5 МК, DB1 с PA8, DB2 с PA12 и.т.д (ну такая дурацкая распайка получилась). Мне надо написать процедуру инициализации дисплея, при том хочется в удобной форме. В PIC C для PIC-ов я мог создать, например, свой байт из ссылок на биты регистра PORTA или PORTB. При этом порядок битов в байте был бы таким, какой я хочу. А дальше в этот байт прописать число в 16-иричном формате. И вся эта кухня расходилась в результате на нужные пины контроллера. И вот в вашей структуре мне не понятно следующее: 2. А как мне записать такое: а в коде x = 9D9D; (а лучше вообще x=1001110110011101) РЕЗЮМЕ: То есть я хочу одной строкой задавать значения выбранных мной ног И при этом желательно в бинарной форме |
|
|
И что такое всетаки эта маска? Это очень похоже на то, что я хочу |
|
|
Идея понятна, но, боюсь, что так сделать не получится - в стандарте С такой фишки совершенно точно нет, это явно изобретение разработчиков компилятора для PIC-ов (хотя довольно удобное ). То, что я написал раньше, предназначено для в точности обратной задачи - разобрать байт на биты, а не собирать его из битов. Подождите, может быть еще кто из участников откликнется В крайнем случае напишите пару функций типа writeLCD/readLCD |
|
|
А может как-то можно написать такую функцию чтобы назначала ссылки на пины? Только как ума не приложу! Си я пока совсем не знаю! |
|
|
mrengineer |
|
|
Вот тут с этой маской Вот описывается в .с файле маска В процедуре main стоит Это типа назначение что все, что в маске записано, будет работать на выход (пины на выход) Далее фигурирует функция Она все пины в маске сбрасывает в 0 В файле board.h (описывает мою мезонитную плату) имеется #define LCD_MASK (A0|RW|DB7|DB6|DB5|DB4|DB3|DB2|DB1|DB0) А вот сами функции __inline void AT91F_PIO_ClearOutput( ----------------------------------------------------------------------------------------------- |
|
|
caddr: согласен Может, подскажете где качнуть? А вообще раньше от таких вопросов меня спасал хелп по языку в PIC C, но в keil его попросту нет |
|
|
Тоесть получается, что маска - это и есть набор сслылок на нужные пины. Но есть только две функции которые ставят сразу всем эти пинам в маске 0 или 1 И функция указания направления ввода/вывода пинов в маске А функции чтобы назначать пинам в маске произвольные значения не существует Но есть надежда что кто-то подскажет как ее сделать. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |