Проектирование радиоприемного устройства. Расчет структурной схемы линейного тракта, страница 15

#include<p16f84.inc>

; присвоение имен регистрам

UPRAVL_SLOVO1   equ H’10’

UPRAVL_SLOVO2   equ H’11’

UPRAVL_SLOVO3   equ H’12’

SCHET_SDVIG1       equ H’13’

PROV_CIKL              equ H’14’

S_TEMP                     equ H’15’

W_TEMP                   equ H’16’

PROM1_ML              equ H’17’

SCHET_ED               equ H’18’

SCHET_DES             equ H’19’

REG_IND                  equ H‘1A’

ZADERG1                 equ H’1B’

ZADERG2                 equ H’1C’

PRR                            equ H’1D’

MASK_A                   equ H’85’

MASK_B                   equ H’86’

;вкл. в программу файл контроллера

; регистры

;управляющего

;слова

;регистр счета количества циклов сдвига

;регистр проверки выполнения цикла

;регистр для времен. хран. рег.STATUS

;регистр временного хранения рег. W

;рег. счета единиц для мл. разр. Инд.

;рег. счета десятков для ст.разр. инд.

;регистр индикации

;регистр задержки 1

;регистр задержки 2

;регистр проверки прерывания (бит 0)

;регистр маски порта А

;регистр маски порта Б

org

goto

org

goto

0*00

start

0*04

PRER

;начало программы, вектор сброса

;переход на метку

;вектор прерывания, начало прерыв.

;переход на метку

start

bsf

STATUS, RP0

;перейти в 1 банк памяти

сlrf

clrf

MASK_A

MASK_B

;очистить регистры настройки портов А и В (обнулить)

movlw

B’11110000’

;настроить RB7…RB4 на ввод информа-

movwf

MASK_B

;ции, RB3…RB0 на вывод.

bcf

STATUS, RP0

;перейти в 0 банк памяти

movlw

B’10001000’

;разрешить прерывание по изменению

movwf

INTCON

;сигнала на RB7…RB4

bcf

STATUS, Z

;обнулить бит Z (zero)

movlw

B’11100000’

;запись

;начальных

;значений

;в регистры

;управляющего слова

movwf

UPRAVL_SLOVO3

movlw

B’00001100’

movwf

UPRAVL_SLOVO2

movlw

B’10110101’

movwf

UPRAVL_SLOVO1

clrf

SCHET_SDVIG1

;обнуление регистра

bcf

STATUS, Z

;обнуление бита Z

UST_CE

bsf

PORT_A, 2

;уст. Высокий уровень на линии СЕ

goto

SDVIG_SLOVA1

;переход на метку

SDVIG_SLOVA1

incf

SCHET_SDVIG1,f

;нач. сдвига слова,+1 в рег. Сч. сдвига

movf

SCHET_SDVIG1,w

;сохранить регистр в W

sublw

B’00001001’

;проверка на количество сдвинутых

btfsc

STATUS, Z

;битов, если сдвинуты не все биты, то

goto

OH2

; пропуск goto, если сдвинуты не все

bsf

PORT_A, 1

;биты, то уст. Лог.1 на линии CL

rrf

UPRAVL_SLOVO1,f

;сдвиг бита регистра

btfsc

STATUS, C

;считывание бита С, через который

goto

UST_ODIN1

;производится

bcf

PORT_A, 0

;сдвиг в соответствии с результатом в

goto

PROD_SDVIG1

;бите С устанавливается лог1 или лог0

UST_ODIN1

bsf

PORT_A, 0

;на линии D

bcf

STATUS, C

;очистить бит С

bcf

STATUS, Z

;очистить бит Z

goto

PROD_SDVIG1

;переход на метку

PROD_SDVIG1

nop;

;пустая команда

nop;

;обеспечение

nop;

;небольшой

nop;

;задержки

bcf

PORT_A, 1

;сброс в 0 линии CL

goto

SDVIG_SLOVA1

;переход на метку

OH2

clrf

SCHET_SDVIG1

;обнулить регистр

bcf

STATUS, Z

;обнулить бит Z

bcf

STATUS, C

;обнулить бит С

goto

SDVIG_SLOVA2

;переход на метку

SDVIG_SLOVA2

incf

SCHET_SDVIG1,f

;далее по программе повторяется

movf

SCHET_SDVIG,w

;предыдущее действие по сдвигу

