ЗАКЛЮЧЕНИЕ
В данном курсовом проекте разработано устройство - электронные часы-вольтметр-термометр. Разработана схема электрическая принципиальная этого устройства и программа для микроконтроллера. В результате ассемблирования получена прошивка программы для памяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальную схему и расширить функциональные возможности микроконтроллера, так как для изменения функций устройства достаточно внести изменения в программу микроконтроллера.
СПИСОК ЛИТЕРАТУРЫ
1. Белов А.В. Микроконтроллеры АVR в радиолюбительской практике – СП-б, Наука и техника, 2007 – 352с.
2. Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин [и др.]. – М.: Энергоатомиздат, 1990. – 224 с.
3. Евстифеев А.В. Микроконтроллеры Microchip: практическое руководство/А.В.Евстифеев. – М.: Горячая линия – Телеком, 2002. – 296 с.
4. Кравченко А.В. 10 практических устройств на AVR-микроконтроллерах. Книга 1 – М., Додэка –ХХ1, МК-Пресс, 2008 – 224с.
5. Трамперт В. Измерение, управление и регулирование с помощью АVR-микроконтроллеров: Пер. с нем – К., МК-Пресс, 2006 – 208с.
6. Мортон Дж. Микроконтроллеры АVR. Вводный курс /Пер. с англ. – М., Додэка –ХХ1, 2006 – 272с.
7. Техническая документация на микроконтроллеры AT89C2051 фирмы «Atmel». ООО «Микро -Чип», Москва, 2002.-184 с.
ПРИЛОЖЕНИЕ А
Листинг программы и объектный файл
; ЧАСЫ-ТЕРМОМЕТР-ВОЛЬТМЕТР ДЛЯ АВТОМОБИЛЯ.
РАЗРАБОТАЛ ДЕРКАЧ
; ПРОГРАММА = ABTO.ASM
; ВЕРСИЯ: 20-01-07.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.70.40.
LIST P=16F676
#INCLUDE P16F676.INC
__CONFIG 31D0H
;==============================================
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 32, ЧТО ВМЕСТЕ
; С TMR0 (256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ
; ДАЕТ НА ВЫХОДЕ 1 СЕКУНДУ (4х32х256=32768).
;==============================================
; RA1 - РЕЖИМ - УСТАНОВКА, RA2 - РАЗРЯД - ПУСК,
; RA3 - ВЫХОД ИЗЛУЧАТЕЛЯ,
; RC5 - LOAD, RC3 - DIN,
; RC4 - DCLK
;===========================================
CBLOCK H'20'
;===========================================
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ВРЕМЕНИ.
;===========================================
HOU ;ЧАСЫ ДВОИЧНЫЕ.
CL ;ЕДИНИЦЫ СЕКУНД ЧАСОВ.
CH ;ДЕСЯТКИ СЕКУНД.
ML ;ЕДИНИЦЫ МИНУТ.
MH ;ДЕСЯТКИ МИНУТ.
HL ;ЕДИНИЦЫ ЧАСОВ.
HH ;ДЕСЯТКИ ЧАСОВ.
TCL ;ДЛЯ ТАЙМЕРА.
TCH ;
TML ;
TMH ;
THL ;
THH ;
;===============================================
; РЕГИСТРЫ ДЛЯ ОРГАНИЗАЦИИ ИНДИКАЦИИ.
;===============================================
ZPT ;РЕГИСТР ЗАПЯТОЙ.
TZPT ;ЗАПЯТАЯ ДЛЯ ВЫВОДА НА ИНДИКАЦИЮ.
COUZ ;СЧЕТЧИК ВЫВОДА ЗАПЯТЫХ.
COU ;СЧЕТЧИК ВЫВОДА БИТ.
KYPC ;ВЫБОР РАЗРЯДА УСТАНОВКИ.
KYPCI ;ИНДИКАЦИИ.
PEID ;РЕЖИМА ИНДИКАЦИИ.
TEMP ;ВРЕМЕННЫЙ.
EDI ;ДЕСЯТЫЕ НАПРЯЖЕНИЯ.
DEI ;ЕДИНИЦЫ ВОЛЬТ.
COI ;ДЕСЯТКИ ВОЛЬТ.
;================================================
; ВРЕМЕННЫЕ.
;================================================
WTEMP ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STEMP ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
FTEMP ;ВРЕМЕННЫЙ ДЛЯ FSR.
TEKH ;
EDA ;
DEA ;
YCTL ;
YCTLI ;
;===========================================
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ ФЛАГОВ.
;===========================================
FLAG
;
; 0-> ВКЛЮЧЕНИЕ СИГНАЛА.
; 1-> ТЕКУЩЕЕ ВРЕМЯ.
; 2-> ВКЛЮЧЕН РЕЖИМ ТАЙМЕРА.
; 3-> ИНДИКАЦИЯ НАПРЯЖЕНИЯ.
; 4-> НЕТ КУРСОРА.
; 5-> ПУСК-СТОП.
; 6-> ПРОЧЕРК В ЧАСАХ.
; 7-> УСТАНОВКИ.
;=============================================
FLAG1
;
; 1-> 1 СЕК ЦИКЛА.
; 2-> ПЕРЕДАНА ЗАПЯТАЯ.
; 4-> ЗУММЕР ВКЛЮЧЕН.
; 5-> СТОРОЖОК НАПОМИНИНИЯ АВАРИИ ЧЕРЕЗ 1 ЧАС.
;===========================================
ENDC
;===========================================
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
;===========================================
R1 EQU 50H ;МЛАДШИЙ РАЗРЯД.
R2 EQU 51H ;
R3 EQU 52H ;
R4 EQU 53H ;
R5 EQU 54H ;
R6 EQU 55H ;
R7 EQU 56H ;
R8 EQU 57H ;СТАРШИЙ РАЗРЯД.
TEKL EQU 58H ;
;===========================================
; ОПРЕДЕЛЕНИЕ БИТ ПОРТОВ ВВОДА/ВЫВОДА.
;===========================================
YC EQU 1 ;РЕЖИМ/УСТАНОВКА.
KY EQU 2 ;ПУСК/КУРСОР.
LOAD EQU 5 ;ЗАГРУЗКА.
DIN EQU 3 ;ДАННЫЕ.
DCLK EQU 4 ;СИНХРОИМПУЛЬСЫ.
;===========================================
; 1. ПУСК.
;===========================================
ORG 0
GOTO INIT
ORG 4
GOTO PRER
;===========================================
; 2. ИНИЦИАЛИЗАЦИЯ.
;===========================================
INIT
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
MOVLW 0FFH ;
MOVWF ADCON1^80H ;ТАКТ АЦП ОТ ВНУТРЕННЕГО ГЕНЕРАТОРА 500 кГц.
MOVLW B'00000100' ;К=32.
MOVWF OPTION_REG^80H ;РЕЗИСТОРЫ ВКЛЮЧЕНЫ.
MOVLW B'10100000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ ОТ TMR0.
MOVWF INTCON ;
CLRF PIE1^80H ;ЗАПРЕЩЕНЫ ВСЕ ПЕРИФЕРИЙНЫЕ ПРЕРЫВАНИЯ.
MOVLW B'00001111' ;ВСЕ ВЫХОДЫ. 0 - ВХОД АЦП.
MOVWF TRISA^80H ;
CLRF TRISC^80H ;ВСЕ ВЫХОДЫ.
CLRF VRCON^80H ;ИОН ОТКЛЮЧЕН.
CLRF PCON^80H ;ПРЕРЫВАНИЯ ПО ПИТАНИЮ ЗАПРЕЩЕНЫ.
MOVLW B'00000110' ;
MOVWF WPUA^80H ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ.
CLRF IOCA^80H ;ПРЕРЫВАНИЯ ЗАПРЕЩЕНЫ.
MOVLW .1
MOVWF ANSEL^80H ;ВЫБРАН АНАЛОГОВЫЙ ВХОД RA0/AN0.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
CLRF PORTC ;ВЫХОД И СВЕТОДИОД ВЫКЛЮЧЕНЫ.
CLRF T1CON ;ТАЙМЕР 1 ОТКЛЮЧЕН.
MOVLW .7
MOVWF CMCON ;КОМПАРАТОР ВЫКЛЮЧЕН.
CLRF FLAG ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF FLAG1
CLRF EDI
CLRF DEI
CLRF COI
CLRF CL
CLRF CH
CLRF ML
CLRF MH
CLRF HL
CLRF HH
CLRF TCL
CLRF TCH
CLRF TML
CLRF TMH
CLRF THL
CLRF THH
CLRF PEID
CLRF ZPT
CLRF COUZ
CLRF COU
CLRF HOU
MOVLW 96H
MOVWF YCTL ;УСТАНОВКА МАКСИМУМА = 15,0 B.
MOVLW 78H
MOVWF YCTLI ;УСТАНОВКА МИНИМУМА = 12,0 B.
CLRF KYPC
BSF FLAG,4
GOTO PAC
;==========================================
; 3. ТАБЛИЦА СЕГМЕНТОВ.
;==========================================
SEG
;D E G F A B C K
ADDWF PCL,1 ;
RETLW B'11011110' ;0
RETLW B'00000110' ;1
RETLW B'11101100' ;2
RETLW B'10101110' ;3
RETLW B'00110110' ;4
RETLW B'10111010' ;5
RETLW B'11111010' ;6
RETLW B'00001110' ;7
RETLW B'11111110' ;8
RETLW B'10111110' ;9
RETLW B'00000000' ;10-> ПУСТО.
RETLW B'00100000' ;11-> ПРОЧЕРК.
RETLW B'10000000' ;12-> ПРОЧЕРК.
;=================================================
; 4. ТАБЛИЦА ПЕРЕКОДИРОВКИ КУРСОРА.
;=================================================
KYPCY
MOVFW KYPC ;
ADDWF PCL,1 ;
RETURN ;НЕТ КУРСОРА.
RETLW B'00000100' ;3
RETLW B'00001000' ;4
RETLW B'00010000' ;5
RETLW B'00100000' ;6
RETLW B'01000000' ;7
;===================================================
; 5. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
;===================================================
VUBOR
MOVFW PEID ;ИЗМЕНЯЕМ РЕЖИМ ИНДИКАЦИИ.
ADDWF PCL,1 ;
GOTO INDH ;ИНДИКАЦИЯ ЧАСОВ.
GOTO INDT ;ТАЙМЕРА.
GOTO INDU ;НАПРЯЖЕНИЯ.
;======================================================
; 6. ВЫБОР РАЗРЯДА УСТАНОВКИ.
;======================================================
YCT
BTFSC PORTA,YC;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,
RETURN
MOVFW KYPC ;ТО ПО КУРСОРУ
ADDWF PCL,1 ;ВЫБИРАЕМ РАЗРЯД УСТАНОВКИ.
RETURN ;НЕТ КУРСОРА.
GOTO YC0 ;МИНУТЫ.
GOTO YC1 ;ДЕСЯТКИ МИНУТ.
GOTO YCE ;ОБНУЛЕНИЕ.
GOTO YC2 ;ЧАСЫ.
GOTO YC3 ;ДЕСЯТКИ ЧАСОВ.
;======================================================
; 7. ТАБЛИЦЫ ПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.
;======================================================
DEBIN
ADDWF PCL,1 ;
RETLW .0
RETLW .10
RETLW .20
RETLW .30
RETLW .40
RETLW .50
RETLW .60
RETLW .70
RETLW .80
RETLW .90
;======================================================
; 8. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
;======================================================
KHOP
BTFSS FLAG,1 ;ЕСЛИ НЕТ РЕЖИМА ЧАСОВ,
GOTO $+5 ;ТО КУРСОР НЕ МЕНЯЕТСЯ.
BTFSS PORTA,KY;ПРИ НАЖАТОЙ КНОПКЕ
CALL KYPCOP ;ИДЕМ НА УСТАНОВКУ КУРСОРА.
BTFSC FLAG,7 ;ЕСЛИ ИДЕТ УСТАНОВКА,
GOTO VUBOR ;ТО РЕЖИМ НЕ МЕНЯЕТСЯ.
BTFSC PORTA,YC;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,
GOTO VUBOR ;ИЛИ ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
INCF PEID,1 ;ИЗМЕНЕНИЕ РЕЖИМА ИНДИКАЦИИ.
MOVLW .3 ;3 РЕЖИМОВ ИНДИКАЦИИ.
SUBWF PEID,0 ;ЕСЛИ БОЛЬШЕ,
BTFSS STATUS,2;ТО ПОЙДЕМ НА СБРОС.
GOTO VUBOR ;НА ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
CLRF PEID ;СБРОС РЕЖИМА.
GOTO VUBOR ;НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
RETURN
;=================================================
; 9. УСТАНОВКА КУРСОРА (ВЫБОР РАЗРЯДА УСТАНОВКИ).
;=================================================
KYPCOP
BSF FLAG,7 ;УСТАНОВКА.
BCF FLAG,4 ;СБРОС ФЛАГА НЕТ КУРСОРА.
INCF KYPC,1 ;ПРИБАВИМ ЕДИНИЦУ В КУРСОР.
MOVLW .6 ;НЕ БОЛЕЕ 5.
SUBWF KYPC,0 ;
SKPC ;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,
RETURN ;
CLRF KYPC ;ОБНУЛИМ.
BSF FLAG,4 ;НЕТ КУРСОРА В ПОЛЕ.
BCF FLAG,7 ;НЕТ УСТАНОВКИ.
RETURN ;
;=========================================
; 10. ВВОД КУРСОРА В МЛ. РАЗРЯД РЕГИСТРОВ.
;=========================================
KYPVO
BTFSC FLAG,4 ;ЕСЛИ НЕТ КУРСОРА,
RETURN ;ТО ВЕРНЕМСЯ.
CALL KYPCY ;УСТАНОВИМ РЕЖИМЫ.
MOVWF KYPCI ;В КУРСОР ИНДИКАЦИИ.
RRF KYPCI,1 ;ЗАПОЛНИМ БИТ "С".
ADDCF R1,1 ;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.
RRF KYPCI,1 ;ЗАПОЛНИМ БИТ "С".
ADDCF R2,1 ;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.
RRF KYPCI,1 ;ОСТАЛЬНЫЕ РЕГИСТРЫ
ADDCF R3,1 ;ЗАПОЛНЯЕМ АНАЛОГИЧНО.
RRF KYPCI,1 ;
ADDCF R4,1 ;
RRF KYPCI,1 ;
ADDCF R5,1 ;
RRF KYPCI,1 ;
ADDCF R6,1 ;
RRF KYPCI,1 ;
ADDCF R7,1 ;
RRF KYPCI,1 ;
ADDCF R8,1 ;
RETURN ;
;=============================================
; 11. ВЫВОД НА ИНДИКАЦИЮ.
;=============================================
IND
CALL KYPVO ;ВВЕДЕМ КУРСОРЫ В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFW ZPT ;ЗНАЧЕНИЯ ЗАПЯТЫХ ПЕРЕПИШЕМ
MOVWF TZPT ;ВО ВРЕМЕННЫЙ РЕГИСТР.
BSF FLAG1,2 ;ЗАПЯТАЯ ПЕРЕДАНА.
BCF PORTC,DIN ;ДАННЫЕ РАВНЫ НУЛЮ.
BCF PORTC,LOAD ;НАЧАЛО ПЕРЕДАЧИ (LOAD=0).
RRF TZPT,1 ;ВЫТОЛКНЕМ ОЧЕРЕДНУЮ ЗАПЯТУЮ.
CALL VUV0 ;
BCF FLAG1,2 ;ЗАПЯТАЯ ПЕРЕДАНА.
MOVLW R1 ;ЗАПИШЕМ АДРЕС ПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.
MOVWF FSR ;
MOVFW INDF ;ЗНАЧЕНИЕ ПЕРВОГО РЕГИСТРА
MOVWF TEMP ;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
BCF PORTC,LOAD ;НАЧАЛО ПЕРЕДАЧИ (LOAD=0).
CALL VUVOD ;НА ВЫВОД.
POVT
BSF FLAG1,2 ;ЗАПЯТАЯ ПЕРЕДАНА.
RRF TZPT,1 ;ВЫТОЛКНЕМ ОЧЕРЕДНУЮ ЗАПЯТУЮ.
CALL VUV0 ;
BCF FLAG1,2 ;ЗАПЯТАЯ ПЕРЕДАНА.
INCF FSR,1 ;УВЕЛИЧИМ АДРЕС РЕГИСТРА ИНДИКАЦИИ.
MOVFW INDF ;ПЕРЕПИШЕМ ЕГО ЗНАЧЕНИЕ
MOVWF TEMP ;ВО ВРЕМЕННЫЙ.
CALL VUVOD ;НА ВЫВОД.
INCF COUZ,1 ;ПОДСЧИТАЕМ ЧИСЛО
MOVLW .7 ;ПЕРЕДАВАЕМЫХ
SUBWF COUZ,0 ;ЗАПЯТЫХ.
BTFSC STATUS,2;
CLRF COUZ ;ОБНУЛИМ СЧЕТЧИК.
BTFSS STATUS,2;
GOTO POVT ;ПОВТОРИМ ВЫВОД.
BSF PORTC,LOAD ;КОНЕЦ ПЕРЕДАЧИ.
RETURN ;
CUNX
BSF PORTC,DCLK ;СИНХРОТМПУЛЬС = 1.
CALL PAUS ;ПАУЗА.
BCF PORTC,DCLK ;СИНХРОИМПУЛЬС = 0.
RETURN ;ВОЗВРАТ.
PAUS
MOVLW .5 ;МОЖНО ПОДБИРАТЬ ЗНАЧЕНИЕ ПАУЗЫ.
ADDLW -1 ;ПАУЗА = ЧИСЛО Х 4 МКС.
BTFSS STATUS,2;
GOTO $-2 ;ПОВТОРИМ.
RETURN ;ВЕРНЕМСЯ.
VUVOD
RRF TEMP,1 ;СДВИНЕМ ВПРАВО.
VUV0
BTFSS STATUS,0;ПО НУЛЕВОМУ РАЗРЯДУ
BCF PORTC,DIN ;УСТАНАВЛИВАЕМ ДАННЫЕ
BTFSC STATUS,0;В 0 ИЛИ 1.
BSF PORTC,DIN ;
CALL CUNX ;СИНХРОНИЗИРУЕМ ДАННЫЕ.
BTFSC FLAG1,2 ;ЕСЛИ ЗАПЯТАЯ ПЕРЕДАНА,
RETURN ;ТО ВЕРНЕМСЯ.
INCF COU,1 ;ПОДСЧИТАЕМ ЧИСЛО БИТ.
MOVLW .8 ;
SUBWF COU,0 ;
BTFSS STATUS,2;ЕСЛИ НЕ ВСЕ БИТЫ ПЕРЕДАНЫ,
GOTO VUVOD ;ПОВТОРИМ ВЫВОД.
CLRF COU ;ОБНУЛИМ СЧЕТЧИК.
RETURN ;
;======================================================