РефератыКоммуникации и связьМиМикропроцессорные устройства

Микропроцессорные устройства

Федеральное агентство по атомной энергии


Снежинская государственная физико-техническая академия


Кафедра АИВС


ПОЯСНИТЕЛЬНАЯ ЗАПИСКА


К КУРСОВОЙ РАБОТЕ


по дисциплине: «Микропроцессорные устройства».


Группа


Студент ______________


(подпись)


Преподаватель ________


(подпись)


Снежинск


2007


Аннотация


Цель работы: реализовать измеритель длительности нажатия клавиши.


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


- изучение задания;


- разработка алгоритма;


- реализация на PIC-контроллере;


- оформление пояснительной записки к курсовому проекту


Содержание


1. Постановка задачи


2. Текст программы


3. Граф-схема алгоритма


4. Принципиальная электрическая схема


5. Спецификация


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


1. Постановка задачи


Измерить длительность нажатия кнопки. Измеренные значения сохранять в ОЗУ микро c хемы PCF 8583. Измеренные значения вывести на ЖК – дисплей.


2.
Текст
программы


LIST P=16F84f


INCLUDE<P16F84.INC>


count EQU 0x10


count1 EQU 0x20


count2 EQU 0x21


LCDcfg EQU 0x22


LCDout EQU 0x23


Time EQU 0x11


temp EQU 0x12


DATA_I2C EQU 0x34


TX_Buffer EQU 0x32


__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC


GOTO START


Подпрограмма записи байта control по шине I2C


Write_I2C


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для записи


MOVLW 0 xA 0


CALL Transmit _ Data


Внутрений адрес часов для записи


MOVLW 0 x 00; адрес для записи


CALL Transmit_Data; на шину I2C...


MOVF DATA_I2C,w; Выдача данных


CALL Transmit_Data; на шину I2C...


CALL Stop_Bit_I2C; Выдача на шину I2C Stop Bit


RETURN


Подпрограмма сброса счётчика секунд на часах PCF 8583


Write_time_I2C


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для записи


MOVLW 0xA0


CALL Transmit _ Data


Запись регистра с которого читают с установленным битом на запись


MOVLW 0x02


CALL Transmit_Data


MOVLW 0x00


CALL Transmit_Data


MOVLW 0x00


CALL Transmit_Data


CALL Stop_Bit_I2C; Выдача на шину I2C Stop Bit


RETURN


Подпрограмма чтения результатов измерения из ОЗУ PCF 8583


Read_Saved_I2C


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


адрес часов с установленным битом для записи


MOVLW 0xA0


CALL Transmit _ Data


Запись регистра с которого читают с установленным битом на запись


MOVLW 0x11


CALL Transmit _ Data


Новая стартовая последовательность


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для чтения


MOVLW 0xA1


CALL Transmit_Data


CALL Receive_data


CALL Stop_Bit_I2C; Выдача на шину I2C Stop Bit


RETURN


Подпрограмма записи результатов измерения в ОЗУ PCF 8583


Save_time_I2C


MOVWF Time


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для записи


MOVLW 0xA0


CALL Transmit_Data


Запись регистра с которого читают с установленным битом на запись


MOVLW 0x10


CALL Transmit_Data


Новая стартовая последовательность


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для чтения


MOVLW 0xA0


CALL Transmit_Data


MOVLW 0x10


CALL Transmit_Data


MOVF Time,W


CALL Transmit_Data


MOVF Time,W


CALL Transmit_Data


CALL Stop_Bit_I2C; Выдача на шину I2C Stop Bit


RETURN


Подпрограмма чтения секунд с часов PCF 8583


Read_I2C


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для записи


MOVLW 0 xA 0


CALL Transmit_Data


Запись регистра с которого читают с установленным битом на запись


MOVLW 0 x 02


CALL Transmit _ Data


Новая стартовая последовательность


CALL Start_Bit_I2C; Выдача на шину I2C Start Bit


Адрес часов с установленным битом для чтения


MOVLW 0xA1


CALL Transmit_Data


CALL Receive_data


CALL Stop_Bit_I2C; Выдача на шину I2C Stop Bit


RETURN


Подпрограмма чтения байта с шины IIC


Receive _ data


CLRF DATA_I2C


MOVLW 8


MOVWF temp


BCF STATUS,5


BCF PORTB,4; SDA - вход


BCF STATUS,5


RX_Data_LP


RLF DATA_I2C,1


BCF PORTB,5


NOP


NOP


NOP


NOP


NOP


BCF DATA_I2C,0


BTFSS PORTB,4


BCF DATA_I2C,0


BCF PORTB,5


DECFSZ temp,1


GOTO RX_Data_LP


Отправка бита подтверждения ASK =1


BCF STATUS ,5


BCF PORTB,4 ;SDA - выход


BCF STATUS,5


BCF PORTB,4


NOP


BCF PORTB,5


NOP


NOP


NOP


NOP


BCF PORTB ,5


RETURN


Подпрограмма передачи байта по шине I 2 C


Transmit_Data


