Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 4

Программирование микроконтроллера

16.06.2013, 15:40. Показов 2111. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
Прошу гуру программирования помочь немного разобраться в коде С
По сути этот код написан для термостата, который исходя из значения температуры, включает или выключает нагрузку (в данном случае это нагревательный элемент). Используется датчик температуры DS18B20 и микроконтроллер ATtiny2313.

Всем заранее спасибо))

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
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
[url]http://www.hpinfotech.com[/url]
 
Project : 
Version : 
Date    : 29.05.2010
Author  : 
Company : 
Comments: 
 
 
Chip type           : ATtiny2313
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
External RAM size   : 0
Data Stack size     : 32
*****************************************************/
 
#include <tiny2313.h>
#include <delay.h>
// 1 Wire Bus functions
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=5
#endasm
#include <1wire.h>
 
// DS18b20 Temperature Sensor functions
#include <ds18b20.h>
unsigned int Number, zad = 0;
unsigned char k,i,j = 0;
unsigned char Dig[10], Disp1, Disp2, Disp3, Disp4, Disp5, Disp6, Nagruz;
eeprom int zapis;
 
//void Dig_init()
 
 
//подпрограмма выделения цифры из трёхзначного числа
void Display (int Num, int zadan)
{
char Num1, Num2, Num3, Num4, Num5, Num6;
Num1=Num2=Num4=Num5=0;
while (Num >= 100)
{
Num -= 100;
Num1++;
}
while (Num >= 10)
{
Num -= 10;
Num2++;
}
while (zadan >= 100)
{
zadan -= 100;
Num4++;
}
while (zadan >= 10)
{
zadan -= 10;
Num5++;
}
Num3 = Num;
Num6 = zadan;
Disp1 = Dig[Num1];
Disp2 = Dig[Num2];
Disp3 = Dig[Num3];
Disp4 = Dig[Num4];
Disp5 = Dig[Num5];
Disp6 = Dig[Num6];
}
 
void main(void)
{
// Declare your local variables here
 
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
 
// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=Out Func0=Out 
// State2=T State1=0 State0=0 
PORTA=0x00;
DDRA=0x03;
 
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=P State6=T State5=T State4=1 State3=0 State2=0 State1=0 State0=0 
PORTB=0x90;
DDRB=0x1F;
 
// Port D initialization
// Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State6=P State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x40;
DDRD=0x3F;
 
Dig[0] = 0b0000;
Dig[1] = 0b0001;
Dig[2] = 0b1000;
Dig[3] = 0b1001;
Dig[4] = 0b0100;
Dig[5] = 0b0101;
Dig[6] = 0b1100;
Dig[7] = 0b1101;
Dig[8] = 0b0010;
Dig[9] = 0b0011;
 
w1_init();
ds18b20_init(0,-5,50,DS18B20_12BIT_RES); // переключения термометра в 12 битный режим
//Dig_init();
Display (0,0);
zad = zapis;
 
while (1)
{
Number=ds18b20_temperature(0)*10;//считывание температуры
Number=Number+2;//ввод погрешности
if (Number >= zad)
{Nagruz=0b10000;//отключение нагрузки 
 PORTA=0b10;}//зелёный свет
else              
{Nagruz=0b00000;//включение нагрузки
 PORTA=0b01;}//красный свет
 
for (i = 0; i < 50; i++) {
if (PIND.6==0) //кнопка "плюс"
    zad++;
if (PINB.7==0) //кнопка "минус"
    zad--;
if (PIND.6==0 & PINB.7==0)//занесение в память
    {PORTA=0b11; //жёлтый свет
     zapis=zad;}
if (zad < 170) //нижний предел
    zad=170;
if (zad > 450) //верхний предел
    zad=450;
Display(Number, zad); //данные на дисплей
for (j = 0; j < 100; j++) {
if (k == 6) k = 0;
else
{
k++;
switch (k)
{
case 1: PORTD=0b000001; //единицы
        PORTB = Disp1 | Nagruz;
        delay_ms (2);
 
break;
case 2: PORTD=0b000010;//десятки
        PORTB = Disp2 | Nagruz;
        delay_ms (2);
 
break;
case 3: PORTD=0b000100;//сотни
        PORTB = Disp3 | Nagruz;
        delay_ms (2);
 
break;
case 4: PORTD=0b001000;//сотни
        PORTB = Disp6 | Nagruz;
        delay_ms (2);
 
break;
case 5: PORTD=0b010000;//десятки
        PORTB = Disp5 | Nagruz;
        delay_ms (2);
 
break;
case 6: PORTD=0b100000;//единицы
        PORTB = Disp4 | Nagruz;
        delay_ms (2);
 
            
      };
};
};
};
PORTD=0b000000;//очистка дислея перед считыванием температуры
};
}
 Комментарий модератора 
