Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
zontik24
9 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 386
1

Проверка работы программы с внешними прерываниями

20.12.2016, 00:10. Просмотров 190. Ответов 1
Метки нет (Все метки)

Здравствуйте, пишу небольшую подпрограммку: крутится цикл от 0 до 100, по int0 нужно записать 10 значений счетчика цикла в память, по int1 - вывести в portD все четные/нечетные адреса, т.е адрес с 2,4,6,8,10

Так вот: не могу понять, правильно ли все выводится, в программировании мк я джун зеленый - поэтому прошу подсобить



Реализовал так (ничего сложного, почти весь код-первоначальная настройка)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
.device ATMega8
.nolist
.include "m8def.inc"
.list
 
.def temp = r16
.def loop_counter = r17
 
.org $0000
    rjmp reset
    rjmp go_int1
    rjmp go_int0
.org $000C
    rjmp goUDR
 
reset:
    ldi temp, low(ramend)
    out spl, temp
    
    ldi temp, high(ramend)
    out sph, temp
    
    ldi temp, 0
    out ddrb, temp
 
    ldi temp, 0b11110000
    out ddrd,temp
 
    ldi temp, 0
    out ucsra, temp
 
    ldi temp, 0b11111000
    out ucsrb, temp
 
    ldi temp, 0b1000110
    out ucsrc, temp
 
    ldi temp, 207
    out ubrrl, temp
 
    ldi temp, 0b1100000
    out gimsk, temp
 
    ldi loop_counter, 0
 
    sei
 
start:
    rjmp infinit_loop
 
infinit_loop:
    cpi loop_counter, 0
    rjmp loop
    rjmp end
 
loop:
    ldi temp, 1
    add loop_counter, temp
    ldi temp, 100
    cpse loop_counter, temp
    rjmp loop
    rjmp exit_loop
 
exit_loop:
    ldi loop_counter, 0
    rjmp end
 
go_int0:
    sei
    ldi r27, $01
    ldi r26, $00
    st X, loop_counter
 
 
int_loop_0:
    inc r26
    inc loop_counter
    st X, loop_counter
    ldi temp, $9
    cpse r26, temp
    rjmp int_loop_0
    reti
 
 
go_int1: ; блок провеки на четность и зансение в портД (и в удр)
    sei
    sbrs r16, 0 ; четность
    ld temp, X
    cpi temp, 10 ; до десяти считаем
    brge exit_int1
    out udr, temp
    out portd, temp
 
int_loop_1:
    inc r26
    inc loop_counter
    st X, loop_counter
    ldi temp, $9
    cpse r26, temp
    rjmp int_loop_1
    reti
 
exit_int1:
    reti
 
goUDR: ; этот блок лишний т.к вывожу в int1 в udr
    sei
    out UDR, temp
    reti
 
end:
    rjmp start
В приложении результат вывода в portD

П.С : Может есть решение данной задачи "в лоб"? Хотя и тут вроде все просто.
0
Миниатюры
Проверка работы программы с внешними прерываниями  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2016, 00:10
Ответы с готовыми решениями:

Проблема с внешними прерываниями
Написал две одинаковые программы на С и Asm. На С все работает, как надо. А на...

проблема с внешними прерываниями мега32
Здравствуйте уважаемые! в МК я новичок,что я делаю не так? В протеусе все...

БЛОК_СХЕМА ПРОГРАММЫ С ПРЕРЫВАНИЯМИ
Пишу блок-схему алгоритма программы микроконтроллера. В программе возникают 2...

Работа с прерываниями
Привет всем :D Недавно начал сного программировать МК, до этого писал всякую...

Проблемы с прерываниями
Граждане, помогите с проблемой, несколько часов ломаю голову не могу осилить: ...

1
zontik24
9 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 386
20.12.2016, 22:03  [ТС] 2
Т.е, чтобы выводились из цикла значения так (в лоб)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ldi r16, 0x02
out portd, r16
 
ldi r16, 0x04
out portd, r16
 
ldi r16, 0x06
out portd, r16
 
ldi r16, 0x08
out portd, r16
 
ldi r17, 0x0A
out portd, r16
По идее, команда
Assembler
1
sbrs r16, 0
Должна выполнять данное условие
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2016, 22:03

помогите с прерываниями
#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> ...

Пробема с прерываниями
Добрый вечер! Прошу помощи в решении проблемы. Имеется контроллер...

Работа с прерываниями Atmega16
Здравствуйте, недавно с али пришла мне долгожданная железка Atmega16A. Помигал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru