Измеритель частоты синусоидального сигнала

Автор работы: Пользователь скрыл имя, 03 Марта 2011 в 16:43, курсовая работа

Описание работы

В современном обществе по мере познания им природы все более возрастает роль измерений. Соответственно непрерывно увеличивается объем измерительной информации – информации о значениях измеряемых физических величин, повышаются требования к качеству и способам ее обработки и использования.

Содержание работы

Введение ……………………………………………………….……4
Структурной схема устройства……………………………………4
Описание принципа работы структурной схемы устройства….....5
Алгоритм функционирования устройства………………………....6
Описание и расчёт основных элементов схемы электрической
Принципиальной………….….……………………………….…...7
Алгоритм работы микроконтроллера …………………………….17
Текст программы…………………………………………………. 19
Литература. ………………………………………………………….24

Файлы: 1 файл

Расчетная Р.docx

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

      INCF FSR

          DECFSZ S_TMP

      B $-3

      CLRF TMR0 

          CLRF TMR1H

          CLRF TMR1L 

          BSF INTCON,GIE     ;глобальное разрешение прер.

         

;***********************************************

;*                опрос кнопки                 *

;***********************************************     

START     CALL D10mS            ;с интервалом  в 10мс

      BTFSC GPIO,BTN        ;происходит  опрос кнопки BTN 

          B ST2                 ; 

          INCF TIME             ;при нажатой BTN инкрементируем  счётчик TIME  

      BTFSC FLAG,LONG_CLICK ;долгое нажатие кнопки  произошло? 

      B ST2                 ; 

          BTFSC FLAG,SHOT_CLICK ;короткое нажатие кнопки  произошло? 

      B ST1                 ;  

          MOVF TIME,W           ;если TIME=TIME_MIN

      SUBLW TIME_MIN        ;устанавливаем  флажок   

      SKPNZ                 ;короткого нажатия

      BSF FLAG,SHOT_CLICK   ;кнопки SHOT_CLICK

ST1 MOVF TIME,W           ;если TIME=TIME_MAX

      SUBLW TIME_MAX        ;устанавливаем флажок

      BNZ START             ;долгого нажатия

      SKPNZ                 ;кнопки LONG_CLICK

      BSF FLAG,LONG_CLICK

      B START

ST2       CLRF TIME

      BTFSS FLAG,LONG_CLICK ;долгое нажатие кнопки ?

      B ST6

      BCF FLAG,LONG_CLICK   ;здесь начинается  обработчик по

      BCF FLAG,SHOT_CLICK   ;долгому нажатию  кнопки , при

      MOVF MODE,W           ;каждом  нажатии происходит смена

      SUBLW 0x01            ;режима(0,1)->(2,3)->(4,5,6)

      BNC ST3              

      MOVLW 0x02           

      B ST4

ST3 MOVF MODE,W

      SUBLW 0x03

      MOVLW 0x00

      SKPNC 

          MOVLW 0x04

ST4       BCF INTCON,GIE        ;принудительный  переход к     

      MOVWF MODE   ;программе прерывания,устанавливаем

      BSF FLAG,CHANGE       ;флажок смены  режима CHANGE

      BSF PIR1,T1IF

      CALL INTER

ST5 BTFSS GPIO,BTN

          B ST5

          B START

ST6       BTFSS FLAG,SHOT_CLICK ;короткое нажатие кнопки ?

          B ST5

          BCF FLAG,SHOT_CLICK   ;здесь начинается  обработчик по 

          MOVF MODE,W           ;короткому нажатию кнопки , при

          CALL MODTBL           ;каждом нажатии происходит смена

          B ST4                 ;режима по таблице MODTBL 

;***********************************************

;*  начало  программы обработчика прерываний    *

;***********************************************               

INTER     MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

          BTFSC INTCON,T0IF

          B IMPINC

          MOVF MODE,W

          ADDWF PCL

          B FR_mS

          B FR_mS_dF

          B FR_S

      B FR_S_dF

          B CN_WAIT

          B CN_START

          B CN_STOP

         

;***********************************************

;*    инкрементирование  счётчика импульсов     *

;*********************************************** 

IMPINC    BCF INTCON,T0IF

      INCF IMP3

      SKPNZ

      INCF IMP4

      B ENDINT 

;***********************************************

;*     измерение частоты с периодом 100мс      *

;*********************************************** 

  

FR_mS     BCF PIR1,TMR1IF

      BSF GPIO,INS      

          BSF STATUS,RP0     ;банк0

          BCF TRISIO,INS     ;остановка счёта импульсов,прошла 0,1с

          BCF STATUS,RP0     ;банк1

          BTFSS FLAG,CHANGE  ;проиозшла смена режима ?   

          B FR1

          CALL INITPRES      ;если да - то  инициализация TMR0,TMR1

          B FR2

FR1       CALL CLRPRES       ;досчёт  импульсов в предделителе TMR0

          MOVF IMP1,W        ;сохраняем  счётчик импульсов, так как

          MOVWF IMP1_TMP     ;программа BINDEC изменит его

          MOVF IMP2,W

          MOVWF TMR0

          MOVWF IMP2_TMP

          MOVF IMP3,W

          MOVWF IMP3_TMP

          MOVF IMP4,W

          MOVWF IMP4_TMP

