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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет
Прошу гуру программирования помочь немного разобраться в коде С
По сути этот код написан для термостата, который исходя из значения температуры, включает или выключает нагрузку (в данном случае это нагревательный элемент). Используется датчик температуры 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2013, 15:40
Ответы с готовыми решениями:

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

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

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

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

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

5
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
16.06.2013, 17:58 2
...немного разобраться в коде С
...
По сути этот код написан для термостата
вопрос-то в чем? Вот там где вы взяли этот код и расписано.
0
0 / 0 / 0
Регистрация: 12.06.2013
Сообщений: 4
16.06.2013, 19:40  [ТС] 3
Как раз такие дело в том, что там где брал, расписано ничего не было, только в самом коде немного комментов и все.
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
16.06.2013, 21:22 4
Цитата Сообщение от Aleksa01 Посмотреть сообщение
помочь немного разобраться в коде
Где это немного скрыто?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.06.2013, 07:14 5
Цитата Сообщение от 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  [ТС] 6
ValeryS
Спасибо, интересует сама программма
0
21.06.2013, 12:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2013, 12:15
Помогаю со студенческими работами здесь

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

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

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

Программирование микроконтроллера PIC16F877
программирую микроконтроллер pic16f877 и при компиляции мне выдается такая ошибка Error -...

Программирование микроконтроллера PIC16F73 (MPlab)
Помогите срочноооо! :( Постановка задачи: Необходимо запрограммировать микроконтроллер PIC16F73...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru