Микроконтроллеры и микропроцессорные системы

Автор работы: Пользователь скрыл имя, 10 Сентября 2013 в 16:43, реферат

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

Мировая промышленность выпускает огромную номенклатуру микроконтроллеров. По области применения их можно разделить на два класса : специализированные, предназначенные для применения в какой-либо одной конкретной области (контроллер для телевизора, контроллер для модема, контроллер для компьютерной мышки ) и универсальные, которые не имеют конкретной специализации и могут применяться в самых различных областях микроэлектроники, с помощью которых можно создать как любое из перечисленных выше устройств, так и принципиально новое устройство.
Цель курсовой работы – основываясь на знаниях, полученных при изучении темы «Микроконтроллеры и микропроцессорные системы» разработать микропроцессорную систему цифрового термометра на базе микроконтроллера.

Содержание

Введение
1. Описание объекта и функциональная спецификация
2. Описание структуры системы
3. Описание ресурсов МК PIC16F628
3.1 Характеристика RISC ядра
3.2 Особенности микроконтроллеров
3.3 Характеристики пониженного энергопотребления
3.4 Периферия
3.5 Расположение выводов
3.6 Особенности структурной организации PIC 16С84
3.7 Обозначение выводов и их функциональное назначение
3.8 Организация памяти данных (ОЗУ)
4. Разработка алгоритма работы устройства
5. Ассемблирование
6. Описание функциональных узлов МПС и алгоритма их взаимодействия
7. Описание выбора элементной базы и работы принципиальной схемы
8. Работа с устройством
Заключение
Список литературы

Прикрепленные файлы: 1 файл

электронный термометр.doc

— 975.50 Кб (Скачать документ)

CLRFHOUL;И РАЗРЯДЫ СТАРШИЙ

CLRFHOUH;И МЛАДШИЙ.

RETURN

YC2

 INCFMINH,1;УВЕЛИЧИМ ДЕСЯТКИ МИНУТ.

 MOVLW.6;НЕ БОЛЕЕ 5.

 SUBWFMINH,0;

 SKPNC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,

 CLRFMINH;ТО ОБНУЛИМ.

MOVFWMINH;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFMINL,0;ПРИБАВИМ ЕДИНИЦЫ  И

MOVWFMIN;ЗАПИШЕМ В ДВОИЧНОМ  КОДЕ.

 RETURN

YC3

INCFMINL,1;УВЕЛИЧИМ ЕДИНИЦЫ  МИНУТ.

MOVLW.10;НЕ БОЛЕЕ 9.

SUBWFMINL,0;

SKPNC;ЕСЛИ БОЛЬШЕ ИЛИ  РАВНО 10,

CLRFMINL;ТО ОБНУЛИМ.

MOVFWMINH;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFMINL,0;ПРИБАВИМ ЕДИНИЦЫ  И

MOVWFMIN;ЗАПИШЕМ В ДВОИЧНОМ  КОДЕ.

RETURN

YC4

 INCFDHUD,1;УВЕЛИЧИМ ДЕСЯТКИ ТЕКУЩИХ ДНЕЙ.

 MOVLW.4;НЕ БОЛЕЕ 3.

 SUBWFDHUD,0;

 SKPNC;

 CLRFDHUD;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.

MOVFWDHUD;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFDHUE,0;ПРИБАВИМ ЕДИНИЦЫ

MOVWFDHU;И ПОЛУЧИМ ДВОИЧНОЕ  ЧИСЛО.

 MOVFWMEC;ЕСЛИ В ТЕКУЩЕМ МЕСЯЦЕ

CALLDAYMON;МЕНЬШЕ ДНЕЙ,

 SUBWFDHU,0;

 SKPC;

GOTO$+4;

MOVLW.1;

MOVWFDHUE;ТО УСТАНОВИМ  ЕДИНИЦЫ

GOTO$-0x0B;И ЕЩЕ РАЗ  ПРОВЕРИМ СУММУ.

TSTFDHU;ЕСЛИ СУММА ДНЕЙ  НУЛЕВАЯ,

BZ$-5;ТО СНОВА УСТАНОВИМ.

MOVFWDHUD;ПЕРЕПИШЕМ В РЕГИСТРЫ

MOVWFDHUDI;ИНДИКАЦИИ.

MOVFWDHUE;

MOVWFDHUEI;

 RETURN;ВЕРНЕМСЯ.

YC5

 INCFDHUE,1;УВЕЛИЧИМ ЕДИНИЦЫ ДНЕЙ.

 MOVLW.10;НЕ БОЛЕЕ 9.

 SUBWFDHUE,0;

 SKPNC;

 CLRFDHUE;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.

MOVFWDHUD;ПЕРЕКОДИРУЕМ В  ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFDHUE,0;ПРИБАВИМ ЕДИНИЦЫ

MOVWFDHU;И ПОЛУЧИМ ДВОИЧНОЕ  ЧИСЛО.

 MOVFWMEC;ЕСЛИ В ТЕКУЩЕМ МЕСЯЦЕ

CALLDAYMON;МЕНЬШЕ ДНЕЙ,

 SUBWFDHU,0;

 SKPC;

GOTO$+5;

CLRFDHUD;ТО ОБНУЛИМ ДЕСЯТКИ ДНЕЙ,

MOVLW.1;УСТАНОВИМ ЕДИНИЦЫ

MOVWFDHUE;ДНЕЙ

GOTO$-0x0C;И ЕЩЕ РАЗ  ПРОВЕРИМ СУММУ.

TSTFDHU;ЕСЛИ СУММА ДНЕЙ  НУЛЕВАЯ,

BZ$-5;А НУЛЕВОГО ДНЯ  НЕТ, ТО СНОВА УСТАНОВИМ.

MOVFWDHUD;ПЕРЕПИШЕМ В РЕГИСТРЫ

MOVWFDHUDI;ИНДИКАЦИИ.

MOVFWDHUE;

MOVWFDHUEI;

 RETURN;ВЕРНЕМСЯ.

YC6

 INCFMECD,1;УВЕЛИЧИМ ДЕСЯТКИ МЕСЯЦА.

 MOVLW.2;НЕ БОЛЕЕ 1.

 SUBWFMECD,0;

 SKPNC;

 CLRFMECD;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.

MOVFWMECD;ПЕРЕКОДИРУЕМ В  ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFMECE,0;ПРИБАВИМ ЕДИНИЦЫ

MOVWFMEC;И ПОЛУЧИМ ДВОИЧНОЕ  ЧИСЛО.

MOVLW.13;НЕ БОЛЕЕ 12.

 SUBWFMEC,0;

 SKPC;

GOTO$+5;

CLRFMECD;ЕСЛИ БОЛЬШЕ, ТО  ОБНУЛИМ.

MOVLW.1;УСТАНОВИМ ПЕРВЫЙ МЕСЯЦ.

MOVWFMECE;

GOTO$-0x0C;

TSTFMEC;ЕСЛИ МЕСЯЦ НУЛЕВОЙ,

BZ$-5;ТО УСТАНОВИМ.

MOVFWMECD;ПЕРЕПИШЕМ В РЕГИСТРЫ

MOVWFMECDI;ИНДИКАЦИИ.

MOVFWMECE;

MOVWFMECEI;

 RETURN;ВЕРНЕМСЯ.

YC7

 INCFMECE,1;УВЕЛИЧИМ ЕДИНИЦЫ МЕСЯЦА.

 MOVLW.10;НЕ БОЛЕЕ 9.

 SUBWFMECE,0;

 SKPNC;

 CLRFMECE;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.

MOVFWMECD;ПЕРЕКОДИРУЕМ В  ДВОИЧНЫЙ

CALLDEBIN;КОД ДЕСЯТКИ.

ADDWFMECE,0;ПРИБАВИМ ЕДИНИЦЫ

MOVWFMEC;И ПОЛУЧИМ ДВОИЧНОЕ  ЧИСЛО.

MOVLW.13;НЕ БОЛЕЕ 12.

 SUBWFMEC,0;

 SKPC;

GOTO$+5;

CLRFMECD;ЕСЛИ БОЛЬШЕ, ТО  ОБНУЛИМ.

MOVLW.1;УСТАНОВИМ ПЕРВЫЙ  МЕСЯЦ.

MOVWFMECE;

GOTO$-0x0C;

TSTFMEC;ЕСЛИ МЕСЯЦ НУЛЕВОЙ,

BZ$-5;ТО УСТАНОВИМ.

MOVFWMECD;ПЕРЕПИШЕМ В РЕГИСТРЫ

MOVWFMECDI;ИНДИКАЦИИ.

MOVFWMECE;