Правила форума:

4.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2013, 15:40
Ответы с готовыми решениями:

Программирование микроконтроллера
Друзья, доброго всем времени суток. У меня такая задача: необходимо описать в ассемблере измерение остаточного напряжения на аккумуляторе....

Программирование микроконтроллера
Всем здравствуйте!) Очень нужна ваша помощь в лабораторной работе. У меня есть код (приведу ниже), нужно написать небольшую подпрограммку...

Программирование микроконтроллера
Вычисление косинуса с помощью ряда Тейлора Здравствуйте, помогите мне пожалуйста ,я не знаю как написать код программы на ассемблере для...

5
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.06.2013, 17:58
...немного разобраться в коде С
...
По сути этот код написан для термостата
вопрос-то в чем? Вот там где вы взяли этот код и расписано.
0
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 4
16.06.2013, 19:40  [ТС]
Как раз такие дело в том, что там где брал, расписано ничего не было, только в самом коде немного комментов и все.
0
1184 / 673 / 113
Регистрация: 15.05.2012
Сообщений: 4,085
16.06.2013, 21:22
Цитата Сообщение от Aleksa01 Посмотреть сообщение
помочь немного разобраться в коде
Где это немного скрыто?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.06.2013, 07:14
Цитата Сообщение от Aleksa01 Посмотреть сообщение
switch (k)
{
case 1: PORTD=0b000001; //единицы
PORTB = Disp1 | Nagruz;
delay_ms (2);
break;
case 2: PORTD=0b000010;//десятки
PORTB = Disp2 | Nagruz;
delay_ms (2);
break;
case 3: PORTD=0b000100;//сотни
PORTB = Disp3 | Nagruz;
delay_ms (2);
моргание обеспечено
когда подаешь питание то еще остаются данные от предыдущего разряда
сначала нужно погасить дисплей а только потом вводить данные

типа так
C++
1
2
3
4
case 1: PORTD=0b000000; //единицы
 PORTB = Disp1 | Nagruz;
 PORTD=0b000001
 delay_ms (2);
и вообще весь этот свитч можно выбросить
все эти Disp1.......Disp6 нафиг не нужны это копии массива
вот так можно сделать
C++
1
2
3
4
PORTD=0b000000;
 PORTB = Dig[k] | Nagruz;
 PORTD=0b000001<<k;
 delay_ms (2);
тебя интересует сама программа или как зашить её в камень
если последнее
то у CodeVision(на чем она писана) есть встроенный програматор
1
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 4
21.06.2013, 12:15  [ТС]
ValeryS
Спасибо, интересует сама программма
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2013, 12:15
Помогаю со студенческими работами здесь

Программирование микроконтроллера Motorolla
Всем добрый день! Есть задача - отредактировать код и прошить микроконтроллер Motorolla mc68hc908mr32. У меня есть два исходника -...

Программирование микроконтроллера PIC16F84
Прошу помочь с программой. Номер датчика в двоично-десятичном коде, поэтому считанный двоичный код перекодируется в позиционный код и...

Программирование микроконтроллера msp430F149
Доброго времени суток. Стоит простецкая задача (но не для меня) - выдать на контакт 15 импульсный сигнал с периодом 250 мкс, длина импульса...

Программирование микроконтроллера pic12
Как написать код программы для микроконтроллера pic12, чтобы: При длинных нажатиях кнопки диоды включались/выключались, а при коротких...

Программирование микроконтроллера ( любого )
Здравствуйте, помогите написать программу для любого микроконтроллера на любом языке, которая будет выполнять функции движения ( шаг...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru