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

1.Найти произведение двух 4-разрядных чисел: первое число вводится в РА0 РА3, второе РВ0 РВ3. Результат выводится в порт D.( проверено!!!)



 

1. Найти произведение двух 4-разрядных чисел: первое число вводится в РА0…РА3, второе РВ0…РВ3. Результат выводится в порт D.(проверено!!!)

.include "m8535def.inc"

.cseg

.org 0

reset: ldi r16,0x0F; порты А и В на вход

out DDRA,r16

out DDRB, r16

ser r16; порт D на выход (ser- установить все биты регистра)

out DDRD,r16

main: in r16, PINA; загрузить данные из порта А в регистр 16

in r17, PINB; загрузить данные из порта А в регистр 17

mul r16, r17; беззнаковое умножение двух чисел (логическое =AND)

out PORTD, r16; вывести в порт D

rjmp main

2. Найти сумму двух 4-разрядных чисел: первое число вводится в РА0…РА3, второе РВ0…РВ3. Результат выводится в порт С.(проверено!!!)

 

.include "m8535def.inc"

.cseg

.org 0

reset:

ldi r16,0x0F; порты А и В на вход

out DDRA,r16

out DDRB, r16

ser r16; порт D на выход (ser- установить все биты регистра)

out DDRC,r16

main: in r16, PINA; загрузить данные из порта А в регистр 16

in r17, PINB; загрузить данные из порта А в регистр 17

or r16, r17;логическое сложение двух чисел (если арифметическое то ADC)

out PORTC, r16; вывести в порт D

rjmp main

3. Программа бегущий огонь с использованием программной задержки.

PD5…PD7(проверенно)

.include "m8535def.inc"

.cseg

.org 0

reset:

ldi r16, low (RAMEND)

ldi r17, high (RAMEND)

out spl, r16; установка стека

out sph, r17

 

ldi r16,0xF0; порт D на выход

out DDRD,r16

main: ldi r20, 0x10; PD5

out PORTD, r20

rcall delay

 

ldi r20, 0x20; PD6

out PORTD, r20

rcall delay

 

ldi r20, 0x40; PD7

out PORTD, r20

rcall delay

 

rjmp main

 

delay:;подпрограмма №1

clr r18;очистка регистра r18

met1:

rcall delay1;переход на delay2

inc r18;инкремент r18

cpi r18,0x64;сравнение значения r18 с числом

brne met1;если значение в r18≠200, то переход на met1

ret;иначе – возврат в основную программу

delay1:

clr r19

met2:

rcall delay2

inc r19

cpi r19,0x64

brne met2

ret

delay2:

clr r20

met3:

inc r20

cpi r20,0x64

brne met3

ret

 

4. Программа бегущий огонь с использованием задержки по таймеру PA0…PA4

(проверенно)

include"m8535def.inc"

.org 0

rjmp reset

.org $009

rjmp T0

.cseg

.org 20

reset:

ldi r16,0х00

out TCCR0,r16

ldi r16,$ВА; fзад = 8000000/(kд(256-TCNT0)) = 450

out TCNT0,r16

ldi r16,0х04; kд = 256

out TCCR0,r16

ldi r16,0х01;разрешение прерывания

out TIMSK,r16;по переполнению таймераТ0

 

ldi r16,low(RAMEND);инициализация стека

ldi r17,high(RAMEND)

out spl,r16

out sph,r17

 

ldi r16,0хFF;инициализация портов

out DDRA,r16;порт А выход

clr r25

sei

 

main:

rjmp main

 

T0:

rol r25

out PORTA, r25

ret

 

 

5. Используя динамическую индикацию с программной задержкой вывести число «1309». (проверенно)

 

.include "m8535def.inc"

.cseg

.org 0

reset:

ldi r16,$5F

ldi r17,$02

out spl,r16

out sph,r17

ldi r16,0xFF

out DDRC,r16;порт C устанавливаем полностью на вывод

out DDRD,r16;порт D устанавливаем полностью на вывод



 

;счетный регистр

ldi r21,0x01

 

ldi r22,$06

ldi r23,$4F

ldi r24,$3F

ldi r25,$6F

 

main:

in r17,SREG

rcall delay1

out SREG,r17

rol r21;циклический сдвиг влево через флаг переноса

cpi r21,0x10

brne m1;если лишний сдвиг то вернуть начальное значение

ldi r21,0x01

m1:

out PORTD,r21;на PORTD выводим номер индикатора

cpi r21,0x01;если первый индикатор

brne m2;то выдать на него

out PORTC,r25;соответствующий символ

rjmp main

 

m2:

cpi r21,0x02;если второй индикатор

brne m3

out PORTC,r24

rjmp main

m3:

cpi r21,0x04;если третий индикатор

brne m4

out PORTC,r23

rjmp main

m4:

out PORTC,r22

rjmp main

 

delay1:;подпрограмма №1

clr r18;очистка регистра r18

met1:

rcall delay2;переход на delay2

inc r18;инкремент r18

cpi r18,0x09;сравнение значения r18 с числом

brne met1;если значение в r18≠200, то переход на met1

ret;иначе – возврат в основную программу

delay2:

clr r19

met2:

rcall delay3

inc r19

cpi r19,0x09

brne met2

ret

delay3:

clr r20

met3:

inc r20

cpi r20,0x09

brne met3

ret

 

 

6. Используя динамическую индикацию с задержкой по таймеру вывести число «6543».(проверенно)

; Порт А на вход для задания символов

; Порт С на выход сегментов

; Порт Д на выход для питания индикаторов

 

.include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org 8; прерывание по переполнению таймера Т1

rjmp t1

reset:

ldi r16,$5F

ldi r17,$02

out spl,r16

out sph,r17

ldi r16,0xFF

out DDRC,r16;порт C устанавливаем полностью на вывод

out DDRD,r16;порт D устанавливаем полностью на вывод

 

;инициализация таймера Т1

clr r16

out TCCR1B,r16

out TCCR1A,r16; начальное значение таймера Т1 56124 $DB3C

ldi r21,$DB

ldi r22,$3C

out TCNT1H,r21;fзад = 8000000/(kд(65536-TCNT1)) = 850

out TCNT1L,r22

ldi r16, 0x00; 00 00 00 00

out TCCR1A, r16; срабатывание прерывания по совпадению с каналом В

ldi r16, 0x01; 0000 0001;kд = 1

out TCCR1B, r16; режим работы по переполнению

ldi r16, 0x04

out TIMSK, r16; маска прерывания по переполнению

sei

;счетный регистр

ldi r20,0x01

ldi r16,$7D

ldi r17,$6D

ldi r18,$66

ldi r19,$4F

 

main:

rjmp main

t1:

in r0,SREG;сохраняем значение регистра статуса

ldi r21,$DB

ldi r22,$3C

out TCNT1H,r21

out TCNT1L,r22

 

rol r20;циклический сдвиг влево через флаг переноса

cpi r20,0x10

brne m1;если лишний сдвиг то вернуть начальное значение

ldi r20,0x01

m1:

out PORTD,r20;на PORTD выводим номер индикатора

cpi r20,0x01;если первый индикатор

brne m2;то выдать на него

out PORTC,r19;соответствующий символ

reti

 

m2:

cpi r20,0x02;если второй индикатор

brne m3

out PORTC,r18

reti

m3:

cpi r20,0x04;если третий индикатор

brne m4

out PORTC,r17

reti

m4:

out PORTC,r16

reti

 

 

7. Используя прерывание по переполнению таймера Т0 написать прогу’на генератора прямоугольных 50 Гц импульсов

include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org 9; прерывание по переполнению таймера Т0

rjmp t0

 

reset:

ldi r16,$5F

ldi r17,$02

out spl,r16

out sph,r17

ldi r16,$FF

out DDRC,r16;порт C устанавливаем полностью на вывод

 

;инициализация таймера Т0

ldi r16,0

out TCCR0,r16;начальное значение таймера

ldi r16,$B2;fзад = 8000000/(kд(256-TCNT0)) = 100 Гц

out TCNT0,r16;установка начального значения частоты TCNT0=178 $B2

ldi r16,5;kд = 1024

out TCCR0,r16;установка предделителя частоты

ldi r16,$1;

out TIMSK,r16;разрешение прерывания таймера Т0

SEI;глобальное разрешение прерываний

clr r16

main:

rjmp main

 

t0:

ldi r17,$B2

out TCNT0,r17;установка начального значения частоты TCNT0=178 $B2

com r16

andi r16,1

out PORTC,r16

ret

ldi r16,$0

out TCCR1A,r16

ldi r16,$02

out TCCR1B,r16;начальное значение таймера

ldi r16,$D8;fзад = 8000000/(kд(65536-TCNT1)) = 100 $D8F0

out TCNT1H,r16;установка начального значения частоты TCNT1=55536=$D

ldi r16,$F0;kд = 8

out TCNT1L,r16;установка предделителя частоты

ldi r16,$4;

out TIMSK,r16;разрешение прерывания таймера Т1 по совпадению

SEI;глобальное разрешение прерываний

clr r16

8. Используя прерывание по совпадению таймера Т0 написать прогу’на генератора прямоугольных 1000 Гц импульсов

include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org 13; прерывание по переполнению таймера Т0

rjmp t0

 

reset:

ldi r16,$5F

ldi r17,$02

out spl,r16

out sph,r17

ldi r16,$FF

out DDRC,r16;порт C устанавливаем полностью на вывод

 

;инициализация таймера Т0

ldi r16,0

out TCCR0,r16

out TCNT0,r16;начальное значение таймера

ldi r16,$7D;fзад = 8000000/(kд(256-TCNT0)) = 1000 Гц

out OCR0,r16;установка начального значения частоты OCR0=125 $7D

ldi r16,3;kд = 64

out TCCR0,r16;установка предделителя частоты

ldi r16,$2;

out TIMSK,r16;разрешение прерывания таймера Т0 по совпадению

SEI;глобальное разрешение прерываний

clr r16

main:

rjmp main

 

t0:

ldi r17,0

out TCNT0,r17

com r16

andi r16,1

out PORTC,r16

ret

9. Используя прерывание по совпадению и режим СТС таймера Т1 написать прогу’на генератора прямоугольных 1 Гц импульсов

include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org 6; прерывание по совпадению таймера Т1

rjmp t0

 

reset:

ldi r16,$5F

ldi r17,$02

out spl,r16

out sph,r17

ldi r16,$FF

out DDRC,r16;порт C устанавливаем полностью на вывод

 

;инициализация таймера Т0

ldi r16,$0

out TCCR1A,r16

ldi r16,$0B

out TCCR1B,r16;начальное значение таймера

ldi r16,$30;fзад = 8000000/(kд(65536-TCNT1)) = 1 Гц

out OCR1AH,r16;установка начального значения частоты OCR1A=12500=$30D4

ldi r16,$D4;kд = 64

out OCR1AL,r16;установка предделителя частоты

ldi r16,$10;

out TIMSK,r16;разрешение прерывания таймера Т1 по совпадению

SEI;глобальное разрешение прерываний

clr r16

main:

rjmp main

 

t0:

com r16

andi r16,1

out PORTC,r16

ret

 

 

10. Программа генерации быстрый ШИМ: в порт А дискретно задается скважность от 0 до 255. (проверенно)

 

.include "m8535def.inc"

.cseg

.org 0

rjmp rezet

.org $20

 

rezet:

ldi r16,low(RAMEND)

ldi r17,high(RAMEND)

out spl,r16

out sph,r17

 

ldi r16,0xFF

out DDRB,r16

out PORTA,r16

clr r16

out DDRA,r16

 

;инициализация Т0 в быстром ШИМ режиме

ldi r16,0x6B;Т0 в ШИМ режиме 0110 1011

 

out TCCR0,r16;быстрый ШИМ, сбрасывается в 0, Кд = 8

main:

in r16,PINA

out OCR0,r16

rjmp main

 

11. Программа генерации фазный ШИМ: в порт А дискретно задается скважность от 0 до 255. (проверенно)

.include "m8535def.inc"

.cseg

.org 0

rjmp rezet

.org $20

 

rezet:

ldi r16,low(RAMEND)

ldi r17,high(RAMEND)

out spl,r16

out sph,r17

 

ldi r16,0xFF

out DDRB,r16

out PORTA,r16

clr r16

out DDRA,r16

 

;инициализация Т0 в фазовом ШИМ режиме

ldi r16,0x69;Т0 в ШИМ режиме 0110 1001

 

out TCCR0,r16;быстрый ШИМ, сбрасывается в 0, Кд = 8

main:

in r16,PINA

out OCR0,r16

rjmp main

12. Программа генерации ШИМ в зависимости от значения трех битов РА0…РА2 с использованием Flash памяти. В ячейки памяти записаны произвольные значения скважности. (проверенно)