MOVWFMECEI;

 RETURN;ВЕРНЕМСЯ.

YC8M

 DECFDHUEI,1;УМЕНЬШИМ ЕДИНИЦЫ ДНЕЙ ПРОСМОТРА.

 MOVLW.255;ЕСЛИ ПЕРЕХОД ЧЕРЕЗ 0,

 SUBWFDHUEI,0;

BNC$+8;

MOVLW.9;ТО УСТАНОВИМ 9.

MOVWFDHUEI;

DECFDHUDI,1;УМЕНЬШИМ ДЕСЯТКИ  ДНЕЙ

 MOVLW.255;ЕСЛИ НЕТ ПЕРЕХОДА ЧЕРЕЗ 0,

 SUBWFDHUDI,0;

SKPC;

GOTOYC8COY;ТО УСТАНОВИМ  СЧЕТЧИК ДНЕЙ.

MOVFWDHUEI;ЕСЛИ СУММА ДНЕЙ

ADDWFDHUDI,0;НЕ РАВНА НУЛЮ,

SKPZ

GOTOYC8COY;ТО УСТАНОВИМ  СЧЕТЧИК ДНЕЙ.

DECFMECZ,1;ИНАЧЕ УМЕНЬШИМ  МЕСЯЦ.

SKPZ;ЕСЛИ МЕСЯЦ НУЛЕВОЙ,

GOTO$+3;

MOVLW.12;ТО УСТАНОВИМ  ДЕКАБРЬ.

MOVWFMECZ;

MOVFWMECZ;ПРОВЕРИМ ЧИСЛО  ДНЕЙ В МЕСЯЦЕ.

CALLDAYMON;

MOVWFDHUDI;ПЕРЕКОДИРУЕМ ДНИ.

MOVWFTEMP;ИЗ 2-ГО В 2_10-Е.

CALLBIDE;ТОЛЬКО ДО 99!

MOVWFDHUDI;

MOVFWTEMP;

MOVWFDHUEI;

MOVFWMECZ;ПЕРЕКОДИРУЕМ МЕСЯЦ.

MOVWFTEMP;ИЗ 2-ГО В 2_10-Е.

CALLBIDE;ТОЛЬКО ДО 99!

MOVWFMECDI;

MOVFWTEMP;

MOVWFMECEI;ДНЕЙ В ТАБЛИЦЕ  МЕСЯЦА НА 1 БОЛЬШЕ,

GOTOYC8M;ПОЭТОМУ ПОВТОРИМ.

YC8COY

INCFCOYC,1;УМЕНЬШИМ СЧЕТЧИК  ДНЕЙ.

MOVLW.8;НЕ БОЛЕЕ 7.

SUBWFCOYC,0;

SKPC;

GOTOYC8COU;НА УСТАНОВКУ  СЧЕТЧИКА СЧИТЫВАНИЯ.

CLRFCOYC;ОБНУЛИМ СЧЕТЧИК.

CALLREGIN;ЗАГРУЗИМ ТЕКУЩИЙ  ДЕНЬ.

BCFFLAG2,6;СБРОСИМ ФЛАГ  СЧЕТЧИКА ДНЕЙ.

GOTOYC8M;УСТАНОВИМ ВЧЕРАШНИЙ  ДЕНЬ.

YC8COU

BSFFLAG2,5;УСТАНОВИМ ФЛАГ  ВЫПОЛНЕННОЙ УСТАНОВКИ МИНУС.

BTFSCFLAG2,6;ЕСЛИ ФЛАГ НУЛЕВОЙ,

GOTO$+0x09;

CLRFCOYC;

MOVLW.16;ТО УСТАНОВИМ  СЧЕТЧИК СЧИТЫВАНИЯ.

SUBWFCOUZ,0;АДРЕС ЧТЕНИЯ  РАВЕН АДРЕСУ ЗАПИСИ

MOVWFCOUE;МИНУС 16.

BNC$+7;ЕСЛИ ПЕРЕХОД ЧЕРЕЗ  0, ТО УСТАНОВИМ .112.

BSFFLAG2,6;УСТАНОВКА ВЫПОЛНЕНА.

RETURN;ВЕРНЕМСЯ.

MOVLW.16;СЛЕДУЮЩИЙ АДРЕС  ЧТЕНИЯ

SUBWFCOUE,1;РАВЕН ТЕКУЩЕМУ  МИНУС 16.

