;помилка номеру цап
movwf ERR_REG
goto tx_err
;-------------------------------------------------------------------
;команда керування реле
rele_kom
movf 0x21,w
xorlw 0x01
btfss STATUS,Z
goto rele_next_rele
movf 0x22,w
btfss STATUS,Z
goto rele_off
bsf PORTC,2
goto rele_end
rele_off
bcf PORTC,2
rele_end
movf 0x21,w
movwf ERR_REG
clrw
goto tx_non_err
rele_next_rele
movf 0x21,w
xorlw 0x02
btfss STATUS,Z
goto rele_next_rele1
movf 0x22,w
btfss STATUS,Z
goto rele_off1
bsf PORTC,3
goto rele_end1
rele_off1
bcf PORTC,3
rele_end1
movf 0x21,w
movwf ERR_REG
clrw
goto tx_non_err
rele_next_rele1
movf 0x21,w
xorlw 0x02
btfss STATUS,Z
goto rele_next_rele2
movf 0x22,w
btfss STATUS,Z
goto rele_off2
bsf PORTC,4
goto rele_end2
rele_off2
bcf PORTC,4
rele_end2
movf 0x21,w
movwf ERR_REG
clrw
goto tx_non_err
rele_next_rele2
movf 0x21,w
xorlw 0x02
btfss STATUS,Z
goto rele_next_rele3
movf 0x22,w
btfss STATUS,Z
goto rele_off3
bsf PORTC,5
goto rele_end3
rele_off3
bcf PORTC,5
rele_end3
movf 0x21,w
movwf ERR_REG
clrw
goto tx_non_err
rele_next_rele3
movlw 0x50
movwf ERR_REG
goto tx_err
;----------------підпрограми------------------------
zat_785ms ;затримка на 785мс виконується із застосуванням таймеру 1
bsf T1CON,4
bsf T1CON,5
movlw 0x03
movwf TEMP_REG3
bsf T1CON,0
zat_1
movlw 0xed
movwf TMR1L
movlw 0x85
movwf TMR1H
btfss PIR1,TMR1IF
goto $-1
bcf PIR1,TMR1IF
decfsz TEMP_REG3,f
goto zat_1
bcf T1CON,0
return
;читання з пам"яті програм
flash_rd
bsf STATUS,RP0
bsf EECON1,EEPGD
bsf EECON1,RD
nop
nop
bcf STATUS,RP0
return
;запис у пам"ять програм
flash_wr
bsf STATUS,RP0
bsf EECON1,EEPGD
bsf EECON1,WREN2
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR
nop
nop
bcf EECON1,WREN2
nop
bcf STATUS,RP0
return
;скидання давача
ds18_reset
movlw 0x03
movwf TEMP_REG3
ds18_reset_1
call port_out
movlw 0x96
call pause
call port_in
movlw 0x11
call pause ;очікування відповіді давача протягом 67 мкс
movf PORTC,w
andlw 0x02
movlw 0x4b
call pause
btfsc STATUS,Z
return
incf TEMP_REG3
xorlw 0x03
btfss STATUS,Z
goto ds18_reset_1
movf TEMP_REG3,w
return
;переключення призначення порту на вихід
port_out
BCF PORTС,1 ;1 - це номер порту куди підключений давач
BSF STATUS,RP0
BCF TRISС,1
BCF STATUS,RP0
return
;переключення призначення порту на вхід
port_in
BSF STATUS,RP0
BsF TRISС,1
BCF STATUS,RP0
return
;затримка
pause
movwf TEMP_REG3
pause1
nop
decfsz TEMP_REG3,f
GOTO pause1
return
;підпрограма запису байту в давач
ds18_wr
movlw 0x08
movwf TEMP_REG3 ;лічильник бітів
ds18_wr_1
call port_out
movlw 0x02
call pause
rrf DATA,f
BTFSC STATUS,C
bsf PORTC,1
MOVLW 0x11
call pause
call port_in
decfsz TEMP_REG3,f
goto ds18_wr_1
return
;підпрограма приймання байту від давача
ds18_rd
clrf DATA
movlw 0x08
movwf TEMP_REG3
ds18_rd_1
call port_out
movlw 0x02
call PAUSE
call port_in
movf PORTC,w
andlw 0x02
addlw 0xff
rrf DATA,F
movlw 0x11
call pause
decfsz TEMP_REG3,f
goto ds18_rd_1
return
;підпрограма обрахунку контрольної суми
crc_suma
movlw 0x08
movwf TEMP_REG3
crc_suma_2
movf DATA,w
xorwf CRC_DATA,w
andlw 0x01
btfsc STATUS,Z
goto crc_suma_1
movlw 0x18
xorwf CRC_DATA
crc_suma_1
rrf CRC_DATA
bcf STATUS,C
rrf DATA
decfsz TEMP_REG3
goto crc_suma_2
return
end
2.4. Розробка програмного забезпечення інтерфейсу користувача.
Для реалізації поставленої задачі, з метою формування зручного інтерфейсу для користувача, було використано середовище програмування C++ Builder.
Шоста версія продукту Borland C++ Builder, сьогодні є найбільш довершеним візуальним середовищем швидкої розробки на Си++ для Windows. У її склад входить близько 200 самих різних компонентів, а створення закінченої програми вимагає мінімуму зусиль. Найближчий конкурент Borland C++Builder - це не система Microsoft Visual C++, яка побудована по іншій схемі і не є RAD-системою, а Microsoft Visual Basic, типове середовище розробки. Проте ефективність програм, що створюються за допомогою C++Builder, в десятки раз перевершує швидкодію програм, написаних на MS Visual Basic. Та і по числу вільних доступних компонентів рівних середовищу C++Builder сьогодні не знайти. У цієї системи є рідний брат - RAD-середовище Borland Delphi, технологія роботи з якою повністю співпадає з технологією, прийнятою в C++Builder. Тільки у Delphi програмний код пишеться не на мові C++, а на мові програмування Паскаль, точніше на його об'єктно-орієнтованій версії ObjectPascal. Але найцікавіше, що Borland C++Builder дозволяє писати програму при бажанні одночасно і на Си++, і на Паскалі!
Програмне забезпечення користувача повинно містити простий та зручний інтерфейс, можливість зміни інформації та передачі її по інтерфейсу RS-232, а також можливість створення шрифтів та простих графічних зображень. Для задоволення цих вимог були створені програми: «Інтерфейс користувача» і «Редактор бібліотеки».
Для створення програми «Інтерфейс користувача», яка реалізує поставлену задачу, було розроблено алгоритм програми:
Для написання програми «Інтерфейс користувача» використовувались наступні функції:
функція ініціалізації порту RS-232 (OnConnect);
функція відкриття файлу бібліотеки (Button1Click);
функція виводу вмісту підключеної бібліотеки на інформаційний екран (Button2Click);
функція виводу заданої строки на інформаційний екран (Button3Click).
Будь-яка програма написана для операційної системи Windows має хоча б одну форму, яка називається головною формою. Програма може мати багато форм, кожна з яких вирішує певну задачу, з’являючись на екрані по мірі необхідності. Всі форми створюються на основі класу TForm.
TLabel – клас бібліотеки VCL, який дозволяє розміщувати на формі різноманітного виду текстової інформації. В програмі використовується властивість класу TLabel – Caption, для відображення підказки, яку інформацію необхідно вводити в поле редагування.
Компонент класу TEdit це текстовий редактор, що складається з одного рядка. З його допомогою можна вводити рядки та відображати текстові рядки, що потребують редагування. TEdit містить змінну Text, який зберігає рядок, що редагується. Змінна Text зберігає рядок в форматі AnsiString. Для приведення текстової інформації в форматі AnsiString в формат Double використовується функція StrToFloat(const AnsiString S). Рядок S може мати знак + або – перед числом, цілу та дробову частину розділену крапкою. Число також може бути представлене в форматі мантиса+степінь, наприклад 1.2345е+01.
Компонент класу TMemo призначений для відображення, введення і редагування довгих текстів. Текс в компоненті представлений в вигляді рядків. Властивість класу TStrings містить набір рядків тексту в форматі AnsiString. Властивість класу ScrollBars дозволяє встановлювати смуги прокрутки для перегляду всього тексту введеного в поле Memo.
Об’єкт класу TButton дозволяє створювати на формі кнопки. Після натиснення на кнопку виникає подія, на яку можна реагувати викликом функції, яка буде обробляти цю подію. Кнопка на формі це основний метод управління програмою.
TChart – це клас, що дозволяє будувати графіки. Компонент TChart є контейнером об’єктів Series типу TChartSeries – рядів даних, що характеризуються різними стилями відображення. Кожен компонент може включати декілька рядів даних. При відображенні графіку кожен рядок відповідає одній кривій на графіці. При відображенні діаграми для деяких видів діаграм можна накласти одну на одну декілька різних рядів. В цьому випадку можна задати для одного компоненту TChart декілька рядів однакових даних з різними типами діаграми. Активуючи в один момент часу тільки одну з них, можна надати користувачу вибір типу діаграми, що відображає його дані.
TSaveDialog дозволяє використовувати для збереження файлу стандартне вікно-діалог Windows для вибору імені файлу, або створення нового файлу в який буде зберігатись інформація. Вікно