Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Модифицированная рабочая программа с подробным комментарием.

Блок-схема алгоритма программы.

 

Рис. 1. Блок-схема алгоритма программы.

 

Модифицированная рабочая программа с подробным комментарием.

 

; Работа №2 АНТАКОВ Д. В. БАБИКОВ Д. Р.

; PIC16F876 4мГц

; Формат выводимых данных на ЦАП: RB7 - знак, RB6-0 - модуль

; Бит защиты_CP, сторож_WDT, таймер сброса по пит._PWRTE, кварц_HS_OSC

list p=16F876

include " p16F876.inc"

; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

; Определить псевдооператорами EQU названия и биты клавиш.

; -------- Константы --------

Tim1 equ.190; Код задержки 1 (01-FF)

Tim2 equ.3; Код задержки 2 (01-FF)

Tim3 equ.10; Код задержки 3 (01-FF)

Tim4 equ.1; Код задержки 4 (01-FF)

Um equ.115; Um

Nm equ.9; максиматьное число аргумента

; ---------- биты инициализации портов ----------

; b'76543210'; № бита

INIT_A equ b'11111111'; ввод - 1

INIT_C equ b'00000000'; вывод - 0

; ---------- Блок регистров общего назначения (РОН) с 20h по 7Fh ----------

cblock 0x20; начало блока РОН

count1, count2, step, sign; список переменных

endc; конец блока РОН

; -------- Макросы (см.ЛР2)----------

Bank0 macro

bcf STATUS, RP0

bcf STATUS, RP1

endm

Bank1 macro

bsf STATUS, RP0

bcf STATUS, RP1

endm

; ----------- Программа ------------------

ORG 0h; начало программы

goto start

; -------- Прерывания --------

; org 4h; вектор прерывания

; goto inthlr; переход к прерыванию (если есть)

; ---------- инициализация PIC ----------

start clrf PORTA; PORTA=0

clrf PORTC; PORTВ=0

Bank1; Банк 1 с TRIS

movlw INIT_C;

movwf TRISC; TRIS

Bank0; Банк 0 (PORT)

clrf step; step=0

main nop; начало цикла

clrf sign; +sign, знак (+)

call modul; Fn1, Time 1

bsf sign, 7; -sign, знак (-)

call modul; Fn1, Time 1

goto main+1

;

; ------------ подпрограммы ------------------

; Вх: sign=0, знак (+); sign=1, знак (-)

; Вых: sign+modul = (знак+модуль)

modul nop

call Fn1; Fn1 - табличная функция с Time 1

movlw Tim2; w=Time 2

call time2; п.п. времени с 2 байтами

call Fn2; Fn2 - линейная убывающая функция с Time 3

movlw Tim4; w=Time 4

call time2; п.п. времени с 2 байтами

return

; Вх: step - аргумент, Вых: PORTB - табличная функция. (знак+модуль)

Fn1 clrf step

movf step, w; step-> w

CALL TABLE; y=Sin(x)

addwf sign, W; (sign+W)-> W со знаком

movwf PORTC; в порт

movlw Tim1; w=Time

call time1; п.п. времени 1

incf step, f; step+1

movlw Nm; Nm

subwf step, w

btfsc STATUS, C; If step> 9

return; возврат

goto Fn1+1; цикл

; таблица перекодировки функции y=F(w)

; Bx: w = step - аргумент; Bыx: w = F(w) - функция

TABLE addwf PCL, f; градусы

retlw.0; 0

retlw.21; 10

retlw.41; 20

retlw.60; 30

retlw.77; 40

retlw.92; 50

retlw.104; 60

retlw.113; 70

retlw.118; 80

retlw.120; 90

; Вх: Um - максимальное значение аргумента,

; Вых: PORTB - линейная убывающая функция. (знак+модуль)

Fn2 movlw Um; Um

movwf step; w-> step

movf step, w; step-> w

addwf sign, W; (sign+W)-> W со знаком

movwf PORTC; w-> PORTB

movlw Tim3; w=Time

call time1; п.п. времени 1

decfsz step, 1; step-1

goto Fn2+2

return

; Вх: Um - максимальное значение аргумента,

; Вых: PORTС - линейная нарастающая функция. (знак+модуль)

Fn3 clrf step

movf step, w; step-> w

addwf sign, W; (sign+W)-> W со знаком

movwf PORTC; в порт

movlw Tim4; w=Time

call time1; п.п. времени 1

incf step, f; step+1

movlw Um; Um

subwf step, w

btfsc STATUS, C; If step> 9

return; возврат

goto Fn3+1; цикл

; ----------- пп time1 - 1 байт ---------------------------

; Bx: w = код выдержки времени 1 (1-255)

time1 movwf count1; w-> count1

decfsz count1, f; count1-1, если < > 0

goto time1+1; цикл_1

return; возврат

; ----------- пп time2 - 2 байта ------------------------

; Bx: w = код выдержки времени 2 (01-255)

time2 movwf count2; w-> count2

movlw 0FFh; w=0FFh

call time1; п.п. time1

decfsz count2, f;

goto time2+1; цикл_2

return; возврат

END

 

<== предыдущая лекция | следующая лекция ==>
Титовская Н.В. | ОТЧЕТ по БУГИ-ВУГИ
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал