Устройство контроля за уровнем аналоговых сигналов

Приложение А

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

list p=16C72

#include <P16C72.inc>

TMP EQU 20H

K1 EQU 21H

K2 EQU 22H

SOTNI EQU 23H

DESYATKI EQU 24H

EDINICI EQU 25H

SAVEW EQU 28H

SAVEW2 EQU 30H

SAVESTATUS EQU 29H

SAVESTATUS2 EQU 31H

SV EQU 26H ; STACK VERTEX

SP EQU 27H ; STACK POINTER

DINAMIK EQU 32H

CT EQU

33H ; FOR DELAY

;STK 40h-5Eh ; STACK ADDRES FOR TEN BCD TRIADS

ORG 0x00 ; processor reset vector

GOTO Start ; go to beginning of program

; -------------IRQ

ORG 0x04 ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)

BTFSS PIR1, TMR1IF ; анализ

goto IRQTMR2 ; источника прерывания

IRQTMR1 ; обработчик прерывания от таймера

;------ PUSH REGISTERS---------

MOVWF SAVEW

MOVF STATUS,W

MOVWF SAVESTATUS

MOVF FSR,W

MOVWF SV

;------------------------------

BCF T1CON,TMR1ON ; TIMER STPR

MOVLW B'00111000'

MOVWF TMR1L

MOVLW B'10100111'

MOVWF TMR1H

BSF T1CON,TMR1ON ; TIMER ON

BCF PIR1, TMR1IF ; сброс флага переполнения от таймера

CALL INDICATION

;------ POP REGISTERS ---------

MOVF SV,W

MOVWF FSR

MOVF SAVESTATUS,W

MOVWF STATUS

MOVF SAVEW,W

;------------------------------

IRQTMR2

BTFSS PIR1, TMR2IF; анализ

goto RET

T2BREAK

;------ PUSH REGISTERS---------

MOVWF SAVEW2

MOVF STATUS,W

MOVWF SAVESTATUS2

;------------------------------

BCF T2CON,TMR2ON ; TIMER2 STOP

MOVLW B'00000000'

MOVWF TMR2

BSF T2CON,TMR2ON ; TIMER2 ON

BCF PIR1, TMR2IF ; сброс флага переполнения от таймера

CALL SOUNDINDICATION

;------ POP REGISTERS ---------

MOVF SAVESTATUS2,W

MOVWF STATUS

MOVF SAVEW2,W

;------------------------------

RET

retfie ; возврат из прерывания

ORG 0xAA

TOSEVEN

addwf PCL,F ; 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'

Start

BCF STATUS,6

BSF STATUS,5 ; BANK1

MOVLW B'11111111';INITA

MOVWF TRISA

MOVLW B'00000000';INITB

MOVWF TRISB

MOVLW B'00000000';INITC

MOVWF TRISC

BCF STATUS,5 ; BANK 0

;--------------------------- INIT VAR

;----------------- TESTS

MOVLW B'11111111'

MOVWF TMP

;----------------------

; CLRF TMP

CLRF EDINICI

CLRF SOTNI

CLRF DESYATKI

CLRF DINAMIK

CLRF PORTA

CLRF PORTB

CLRF PORTC

MOVLW B'00000111'

MOVWF PORTC

MOVLW B'11111111'

MOVWF CT

MOVLW .120

MOVWF K2

MOVLW .45

MOVWF K1

;--------------------------- INIT STACK

MOVLW 0x40

MOVWF FSR

MOVWF SP

MOVWF SV

;--------------------------- INIT TIMER1

MOVLW B'00111000'

MOVWF TMR1L

MOVLW B'10100111'

MOVWF TMR1H

;------------------------------- INIT TIMER 2

; --------------------------- RUN TIMER1

CLRF T1CON

BSF T1CON,TMR1ON ; TIMER ON

BCF PIR1,TMR1IF

BSF INTCON,GIE

BSF INTCON,PEIE

BSF STATUS,5 ; BANK1

BSF PIE1,TMR1IE

BSF PIE1,TMR2IE

