русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Заключение


Дата добавления: 2015-08-31; просмотров: 1048; Нарушение авторских прав


В ходе выполнения данного курсового проекта спроектированы электронные часы на микроконтроллере, написана программа для него рассмотрены вопросы программирования МК. При выполнении данной работы был получен опыт разработки подобных устройств получены навыки в разработке программ на языке ассемблер также был закреплены знания полученные на ранее прочтенном курсе.

В данном курсовом проекте разработана следующая документация:

- структурная схема (пункт 3);

- Структурная схема микроконтроллера PIC16F84 (приложение 1);

- схема электрическая - принципиальная (приложение 2);

- алгоритм программы микроконтроллера (пункт 6);

- программа микроконтроллера (приложение 3).

 


 

Список литературы

 

1. Радио №1 2001г. с.21 "Частотомер на PIC-контроллере"

2. Угрюмов Е.П. Цифровая схемотехника.-СПб.:БХВ-Санкт-Петербург,2000.-528 с.: ил.

3. Микроконтроллеры. Выпуск 2:Однокристальные микроконтроллеры PIC12c5x, PIC16x8x, PIC14000, M16C/61/62. Перевод с англ.Б.Я.. Прокопенко/ Под ред.Б. Я. Прокопенко.- М.: ДОДЭКА, 2000.- 336 с.

 

 

Приложение 1. Структурная схема микроконтроллера PIC16F84

Приложение 2. Принципиальная схема электронных часов

 

Приложение 3. Листинг программы для микроконтроллера

LIST p=16F84A ; указатель процессора

include <p16F84A.inc>

org 0x00 ; Вектор сброса

Goto Start

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

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

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

clrw dt ;Очистка сторожевого таймера для

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

movlw b'10100000' ; Перенос в аккумулятор значения

movwf INTCON ; Разрешаем прерывания от таймера



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

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

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

 

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

org 0x10

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

CLR F PCLATH ;очистка PCLATH

ADDWF PCL, F

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

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

CLR F 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 ;***********десятки

 

CLR F 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 ;0

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 ; Начальная инициализация.

Clr w

bsf STATUS,RP0 ; Обращение к банку 1.( установка бита)

clrf PORTA ; Обнулить порт А, т.к при загрузке мк. возм. 1

clrf PORTB ; Обнулить порт В, т.к при загрузке мк. возм. 1

movlw b'00010000' ;Определение рабочих вход. портов

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

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 ; Основной цикл программы.

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

movwf cnt_r

loop1 clrwdt

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

decfsz cnt_r, f ;уменьшение на 1, если после уменьшение итог

0 , пропустить следующую операцию, результ. f

goto loop1

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

clrwdt

btfss temp1,0 ;проверка бита на равенство 1, если =1 то

происходит следующая операция

call Temp_min ;переход

btfsc temp1,0 ;проверка бита на равенство 1, если =1 то

происходит следующая операция

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 ; копирование 0 регистр min

movwf n1 ; копирование числа из w в регистор n1

movf sek,0 ; копирование 0 регистр sek

movwf n2 ; копирование числа из w в регистор n2

return ;возврат

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

Temp_clk

movf cl_k,0 ; копирование 0 регистр cl_k

movwf n1 ; копирование числа из w в регистор n1

movf min,0 ; копирование 0 регистр min

movwf n2 ; копирование числа из w в регистр n2

return ;возврат

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

Min_clk

Clrw dt ;очистка аккумулятора

btfss temp1,0 ;проверка бита на равенство 1, если да то

пропускается следующая команда

incf min,1

btfsc temp1,0 ;проверка бита на равенство 0, если да то

припускается следующая команда

incf cl_k ;увеличение на единицу регистра cl_k

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

movf min,0

sublw .60 ;вычитаем 60-w

btfsc STATUS,Z ;проверка бита на равенство 0, если

выполняется то след инструкция пропускается

clrf min ;очистка регистра

movf cl_k,0

sublw .24 ;вычитание 24-w

btfsc STATUS,Z ;проверка бита на равенство 0, если

выполняется то след инструкция пропускается

clrf cl_k ;очистка регистра

clrwdt ;очистка аккумулятора

return

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

movlw .131 ;записываем в аккумулятор 131 т.к 256-125=131

movwf clok1

incfsz sek ;увеличение на 1, если при этом результат 0

пропуск след команда

movf sek,0 ;перенос значения в регистр sek,0

sublw .60 ;вычитание 60-w

btfsc STATUS,Z ;проверка бита на равенство 0, если

выполняется то след инструкция пропускается

call Min ;безусловный переход на Min

return

 

Min

clrf sek ;обнуление регистра sek

incfsz min ;увеличение на 1, если при этом результат 0

пропуск след команда

movf min,0 ;перенос значения в регистр min,0

sublw .60 ;вычитание 60-w

btfsc STATUS,Z ;проверка бита на равенство 0, если

выполняется то след инструкция пропускается

call Clok

retfie ;возврат из спецперехода

 

Clok

Clr f min ;обнуление регистра min

incfsz cl_k ;увеличение на 1, если при этом результат 0

пропуск след команда

movf cl_k,0 ;перенос значения в регистр cl_k,0

sublw .24 ;вычитание 24-w

 

btfsc STATUS,Z ;проверка бита на равенство 0, если

выполняется то след инструкция пропускается

clrf cl_k ;обнуление регистра 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 ;занесения в аккумулятор 5

movwf cnt1 ;копировать число из аккумулятора w в регистр cnt1

nop ;пустая команда

beta movlw .150 ;занесения в аккумулятор 5

movwf cnt2 ;копировать число из аккумулятора w в регистр cnt1

Alfa nop ;пустая команда

Nop ;пустая команда

decfsz cnt2, f ;уменьшение на единицу, если результат 0, то след

команда пропускается

goto Alfa ;переход на метку Alfa

nop ;пустая команда

nop ;пустая команда

decfsz cnt1, f ;уменьшение на единицу, если результат 0, то след

команда пропускается

goto beta ;переход на метку beta

nop ;пустая команда

return ;возврат

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

end

 



<== предыдущая лекция | следующая лекция ==>
Принцип построения программы | Москва 2014 г


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.18 сек.