Федеральное агентство по атомной энергии
Снежинская государственная физико-техническая академия
Кафедра АИВС
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОЙ РАБОТЕ
по дисциплине: «Микропроцессорные устройства».
Группа
Студент ______________
(подпись)
Преподаватель ________
(подпись)
Снежинск
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
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. Принципиальная электрическая схема
Листов |