Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 22

Классы взаимодействия с пинами микроконтроллера

22.05.2014, 17:18. Показов 4613. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возвращаюсь в програмирование микроконтроллеров после 5 лет работы с ПЛИС. Спрос на рынке труда на микроконтроллеры преобладает. Теперь за 5 лет рессурсы выросли многократно и теснота по памяти, быстродействию и регистрам больше не тревожит. Стало модным и, главное, важным для создания надежных проектов писать на С++.
Основательно засел за учебники(уж который раз!) .. и вспомнил простые мучения с распределением портов на внешние микросхемы. Естественно с прикидкой,- как я буду потом писать код.

Пока по приоритетности возник вопрос и , надеюсь, тут мне местные гуру и корифеи ткнут(я не нашел примеры) как красиво создать универсальный класс\шаблон, где бы я мог собирать побитно оставшийся ресурс для пользователя чтения\ записи. Чтобы все эти сборки пинов (разные регистры), запоминание не тронутых были спрятаны для пользователя.
Если у кого есть примеры,-буду рад. Понимаю, что для разных контроллеров это будет по разному. Но главное - идея! Остальное я сам сделаю...

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2014, 17:18
Ответы с готовыми решениями:

Комп работает только с 20 пинами
Всем привет. Вкратце опишу проблемку. Оставил комп на ночь, утром встал и обнаружил, что он повис, перезагруз и не включался монитор. Все...

Как правильно работать с пинами портаG
Здравствуйте! Подскажите пожалуйста,как мне корректно взвести(сбросить) нужный пин портаG в Atmega128?

Можно управлять отдельно пинами ide-разъема?
Скажем мне надо получить raw поток, или надо с такой-то частотой узнать логический уровень на таком-то пине ide разъема. или наоборот...

51
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
24.05.2014, 09:43
Студворк — интернет-сервис помощи студентам
Я вас понял. Но вот я только работаю с МК PIC. Пишу программы для этих МК на C++ так как ASM не изучал. Пока со всеми задачами справлялся.
0
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 22
24.05.2014, 10:45  [ТС]
Так это то, что надо! Мне и PIC доставались. Начиная от 12 и до 18го.. Поделитесь наработкой, чтобы я прочувствовал..
На что по-вашему стоит обращать внимание в первую очередь?...
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
24.05.2014, 20:05
Если со схемотехникой и цифровой электроникой вы знакомы то начните изучать строение МК скажем pic16f этого семейства. Когда поймете для чего нужны те или иные узлы МК то попробуйте написать простую программу, а лучше разобрать какой нибудь код.
Даташиты есть на русском http://kazus.ru/guide/microchip/index.html
Я пользуюсь компилятором mikroC PRO for PIC v4.60 но есть и другие.
0
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 22
24.05.2014, 21:35  [ТС]
Ой! Да эти 36 команд с аккумуляторной архитектурой мне известны хорошо. Тем более интересно, как умудриться писать на С++ для такой крохи?!
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
24.05.2014, 23:12
Цитата Сообщение от Мурман Посмотреть сообщение
как умудриться писать на С++ для такой крохи?!
Странный вопрос.
Что именно надо умудрятся на C++?
В чём у вас сложность написания программы на C++?
Вы не знаете C++?
0
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 22
25.05.2014, 09:02  [ТС]
C++ как правило генерирует избыточный код(и это надо разместить в крохотную ПЗУ). Мощно использует ОЗУ(которого крохи)... Как решается вопрос с обработкой исключений?(игнор?).. В пределе для PIC10 такое мыслимо?..
Вообще я заинтригован.. Где можно глянуть примеры подобных проектов? У вас есть любимый ресурс?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
25.05.2014, 12:07
Мой ресурс помощник это www.cyberforum.ru.
В интернете много проектов и исходников на PIC и C++.

Добавлено через 23 минуты
Я конечно не знаток ASM, что за "избыточный код C++"?
Может кто скажет где избыточность:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
unsigned long i=0,g=0;
void main(void)
{
ADCON1=0X07;
TRISA=0;
PORTA=0;
TRISB=0XFF;
OPTION_REG=0X7F;
while(1)
{
if(!PORTB.B0)
{
i++;
if(i<=0xffffffff)
{
i=0;
PORTA++;
}
}
//=============================
if(!PORTB.B1)
{
g++;
if(g<=0xffffffff)
{
g=0;
PORTA--;
}
}
}
}
это тот же код транслируемый компилятором.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
_main:
 
;LedBlinking.c,2 ::                 void main(void)
;LedBlinking.c,4 ::                 ADCON1=0X07;
        MOVLW      7
        MOVWF      ADCON1+0
;LedBlinking.c,5 ::                 TRISA=0;
        CLRF       TRISA+0
;LedBlinking.c,6 ::                 PORTA=0;
        CLRF       PORTA+0
;LedBlinking.c,7 ::                 TRISB=0XFF;
        MOVLW      255
        MOVWF      TRISB+0
;LedBlinking.c,8 ::                 OPTION_REG=0X7F;
        MOVLW      127
        MOVWF      OPTION_REG+0
;LedBlinking.c,9 ::                 while(1)
L_main0:
;LedBlinking.c,11 ::                 if(!PORTB.B0)
        BTFSC      PORTB+0, 0
        GOTO       L_main2
