0 / 0 / 0
Регистрация: 25.04.2017
Сообщений: 3
1

Последовательное включение диодов на МК Atmega32

14.03.2019, 20:55. Показов 6703. Ответов 5

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Проблема в написании программы на assembler. Мигающая буква "B" с использованием LED в порядке возрастания. На языке "C" код написать смог а тут ну никак не поддается. Использовал на МК порты PORTC и PORTD.
Вот код на "C"
C
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
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
    //unsigned char i;
    DDRC = 0xFF;
    PORTC = 0b11111111;
    
    while (1)
    {
        PORTC = 0b00000000;
        _delay_ms(10);
            PORTC =  0b00000001;
            _delay_ms(10);
            PORTC =  0b00000011;
            _delay_ms(10);
            PORTC =  0b00000111;
            _delay_ms(10);
            PORTC =  0b00001111;
            _delay_ms(10);
            PORTC =  0b00011111;
            _delay_ms(10);
            PORTC =  0b00111111;
            _delay_ms(10);
            PORTC =  0b01111111;
            _delay_ms(10);
            PORTC =  0b11111111;
            _delay_ms(10);
            
    DDRD = 0xFF;
    PORTD = 0b11111111;
            
        PORTD =  0b00000001;
        _delay_ms(10);
        PORTD =  0b00000011;
        _delay_ms(10);
        PORTD =  0b00000111;
        _delay_ms(10);
        PORTD =  0b00001111;
        _delay_ms(10);
        PORTD =  0b00011111;
        _delay_ms(10);
        PORTD =  0b00000000;
        
}
}
а вот как выглядит моя схема
Кликните здесь для просмотра всего текста


Очень буду благодарен если окажут помощь. Спасете от отчисления с шараги
Миниатюры
Последовательное включение диодов на МК Atmega32  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2019, 20:55
Ответы с готовыми решениями:

Адресное включение диодов
Всем добра Задача у меня такая: на микроконтроллер приходит команда зажечь метку(светодиод) на...

Параллельное включение выпрямительных диодов
В одном старом, и довольно дешевом компьютерном блоке питания PowerMaster FA-5-1 встретил такую...

Последовательное включение 2х БП
Вот у меня есть старый, но рабочий БП. И хотелось бы узнать можно ли объединить последовательно...

Последовательное включение шунтов
Всем привет. Делаю драйвер для светодиода на 3А (не покупаю ибо жестко заданы габариты и нужен КПД...

5
19 / 14 / 7
Регистрация: 14.03.2019
Сообщений: 71
15.03.2019, 20:39 2
Посмотри книгу "Практическое программирование МК Atmel AVR на языке ассемблера" Ревич Ю.В. Глава 8 Программирование таймеров. Пункт Управление динамической индикацией. Остальные части твоей программы можно найти в главе 5 (например пункт Простейшая программа)
1
593 / 356 / 67
Регистрация: 21.09.2008
Сообщений: 1,223
16.03.2019, 04:53 3
AVR-GCC может выдавать ассемблерный листинг при использовании опции -S. Примерно так:
avr-gcc -S -o blink_asm_output.s blink.c
1
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
16.03.2019, 13:44 4
Лучший ответ Сообщение было отмечено Belle_T как решение

Решение

Belle_T, держите программку:
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
.INCLUDE    "m32def.inc"
 
.equ    F_CPU   = 16000000
 
.macro  delay_us        ;пауза в микросекундах
    ldi     ZL, low((@0*F_CPU)/(4*1000000))
    ldi     ZH, high((@0*F_CPU)/(4*1000000))
.set    delay_us_loop = PC
    sbiw    Z, 1
    brne    delay_us_loop
.endm 
 
.CSEG
    .org    0
 
    cli
 
    ldi     XL, LOW(RAMEND)
    ldi     XH, HIGH(RAMEND)
    out     SPH, XH
    out     SPL, XL
 
    ldi     r16, 0b00000000
    ldi     r17, 0b00000001
    ldi     r18, 0b00000011
    ldi     r19, 0b00000111
    ldi     r20, 0b00001111
    ldi     r21, 0b00011111
    ldi     r22, 0b00111111
    ldi     r23, 0b01111111
    ldi     r24, 0b11111111
 
    out     DDRC, r24       ;0b11111111
    out     DDRD, r21       ;0b00011111
 
main:
    out     PORTD, r16  ;0b00000000
    out     PORTC, r17  ;0b00000001
    delay_us    10000
    out     PORTC, r18  ;0b00000011
    delay_us    10000
    out     PORTC, r19  ;0b00000111
    delay_us    10000
    out     PORTC, r20  ;0b00001111
    delay_us    10000
    out     PORTC, r21  ;0b00011111
    delay_us    10000
    out     PORTC, r22  ;0b00111111
    delay_us    10000
    out     PORTC, r23  ;0b01111111
    delay_us    10000
    out     PORTC, r24  ;0b11111111
    delay_us    10000
 
    out     PORTC, r16  ;0b00000000
    out     PORTD, r17  ;0b00000001
    delay_us    10000
    out     PORTD, r18  ;0b00000011
    delay_us    10000
    out     PORTD, r19  ;0b00000111
    delay_us    10000
    out     PORTD, r20  ;0b00001111
    delay_us    10000
    out     PORTD, r21  ;0b00011111
    delay_us    10000
 
    rjmp    main
Код написан под AvrStudio4

Добавлено через 4 минуты
sharpey, я бы не стал советовать анализировать ассемблерный листинг незнающему человеку.
Можно навсегда отбить охоту понять красоту коддинга на асме
1
593 / 356 / 67
Регистрация: 21.09.2008
Сообщений: 1,223
16.03.2019, 14:51 5
Цитата Сообщение от liv Посмотреть сообщение
я бы не стал советовать анализировать ассемблерный листинг незнающему человеку
Согласен, это был довольно "грязный" хак, достижение желаемого быстро, но без изящности.
Цитата Сообщение от liv Посмотреть сообщение
Можно навсегда отбить охоту понять красоту коддинга на асме
Я очень давно получал истинное удовольствие, рассматривая исходник вируса DIR-II под MS-DOS. Его писал настоящий виртуоз, эксперт языка. Хотя к зловредам отношусь крайне негативно. Но чего не отнять, то следует признать.
0
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
16.03.2019, 15:24 6
Цитата Сообщение от sharpey Посмотреть сообщение
Я очень давно получал истинное удовольствие
А то! Были времена...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2019, 15:24
Помогаю со студенческими работами здесь

Последовательное включение приборов
Здравствуйте. Новичок в этом деле. Накидал такой код. Не знаю как установить последовательность и...

Встречно-последовательное включение полевиков
Приветствую всех, нужно компенсировать влияние паразитных диодов в полевых транзисторах. Можно...

Последовательное включение сегментов 7-с индикатора ATmega8515
Здравствуйте, Возможно ли последовательно переключать сегменты семисегментного индикатора так...

Последовательное включение машин конвейера (Язык ST)
Каким способом можно реализовать конвейер? Допустим жмем по кнопке запуска и начинает работать...

Последовательное включение делителя и счетчика (VHDL, Quartus)
Здравствуйте, форумчане! Вынужденно обращаюсь, так как уже не знаю в каком направлении думать....

Последовательное включение двух ОУ и длинная дорожка между.
Как правильно соединить два ОУ, включенных последовательно? Между двумя ОУ длинная дорожка,...

Последовательное включение светодиодов - сколько штук максимум?
Задача одновременно включать 100шт оптронов PC817. Очень желательно включить их последовательно....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru