Телефонный номеронабиратель

Автор работы: Пользователь скрыл имя, 09 Апреля 2014 в 21:47, курсовая работа

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

Первые микроконтроллеры компании MICROCHIP PIC16C5x появились в конце 80-х годов и благодаря своей высокой производительности и низкой стоимости составили серьёзную конкуренцию производимым в то время 8-разрядным МК с CISC-архитектурой.
Первое, что привлекает внимание в PIC-контроллерах — это простота и эффективность. В основу концепции PIC, единую для всех выпускаемых семейств, была положена RISC-архитектура с системой простых однословных команд, применение встроенной памяти программ и данных и малое энергопотребление.

Вложенные файлы: 1 файл

Курсовая ЦУ.doc

— 759.50 Кб (Скачать файл)

endm

org 0

goto Start ; Старт;

       org 4; Сохраняем рабочий регистр и регистр состояния в момент прерывания.

push

movwf WBuffer

swapf WBuffer

swapf STATUS, w

movwf StatBuffer

;extern ServiceInterrupts

call ServiceInterrupts

pop

swapf StatBuffer,w

movwf STATUS

swapf WBuffer, w

retfie

Start

call InitPorts

call InitTimers

loop

btfsc KeyFlag,ServKey ; Проверка флага нажатия,

call ServiceKey ; Да, тогда обработка

call Generate; выдача импульса

goto loop

 

; Подпрограмма  обработки нажатия клавиши. Msd - старшая цифра, Lsd - младшая цифра.

ServiceKey

movf NewKey,w ; Считывание регистра NewKey.

movwf TempE ; Сохранение в TempE.

swapf MsdTime,w ; Считывание Msd и перестановка полубайтов.

andlw B'11110000'; Обнуление младшего полубайта,

movwf MsdTime ; Сохранение,

swapf LsdTime,w ; Считывание Lsd и перестановка полубайтов,

andlw B'00001111' ; Обнуление старшего полубайта.

iorwf MsdTime ; Логическое сложение с Msd.

swapf LsdTime,w ; Считывание Lsd и перестановка полубайтов.

andlw B'11110000' ; Обнуление младшего полубайта,

iorwf TempE,w ; Логическое сложение с TempE.

movwf LsdTime ; Сохранение,

bcf KeyFlag,ServKey ; Сброс флага нажатии.

return ; Возврат

 

InitPorts

bsf STATUS,RP0 ; Банк 1.

movlw 1 ; RAO цифровые порты,

clrf TRISA ; RA0 - выходы,

clrf TRISB ; RB0-RB7 - выходы,

bcf STATUS,RP0 ; банк 0

clrf PORTA ; Обнуление порта A

clrf PORTB ; Обнуление порта В

return ; Возврат

                    

; Частота  тактового генератора - 4,096 MГц, частота командных циклов - 1,024 МГц что с предварительным делителем на 32 осуществляет инкрементацию RTCC каждые 31,25 мс.

;Модуль  счета таймера - 96, поэтому прерывание  будет происходить каждые 5 мс.

InitTimers

clrf MsdTime ; Сброс MsdTime

clrf LsdTime ; и IsdTime.

clrf KeyFlag ; Сброс флагов,

bcf STATUS,RP0 ; Банк 1.

movlw B'10000100' ; Предварительное деление на 32.

movwf OptionReg ;

bcf STATUS,RP0 ; Банк 0.

movlw B'00100000' ; Разрешение прерывания таймера,

movwf INTCON;

movlw .96 ; Предзагрузка таймера,

movwf TMR0 ; Начало счета,

retfie ; Выход из прерывания.

                     

ServiceInterrupts

btfsc INTCON, T0IF ; Прерывание таймера?

goto ServiceRTCC ; Да, обработка.

clrf INTCON ; Нет, сброс INTC0N,

bsf INTCON,T0IF ; Разршение прерывания от таймера.

return ;

 

ServiceRTCC

movlw .96 ; Инициализация таймера,

movwf TMR0 ;

bcf INTCON,T0IF ; Сброс флага прерываний таймера,

btfsc PORTA, 0 ; Если бит 0 порта А равен единице,

call ScanKeys ; быстрое сканирование клавиатуры

return

                    

; Сканируем  клавиатуру 4x3 и выдаем номер клавиши в NewKey, ели клавиша была нажата. Если нет, обнуляем указатель keyhit. Подпрограмма устраняет «дребезг контактов». Клавиатура сканируется каждые 20 м

                    

ScanKeys

btfss KeyFlag, DebnceOn ; Задержка окончена?

goto Scan1 ; Да, тогда сканирование клавиатуры.

decfsz Debnce ;Нет, тогда уменьшаем счетчик задержки

return ; Возвращаемся, если не 0

bcf KeyFlag, DebnceOn ; Сброс флага

return ; и возврат.

Scan1

call SavePorts ; Сохранение портов,

movlw B'1110111' ; Загрузка TempD.

movwf TempD ;

ScanNext

movf PORTB, w ;

bcf INTCON,RBIF ; Сброс флага прерывания от порта B

rrf TempD ; Правый сдвиг TempD.

btfss STATUS,C ; Перенос = 1?

;goto NoKey ; Нет, тогда окончание

movf TempD,w ; ИЛИ TempD и w

movwf PORTB ; и выдача в P0RT_B.

nop

btfss INTCON,RBIF ; Значение флага прерывания от порта В равно 1?

goto ScanNext ; Нет, тогда продолжаем,

btfsc KeyFlag, keyhit ; Последняя клавиша отпущена?