.include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org $20

reset:

ldi r16,low(RAMEND);стек

out spl,r16

ldi r16,high(RAMEND);или 0х025F

out sph,r16

ldi r16,0xFF;инициализация портов

out DDRB,r16;порт B на вывод

out PORTA,r16;подтягивающие резисторы порта A

clr r16;очистка регистра r16

out DDRA,r16;порт A на ввод

;Т0 в ШИМ режиме

ldi r16,0x6A

out TCCR0,r16

ldi r31,2;старший байт указателя устанавливаем в 1

clr r30

main:

in r16,PINA

andi r16,0x0F;4 младших бита

mov r30,r16

lpm

out OCR0,r0

rjmp main

 

.org 0x100;параметры FLASH памяти

.db 0, 85, 170, 255, 170, 85, 0, 0-если равнобедренный треугольник

.db 0, 36, 72, 108, 144, 180, 216, 255-если треугольник прямоугольный

 

14. В ячейках ОЗУ записать 8 чисел. Вывод их в двоичном коде выполняется в порт С в зависимости от состояния входов РА0…РА2.

(проверенно)

.include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org $20

reset:

ldi r16,0xFF;инициализация портов

out PORTA, r16

out DDRC,r16

clr r16

out DDRA,r16

;запись данных в ОЗУ

ldi r16,0;запишем 0

ldi r17,1;запишем 1

ldi r18,2;запишем 2

ldi r19,3;запишем 3

ldi r20,4;запишем 4

ldi r21,5;запишем 5

ldi r22,6;запишем 6

ldi r23,7;запишем 7

clr r31;установка

ldi r30,$60;начала ОЗУ

ST Z+,r16;записать значение регистра r16 в ячейку памяти

ST Z+,r17;записать значение регистра r17 в ячейку памяти

ST Z+,r18;записать значение регистра r18 в ячейку памяти

ST Z+,r19;записать значение регистра r19 в ячейку памяти

ST Z+,r20;записать значение регистра r20 в ячейку памяти

ST Z+,r21;записать значение регистра r21 в ячейку памяти

ST Z+,r22;записать значение регистра r22 в ячейку памяти

ST Z,r23;записать значение регистра r23 в ячейку памяти

Ldi r31,1

main:

in r30,PINA

andi r30,0x07

ld r16,z

out PORTC,r16

rjmp main

 

15. В 4 ячейках ОЗУ записать цифры от 0 до 3. Составить программу, которая принимает состояние битов РА0…РА1 и выдает на семисегментный индикатор соответствующую цифру. (проверенно)

 

.include "m8535def.inc"

.cseg

.org 0

rjmp reset

.org $20

 

reset:

ldi r16,0xFF;инициализация портов

out PORTA, r16;порт A на ввод

out DDRC,r16;порт C на вывод

out DDRD,r16;порт D на вывод

clr r16;очистка регистра r16

out DDRA,r16;подтягивающие резисторы порта А

;запись данных в ОЗУ

ldi r16,0x3F;код символа 0

ldi r17,0x06;код символа 1

ldi r18,0x5B;код символа 2

ldi r19,0x4F;код символа 3

 

clr r31

ldi r30,$100;установка начала ОЗУ

ST Z+,r16;записать значение регистра r16 в ячейку памяти 0

ST Z+,r17;записать значение регистра r17 в ячейку памяти 1

ST Z+,r18;записать значение регистра r18 в ячейку памяти 2

ST Z,r19;записать значение регистра r19 в ячейку памяти 3

Idi r31,1

main:

in r30,PINA

andi r30,0x03

ld r16,z

out PORTD,r16

out PORTC,rez

rjmp main

16. В 16 ячейках Flash памяти записать цифры от 0 до F. Составить программу, которая принимает состояние битов РВ0…РВ3 и выдает на семисегментный индикатор соответствующую цифру.

 

.include "m8535def.inc"

ldi r16,0x00

out DDRB,r16

ser r16

out DDRD,r16

out DDRC,r16

out PORTD,r16

ldi r31,2

 

main:

in PINB,r30

andi r30, $0F

lpm

out PORTC, r0

rjmp main

.org $100

.db 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71


Дата добавления: 2015-11-04; просмотров: 54 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Минимальное количество баллов, подтверждающих | 

mybiblioteka.su - 2015-2024 год. (0.054 сек.)