MOVWF TX_Buffer


MOVLW 8


MOVWF temp


BCF STATUS,5; выбор банка 1


BCF PORTB,4; SDA - выход


BCF STATUS,5; выбор банка 0


BCF PORTB,5


TX_Data_LP


BTFSS TX_Buffer,7


GOTO TX_Data_Lo; bits 7 = 0


BCF PORTB,4


GOTO TX_Data_LP1


TX_Data_Lo


BCF PORTB,4


TX_Data_LP1


BCF PORTB,5


NOP


NOP


NOP


NOP


BCF PORTB,5


RLF TX_Buffer,1


DECFSZ temp,1


GOTO TX_Data_LP


RLF TX _ Buffer ,1


BCF PORTB ,4


Чтение бита подтверждения - ASK


BCF STATUS ,5


BCF TRISB ,4; PORTB ,4 - вход


BCF STATUS ,5


BCF PORTB ,5


NOP


NOP


NOP


NOP


NOP


BTFSC PORTB ,4


NOP


BCF PORTB ,5


RETURN


Подпрограмма организации стартовой битовой последовательности


Start_Bit_I2C


BCF PORTB,4


BCF STATUS ,5; выбор 1 банка


BCF PORTB ,4; SDA - как выход данных из MCU в


EEPROM


BCF STATUS,5; выбор 0 банка


BCF PORTB,4


NOP


NOP


NOP


NOP


BCF PORTB,5


NOP


NOP


NOP


NOP


NOP


BCF PORTB,4


NOP


NOP


NOP


NOP


NOP


BCF PORTB,5


RETLW 0


Подпрограмма организации стопой битовой последовательности


Stop_Bit_I2C


BCF PORTB,4


BCF STATUS ,5; выбор 1 банка


BCF PORTB ,4; SDA - как выход данных из MCU в


;EEPROM


BCF STATUS,5; выбор 0 банка


BCF PORTB,4


NOP


NOP


BCF PORTB,5


NOP


NOP


BCF PORTB,4


NOP


NOP


RETURN


############################################################


Подпрограммы для организации задержек


Wait250ms


MOVLW 0x77; 250 мс


MOVLW count2


c03 MOVLW 0x02


MOVWF count


c02 MOVLW 0x1F


MOVWF count1


c01 DECFSZ count1


GOTO c01


DECFSZ count


GOTO c02


DECFSZ count2


GOTO c03


RETURN


Wait100


MOVLW 0x02; 100 мкс


MOVWF count1


w50 MOVLW 0x14


MOVWF count


c24 DECFSZ count


GOTO c24


DECFSZ count1


GOTO w50


RETURN


Wait50


MOVLW 0x14; 50 мкс


MOVWF count


c13 DECFSZ count


GOTO c13


RETURN


Wait15


MOVLW 0x06; 4 мкс


MOVWF count


c15 DECFSZ count


GOTO c15


RETURN


Wait160


MOVLW 0x35; 160 мкс


MOVWF count


c16 DECFSZ count


GOTO c16


RETURN


Wait1k; 1 сек


MOVLW 0x04


MOVWF count2<

/p>

w2 MOVLW 0xE0


MOVWF count1


w1 DECFSZ count1


GOTO w1


DECFSZ count2


GOTO w2


RETURN


#################################################################


Подпрограмма вывода байта на ЖК экран


NumOut


MOVWF temp


BCF temp ,7; 0 Формируем


BCF temp ,6; 0 номер


BCF temp ,5; 1 столбца


BCF temp,4; 1 содержащий символы для вывода


BCF LCDcfg,0


MOVF temp,W


CALL LCD _ write ; Выводим сначало старшую тетраду


RETURN


Подпрограмма записи по линиям данных младшей тетрады.


LCD_writehalf


MOVWF LCDout


BCF STATUS,RP0


BCF PORTA,4


ALL Wait250ms


MOVF LCDout,W


MOVWF PORTA


BCF PORTB,0


CALL Wait160


BCF PORTB,0


CLRF PORTB


CLRF PORTA


RETURN


Подпрограмма записи по линиям данных целого байта.


LCD _ write


BCF STATUS , RP 0


MOVWF LCDout


SWAPF LCDout,W;


MOVWF PORTA


BTFSS LCDcfg,0


BCF PORTA,4


BTFSC LCDcfg,0


BCF PORTA,4


BCF PORTB,0


BTFSS LCDcfg,0


CALL Wait250ms


BTFSC LCDcfg,0


CALL Wait50


BCF PORTB,0


MOVF LCDout,W


MOVWF PORTA


BTFSS LCDcfg,0


BCF PORTA,4


BTFSC LCDcfg,0


BCF PORTA,4


BCF PORTB,0


BTFSS LCDcfg,0


CALL Wait250ms


BTFSC LCDcfg,0


CALL Wait50


BCF PORTB,0


CALL Wait250ms


RETURN


Подпрограмма предварительной инициализации ЖК экрана.


IniLCD


MOVLW 0 x 0 E


wait _ power


CALL Wait1k