SKPNC;ЕСЛИ ПЕРЕХОД ЧЕРЕЗ  0,

RETURN

MOVLW.112;ТО УСТАНОВИМ  .112.

MOVWFCOUE;

BSFFLAG2,6;УСТАНОВКА ВЫПОЛНЕНА.

RETURN

YC00

CLRFMIN;ОБНУЛЕНИЕ РЕГИСТРОВ

CLRFMINL;МИНУТ И СЕКУНД

CLRFMINH;ПРИ УСТАНОВКЕ  ПО СИГНАЛАМ

CLRFCEK;ТОЧНОГО ВРЕМЕНИ.

RETURN

;======================================================

; 30. ВОССТАНОВЛЕНИЕ ТЕКУЩИХ  РЕГИСТРОВ ИНДИКАЦИИ ПОСЛЕ ПРОСМОТРА.

;======================================================

REGIN

MOVFWMECD;

MOVWFMECDI;

MOVFWMECE;

MOVWFMECEI;

MOVFWDHUD;

MOVWFDHUDI;

MOVFWDHUE;

MOVWFDHUEI;

MOVFWMEC;

MOVWFMECZ;

RETURN

;=============================================

; 31. ПРЕДЕЛЬНЫЕ УСТАНОВКИ  MAX, MIN В ПОЛНОЧЬ.

;=============================================

POLNO

MOVLW.253;-

MOVWFSOT1X;ЗНАК 1 MAX.

MOVWFSOT2X;ЗНАК 2 MAX.

MOVLW.55;-55.

MOVWFLSB1X;СОХРАНЕННОЕ МАКСИМАЛЬНОЕ 1 ДАТЧИКА.

MOVWFLSB2X;-"- 2 ДАТЧИКА.

CLRFDST1X;СОХРАНЕННОЕ МАКСИМАЛЬНОЕ  ДЕСЯТЫХ 1 ДАТЧИКА.

CLRFDST2X;-"- 2 ДАТЧИКА.

MOVLW.251;+

MOVWFSOT1N;ЗНАК 1 MIN.

MOVWFSOT2N;ЗНАК 2 MIN.

MOVLW.99;+99.

MOVWFLSB1N;СОХРАНЕННОЕ МИНИМАЛЬНОЕ  1 ДАТЧИКА.40

MOVWFLSB2N;-"- 2 ДАТЧИКА.

MOVLW.9;0,9

MOVWFDST1N;СОХРАНЕННОЕ МИНИМАЛЬНОЕ  ДЕСЯТЫХ 1 ДАТЧИКА.

MOVWFDST2N;-"- 2 ДАТЧИКА.

RETURN

;=========================================

; 32. ИНИЦИАЛИЗАЦИЯ ЖКИ.

;=========================================

JEKINI

MOVLW03;

CALLJEKOM;

CALLSTROB;

MOVLW03;

CALLJEKOM;

CALLSTROB;

MOVLW03;

CALLJEKOM;

CALLSTROB;

MOVLW03;

CALLJEKOM;

CALLSTROB;

MOVLW10;ВЫКЛЮЧЕНИЕ ДИСПЛЕЯ.

CALLJEKOM;

CALLSTROB;

MOVLW06;СМЕЩЕНИЕ КУРСОРА.

CALLJEKOM;

CALLSTROB;

MOVLW01;СТИРАНИЕ ПАМЯТИ ДИСПЛЕЯ.

CALLJEKOM;

CALLSTROB;

MOVLW28;ФОРМАТ ОБМЕНА: 4 РАЗР., 5х7, 2 СТРОКИ.

CALLJEKOM;

CALLSTROB;

MOVLW0C;ВКЛЮЧЕНИЕ ДИСПЛЕЯ, ЗАПРЕТ КУРСОРА.

CALLJEKOM;

CALLSTROB;

GOTOMYLTIK;НА РАСПРЕДЕЛИТЕЛЬ.

;=========================================

; 33. ФОРМИРОВАНИЕ СТРОБИРУЮЩЕГО  ИМПУЛЬСА.

;=========================================

STROB

 BSF PORTB,E ;ВКЛЮЧАЕМ СТРОБ-ИМПУЛЬС.

NOP

 BCF PORTB,E ;ВЫКЛЮЧАЕМ СТРОБ.

 RETURN  ;ВЕРНЕМСЯ.

;===============================================