;LedBlinking.c,13 ::                 i++;
        MOVF       _i+0, 0
        MOVWF      R0+0
        MOVF       _i+1, 0
        MOVWF      R0+1
        MOVF       _i+2, 0
        MOVWF      R0+2
        MOVF       _i+3, 0
        MOVWF      R0+3
        INCF       R0+0, 1
        BTFSC      STATUS+0, 2
        INCF       R0+1, 1
        BTFSC      STATUS+0, 2
        INCF       R0+2, 1
        BTFSC      STATUS+0, 2
        INCF       R0+3, 1
        MOVF       R0+0, 0
        MOVWF      _i+0
        MOVF       R0+1, 0
        MOVWF      _i+1
        MOVF       R0+2, 0
        MOVWF      _i+2
        MOVF       R0+3, 0
        MOVWF      _i+3
;LedBlinking.c,14 ::                 if(i<=0xffffffff)
        MOVF       _i+3, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main6
        MOVF       _i+2, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main6
        MOVF       _i+1, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main6
        MOVF       _i+0, 0
        SUBLW      255
L__main6:
        BTFSS      STATUS+0, 0
        GOTO       L_main3
;LedBlinking.c,16 ::                 i=0;
        CLRF       _i+0
        CLRF       _i+1
        CLRF       _i+2
        CLRF       _i+3
;LedBlinking.c,17 ::                 PORTA++;
        INCF       PORTA+0, 0
        MOVWF      R0+0
        MOVF       R0+0, 0
        MOVWF      PORTA+0
;LedBlinking.c,18 ::                 }
L_main3:
;LedBlinking.c,19 ::                 }
L_main2:
;LedBlinking.c,21 ::                 if(!PORTB.B1)
        BTFSC      PORTB+0, 1
        GOTO       L_main4
;LedBlinking.c,23 ::                 g++;
        MOVF       _g+0, 0
        MOVWF      R0+0
        MOVF       _g+1, 0
        MOVWF      R0+1
        MOVF       _g+2, 0
        MOVWF      R0+2
        MOVF       _g+3, 0
        MOVWF      R0+3
        INCF       R0+0, 1
        BTFSC      STATUS+0, 2
        INCF       R0+1, 1
        BTFSC      STATUS+0, 2
        INCF       R0+2, 1
        BTFSC      STATUS+0, 2
        INCF       R0+3, 1
        MOVF       R0+0, 0
        MOVWF      _g+0
        MOVF       R0+1, 0
        MOVWF      _g+1
        MOVF       R0+2, 0
        MOVWF      _g+2
        MOVF       R0+3, 0
        MOVWF      _g+3
;LedBlinking.c,24 ::                 if(g<=0xffffffff)
        MOVF       _g+3, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main7
        MOVF       _g+2, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main7
        MOVF       _g+1, 0
        SUBLW      255
        BTFSS      STATUS+0, 2
        GOTO       L__main7
        MOVF       _g+0, 0
        SUBLW      255
L__main7:
        BTFSS      STATUS+0, 0
        GOTO       L_main5
;LedBlinking.c,26 ::                 g=0;
        CLRF       _g+0
        CLRF       _g+1
        CLRF       _g+2
        CLRF       _g+3
;LedBlinking.c,27 ::                 PORTA--;
        DECF       PORTA+0, 0
        MOVWF      R0+0
        MOVF       R0+0, 0
        MOVWF      PORTA+0
;LedBlinking.c,28 ::                 }
L_main5:
;LedBlinking.c,29 ::                 }
L_main4:
;LedBlinking.c,30 ::                 }
        GOTO       L_main0
;LedBlinking.c,31 ::                 }
        GOTO       $+0
; end of _main
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
25.05.2014, 12:14
Цитата Сообщение от VladimirU Посмотреть сообщение
i++;
if(i<=0xffffffff)
{
i=0;
или я ничего не понимаю или зачем здесь if???
он всегда будет срабатывать
значит i всегда будет сбрасываться в 0
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
25.05.2014, 13:34
условие if будет выполнено тогда когда переменная i достигнет значение больше или равное 4294967295.

Добавлено через 1 минуту
при нажатой кнопки на pin B0 подаётся минус
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
25.05.2014, 13:42
Цитата Сообщение от VladimirU Посмотреть сообщение
условие if будет выполнено тогда когда переменная i достигнет значение больше или равное 4294967295.
во первых
Цитата Сообщение от VladimirU Посмотреть сообщение
if(i<=0xffffffff)
в условии явно написано меньше или равно
во вторых,если представить что здесь описка
больше чем 0xffffffff не будет, разрядов не хватит
остается только равно
но при следующей итерации она и так станет 0 ( переполнение) смысл городить огород?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
25.05.2014, 13:48
Ну да точно переменные i и g можно не обнулять.
0
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 22
26.05.2014, 09:10  [ТС]
Не вижу красоту С++!.. Где классы?

Добавлено через 17 часов 18 минут
Где хваленая мощь С++? Паттерны... аж рябит в глазах! =).. Ваш пример- банальный С.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2014, 09:10

Материнка с 8 пиновым питанием для процессора а блок с 4 пинами
БП LC-B450ATX (P450A-C) дело в том что материнка с 8 пиновым питанием для процессора а блок с 4 пинами. подключаю 4пин и все...

Скрипт для генерации .h файла с пинами МК из схематика Eagle
Стало мне как-то лениво руками переписывать со схемы названия цепей и соответствие их пинам МК. Особенно когда поправишь что-то в схеме, а...

АЦП ATMEGA32. Непонятки с пинами AVCC и AREF. Тема закрыта.
С АЦП у меня небольшой опыт. Сейчас делаю проект, где АЦП использую второй раз. В первый раз я делал проект на ATTINY13. Там все просто...

Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
Уважаемые форумчане помогите пожалуйста с практической работой. Программным путем: В папке С:\temp создайте папки К1 и К2. В...

Реализовать классы различных профессий и классы фирм из разных отраслей производства
Помогите реализовать задачу Шаблон Строитель(Builder) Реализовать систему, которая будет нанимать различных работников на работы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru