#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 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.