Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Zodi
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 9
1

Прога для atmega16

23.10.2018, 12:34. Просмотров 3501. Ответов 11
Метки нет (Все метки)

Нужна прога для отображения передвижения трех светодиодов подключенных к порту МК.
Направление движения изменяется на противоположное, нажатием одной (любой) кнопки на основной плате.
Плохо разбираюсь в теме, поэтому был бы рад помощи
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2018, 12:34
Ответы с готовыми решениями:

ПО для AVR МК Atmega16
помогите кто чем может

Программа для ATMega16
Написал программу управления 7-ми сегментным индикатором, но проблема в том что всегда горит первое...

USART для Atmega16
Здравствуйте, возникла проблема с инициализацией USORT для atmega16. Собственно сама...

Двоичный счетчик на Си для atmega16
Нужно построить в avr studio на Си программу для atmega16. Суть программы заключается в...

Выполнить деление для atmega16
AVR atmega16 Z=33orX/(Y+1) X-PORTD Y-portb Z-portc .equ PORTA = $1B .equ DDRA = $1A .equ...

11
COKPOWEHEU
1103 / 777 / 181
Регистрация: 09.09.2017
Сообщений: 3,373
23.10.2018, 13:25 2
Цитата Сообщение от Zodi Посмотреть сообщение
для отображения передвижения трех светодиодов подключенных к порту МК
Передвижения светодиодов? Куда же это они с платы передвигаются и чем отслеживать их передвижение?
Или имелся в виду обычный бегущий огонь?
Что куда подключено?
P.S. В любом случае название темы исправьте.
0
Kukuxumushu
1279 / 564 / 105
Регистрация: 13.06.2015
Сообщений: 1,884
Завершенные тесты: 2
27.10.2018, 18:45 3
Zodi, это случаем не VMlab делать надо?
0
ZelTrad
1 / 1 / 1
Регистрация: 02.08.2018
Сообщений: 56
28.10.2018, 07:58 4
Цитата Сообщение от Zodi Посмотреть сообщение
Нужна прога для отображения передвижения трех светодиодов подключенных к порту МК
Proteus 8
0
Zodi
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 9
28.10.2018, 12:18  [ТС] 5
Kukuxumushu, В AvrStudio
0
pyzhman
781 / 476 / 65
Регистрация: 15.05.2012
Сообщений: 2,677
28.10.2018, 14:38 6
Цитата Сообщение от Zodi Посмотреть сообщение
на основной плате
Что за плата?
0
Zodi
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 9
09.11.2018, 07:52  [ТС] 7
такая плата
Прога для atmega16

намутил тут прогу,но я как понял из за флага С тут пропадают биты,вот и застопорился
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
.include "m16def.inc"
.org 0x000
jmp reset
.org 0x002
jmp int_0
.org 0x004
jmp int_0
 
reset:
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,high(RAMEND)
out SPH,R16
ldi R20,0x05
out MCUCR,R20
ldi R20,0b11000000
out GICR,R20
sei
ldi r20, 0xFF
out DDRC,R20
ldi R25,0x0E
out PortC, r25
ldi r21, 0x00
out DDRD,R21
out PortD, r20
 
 
main:
ldi r21, 0xFF
ROR R25
out PortC,R25
sei
;call delay
jmp main
 
 
int_0:
CPI r21,0xFF
brne main
a:
Rol r25
out PortC,R25
sei
;call delay
ldi r21,0x00
jmp a
 
 
delay:
ldi R23,0xFF
n:
ldi R24,0xFF
m:
dec R24
brne m
dec R23
brne n
ret
0
pyzhman
781 / 476 / 65
Регистрация: 15.05.2012
Сообщений: 2,677
09.11.2018, 09:40 8
Дело не столько в С, сколько в непонимании обработки прерываний. (Зачем они вообще вам в такой задаче?)

