|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.04.2011, 00:41 | #1 |
Новичок
Джуниор
Регистрация: 15.04.2011
Сообщений: 2
|
Программа для жизни
Умоляю, помогите товарищи программисты!
Для курсача надо сделать прогу на ассемблере, и есть алгоритм работы в тексте, но как этот алгоритм работы перевести хотябы в текст программы не имею ни малейшего понятия, т.к. на ассемблере (по нашей специальности) проходили просто как запихнуть в N-ый регистр чтото...помогите пожалуйста...вот текст алгоритма: Инициализация: • RESET: 10 – вход сброса; • Y1 – Y7: – выходы на индикаторы ; • Y15: – выход на обогреватель; • Y14: – выход на вентилятор; • Y12: вход с датчика температуры; • Y13: – вход с датчика влажности; • Y8-Y11: входы с кнопок; • Тактовая частота АЦП 400 кГц (коэффициент деления = 4); • Частота внутреннего тактового генератора = 1,6 МГц; • Разрешить прерывание по нажатию кнопок (ввод данных с пульта); • Разрешить прерывание по нажатию кнопки вкл/выкл на вентиляторе; • Разрешить прерывание по нажатию кнопки вкл/выкл на нагревателе; • Разрешить прерывание от часов реального времени; • Разрешить прерывание по переполнению счетчиков; • Текущее_влажность = влажность измеренная датчиком влажности; • Текущее_ температура = температура измеренная датчиком температуры • Кнопка_ нагреватель = = 0; • Кнопка_ вентилятор = = 0; • Текущее_время = = текущее время; • Счетчик_день = = 0; • Счетчик_ночь = = 0; • Период_День = = 8.01 – 20.00 • Период_Ночь = = 20.01 – 8.00 Тело основного цикла: • Переходим на метку TEST; • Вечный цикл { МК уходит в режим пониженного энергопотребления, пока не придет какое – нибудь прерывание. } Описание прерываний: INT_NIGHTTEMP (прерывание от кнопки_ температура ночью) • i = 1; • переходим на метку BUTTON; • регистр_ночь = счетчик_i*5. INT_DAYTEMP (прерывание от кнопки_ температура днём) • i = 2; • переходим на метку BUTTON; • регистр_утро = счетчик_i*5. INT_NIGHTHUM (прерывание от кнопки_ влажность ночью) • i = 3; • переходим на метку BUTTON; • регистр_день = счетчик_i*5 INT_ DAYHUM (прерывание от кнопки_ влажность днём) • i = 4; • переходим на метку BUTTON; • регистр_вечер = счетчик_i*5. INT_CURTIME (прерывание от блока сравнения текущего времени с одним из заданных периодов (ночь, утро, день, вечер)) • регистр = введенное значение в данный период; • переход на метку COMPARE. INT_WIND (прерывание от кнопки вентилятора) • Переход на метку WIND. INT_WARM (прерывание от кнопки нагревателя) • Переход на метку WARM. Процедуры: TEST: • подается сигнал на устройство контроля подключения вентилятора/нагревателя и на устройство подачи питания вентилятора/нагревателя. Последнее последовательно подает питание на вентилятор и на нагреватель, а первое следит, течет ли в этот момент через него ток. Если какое-либо из внешних устройств не подключено в момент подачи питания, то через устройство контроля не потечет ток, соответственно последнее выдаст сигнал ошибки на табло: Е0 – не подключен вентилятор, Н0 – не подключен нагреватель. Код ошибки вентилятора – 0, код ошибки нагревателя – 11. BUTTON: • Счетчик_i = = Счетчик_i +1; • Если Счетчик_i = 1, то Y2 = Y3 = =1; • Если Счетчик_i = 2, то Y1 = Y2 = Y7 = Y5 = Y4 = =1; • Если Счетчик_i = 3, то Y1 = Y2 = Y3 = Y4 = Y7 = =1; • Если Счетчик_i = 4, то Y6 = Y7 = Y2 = Y3 = =1; • Если Счетчик_i = 5, то Y1 = Y6 = Y7 = Y3 = Y4 = =1; • Если Счетчик_i = 6, то Y1 = Y6 = Y5 = Y4 = Y3 = Y7 = =1; • Если Счетчик_i = 7, то Y1 = Y2 = Y3 = =1; • Если Счетчик_i = 8, то Y1 = Y2 = Y3 = Y4 = Y5 = Y6 = Y7 = =1; • Если Счетчик_i = 9, то Y1 = Y2 = Y3 = Y4 = Y6 = Y7 = =1; • Если Счетчик_i = 10, то { Y1 = Y2 = Y3 = Y4 = Y5 = Y6 = = 1, Y7 = =0; SLEEP; } • Возврат назад. COMPARE: • если регистр < Текущее_влажность, то Y14 = 1 и Кнопка_ вентилятор = 1; • если регистр > Текущее_ влажность, то Y15 = 1 и Кнопка_ нагреватель = 1; • если регистр = = Текущее_ влажность, то (Y14 = 0 и Кнопка_ нагреватель = 0) и (Y15 = 0 и Кнопка_ вентилятор = 0); • если регистр > Текущее_ температура, то Y15 = 1 и Кнопка_ вентилятор = 1 • если регистр < Текущее_температура, то Y14 = 1 и Кнопка_ нагреватель = 1 • если регистр = = Текущее_ температура, то (Y14 = 0 и Кнопка_ нагреватель = 0) и (Y15 = 0 и Кнопка_ вентилятор = 0); • Возврат назад. WIND: • Если Кнопка_вентилятор = = 1, то Кнопка_вентилятор = 0 и Y15 = 0 и МК уходит в режим сохранения энергии; • Если Кнопка_вентилятор = = 0, то Кнопка_вентилятор = 1 и Y15 = 1 и МК выходит из режима сохранения энергии; • Возврат назад. WARM: • Если Кнопка_нагреватель = = 1, то Кнопка_нагреватель = 0 и Y14 = 0 и МК уходит в режим сохранения энергии; • Если Кнопка_ нагреватель = = 0, то Кнопка_ нагреватель = 1 и Y14 = 1 и МК выходит из режима сохранения энергии; • Возврат назад. ========================= ЗАРАНЕЕ БЕЗМЕРНО БЛАГОДАРЕН |
15.04.2011, 09:03 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,724
|
МП то какой?
|
15.04.2011, 11:45 | #3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
p51x
"запихнуть в N-ый регистр чтото..." регистры с номерами, по-моему, были на PDP |
15.04.2011, 18:19 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,724
|
в арме тоже есть R0, R1,...
|
15.04.2011, 20:13 | #5 |
Новичок
Джуниор
Регистрация: 15.04.2011
Сообщений: 2
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хорошая программа для разрезания жестких дисков для 7-ой винды и других ОС. | Pumik2010 | Windows | 3 | 01.03.2011 01:28 |
Программа для создания модулей/макетов для КМС | LeoN | Софт | 0 | 02.12.2010 10:51 |
Обширная Справочная система для DELPHI (коды программ на все случаи жизни) | Maksxaos | Помощь студентам | 1 | 11.01.2009 12:39 |
О жизни | Simply-Art | Свободное общение | 19 | 20.01.2007 09:25 |