; 34. ПЕРЕДАЧА КОМАНДЫ  В ЖКИ.

;===============================================

JEKOM

 MOVWF TEMP ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.

 ANDLW B'11110000';ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.

 MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

 CALL STROB ;ПРОСТРОБИРУЕМ.

 CALL PAUSA ;ПАУЗА.

 MOVFW TEMP

 SWAPF TEMP,W ;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.

 ANDLW B'11110000';ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.

 MOVWF PORTB ;ПЕРЕПИШЕМ В ПОРТ "В".

 CALL STROB ;ПРОСТРОБИРУЕМ.

PAUSA

 MOVLW .255;1 МС. ПАУЗА ДЛЯ ЗАПИСИ КОМАНДЫ.

 ADDLW -1

 BTFSS STATUS,2

 GOTO $-2

 RETURN

;=====================================

; 35. ЗАПИСЬ ДАННЫХ В ЖКИ.

;=====================================

JEDAT

 MOVWF TEMP;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.

 ANDLW B'11110000';ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.

 ADDLW 30;ПЕРЕВОД В КОД ASCII, ТОЛЬКО ДЛЯ ЦИФР!

 MOVWF PORTB;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

 BSF PORTB,RS;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.

 CALL STROB;ПРОСТРОБИРУЕМ.

 CALL PAUS;ПАУЗА ДЛЯ ОСВОБОЖДЕНИЯ ЖКИ ОТ ЦИКЛА ЗАПИСИ.

 MOVFW TEMP;

 SWAPF TEMP,0;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.

 ANDLW B'11110000';ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.

 MOVWF PORTB;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "В".

 BSF PORTB,RS;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.

 CALL STROB;ПРОСТРОБИРУЕМ.

PAUS

 MOVLW .10;40 МКС. ПАУЗА ДЛЯ ЗАПИСИ ДАННЫХ.

 ADDLW -1

 BTFSS STATUS,2

 GOTO $-2

 RETURN

;========================================

; 36. ПЕРЕЗАПИСЬ В РЕГИСТРЫ  ИНДИКАЦИИ.

;========================================

CTP1

BTFSCFLAG2,0;

GOTOTEK1;ТЕКУЩАЯ ИНДИКАЦИЯ.

BTFSCFLAG2,1;

GOTOINDYC1;УСТАНОВКА ЧАСОВ  И ДНЕЙ.

GOTOCMOTP1;ПРОСМОТР.

CTP2

BTFSCFLAG2,0;

GOTOTEK2;ТЕКУЩАЯ ИНДИКАЦИЯ.

BTFSCFLAG2,1;

GOTOINDYC2;УСТАНОВКА ЧАСОВ  И ДНЕЙ.

GOTOCMOTP2;ПРОСМОТР.

TEK1

MOVFWDHUDI;ТЕКУЩАЯ ИНДИКАЦИЯ  1 СТРОКИ, ДЕСЯТКИ ДНЕЙ.

MOVWFR1;

MOVFWDHUEI;ЕДИНИЦЫ ДНЕЙ.

MOVWFR2;

MOVLW.240;ПУСТО.

MOVWFR3;

MOVWFR9;

MOVFWHOUH;ДЕСЯТКИ ЧАСОВ.

MOVWFR4;

MOVFWHOUL;ЕДИНИЦЫ ЧАСОВ.

MOVWFR5;

MOVLW.240;ПУСТО.

BTFSCCEK,0;ДВОЕТОЧИЕ ВКЛЮЧАЕТСЯ ЧЕРЕЗ 1 СЕКУНДУ.

MOVLW.10;ДВОЕТОЧИЕ.

MOVWFR6;

MOVFWMINH;ДЕСЯТКИ МИНУТ.

MOVWFR7;

MOVFWMINL;ЕДИНИЦЫ МИНУТ.

MOVWFR8;

MOVFWSOT1;ЗНАК.

MOVWFR10;

MOVFWDES1;ДЕСЯТКИ ТЕМПЕРАТУРЫ  1.

MOVWFR11;

MOVFWEDI1;ЕДИНИЦЫ ТЕМПЕРАТУРЫ  1.

MOVWFR12;

MOVLW.252;ЗАПЯТАЯ 1.

MOVWFR13;

MOVFWDST1;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ  1.

MOVWFR14;

MOVLW.14;>.

MOVWFR15;

Информация о работе Микроконтроллеры и микропроцессорные системы