Assembler
1
2
3
4
5
6
7
8
9
10
11
main:
...
jmp main
 
 
int_0:
...
brne main // WTF???!!!
a:
...
jmp a // и что? вечно тут сидим?
Добавлено через 11 минут
Цитата Сообщение от Zodi Посмотреть сообщение
такая плата
Как называется?
0
COKPOWEHEU
1103 / 777 / 181
Регистрация: 09.09.2017
Сообщений: 3,373
09.11.2018, 11:43 9
Цитата Сообщение от Zodi Посмотреть сообщение
ldi R20,0x05
out MCUCR,R20
ldi R20,0b11000000
out GICR,R20
Вы наизусть помните какой бит каждого регистра за что отвечает? Сомневаюсь. Тогда лучше используйте сдвиги, сложения и именованные константы:
Assembler
1
2
3
4
ldi r20, (0b01<<ISC10 | 0b01<<ISC00)
out MCUCR, r20
ldi r20, (1<<INT1 | 1<<INT0)
out GICR, r20
Цитата Сообщение от Zodi Посмотреть сообщение
.org 0x002
тоже используйте именованные константы
Assembler
1
.org INT1addr
0
Zodi
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 9
09.11.2018, 22:16  [ТС] 10
Спасибо,учту.
0
Zodi
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 9
16.11.2018, 09:01  [ТС] 11
Другой более простой вариант реализации,может кому в дальнейшем понадобится)
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
.include "m16def.inc"
.ORG 0x00
jmp Reset
.ORG 0x02
jmp Int_0
.org 0x04
jmp Int_0
 
Reset:
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,high(RAMEND)
out SPH, R16
 
ldi R16,0x0F
out MCUCR, R16
ldi R16,0b11000000   
out GICR,R16   
      
sei
 
ldi R16,0xFF
out DDRC,R16
out PortD,R16
CLR R17
ldi R16,0b11100000
Call EE_W
Inc R17
ldi R16,0b01110000
Call EE_W
Inc R17
ldi R16,0b00111000
Call EE_W
Inc R17 
ldi R16,0b00011100
Call EE_W
Inc R17
ldi R16,0b00001110
Call EE_W
Inc R17
ldi R16,0b00000111
Call EE_W
Inc R17
ldi R16,0b10000011
Call EE_W
Inc R17
ldi R16,0b11000001
Call EE_W
Inc R17
clr R20
clr R17
main:
call EE_R
out PortC, R16
call delay    
cpi R20, 0xFF
breq OC
brne Psh
Psh:
inc R17
ldi R21, 8
cpse R17, R21
jmp main
ldi R17, 0
jmp main
OC: 
dec R17
ldi R21, 0
cpse R17, R21
jmp main
ldi R17, 7
jmp main
 
Int_0:
com R20
reti
 
delay:
ldi R30, 2
ldi R31, 0
m2:
ldi R28, 0xFF
ldi R29, 0xFF
m1:
sbiw R28, 1
brne m1
sbiw R30, 1
brne m2
ret
 
EE_R:
Sbic EECR, EEWE
jmp EE_R
Out EEARH, R18
Out EEARL, R17
Sbi EECR, EERE
in R16, EEDR
Ret
 
EE_W:
Sbic EECR, EEWE
jmp EE_W
Out EEARH, R18
Out EEARL, R17
Out EEDR, R16
Sbi EECR, EEMWE
Sbi EECR, EEWE
Ret
0
COKPOWEHEU
1103 / 777 / 181
Регистрация: 09.09.2017
Сообщений: 3,373
16.11.2018, 10:03 12
Лучше посмотрите чтение из flash памяти. Ее по крайней мере не придется перепрошивать при каждом запуске (вы же помните ограничение на количество перезаписей?). Да и скорость доступа побольше, всего 3 такта.
Где-нибудь в конце объявляете
Assembler
1
2
ARRAY:
.db 0b00000000, 0b00000001, 0b00000011
потом вызываете
Assembler
1
lpm r16, Z+
С синтаксисом мог ошибиться, проверить сейчас неначем. Главное помните, что адресация flash идет не по байтам, а по словам. Впрочем, это лучше перепроверить по документации.
0
16.11.2018, 10:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2018, 10:03

Внешние прерывания для AtMega16
Всем ,привет!)Подскажите пожалуйста:как правильно написать код программы для внешнего прерывания?Ну...

Программа для ATmega16 (AVR Assembler)
Пожалуйста, помогите написать программу! Вычислить K=A+B-C, где A, B и C – любые 8-битные целые...

ATmega16 не работает код для опроса пинов
Привет всем. У меня не хочет работать код, который в вечном цикле проверяет состояния пинов PD и...


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

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

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