Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие МИУС.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
865.51 Кб
Скачать

Приложение а. Исходные тексты примеров а.1. Применение метода непосредственного вычисление фал

#include "p16f873a.inc"

org 0

call system_setup

goto main

; Индексы ячеек в ОЗУ, предназначенных для

; хранения промежуточных результатов

EXPR_1: equ H'20'

EXPR_2: equ H'21'

EXPR_3: equ H'22'

EXPR_4: equ H'23'

; Интерфейс ввода/вывода

#define IN_A PORTB, 0

#define IN_B PORTB, 1

#define IN_C PORTB, 2

#define IN_D PORTB, 3

#define OUT_F PORTC, 0

main:

; a || b

movlw 1

btfss IN_A

movlw 0

btfsc IN_B

iorlw 1

movf EXPR_1

; c && b

movlw 1

btfss IN_C

movlw 0

btfss IN_B

andlw 0

movf EXPR_2

; (2) && d

movlw 1

btfss EXPR_2

movlw 0

btfss IN_D

andlw 0

movf EXPR_3

; (1) -> (3)

movlw 0

btfss EXPR_1

movlw 1

btfsc EXPR_3

iorlw 1

movf EXPR_4

; Вывод результата

btfss EXPR_4

bcf OUT_F

btfsc EXPR_3

bsf OUT_F

goto main

#include "hdw_init.inc"

end

А.2. Применение метода бинарных программ

#include "p16f873a.inc"

call system_setup

goto main

; Интерфейс ввода/вывода

#define IN_A PORTB, 0

#define IN_B PORTB, 1

#define IN_C PORTB, 2

#define IN_D PORTB, 3

#define OUT_F PORTC, 0

; Запись результата

out_1:

bsf OUT_F

goto main

out_0:

bcf OUT_F

goto main

; Бинарные переходы

main:

check_a:

btfsc IN_A

goto check_b1

goto check_b2

check_b1:

btfsc IN_B

goto check_c

goto out_0

check_b2:

btfsc IN_B

goto check_c

goto out_1

check_c:

btfsc IN_C

goto check_d

goto out_0

check_d:

btfsc IN_D

goto out_1

goto out_0

#include "hdw_init.inc"

end

А.3. Применение метода адресных переходов а.3.1. Способ размещения таблицы в пзу

#include "p16f873a.inc"

org 0

call system_setup

goto main

; Интерфейс ввода/вывода

#define IN_A PORTB, 0

#define IN_B PORTB, 1

#define IN_C PORTB, 2

#define OUT_F PORTC, 0

OFFSET: equ H'20'

RESULT: equ H'21'

main:

movlw 0

movwf OFFSET

btfsc IN_A

bsf OFFSET, 2

btfsc IN_B

bsf OFFSET, 1

btfsc IN_C

bsf OFFSET, 0

movf OFFSET

fcall lookup_table

movwf RESULT

decfsz RESULT

goto OUT_0

goto OUT_1

OUT_0:

bcf OUT_F

goto main

OUT_1:

bsf OUT_F

goto main

lookup_table:

addwf pcl

retlw 0

retlw 0

retlw 0

retlw 1

retlw 1

retlw 1

retlw 1

retlw 1

#include "hdw_init.inc"

end

А.3.2. Способ размещения таблицы в озу

#include "p16f873a.inc"

org 0

call system_setup

call load_table

goto main

; Интерфейс ввода/вывода

#define IN_A PORTB, 0

#define IN_B PORTB, 1

#define IN_C PORTB, 2

#define OUT_F PORTC, 0

OFFSET: equ H'20'

RESULT: equ H'21'

LOOKUP: equ H'22'

main:

movlw 0 ; Формирование смещения

movwf OFFSET

btfsc IN_A

bsf OFFSET, 2

btfsc IN_B

bsf OFFSET, 1

btfsc IN_C

bsf OFFSET, 0

movf OFFSET

addlw LOOKUP ; Получение значения функции

movwf FSR

movf INDF

movwf RESULT ; Запись результата в выход

decfsz RESULT

goto OUT_0

goto OUT_1

OUT_0:

bcf OUT_F

goto main

OUT_1:

bsf OUT_F

goto main

load_table:

movlw 0

mowvf (LOOKUP+0)

movlw 0

mowvf (LOOKUP+1)

movlw 0

mowvf (LOOKUP+2)

movlw 1

mowvf (LOOKUP+3)

movlw 1

mowvf (LOOKUP+4)

movlw 1

mowvf (LOOKUP+5)

movlw 1

mowvf (LOOKUP+6)

movlw 1

return

#include "hdw_init.inc"

end