Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit_z_laboratornikh_robit_Samoylenko.docx
Скачиваний:
8
Добавлен:
05.02.2016
Размер:
40.11 Кб
Скачать

Лабораторна робота №5.

Тема: Реалізація перетворення сигналів типу «ширина імпульсу» та «частота» в цифровий код .

Мета: Навчитись використовувати різні режими роботи таймерів/лічильників, та закріпити знання з теоретичного курсу.

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

.include "8515def.inc"

;***** Регистровые переменные

.def tmp1 = r16 ; Рабочий регистр 1

.def tmp = r17 ; Рабочий регистр 2

.def prm1 = r18 ; Передаваемый параметр

.def time = r19 ; Счетчик цикла 1

.def counter = r20 ; Счетчик цикла 2

.def flag = r21 ; Вспомогательный счетчик

.def d100=r22

.def d10=r23

.def d1=r24

.def Resl=r25

.def resh=r26

.cseg

rjmp init

;rjmp int0_int

reti

reti

reti

reti

reti

reti

reti

;rjmp int0_int

reti

reti

reti

reti

reti

reti

init:

Ldi R16, Low(RamEND)

Ldi R16, High(RamEND)

out SPl, R16

out SPh, R16

in R16, $35

ori R16, 0x80

out $35, R16

clr time

sts 0xA004, time

ser time

sts 0xf000, time

ldi time,16

ldi tmp, 05

out TCCR0, tmp ; передільник1/1024

ldi tmp, 02

out timsk, tmp

out tcnt0, time передустановка таймера

sei

;go0:

;sbis PinD,4 ; лог. 1 на вході PinD,4?

;rjmp go0 ; ні на go0

;sbis PinD,4 ; перевіримо ще раз

;rjmp go0

;inc Count ;значить 1, імпульс почався

;sbrs counter,3 ;Перевіряє чи лічильник = 3?

;rjmp go ; ні, на go1

;sbrs counter, 1 ;Перевіряє чи лічильник = 3?

;rjmp go1 ; ні, на go1

;andi counter, 0xf0 ; лічильник = f0

;subi counter, -0x10 ; - 10

;go1:sbic PinD,4 ;лог. 0 на вході PinD,4?

;rjmp go1 ;якщо 1 на go1

;rjmp go0 ;0 на go0

do: ;робочий цикл

do0: sbis PinD,4 ; лог. 1 на вході PinD,4?

rjmp do0 ;ні -чекаємо

ldi tmp, 0x2 ;так – команда вкл. Т1

out TCCR1B,tmp ;в регістр управління таймером 1

D1: sbic PinD,4 ;імпульс закінчено?

rjmp D1 ; ні –чекаємо

sbic PinD,4 ;перевіримо ще раз

rjmp D1

clr tmp ;очистить регістр tmp

out TCCR1B,tmp ;зупинити таймер 1

in ResL, TCNT1L ;читаємо результат

in ResH, TCNT1H

out TCNT1H, tmp ;очистити регістри лічильника

out TCNT1L, tmp

sts 0xb000,ResL ;результат – на дисплей

sts 0xa000,ResH

rjmp do ;повторити

;int0_int: ;використовуємо 2 переривання

;inc Flag ;збільшити на 1

;cpi flag,2 ;вже два?

;brlo l1 ;ні - продовжимо

;hex_to_BCD:

; clr D100

; clr d10

; clr d1

;Div100: Cpi R20, 100

; brlo div10

; subi R20,100

; inc d100

; rjmp Div100

;Div10: Cpi R20, 10

; brlo div1

; subi R20,10

; inc d10

; rjmp Div10

;Div1: mov d1,r20

;mov r4, D10

;swap d10

;add d10, d1

;sts 0xa000, d10

; clr counter ;очистить лічильник импульсів

clr flag ;очистити лічильник переривань

sts 0xa000,Res ;результат підрахунків на дисплей

l1: out TCNT0, Time ;перед установка таймеру

reti ;повернення з переривання

Лабораторна робота №6.

Тема: Формування аналогових сигналів керування виконавчими механізмами.

Мета: Навчитись керувати аналоговими ВМ з використанням ЦАП та широтно імпульсної модуляції.

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

.include "8515def.inc"

;***** Регистровые переменные

.def tmp1 = r16 ; Рабочий регистр 1

.def tmp = r17 ; Рабочий регистр 2

.def prm1 = r18 ; Передаваемый параметр

.def time = r19 ; Счетчик цикла 1

.def counter = r20 ; Счетчик цикла 2

.def flag = r21 ; Вспомогательный счетчик

.def d100=r22

.def d10=r23

.def d1=r24

.def Resl=r25

.def resh=r26

.cseg

rjmp init_PWM

reti

reti

reti

reti

reti

rjmp int0_int

reti

reti

reti

reti

reti

Init_PWM:

Ldi R16, Low(RamEND)

Ldi R16, High(RamEND)

out SPl, R16

out SPh, R16

in R16, $35

ori R16, 0x80

out $35, R16

ldi tmp,0x81 ;TCCR1A (bit1,0) pwm11 =0, pwm10=1

;8bit, TOP=255 період 0,52мс дельник 1:1

;TCCR1A bit7 COM1A1=1 COM1A0=0

; COM1В1=0 COM1В0=0 тільки А

;pwm11 =0,pwm10=1 10bit,TOP=1023 ;f=1/2043 T/C1 період 2мс

ldi tmp,0xA1 ;TCCR1A (bit1,0) pwm11 =0, pwm10=1

;8bit, TOP=255 період 0,52мс дільник 1:1

;TCCR1A cт.тетрада COM1A1=1 COM1A0=0

;COM1В1=1 COM1В0=0 ШІМ А і В одночасно

;pwm11 =1, pwm10=1 10bit,TOP=1023 ;f=1/2043 T/C1 період 2мс

out TCCR1A, tmp

ldi tmp,01 ; дільник 1:1 мл. 3 біти СS02,CS01=0 CS0=1

; ldi tmp,02 ; дільник 1:8 3 біти СS02=0 CS01=1 CS0=0

;(період 4,5мс при 8біт ШІМ)

; ldi tmp,03 ; дільник 1:64 3 біти СS02=0 CS01=1 CS0=1

;(період 35 мс при 8біт ШІМ)

out TCCR1b, tmp ;значення в регістр

ldi tmp, 0 ;задаємо ст.байт ШІМ

out OCR1BH,tmp ;в регістр порівняння ШІМ В

ldi tmp, 0x0f ;молодший байт ШІМ

out OCR1Bl,tmp ;в регістр порівняння В

ldi tmp, 0 ;ст. байт ШІМ А

out OCR1aH,tmp ;в регістр порівняння А

ldi tmp, 0x0f ;молодший байт

out OCR1Al,tmp ;в молодший регістр порівняння А

out DDRD,tmp ;на вихід

out PortD,tmp

do:

rjmp do

int0_int:

inc flag

cpi flag, 18

brlo l1

hex_to_BCD:

clr D100

clr d10

clr d1

Div100: Cpi R20, 100

brlo div10

subi R20,100

inc d100

rjmp Div100

Div10: Cpi R20, 10

rjmp Div10

Div1: mov d1,r20

mov r4, D10

swap d10

add d10, d1

sts 0xa000, d10 ;результат підрахунків на дисплей

clr flag ;очистити лічильник переривань

clr counter ;очистити лічильник

l1: out TCNT0, Time ;перед установка таймеру

reti ;повернення з переривання

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]