FR2 CALL BINDEC        ;двоично-десятичная перекодировка

          MOVLW IND8         ;счётчика  импульсов IMP4:IMP3:IMP2:IMP1

      MOVWF FSR          ;преобразование  чисел по таблице INDTBL

      MOVF TMP4,W

      CALL TABLCON

          MOVF TMP3,W

          CALL TABLCON

          MOVF TMP2,W

          CALL TABLCON

          MOVF TMP1,W

          CALL TABLCON

          MOVLW IND7

          CALL CLRIND         ;убираем незначащие нули

          MOVLW 0x0A          ;символ 0 всегда в

      MOVWF IND0          ;нулевом  разряде индикатора

      MOVLW 0x01          ;символ 1 всегда в

      MOVWF IND9          ;девятом  разряде индикатора

      MOVLW 0x0B          ;символ F всегда в

      MOVWF IND8          ;восьмом  разряде индикатора

      CALL SHOWIND        ;вывод на  индикатор

          MOVLW 0x3C          ;установка  TMR1 на 0,1с

      MOVWF TMR1H

      MOVLW 0xB5

      MOVWF TMR1L

          CLRF IMP1

          CLRF IMP2

      CLRF IMP3

          CLRF IMP4

      CLRF TMR0

      BSF GPIO,INS

          BSF STATUS,RP0      ;банк1

          BSF TRISIO,INS      ;старт счёта импульсов

          BCF STATUS,RP0      ;банк0

      BSF T1CON,TMR1ON

          B ENDINT

         

;***********************************************

;*      измерение частоты с периодом 1с        *

;***********************************************

               

FR_S      BCF PIR1,TMR1IF

          INCF ZIKL

          MOVLW 0x0A

          SUBWF ZIKL,W

          BZ FR3              ;прошло 10 циклов*0,1с=1с ?

          MOVLW 0x3C          ;если нет,то устанавливаем

      MOVWF TMR1H         ;TMR1 ещё  на 0,1с

      MOVLW 0xBB

      MOVWF TMR1L

          B ENDINT

FR3       BCF T1CON,TMR1ON

          BSF GPIO,INS

          BSF STATUS,RP0      ;банк1

          BCF TRISIO,INS      ;остановка счёта импульсов,прошла 1с

          BCF STATUS,RP0      ;банк0

          BTFSS FLAG,CHANGE   ;проиозшла смена режима ?

          B FR4

          CALL INITPRES       ;если да - то инициализация TMR0,TMR1

          B FR5

FR4       CALL CLRPRES        ;досчёт  импульсов в предделителе TMR0

          MOVF IMP1,W         ;сохраняем  счётчик импульсов, так как

          MOVWF IMP1_TMP      ;программа  BINDEC изменит его

          MOVF IMP2,W         ;счётчика  импульсов IMP4:IMP3:IMP2:IMP1

          MOVWF TMR0          ;преобразование  чисел по таблице INDTBL

          MOVWF IMP2_TMP

          MOVF IMP3,W

          MOVWF IMP3_TMP

          MOVF IMP4,W

          MOVWF IMP4_TMP

FR5       CALL BINDEC         ;двоично-десятичная перекодировка

          MOVLW IND7

      MOVWF FSR

      MOVF TMP4,W

      CALL TABLCON

          MOVF TMP3,W

          CALL TABLCON

          MOVF TMP2,W

          CALL TABLCON

          MOVF TMP1,W

          CALL TABLCON

          MOVLW IND7

      CALL CLRIND         ;убираем незначащие нули

     MOVLW 0x02          ;символ 2 всегда в

      MOVWF IND9          ;девятом  разряде индикатора

      MOVLW 0x0B          ;символ F всегда в

      MOVWF IND8          ;восьмом  разряде индикатора

      CALL SHOWIND        ;вывод на  индикатор

      CLRF ZIKL

          MOVLW 0x3C          ;установка  TMR1 на 0,1с

      MOVWF TMR1H

      MOVLW 0xD0

      MOVWF TMR1L

          CLRF IMP1

          CLRF IMP2

      CLRF IMP3

          CLRF IMP4

      CLRF TMR0

      BSF GPIO,INS       

          BSF STATUS,RP0      ;банк1

          BSF TRISIO,INS      ;старт счёта импульсов,прошла 1с

          BCF STATUS,RP0      ;банк0

      BSF T1CON,TMR1ON

          B ENDINT

         

;***********************************************

;* измерение  девиации частоты с периодом 100мс *

;*********************************************** 

FR_mS_dF  BCF PIR1,TMR1IF

      BSF GPIO,INS

          BSF STATUS,RP0      ;банк1

          BCF TRISIO,INS      ;остановка счёта импульсов,прошла 0,1с

          BCF STATUS,RP0      ;банк0

          BCF FLAG,CHANGE   

          CALL CLRPRES        ;досчёт импульсов в предделителе TMR0

          CALL DIFFERN        ;вычисление dF = IMP4:..:IMP1 =

          MOVWF IND7          ;IMP4_TMP:..:IMP1_TMP - IMP4:..:IMP1

      CALL BINDEC         ;двоично-десятичная  перекодировка

          MOVLW IND6          ;преобразование dF по таблице INDTBL

      MOVWF FSR

          MOVF TMP3,W

          CALL TABLCON

          MOVF TMP2,W

          CALL TABLCON

Информация о работе Измеритель частоты синусоидального сигнала