Автор работы: Пользователь скрыл имя, 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. Работа с устройством
Заключение
Список литературы
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;СОХРАНЕННОЕ
MOVWFLSB2X;-"- 2 ДАТЧИКА.
CLRFDST1X;СОХРАНЕННОЕ
CLRFDST2X;-"- 2 ДАТЧИКА.
MOVLW.251;+
MOVWFSOT1N;ЗНАК 1 MIN.
MOVWFSOT2N;ЗНАК 2 MIN.
MOVLW.99;+99.
MOVWFLSB1N;СОХРАНЕННОЕ
MOVWFLSB2N;-"- 2 ДАТЧИКА.
MOVLW.9;0,9
MOVWFDST1N;СОХРАНЕННОЕ
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;
Информация о работе Микроконтроллеры и микропроцессорные системы