DECFSZ temp


GOTO wait_power


BCF LCDcfg,0


MOVLW 0x03


CALL LCD_writehalf


CALL Wait250ms


MOVLW 0x03


CALL LCD_writehalf


CALL Wait160


BCF LCDcfg,0


MOVLW 0x03


CALL LCD_writehalf


CALL Wait50


MOVLW 0x02


CALL LCD_writehalf


CALL Wait50


MOVLW 0x20


CALL LCD_write


CALL Wait50


MOVLW 0x20


CALL LCD_write


CALL Wait50


MOVLW 0x0E


CALL LCD_write


CALL Wait50


MOVLW 0x0F


CALL LCD_write


CALL Wait50


MOVLW B'00011111'


CALL LCD_write


CALL Wait50


MOVLW B'10000000'


CALL LCD_write


CALL Wait50


BCF LCDcfg ,0 MOVLW B '00000110' ; установка направление перемещения курсора ЖК экрана


CALL LCD_write


MOVLW 0 x 02;


Установить курсор в начальное состояние.


CALL LCD _ write


MOVLW 0 x 01;


Очистка ЖК экрана


CALL LCD _ write


CALL Wait250ms


CALL Wait250ms


CALL Wait250ms


RETURN


Подпрограмма вывода времени


OutTime


BCF LCDcfg ,0


MOVLW 0 x 02; установить курсор в начальное состояние.


CALL LCD_write


CALL Read_I2C


SWAPF DATA_I2C,W


CALL NumOut


MOVF DATA_I2C,W


CALL NumOut


CALL Save _ time _ I 2 C ; сохраняем результат измерений в ОЗУ


PCF 8583


RETURN


Подпрограмма вывода и сохранения результатов измерения


GetTime


BCF LCDcfg,0


MOVLW 0x02; установить курсор в начальное состояние.


CALL LCD_write


CALL Read_I2C; read seconds from clock


MOVF DATA_I2C,W


MOVWF Time


CALL Save _ time _ I 2 C ; сохраняем результат измерений в ОЗУ


PCF 8583


CALL Read_Saved_I2C; считываем результат измерений из ОЗУ


PCF 8583


SWAPF DATA_I2C,W


CALL NumOut; выводим на ЖК экран результат измерений


MOVF DATA _ I 2 C , W


CALL NumOut; выводим на ЖК экран результат измерений


RETURN


Основная подпрограмма


START


CLRF PORTB


CLRF PORTA


BCF STATUS , RP 0


Настройка портов


MOVLW B'11100000'


MOVWF TRISA&0x7F


MOVLW B'11001100'


MOVWF TRISB


BCF OPTION_REG,7


CALL IniLCD;


Вызов подпрограммы предварительной инициализации ЖК экрана.


BCF STATUS,RP0; выбор 0го банка памяти


CALL Read_Saved_I2C; считываем результат измерений из ОЗУ


PCF 8583 при сохранении


SWAPF DATA_I2C,W


CALL NumOut; выводим на ЖК экран результат измерений


OVF DATA_I2C,W


CALL NumOut; выводим на ЖК экран результат измерений


MZ


BTFSC PORTB,3


GOTO MZ; переход к MZ, кнопка не нажата


CALL Write_time_I2C; то вызываем подпрограмму обработки режима сброс счетчика, начало отсчета


M1


BTFSS PORTB,3


GOTO M1; переход к M1, кнопка нажата, ожидание отпускания кнопки


Если отпустили кнопку,


CALL GetTime;


Подпрограмма вывода и сохранения результатов измерения


CALL Wait250ms


GOTO MZ; зацикливание программы


END


4. Принципиальная электрическая схема







Масштаб






Масса






Лит






Измеритель длительности нажатия кнопки. Принципи-альня эл. схема.






Дата






Подлись






№ докум.






Лист






Изм.











Лист



Листов


5. Спецификация









































































Позиция
Тип, номинал
Кол.
Примечание
шт.
Конденсаторы
С1 25В – 10,0мкФ 1
С2 SMD 1206 – 0,1мкФ 1
Микросхемы
DD1 ЖКИ HD44780 1
DD2 Часы реального времени PCF 8583 1
Резисторы
R1 1 кОм 1
R2 5,1кОм 1
R3 5,1кОм 1
R 4 1 кОм 1
Прочие элементы
Z1 Кварцевый резонатор 32768 Гц 1
SB 3 Кнопки ПКн – 159 1
SW1.1 переключатель 1
SW1.2 переключатель 1
XC1 разъем 1
XC2 разъем 1










Масса



Масштаб



Лит












Лист



Листов



СГФТА


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

1) Яценков В.С. – Микроконтроллеры MicroChip Практическое руковод-ство (2002 год).


2) Майкл Предко. – Справочник по PIC – микроконтроллерам: Пер. с англ. – М.: ДМК Пресс, 2006. – 512с.: ил. (Серия «Справочник»)


3) Курс лекций.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Микропроцессорные устройства

Слов:1846
Символов:20028
Размер:39.12 Кб.