Разработка часов на микроконтроллере PIC16F84

Автор работы: Пользователь скрыл имя, 23 Января 2012 в 20:44, курсовая работа

Краткое описание

Последние годы отмечены массовым наполнением рынка всевозможной автоматизированной аппаратурой самого различного назначения и самой различной сложности от пластиковой платежной карточки до холодильника, автомобиля и сложнейших установок. Это стало возможным благодаря микроконтроллерам (МК) Микроконтроллеры входят во все сферы жизнедеятельности человека, их насыщенность в нашем окружении растет из года в год. То что казалось нам 5 лет назад сказкой сейчас вполне возможно благодаря стремит

Содержание работы

ведение
1.Разработка структурной схемы устройства
2.Выбор элементной базы
3.Разработка схемы электрической принципиальной
4.Разработка программного обеспечения
5.Программирование микроконтроллера
Заключение
Список литературы

Содержимое работы - 1 файл

КУРСОВОЙ ПРОЕКТ.doc

— 369.00 Кб (Скачать файл)

      org 004  ;Начало процедуры обработки прерывания

      movwf temp  ; Сохранение рабочего регистра W в регистре temp

      clrwdt   ;Очистка сторожевого таймера для предотврашения

      call Int1  ; сброса процессора каждый 18мс

      movlw   b'10100000' ; Разрешаем прерывания от таймера

      movwf   INTCON  ;

      movf temp,w  ;Востанавливаем значение рабочего регистра

      clrwdt    ;Очистка сторожевого таймера

      return    ;Выход из процедуры обработки прерывания 

;**************************************************************** 

org 0x10

segment  ; Таблица преобразования DEC -> семисегментный код.

      CLRF   PCLATH

      ADDWF  PCL, F

      dt 07E, b'00001100', 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE

Data1 ;*************десятки

      CLRF   PCLATH

      ADDWF  PCL, F

               ;0 1 2 3 4 5 6 7 8 9 

      dt 0,0,0,0,0,0,0,0,0,0

      dt 1,1,1,1,1,1,1,1,1,1 

      dt 2,2,2,2,2,2,2,2,2,2 

      dt 3,3,3,3,3,3,3,3,3,3

      dt 4,4,4,4,4,4,4,4,4,4

      dt 5,5,5,5,5,5,5,5,5,5 

Data2 ;***********единицы 

      CLRF   PCLATH

      ADDWF  PCL, F

             ;0 1 2 3 4 5 6 7 8 9 

      dt 0,1,2,3,4,5,6,7,8,9 ;

      dt 0,1,2,3,4,5,6,7,8,9 ;10

      dt 0,1,2,3,4,5,6,7,8,9 ;20 

      dt 0,1,2,3,4,5,6,7,8,9 ;30

      dt 0,1,2,3,4,5,6,7,8,9 ;40 

      dt 0,1,2,3,4,5,6,7,8,9 ;50

; Программные  регистры: 

skan1 equ 20 ;рег хранения RB1,2

clok1 equ 21 ; хранение часов

sek equ 22 ;регистр хранения секунд

min equ 23 ;регистр хранения минут

cl_k equ 24   

Dig_x  equ 25 ; Значение X0:00 для индикации.

Dig_y  equ 26 ; Значение 0X:00 для индикации.

Dig_z  equ 27 ; Значение 00:X0 для индикации.

Dig_exp  equ 28 ; Значение 00:0X для индикации. 

cnt1     equ 29 ;переменная исп для задержки времени

cnt2     equ 2A ;переменная исп для задержки времени

cnt_r  equ 2B ;переменная исп для задержки времени

temp  equ 2C

clok2  equ 2D

temp1  equ 2E

n1  equ 2f

n2  equ 30

Start   ; Начальная инициализация.

      clrw

      bsf     STATUS,RP0 ; Обращение к банку 1.

      clrf    PORTA  ; Обнулить порт А.

      clrf    PORTB  ; Обнулить порт В.

      movlw   b'00010000'

      movwf   TRISA  ; RA0 - RA3 выходы, RA4 вход.

      movlw   b'00000001'

      movwf  TRISB  ; RB1 - RB7 выходы.RB0 вход

      movlw   b'00000101' ;коэффициен предделителя 64

      movwf   OPTION_REG 

      bcf     STATUS,RP0 ; Обращение к банку 0.

      movlw   b'10100000'

      movwf   INTCON 

      clrf min

      clrf sek

      clrf cl_k

      movlw 0  

      movwf TMR0

      movlw 01  ; Для контроля дисплея

      movwf Dig_x

      movlw 02  ; загрузить во все регистры индикации 8.

      movwf Dig_y

      movlw 03

      movwf Dig_z

      movlw 04

      movwf Dig_exp

      movlw   .131

      movwf   clok1

      movwf   TMR0

      movlw   .1

      movwf   temp1

Start1   ; Основной цикл программы.

      movlw   19  ; Установить счетчик циклов индикации.

      movwf   cnt_r

loop1   clrwdt 

      call    refresh  ;индикаторы.

      decfsz  cnt_r, f

      goto    loop1

;***присвоение  значения регистрам индикации  в зависимости от режима ;индикации******

      clrwdt

      btfss temp1,0

      call Temp_min

      btfsc temp1,0

      call Temp_clk