; MOVLW B'00000001'

; MOVWF PIE1

MAIN

;--------------------------------------------- ADC ------------

BCF STATUS,5 ; BANK0

MOVLW B'11000001'

MOVWF ADCON0

BSF ADCON0,2 ; START CONV

CALL BINTOSEVEN

LOOP

BTFSC ADCON0,2

GOTO LOOP

;---------------------------- TEST VALUES

; MOVLW B'1100100' ; POADAET

; MOVLW B'0000000' ; NIJE

MOVLW B'1111111' ; VISHE

MOVWF ADRES

;---------------------------

MOVF ADRES,W

MOVWF TMP

;DELAY ;----5106-CYCLES 1CYCLE=1us

MOVLW .255

MOVWF CT

D2

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DECFSZ CT,1

GOTO D2

COMP

; ----------------- COMPARE -----------

; K1< ADC <K2 ????

;---- K1< ADC ? ----------

BCF STATUS,0

MOVF K1,W

SUBWF TMP,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ ADRES<ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

; ПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO NO

;---- ADC <=K2 ? --------

BCF STATUS,0

MOVF TMP,W

SUBWF K2,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ ADRES>ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

; ПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO NO

;YES

;--------------- TIMER 2 STOP

BCF T2CON,TMR2ON ; TIMER STOP

BSF PORTC,3

BCF PORTC,4

GOTO MAIN

NO

;--------------- TIMER2 ON WITH IMMIDIATLY IRQ

BSF PORTC,4

BCF PORTC,3

CLRF T2CON

BCF PIR1, TMR2IF ; сброс флага переполнения от таймера

BCF T2CON,TMR2ON ; TIMER2 STOP

MOVLW B'11111100'

MOVWF TMR2

BSF T2CON,TMR2ON ; TIMER2 ON

;--------------------------------------------------

GOTO MAIN

; -------------------- DYNAMIC INDICATION PROCEDURE

INDICATION

;----------- RESTORE SP VALUE-----------

MOVF SP,W

MOVWF FSR

;---------------------------------------

MOVF INDF,W

BCF PORTC,0

MOVWF PORTB

CALL DELAY

BSF PORTC,0

INCF FSR,F

MOVF INDF,W

BCF PORTC,1

MOVWF PORTB

CALL DELAY

BSF PORTC,1

INCF FSR,F

MOVF INDF,W

BCF PORTC,2

MOVWF PORTB

CALL DELAY

BSF PORTC,2

INCF FSR,F

;-------------------CALCULATE SP (STACK POINTER)

;---- 5Eh< FSR ? ----------

BCF STATUS,0

MOVLW 0x5E

SUBWF FSR,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO SPFSRNO

MOVLW 0x40

MOVWF FSR

SPFSRNO

;------------ PUSH SP VALUE ----------

MOVF FSR,W

MOVWF SP

RETURN

;---------------------- BINARY TO SEVENSEGMENTS GODE CONVERTION

BINTOSEVEN

; ----------- MUL x2 --------------

clrf SOTNI

clrf DESYATKI

clrf EDINICI

; RLF TMP,1

; BTFSS STATUS,0 ;

; GOTO M1

;

; MOVLW .2

; MOVWF SOTNI

; MOVLW .5

; MOVWF DESYATKI

; MOVLW .6

; MOVWF EDINICI

M1

;----------- convert bin to bcd -------------

; clrf SOTNI

pr0

incf SOTNI,f ;разряд сотен

movlw .100

subwf TMP,f

btfsc STATUS,0

goto pr0

decf SOTNI,f

movlw .100

addwf TMP,F

; clrf DESYATKI

pr1

incf DESYATKI,F ;разряд десятков

movlw .10

subwf TMP,F

btfsc STATUS,0

goto pr1

decf DESYATKI,F

movlw .10

addwf TMP,F

; clrf EDINICI

movf TMP,W

movwf EDINICI

;----------- convert bcd to seven segments code -------------

TTTT

CALL TOSEVEN

MOVWF INDF

Страница:  1  2  3  4  5  6  7 


Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы