Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторна робота № 5.
Переривання. програмні автомати
Мета роботи: знайомство з організацією системи переривань, програмною реалізацією автоматів за допомогою мікроконтролерів.
Завдання:
1 . Налаштуйте Таймер 0 на синхронізацію із заданою частотою FCLK0 , формованої з тактової частоти мікроконтролера FOSC . Обробник переривання по переповнення Таймера 0 повинен формувати два періодичних сигналу з шпаруватістю S = 2 і заданими періодами Т (див. таблицю 5).
2 . Налаштуйте Таймер 1 на формування переривання від вихідного порівняння і синхронізацію із заданою частотою FCLK1 , формованої з тактової частоти мікроконтролера FOSC . Оброблювач переривання від вихідного порівняння повинен забезпечити формування на виході ОС1 сигналу з шпаруватістю S = 4 і періодом Т (див. таблицю 5).
Таблица 5. Исходные данные для заданий 1 и 2
Варіиант |
Дані для завдання 1 |
Дані для завдання 2 |
|||
FCLK0 |
T для PB.3 |
T для PB.2 |
FCLK1 |
T для OC1 |
|
1 |
FOSC |
FOSC/256 |
FOSC/2560 |
FOSC/64 |
FOSC/6400 |
2 |
FOSC/8 |
FOSC/16384 |
FOSC/2048 |
FOSC/8 |
FOSC/20000 |
3 |
FOSC/64 |
FOSC/16384 |
FOSC/32768 |
FOSC |
FOSC/8000 |
4 |
FOSC/256 |
FOSC/262144 |
FOSC/65536 |
FOSC/8 |
FOSC/8000 |
5 |
FOSC/1024 |
FOSC/262144 |
FOSC/1048576 |
FOSC/64 |
FOSC/25600 |
3. Налаштуйте Таймер 1 на роботу в режимі 10-розрядного ШІМ з частотою синхронізації рівній тактовою частотою мікроконтролера FOSC. Оброблювач переривання від вихідного порівняння повинен забезпечувати лінійну зміну скважности ШІМ-сигналу.
4. Розробіть програму, яка за допомогою періодичного переривання реалізує динамічну індикацію для схеми на малюнку 5 - відображає в 16-ричном вигляді значення 8-розрядної змінної.
Виконання роботи
1) Таймер 0
Лістинг Результат
.include "..\Appnotes\2313def.inc"
.EQU NTau = 122
.EQU NRem = 18
.EQU A_LINE = 0
.EQU B_LINE = 1
.DEF Counter = r17
.DSEG
.ORG 0xc0
stack: .BYTE 0x10
.EQU sp_ini = stack+0x0f
.CSEG
.ORG 0x00
rjmp RESET
.ORG 0x06
rjmp OVR0_isr
RESET:
ldi r16,sp_ini
out SPL,r16
sbi PORTB,A_LINE
ldi r16,0x07
out DDRB,r16
clr r16
out TCNT0,r16
ldi r16,0x01
out TCCR0,r16
ldi r16,0x02
out TIMSK,r16
clr Counter
sei
rjmp PC
OVR0_isr:
in r16,SREG
push r16
inc Counter
cpi Counter,NTau
brlo OVR0_end
brne OVR0_0
rjmp OVR0_end
OVR0_0:
ldi r16,256-NRem
out TCNT0,r16
sbis PORTB,A_LINE
rjmp OVR0_m1
cbi PORTB,A_LINE
sbi PORTB,B_LINE
rjmp OVR0_end
OVR0_m1:
ldi r16,256-NRem/10
out TCNT0,r16
sbis PORTB,B_LINE
cbi PORTB,B_LINE
sbi PORTB,A_LINE
rjmp OVR0_end
OVR0_end:
pop r16
out SREG,r16
reti
2) Таймер 1
Лістинг
.include "..\Appnotes\2313def.inc"
.EQU NTau = 122
.EQU A_LINE = 0
.DEF Counter = r17
.DSEG
.ORG 0xc0
stack: .BYTE 0x10
.EQU sp_ini = stack+0x0f
.CSEG Результат
.ORG 0x00
rjmp RESET
.ORG 0x06
rjmp OVR0_isr
RESET:
ldi r16,sp_ini
out SPL,r16
sbi PORTD,A_LINE
ldi r16,0x07
out DDRD,r16
clr r16
out TCNT1L,r16
ldi r16,0x03
out TCCR1B,r16
ldi r16,0xC0
out TIMSK,r16
ser r16
out ocr1al,r16
ldi r16,4
out ocr1al,r16
clr Counter
sei
rjmp PC
OVR0_isr:
in r16,SREG
push r16
inc Counter
cpi Counter,NTau
brlo OVR0_end
brne OVR0_0
ldi r16,0
out TCNT1L,r17
ldi r16,25
out TCNT1H,r16
rjmp OVR0_end
OVR0_0:
cbi PORTD,A_LINE
rjmp OVR0_end
OVR0_end:
pop r16
out SREG,r16
reti
3) Таймер 1 на роботу в режимі 10-розрядного ШИМ
Лістинг
.include "..\Appnotes\2313def.inc"
.EQU NTau = 122
.EQU A_LINE = 0
.DEF Counter = r17
.DSEG
.ORG 0xc0
stack: .BYTE 0x10
.EQU sp_ini = stack+0x0f
.CSEG
.ORG 0x00
rjmp RESET
.ORG 0x06
rjmp OVR0_isr Результат
RESET:
ldi r16,sp_ini
out SPL,r16
sbi PORTD,A_LINE
ldi r16,0x07
out DDRD,r16
clr r16
out TCNT1L,r16
ldi r16,0x03
out TCCR1A,r16
ldi r16,0x01
out TCCR1B,r16
ldi r16,0xC0
out TIMSK,r16
ser r16
out ocr1al,r16
ldi r16,4
out ocr1al,r16
clr Counter
sei
rjmp PC
OVR0_isr:
in r16,SREG
push r16
inc Counter
cpi Counter,NTau
brlo OVR0_end
brne OVR0_0
ldi r16,0
out TCNT1L,r17
ldi r16,25
out TCNT1H,r16
rjmp OVR0_end
OVR0_0:
cbi PORTD,A_LINE
rjmp OVR0_end
OVR0_end:
pop r16
out SREG,r16
reti
4) Ддинамічна індикація
Лістинг Результат
.include "..\Appnotes\2313def.inc"
.EQU mosi_bit = 0x4
.EQU miso_bit = 0x3
.EQU sck_bit = 0x5
.EQU ss_bit = 0x6
.DSEG
.ORG 0xc0
stack: .BYTE 0x10
.EQU sp_ini = stack+0x0f
.CSEG
.ORG 0x00
rjmp RESET
.ORG 0x06
rjmp OVR0_isr
RESET:
ldi r16,(EXP2(mosi_bit)|EXP2(sck_bit)|
EXP2(ss_bit)|EXP2(miso_bit))
out DDRD,r16
sbi PORTD,ss_bit
sbi PORTD,miso_bit
cbi PORTD,sck_bit
cbi PORTD,mosi_bit
ldi ZH,HIGH(time*2)
ldi ZL,LOW(time*2)
ldi r16,sp_ini
out SPL,r16
ldi r16,0x07
out DDRB,r16
clr r16
out TCNT0,r16
ldi r16,0x01
out TCCR0,r16
ldi r16,0x02
out TIMSK,r16
clr Counter
sei
rjmp PC
OVR0_isr:
lpm
adiw ZL,1
ldi r16,0x80
clr r17
spi_m1:
cbi PORTD,mosi_bit
sbrc r0,7
sbi PORTD,mosi_bit
sbi PORTD,sck_bit
lsl r0
sbic PIND,miso_bit
or r17,r16
cbi PORTD,sck_bit
lsr r16
brne spi_m1
reti
time: .DB 0xFC,0x60,0xDA,0xF2
Висновок: Я ознайомився з організацією системи переривань, програмною реалізацією автоматів за допомогою мікроконтролерів.