goto SKreturn ; Нет, тогда выход.

bsf KeyFlag,keyhit ; Устанавливаем флаг нажатия новой клавиши,

swapf PORTB,w ; Считывание порта 8-

movwf TempE ; Сохранение в TempE.

call GetKeyValue ; Считывание значения клавиши от 0 до F,

movwf NewKey ; Сохранение в NewKey.

bsf KeyFlag, ServKey ; Установка флага обработки клавиш,

bsf KeyFlag,DebnceOn ;

movlw 4

movwf Debnce ;: Изменение времени задержки.

                    

call RestorePorts ; Возмещение портов,

return ; NoKey

bcf KeyFlag,keyhit ; Сброс флага,

goto SKreturn

; Соответствие  номеров клавиш, строк, столбцов и портов.

 

GetKeyValue

clrf TempC ;

btfss TempD,3 ; Первая строка,

goto RowValEnd ;

incf TempC;

btfss TempD,2 ; Вторая строка.

goto RowValEnd ;

incf TempC ;

btfss TempD, 1 ; Третья строка.

 

RowValEnd

btfss TempE,0 ; Первый столбец?

goto GetValCom ; Да, считывание клавишей 1,2,3

btfss TempE, 1 ; Второй столбец?

goto Get456 ; Да. считывание 4,5,6

btfss TempE, 2 ; Третий столбец?

goto Get789 ; Да, считывание 7,8,9

Get0

bsf TempC,2 ;

Get789

bsf TempC, 3 ;

goto GetValCom ;

Get456

bsf TempC,2 ;

GetValCom

movf TempC, w ; Таблица номеров клавиш.

addwf PCL;

retlw 1;

retlw 2;

retlw 3;

retlw 4;

retlw 5;

retlw 6;

retlw 7;

retlw 8;

retlw 9;

retlw 0A ;

retlw 0;

; Сохраняем  состояния портов А и В во  время сканирования клавиатуры, SavePorts

SavePorts

movf PORTA, w

movwf PABuf ; Сохраняем Порт A.

movf PORTB, w

movwf PBBuf ; Сохраняем порт В.

movlw 0xff ; На всех линиях порта B высокий уровень,

movwf PORTB

bsf STATUS,RP0 ; Банк 1.

bcf OptionReg,7; Разрешаем подключение подтягивающих резисторов

movlw b'10001111' ; Младшие четыре разряда порта B входы,

movwf TRISB; старшие - входы.

bcf STATUS,RP0 ; Банк 0

return;

                     

                     ;Восстанавливаем порты А и  B после сканирования клавиатуры,

RestorePorts

movf PBBuf,w; Восстановление содержимого

movf PORTB,w; порта В.

movf PABuf,w; Восстановление содержимого

movwf PORTA ; порта А.

bsf STATUS, RP0; Банк. 1.

bsf OptionReg, 7 ; Запрет "подтягивающих" резисторов,

clrf TRISA ; Все линии порта А - выходы,

clrf TRISB ; Все линии порта B выходы.

bcf STATUS,RP0 ; Банк 0

return 

                     

Generate

;загрузка в таймер значения 100мс

movlw -d'255'

;загрузка в таймер 1 значения константы

movwf TMR2L;

movlw 0xff

movwf TMR2H

;запуск таймера

bsf T1CON,TMR1ON

;ожидание переполнения

;загрузка в таймер

movlw LsdTime

;загрузка в таймер 2 значения нажатой кнопки

movwf TMR2L;

movlw 0xff

movwf TMR2H

;выдать лог. 1 на RC7

bsf TRISA,1

;запуск таймера

bsf T2CON,TMR2ON

;ожидание переполнения

 

wait1

movf TMR2H,w

BTFSS STATUS,Z

goto wait1

bsf TRISA,1

;выдать лог 0 на RC7

bcf T2CON,TMR2ON

;сброс переполнения

bcf STATUS,TMR1IF

;останов таймера

movlw -d'155';сразу отнимаем 100 от константы

subwf TMR2L,w

;загрузка длительности паузы

movwf TMR1L;

movlw 0xff

movwf TMR2H

;запуск таймера

bsf T2CON,TMR2ON;

;ожидание переполнения

wait2

movf TMR1H,w;

BTFSS STATUS,Z;

goto wait2

;останов таймера

bcf T2CON,TMR2ON

;сброс переполнения

bcf STATUS,TMR2IF

;останов таймера

bcf T1CON,TMR1ON

;сброс переполнения

bcf STATUS,TMR1IF

 

return

end

Заключение

В результате выполнения курсового проекта был разработан электронный телефонный номеронабиратель, а так же следующая документация:

  • структурная схема,
  • принципиальная электрическая схема,
  • алгоритм функционирования устройства,
  • алгоритм работы программы МК,
  • листинг программы.

Разработанная конструкция отличается простотой схемотехнического решения, небольшим количеством использованных в схеме комплектующих элементов, является практически универсальной и может легко изменяться и расширяться.

Список использованной литературы

1 Фрунзе, А.В. Микроконтроллеры? Это же просто! [Текст]/А.В. Фрунзе

     Т.1 – М.:ООО «ИД СКИМЕН», 2002. - 336 с.

2 Ульрих, В. А. Микроконтроллеры PIC18X7XX. [Текст]/ В. А. Ульрих

     Изд. 2-е – М.: Наука и техника, 2002. - 320 с.

 

 

 

Приложение А

(обязательное)

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

 

 

 

 

 

 


Информация о работе Телефонный номеронабиратель