Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторна робота № 4.
Система команд AVR: команди маніпуляцій з битами.
Модульне програмування. Підпрограми
Мета роботи: знайомство з командами маніпуляцій з битами, реалізацією підпрограм.
Завдання:
1 . Поспостерігайте роботу програми з прикладу 8 . Яку функцію виконує оператор з SPL , r16 ?
2 . Напишіть підпрограму , яка встановлює прапор Т , якщо виконується умова ( r0.0 ! = R1.7 ) && ( r0.3 == R1.4 ) && R1.2 , і скидає його в іншому випадку .
3 . Напишіть підпрограму , яка виробляє множення двох чисел , що лежать в діапазоні від 0 до 3 , використовуючи таблицю творів.
4 . Напишіть програму , яка налаштовує порт PB.1 як вихід.
5 . Напишіть програму , яка налаштовує Таймер 0 на синхронізацію від тактового сигналу мікроконтролера з коефіцієнтом розподілу 8 .
6 . Намалюйте тимчасову діаграму роботи драйвера 7 - сегментного індикатора D1 на малюнку 5 . Згідно намальованою тимчасовій діаграмі розробіть підпрограму , яка виводить 1 байт даних в драйвер D1.
Виконання роботи
1)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.DSEG
.ORG 0x60
InArr: .BYTE 10
OutArr: .BYTE 10
.CSEG
rjmp Reset
Reset:
ldi r16,0x90
out SPL,r16 ;записывает данные из r16 в SPL
ldi XL,LOW(InArr)
ldi XH,HIGH(InArr)
ldi YL,LOW(OutArr)
ldi YH,HIGH(OutArr)
ldi r17,10
loop:
ld r16,X+
rcall ascii_to_bin
st Y+,r16
dec r17
cpi r17,0
brne loop
rjmp PC
ascii_to_bin:
cpi r16,0x39
brcs atb_m1
subi r16,0x30
rjmp atb_end
atb_m1:
subi r16,0x37
atb_end:
ret
2)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.CSEG
rjmp Reset
Reset:
ldi r20,17
ldi r21,19
mov r0,r17
mov r1,r18
add r0,r1
sbrc r0,1
sbrs r0,1
sbrs r1,7
sbrc r1,7
sbrc r0,3
sbrs r0,3
sbrc r1,4
sbrs r1,4
sbrc r1,2
sbrs r1,2
clt
set
rjmp PC
3)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.CSEG
rjmp Reset
Reset:
ldi r17,2
ldi r18,3
ldi ZH,HIGH(num_of_ones*2)
ldi ZL,LOW(num_of_ones*2)
clr r2
rjmp tt
lpm
rjmp PC
tt:
ldi r20,0x0F
and r17,r20
and r18,r20
mov r21,r17
mov r22,r18
ldi r20,0xF0
and r17,r20
and r18,r20
add r21,r17
add r22,r18
add r21,r22
add ZL,r21
add ZL,r2
lpm
ret
num_of_ones:
.DB 1, 2, 3, 2, 4, 6, 3, 6, 9
4)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.CSEG
rjmp Reset
Reset:
sbi PORTB,0x01
ldi r16,0x01
out DDRB,r16
rjmp PC
5)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.CSEG
rjmp Reset
Reset:
sbi PORTB,0x01
ldi r16,0x01
out DDRB,r16
ldi r16,0x02
out TCCR0,r16
rjmp PC
6)
Лістинг Результат
.INCLUDE "..\appnotes\2313def.inc"
.EQU mosi_bit = 0x4
.EQU miso_bit = 0x3
.EQU sck_bit = 0x5
.EQU ss_bit = 0x6
Rjmp reset
reset:
rjmp spi_ini
i2:
rjmp Ind_select1
i3:
ldi r18,0xFC
rjmp spi_emulation1
i4:
rjmp Ind_unselect1
i5:
rjmp Ind_select2
i6:
ldi r18,0xF2
rjmp spi_emulation2
i7:
rjmp Ind_unselect2
i8:
rjmp PC
spi_ini:
ldi r16,(EXP2(mosi_bit)|EXP2(sck_bit)|EXP2(ss_bit)|EXP2(mosi_bit))
out DDRB,r16
sbi PORTB,ss_bit
sbi PORTB,mosi_bit
cbi PORTB,sck_bit
cbi PORTB,mosi_bit
rjmp i2
spi_emulation1:
ldi r16,0x80
clr r17
spi_m1:
cbi PORTB,mosi_bit
sbrc r18,7
sbi PORTB,mosi_bit
sbi PORTB,sck_bit
lsl r18
sbic PINB,miso_bit
or r17,r16
cbi PORTB,sck_bit
lsr r16
brne spi_m1
rjmp i4
spi_emulation2:
ldi r16,0x80
clr r17
spi_m11:
cbi PORTB,mosi_bit
sbrc r18,7
sbi PORTB,mosi_bit
sbi PORTB,sck_bit
lsl r18
sbic PINB,miso_bit
or r17,r16
cbi PORTB,sck_bit
lsr r16
brne spi_m11
rjmp i7
Ind_select1:
cbi PORTB,ss_bit
rjmp i3
Ind_select2:
cbi PORTB,ss_bit
rjmp i6
Ind_unselect1:
sbi PORTB,ss_bit
rjmp i5
Ind_unselect2:
sbi PORTB,ss_bit
rjmp i8
Висновок: Я ознайомився знайомство з командами маніпуляцій з битами, реалізацією підпрограм.