Цифровые устройства и микропроцессоры. Частотомер

Автор работы: Пользователь скрыл имя, 28 Ноября 2013 в 21:27, курсовая работа

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

Задание. Разработать Частотомер на микроконтроллере PIC16F84, программное обеспечения для него на языке ассемблер, рассмотреть вопросы программирования микроконтроллера.
Последние годы отмечены массовым наполнением рынка всевозможной автоматизированной аппаратурой самого различного назначения и самой различной сложности от пластиковой платежной карточки до холодильника, автомобиля и сложнейших установок. Это стало возможным благодаря микроконтроллерам (МК) Микроконтроллеры входят во все сферы жизнедеятельности человека, их насыщенность в нашем окружении растет из года в год.

Содержание

Введение
1.Разработка структурной схемы устройства
2.Выбор элементной базы
3.Разработка схемы электрической принципиальной
4.Разработка программного обеспечения
5.Программирование микроконтроллера
Заключение
Список литературы

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

Курсовой по МПК(Частотомер).doc

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

nop                     ; |

        bsf     status,5     ; |       

        clrf    trisb           ;- портB - выпуск, счет не возможен

        bcf     status,5           

        call    prescaler       ;положить посчитанное число в  высокий или нижний байт 

call    refresh    ;мы должны перезагрузить дисплей между периодом измерения и длинными вычислениямичто бы уменьшить мигание

        clrf M  ;очистка регистров дисплея

clrf H

clrf D

clrf U           

call bin2bcd  ;конвертировать двойной высокий байт:низкий байт M:H:D:U, 4 цифры

call    adjust  ;регулировать десятичный механизм после конвертировки

        movlw   .125            

        movwf   count_r        

loopr   call    refresh         ;вызвать перезагрузку 125 раз-это  где то 0,5 сек

        decfsz  count_r        

        goto    loopr          


goto work  ;Работать всегда! (или пока не выключат...)

 

;

; *****************************     Задержка подпрограммы 

delay

        movlw   .100            ; -

movwf   count1          ; |

d1 nop                     ; |

nop                     ; |

nop                     ; |

nop                     ; |-задержка в 1 миллисекунду, нам  не нужно точное время

nop                     ; |

        nop                     ; | 

nop                     ; |

decfsz  count1          ; |

        goto d1         ; |

        return                  ; -

; ********************************************* BCD -> 7-сегментная таблица перевода  сегментов

segments addwf      pc          ; W + PC -> PC

        retlw      b'00111111' ; ..FEDCBA = '0'

        retlw      b'00000110' ; .....CB. = '1'

        retlw      b'01011011' ; .G.ED.BA = '2'

        retlw      b'01001111' ; .G..DCBA = '3'

        retlw      b'01100110' ; .GF..CB. = '4'

        retlw      b'01101101' ; .GF.DC.A = '5'

        retlw      b'01111101' ; .GFEDC.A = '6'

        retlw      b'00000111' ; .....CBA = '7'

        retlw      b'01111111' ; .GFEDCBA = '8'

        retlw      b'01101111' ; .GF.DCBA = '9'

; ***************************** подпрограмма  перезгрузки индикатора:  250 мсек

refresh movfw    M   ;на дисплее тысячи

call    segments

movwf portb

        bsf     porta,0        

call    delay

        bcf     porta,0       

movfw    H   ;на дисплее сотни

call    segments

movwf portb

        bsf     porta,1       

call    delay

        bcf     porta,1        

movfw    D   ;на дисплее десятки

call    segments

movwf portb

        bsf     porta,2      


call    delay

        bcf     porta,2      

movfw    U   ;на дисплее единицы

call    segments

movwf portb

        bsf     porta,3      

call    delay

        bcf     porta,3      

return

 

; ************** подпрограмма  извлекаеи определенное значение  в делитель частоты. Частота=H_byte:L_byte=tmr:подпрограмма

 

prescaler movfw    tmr

        movwf   H_byte          ;сохранить счетчик в высоком байте

        clrf    N              

p1 bcf     portb,7

        bsf     portb,7

        bcf     portb,7         ;задать конечный результат на  вход контроллера

        incf    N              

        movfw   H_byte      ;Сделать копию высокого байта в W

        xorwf   tmr,0         ;Проверить, если tmr изменится

        btfsc   status,2      

        goto    p1  ;если нет, повторить

        movlw   0xFF

        movwf   L_byte         

movfw   N              ; N = как много импульсов которым необходимо завершить деление частоты к 256

        subwf   L_byte          ;-|__ L_byte=256-N

incf    L_byte          ;-|   

return

 

; ****************************** BIN -> BCD преобразователь  H_byte:L_byte -> M:H:D:U

 

bin2bcd btfss   H_byte,5        ;проверить bit5 высокого байта

goto    b1

movlw   0x08

addwf   M

movlw   0x01

     addwf   H

movlw   0x09

addwf   D

movlw   0x02

        addwf   U               ;если bit5=1 то добавить 8192

b1      btfss   H_byte,4        ;проверить  bit4 H_byte

goto    b2

movlw   0x04

addwf   M

movlw   0x09

addwf   D

movlw   0x06

        addwf   U               ;если bit4=1 то добавить 4096

b2      btfss   H_byte,3        ;проверить  bit3 H_byte

goto    b3

movlw   0x02

addwf   M

movlw   0x04

addwf   D

movlw   0x08

        addwf   U               ;если bit3=1 то добавить 2048


b3      btfss   H_byte,2        ;проверить bit2 of H_byte

goto    b4

movlw   0x01

addwf   M

movlw   0x02

addwf   D

movlw   0x04

        addwf   U               ;если bit2=1 то добавить 1024

b4      btfss   H_byte,1        ;проверить  bit1 H_byte

goto    b5

movlw   0x05

        addwf   H

movlw   0x01

addwf   D

movlw   0x02

        addwf   U               ;если bit1=1 то добавить 512

b5      btfss   H_byte,0        ;проверить  bit0 H_byte

goto    b6

movlw   0x02

addwf   H

movlw   0x05

addwf   D

movlw   0x06


        addwf   U               ;если bit0=1 то добавить 256

b6      btfss   L_byte,7        ;проверить bit7 L_byte

goto    b7

movlw   0x01

        addwf   H

movlw   0x02

addwf   D

movlw   0x08

        addwf   U               ;если bit7=1 то добавить 128

b7      btfss   L_byte,6        ;проверить bit6 L_byte

goto    b8

movlw   0x06

addwf   D

movlw   0x04

        addwf   U               ;если bit6=1 то добавить 64

b8      btfss   L_byte,5        ;проверить bit5 L_byte

goto    b9

movlw   0x03

addwf   D

movlw   0x02

        addwf   U               ;если bit5=1 то добавить 32

b9      btfss   L_byte,4        ;проверить bit4 L_byte

goto    b10

movlw   0x01

addwf   D

movlw   0x06

        addwf   U               ;если bit4=1 то добавить 16

b10     btfss   L_byte,3        ;проверить bit3 L_byte

goto    b11

movlw   0x08

        addwf   U               ;если bit3=1 то добавить 8

b11     btfss   L_byte,2        ;проверить bit2 L_byte

goto    b12

movlw   0x04

        addwf   U               ;если bit2=1 то добавить 4

b12     btfss   L_byte,1        ;проверить bit1 L_byte

goto    b13

movlw   0x02

        addwf   U               ;если bit1=1 то добавить 2

b13     btfss   L_byte,0        ;проверить bit0 L_byte

goto    b14

movlw   0x01

        addwf   U               ;если bit0=1 то добавить 1

b14     return

 

; ****************************** BCD механизм  после конвертировки

 

adjust movfw U

movwf N    ;сделать копию U в N

movlw 0x0A   

subwf N,1    ;проверить, если U<10

btfss status,0

goto a1    ;если U<10, тогда регулировать не надо, следует до следующей единицы


movlw 0x0A   ;если U>10 тогда U=U-10 и D=D+1

subwf U,1    

incf D,1    

goto adjust   ;повторить

a1 movfw D

movwf N    ;сделать копию из D в N

movlw 0x0A   

subwf N,1    ;проверить, если D<10

btfss status,0

goto a2    ;если D<10, тогда регулировка не нужна следует до следующей цифры

subwf D,1    ;если D>10 тогда D=D-10 и H=H+1    

incf H,1    

goto a1     ;повторить

a2 movfw H

movwf N    ;сделать копию из H в N

movlw 0x0A   

subwf N,1    ;проверить если H<10

btfss status,0

goto a3    ;если H<10 тогда регулировка не нужна следует до следующей цифры

subwf H,1    ;если H>10 тогда H=H-10 и M=M+1     

incf M,1    

goto a2     ;повторить

a3 return

 

     END

 

 

 

 

 

 

 

 

 

 

 

 

 


5.Программирование микроконтроллера

 

Конструкция представляет из себя очень  простое и дешевое устройство для программирования и последующего чтения внутренней памяти PIC контроллеров типа PIC16C84 /83, PIC16F84 /83, PIC16CE625 /624/623. В отличие от многих аналогичных конструкций, программатор допускает внутрисхемное программирование. При разработке за основу была взята схема , рекомендуемая фирмой "Microchip" .

Программатор питается от источника напряжением 12…13v с током до 100ma и подключается к порту LPT1 персонального компьютера. Управляющая программа разрабатывалась для MS DOS, поэтому при работе в среде «Windows» для соблюдения необходимых временных соотношений при программировании ее необходимо запускать в режиме эмуляции MS DOS. Хотя сама программа прекрасно работает и в оконном режиме, попытка программирования в этом случае ни к чему хорошему не приведет. Алгоритм программирования большинства PIC контроллеров одинаков, поэтому не составит труда расширить их номенклатуру. Интерфейс программы прост и интуитивно понятен. Схема электрическая принципиальная приведена на чертеже. Протокол работы микросхемы при программировании рассмотрен в диаграммах на рисунке 9, вывод данных из микроконтроллера и рисунке 10 ввод данных в микроконтроллер.

 


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

Устройство входит в  режим программирования Удержанием низкого уровня на выводах RB6, RB7 во время перехода сигнала на выводе MCLR/Vpp из нижнего уровня в высокий. После этого RB6 становится тактовым сигналом, а RB7-данными программирования.

После входа в режим  программирования можно послать 6-ти битную команду. В зависимости от нее можно записать или считать 14-битные данные.                                                                                   

 

 

 

 

 

 


Заключение 

 

По полученному заданию  была проделана работа в полном объеме, разработаны электронные часы на микроконтроллере, написана программа  для него рассмотрены вопросы  программирования МК. При выполнении данной работы был получен ценный опыт  разработки подобных устройств получены навыки в разработке программ на языке ассемблер также был закреплены  знания полученные на занятиях.

 

 

 

 


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

 

1. Радио №1 2001г. с.21 "Частотомер на PIC-контроллере"

2. Угрюмов Е.П. Цифровая  схемотехника.-СПб.:БХВ-Санкт-Петербург,2000.-528 с.: ил.

3. Микроконтроллеры. Выпуск 2:Однокристальные микроконтроллеры PIC12c5x, PIC16x8x, PIC14000, M16C/61/62. Перевод с англ.Б.Я..8 Прокопенко/ Под ред.Б. Я. Прокопенко.- М.: ДОДЭКА, 2000.- 336 с.

 

 

 

 

Internet - Ресурсы

 

http://www.microchip.ru:8101/

http://www.paguo.ru/

http://www.disall.narod.ru/picpro.htm

http://www.chipnews.ru/html.cgi/arhiv/index.htm

Микроконтроллеры. Выпуск 2:

Однокристальные микроконтроллеры PIC12c5x, PIC16x8x, PIC14000,

 


Информация о работе Цифровые устройства и микропроцессоры. Частотомер