- •Содержание
- •1. Теоретическая часть 3
- •2. Практическая часть 15
- •Введение
- •1. Теоретическая часть
- •1.1. Основные этапы разработки контроллера
- •1.2. Микроконтроллеры семейства pic.
- •1.3.1. Подключение
- •2. Практическая часть
- •2.1. Выбор микроконтроллера
- •2.2 Выбор элементов разрабатываемого устройства
- •2.2.1. Характеристики жк-модуля
- •2.2.2. Цифровой термометр и его характеристики
- •2.2.3 Характеристики стабилизатора напряжения
- •2.3. Разработка алгоритма управления
- •2.4. Схема разрабатываемого устройства
- •2.5. Описание работы устройства
- •2.6. Программная реализация
- •Заключение
- •Список литературы
2.4. Схема разрабатываемого устройства
Датчик температуры DD1 предназначен для измерения температуры. Датчик подключают к плате через стандартные разъемы от звуковой аппаратуры XI . Резистором R6 устанавливают необходимую контрастность ЖК-дисплея. Для использования термометра установлен стабилизатор напряжения DA1 . Схема устройства приведена в приложении.
2.5. Описание работы устройства
Назначение кнопок управления:
• кнопкой «Режим» выбирают один из режимов индикации: «температура — часы», «часы — установка»;
• кнопкой «Разряд» выбирают необходимый разряд установки часов. Под выбранным разрядом мигает курсор (черточка);
• кнопкой «Установка» добавляют единицу в выбранный разряд.
Кнопкой «Установка» набирают необходимое число часов. Кнопкой «Разряд» перемещают курсор в необходимый разряд и устанавливают единицы часов, десятки минут и единицы минут аналогично установке десятков часов.
2.6. Программная реализация
.model small
;Macro delay
delay macro time
local ext, iter
;
;
push cx
mov cx, time
ext:
push cx
;
;
mov cx, 5000
iter:
loop iter
pop cx
loop ext
pop cx
endm
;Macro set position
;
set_position macro _row, _column
;
push ax
push bx
push dx
;
mov ah,2
mov bh,0
mov dh,_row
mov dl,_column
int 10h
;
pop dx
pop bx
pop ax
;
endm
;
;
.data
output_line db '0','0','0','0','0','0','0','0'
.code
position db 0
old_handler dw 0
main proc
mov ax,@data
mov ds,ax
xor ax,ax
cli
mov ah,01h
int 21h
call StrToInt
mov position,al
mov ax,351ch ;Скопировать адрес предыдущего обработчика
;АН = 35h, AL = номер прерывания
int 21h ;Cчитать адрес обработчика прерывания
mov word ptr old_handler,bx ;Возвратить смещение в ВХ
mov word ptr old_handler + 2,es ;и сегментный адрес в ES
mov ax, 251ch ;Установить собственный обработчик
mov dx, seg new_1ch ;Поместить сегментный адрес – в DS
mov ds,dx
mov dx, offset new_1ch ;и смещение в DX
int 21h
sti
mov cx, 10
cycle:
delay 9000
loop cycle
cli
mov dx, old_handler
mov ax,251ch
int 21h
sti
mov ax,4c00h
int 21h
main endp
new_1ch proc
;
push ax
push bx
push es
push ds
;
push cs
pop ds
;
set_position position,position
mov ah,02h Функция 02h прерывания 1Ah:
int 1Ah ; чтение времени;
jc _exit
mov al,ch ;CH= час в BCD-формате
call bcd2asc ; преобразовать в ASCII
mov byte ptr output_line[0],ah ;поместить их в
mov byte ptr output_line[1],al ; строку output_line
mov output_line[2], byte ptr ':'
mov al,cl ; CL = минута в BCD-формате
call bcd2asc
mov byte ptr output_line[3],ah
mov byte ptr output_line[4],al
mov output_line[5], byte ptr ':'
mov al,dh ;DH = секунда в BCD-формате
call bcd2asc
mov byte ptr output_line[6],ah
mov byte ptr output_line[7],al
mov output_line[8], byte ptr '$'
mov ah, 09h
mov dx, offset output_line
int 21h
;
_exit:
pop ds
pop es
pop bx
pop ax
iret
new_1ch endp
bcd2asc proc
mov ah,al
and al,0Fh ; оставить младшие 4 бита в AL
shr ah,4 ; сдвинуть старшие 4 бита в АН
or ax,3030h ; преобразовать в ASCII-символы
ret
bcd2asc endp
StrToInt proc
cmp al,'9'
jg fault
sub al,'0'
ret
fault:
int 21h
mov ax,4C00h
int 21h
StrToInt endp
end main