;******присвоение  значения регистрам индикации

      movf n1,0

      call Data1

      movwf Dig_x

      movf n1,0

      call Data2

      movwf Dig_y

      movf n2,0

      call Data1

      movwf Dig_z

      clrwdt

      movf n2,0

      call Data2

      movwf Dig_exp

      ;********клавишы установки режима индикации и времени*******

      call Delay

    btfss PORTA,4 ;сканируем клавишу установки режима RA4 вывод 3

      incf temp1,1  ;прибавляем к темпу 1

      btfss PORTB,0  ;клавиша установки времени RB0 вывод 6

      call Min_clk

      goto Start1

;************************************************************

Temp_min

      movf min,0

      movwf n1

      movf sek,0

      movwf n2

return

;************************************************************

Temp_clk

      movf cl_k,0

      movwf n1

      movf min,0

      movwf n2

return

;****************выбор прибавить минуты(0) или часы(1)***********

Min_clk

      clrwdt

      btfss temp1,0

      incf min,1

      btfsc temp1,0

      incf cl_k

;*******проверка 60 мин 24 часа*****************

      movf min,0

      sublw .60

      btfsc STATUS,Z

      clrf min

      movf cl_k,0

      sublw .24

      btfsc STATUS,Z

      clrf cl_k

      clrwdt

return

Sek ;*****************деление на125

      movlw   .131  ;записываем 131 т.к 256-125=131

      movwf   clok1

      incfsz sek 

      movf sek,0

      sublw .60

      btfsc STATUS,Z

      call Min

      return 

Min

      clrf sek

      incfsz min 

      movf min,0

      sublw .60  

      btfsc STATUS,Z

      call Clok

      retfie 

Clok

      clrf min

      incfsz cl_k 

      movf cl_k,0

      sublw .24   

      btfsc STATUS,Z

      clrf cl_k

      retfie 

Int1     ;процедура обработки прерывания

      movlw   .131  ;записываем 131 т.к 256-125=131

      addwf  TMR0,1 ;256(максимальное значение таймера)

      incfsz  clok1  ;125(нужный коэффициен деления)

      return

      call  Sek

      return

;***********************Вывод  на индикатор*************

refresh   ; Процедура сканирования индикации.

      movf    Dig_x, W ; Значение деситых.часов для индикации.

      call    segment ; Преобразование DEC -> семисегментный код.

      movwf   PORTB  ; Вывод цифры на индикатор.

      bcf     PORTA, 0 ; Активизировать индикатор.

      call    Delay  ; Задержка времени для сканирования.

      bsf     PORTA, 0 ; Отключить индикатор. 

      movf    Dig_y, W ; Значение ед.часов  для индикации.

      call     segment ; Преобразование DEC -> семисегментный код.

      movwf   PORTB  ; Вывод цифры на индикатор.

      bcf     PORTA,1 ; Активизировать индикатор.

      call    Delay  ; Задержка времени для сканирования.

      bsf     PORTA,1 ; Отключить индикатор. 

      movf    Dig_z, W ; Значение десят.минут для индикации.

      call   segment; Преобразование DEC -> семисегментный код.

      movwf   PORTB  ; Вывод цифры на индикатор.

      bcf     PORTA,2 ; Активизировать индикатор.

      call    Delay  ; Задержка времени для сканирования.

      bsf     PORTA,2 ; Отключить индикатор. 

      movf    Dig_exp, W ; Значение ед.минут.

      call  segment; Преобразование DEC -> семисегментный код.

      movwf   PORTB  ; Вывод цифры на индикатор.

      bcf     PORTA,3 ; Активизировать индикатор.

      call    Delay  ; Задержка времени для сканирования.

      bsf     PORTA,3 ; Отключить индикатор.

      return

; ************************************************************

Delay    ; Подпрограмма задержки времени

      clrwdt

      movlw   .5  ; для сканирования индикации.

      movwf   cnt1

nop

beta   movlw   .150

        movwf   cnt2

  Alfa nop

      nop

decfsz  cnt2, f

      goto    Alfa

  nop

  nop

  decfsz  cnt1, f

        goto    beta

nop

return

; *******************************************************

end 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

         Конструкция представляет из себя очень простое и дешевое устройство для программирования и последующего чтения внутренней памяти PIC контроллеров типа PIC16C84 /83, PIC16F84 /83, PIC16CE625 /624/623. В отличие от многих аналогичных конструкций, программатор допускает внутрисхемное программирование. При разработке за основу была взята схема , рекомендуемая фирмой "Microchip" .

Программатор  питается от источника напряжением 12…13v с током до 100ma и подключается к порту LPT1 персонального компьютера. Управляющая программа разрабатывалась для MS DOS, поэтому при работе в среде «Windows» для соблюдения необходимых временных соотношений при программировании ее необходимо запускать в режиме эмуляции MS DOS. Хотя сама программа прекрасно работает и в оконном режиме, попытка программирования в этом случае ни к чему хорошему не приведет. Алгоритм программирования большинства PIC контроллеров одинаков, поэтому не составит труда расширить их номенклатуру. Интерфейс программы прост и интуитивно понятен.

Информация о работе Разработка часов на микроконтроллере PIC16F84