sublw

B’00001001’

;байтов слова управления с байтами

btfsc

STATUS, Z

;2 и 3

goto

OH3

;

bsf

PORT_A, 1

;

rrf

UPRAVL_SLOVO2,f

;

btfsc

STATUS, C

goto

UST_ODIN2

bcf

PORT_A, 0

goto

PROD_SDVIG2

UST_ODIN2

bsf

PORT_A, 0

bcf

STATUS, C

bcf

STATUS, Z

goto

PROD_SDVIG2

PROD_SDVIG2

nop;

nop;

nop;

nop;

bcf

PORT_A, 1

goto

SDVIG_SLOVA2

OH3

clrf

SCHET_SDVIG1

bcf

STATUS, Z

bcf

STATUS, C

goto

SDVIG_SLOVA3

SDVIG_SLOVA3

incf

SCHET_SDVIG1,f

movf

SCHET_SDVIG,w

sublw

B’00001001’

btfsc

STATUS, Z

goto

KONEC_SDVIG

bsf

PORT_A, 1

rrf

UPRAVL_SLOVO3,f

btfsc

STATUS, C

goto

UST_ODIN3

bcf

PORT_A, 0

goto

PROD_SDVIG3

UST_ODIN3

bsf

PORT_A, 0

bcf

STATUS, C

bcf

STATUS, Z

goto

PROD_SDVIG3

PROD_SDVIG2

nop;

nop;

nop;

nop;

bcf

PORT_A, 1

goto

SDVIG_SLOVA3

KONEC_SDVIG

clrf

SCHET_SDVIG1

;завершение сдвига 3 байтов слова

bcf

STATUS, Z

;управления

bcf

PORT_A, 2

;уст. Лог 0 на линии СЕ

bcf

STATUS, C

;обнулить бит С

goto

 PR_INDICACIJA

;переход на метку

PR_INDICACIJA

btfss

PRR, 0

;проверка байта выполнения прерыв.

goto

INDICACIJA

;если прерывание было, то переход по

clrf

PRR

;метке UST_CE, если не было

bcf

STATUS, Z

;переход к индикации

bcf

STATUS, C

;

goto

UST_CE

;

INDICACIJA

movf

SCHET_ED, w

;сохранить регистр в рег W

movwf

REG_IND1

;записать W в регистр

movlw

B’11110000’

;const в рег W

addwf

REG_IND1, w

;сложить W с регистром

movwf

PORT_B

;переслать W в PORT_B

bsf

PORT_A, 4

;уст. Лог1 на мл. разряде индикатора

bcf

STATUS, C

;обнулить бит С

goto

NACH_Z1

;переход на метку

NACH_Z1

incf

ZADERJ1

;начало 20 мс задержки

btfss

STATUS, C

;проверка переполнения рег. Задержки

goto

NACH_Z1

; уйти на метку если не было переполн.

bcf

STATUS, C

;обнулить бит С

clrf

ZADERJ1

;очистить регистры

incf

ZADERJ2

;задержки

btfss

ZADERJ2, 5

;проверить на переполнен. рег. Задерж

goto

NACH_Z1

;переход на метку, если не переполнен

clrf

ZADERJ1

;очистить регистры

clrf

ZADERJ2

;задержки

bcf

PORT_A, 4

;уст. Лог 0 на мл. индикаторе

movlw

B’11110000’

; запись const в рег. W

movwf

PORT_B

;записать W в PORT_B

bcf

STATUS, C

;обнулить

bcf

STATUS, Z

;биты Z и С

goto

PROD_IND

;переход на метку

PROD_IND

movf

SCHET_DES, w

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

movwf

REG_IND1

;старшего разряда по сценарию

movlw

B’11110000’

;предыдущего

addwf

REG_IND1,w

movwf

PORT_B

bsf

PORT_A,3

bcf

STATUS, C

goto

NACH_Z2

NACH_Z2

incf

ZADERJ1

btfss

STATUS, C

goto

NACH_Z2

bcf

STATUS, C

clrf

ZADERJ1

incf

ZADERJ2

btfss

ZADERJ2, 5

goto

NACH_Z2

clrf

ZADERJ1

clrf

ZADERJ2

bcf

PORT_A, 3

movlw

B’11110000’

movwf

PORT_B

bcf

STATUS, C

bcf

STSTUS, Z

goto

INDICACIJA

end