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

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

16.06.2013, 15:40. Показов 2062. Ответов 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
10236 / 6614 / 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 / 670 / 113
Регистрация: 15.05.2012
Сообщений: 4,078
16.06.2013, 21:22
Цитата Сообщение от Aleksa01 Посмотреть сообщение
помочь немного разобраться в коде
Где это немного скрыто?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru