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

Бегущая строка для ATmega128

16.10.2013, 18:52. Просмотров 3456. Ответов 11
Метки нет (Все метки)

Здраствуйте! У меня вопрос. Нам дали задание вывести на стенд строку 012501. Мы вывели, а преподаватель попросил организовать вывод её справо налево., а у нас слева направо...или наоборот..вот как, подскажите, что здесь исправить.
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
.include "m128def.inc"
.equ    Sgm_A = 0b01111111
.equ    Sgm_B = 0b10111111
.equ    Sgm_D = 0b11011111
.equ    Sgm_E = 0b11101111
.equ    Sgm_F = 0b11110111
.equ    Sgm_C = 0b11111011
.equ    Sgm_H = 0b11111101
.equ    Sgm_G = 0b11111110
.cseg
    .org        0
    jmp         INIT
 
.equ    Symbol0 =   (Sgm_A & Sgm_C & Sgm_D & Sgm_E & Sgm_F & Sgm_B)
.equ    Symbol1 =   (Sgm_B & Sgm_C)
.equ    Symbol2 =   (Sgm_A & Sgm_B & Sgm_D & Sgm_E & Sgm_G)
.equ    Symbol5 =   (Sgm_A & Sgm_F & Sgm_G & Sgm_C & Sgm_D) 
 
 
 
 
String: .DB     0xff,0xff,0xff,0xff,0xFF,0xFF,0xFF,0xff, Symbol1,Symbol0,Symbol5,Symbol2,Symbol1,Symbol0,0xFF,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xff,0xFF,0xFF,0xFF,0xFF,0xFF
 
INIT:
    ldi R16,0xFF
    out ddrA,R16
    ldi R16,0b00001111
    out ddrC,R16
    clr R17
    clr R18
    clr r19
    clr r20
 
    clr r25
    clr r24
    clr r23
    clr r22
    clr r21
 
    ldi R28,low(String)
    ldi R29,high(String)
    lsl R28
    rol R29
 
 
Start:
    out     portC,R17
    mov     R30,R28
    mov     R31,R29
    add     R30,R17
    adc     R31,R18
 
    lpm     R2,Z
    out     portA,R2
    cbi     portC,3
    sbi     portC,3
     
    dec  R19
    brne         PC-1
 
    ldi     R16,0xFF
    out     portA,R16
    cbi     portC,3
    sbi     portC,3
    inc     R17
    andi    R17,7
 
    dec r25
    brne pc-1
    dec r24
    brne pc-1
    dec r23
    brne pc-1
    dec r22
    brne pc-1
    dec r21
    brne start
    
    inc r28
    inc r20
    andi r20,0x1f
    brne start
 
    ldi R28,low(String)
    ldi R29,high(String)
    lsl R28
    rol R29
 
    jmp                 start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 18:52
Ответы с готовыми решениями:

Бегущая строка на ATMega128 (Proteus)
Как собрать такое устройство ? есть atmega128 и 3-х разрядная панелька на...

Бегущая строка на 7-мисегментном индикаторе atmega128
Помогите, пожалуйста. вот задание: Разработать программу для учебного стенда...

Бегущая строка на MAX7219
Доброго времени суток Делаю светодиодное табло, С использованием матриц 8х8...

Бегущая строка на матричных индикаторах
Всем привет. Недавно начал заниматься программированием контроллеров на...

Бегущая строка произвольных символов
Экзаменационный вопрос: Составить программу для AVR, которая обеспечивает...

11
paskal
450 / 299 / 28
Регистрация: 15.08.2011
Сообщений: 928
16.10.2013, 20:55 2
Цитата Сообщение от huawei Посмотреть сообщение
Здраствуйте! У меня вопрос. Нам дали задание вывести на стенд строку 012501. Мы вывели, а преподаватель попросил организовать вывод её справо налево., а у нас слева направо...или наоборот..вот как, подскажите, что здесь исправить.
Первый способ тупой: переписать строку №22 в обратном порядке
Если это не удовлетворит преподавателя, то тогда более интеллектуальный метод. Перед строкой №47 вставить это:
Assembler
1
2
3
    mov r26,r17
    com r26
    andi r26,7
А саму 47-ю заменить на
Assembler
1
    out portC,r26
Добавлено через 17 минут
ps.
Строки где используется R18, можно выкинуть
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,192
Завершенные тесты: 1
16.10.2013, 20:59 3
Цитата Сообщение от huawei Посмотреть сообщение
Мы вывели, а преподаватель попросил организовать вывод её справо налево.,
а вывести то куда?
у атмеги нет экрана
0
paskal
450 / 299 / 28
Регистрация: 15.08.2011
Сообщений: 928
16.10.2013, 21:41 4
Цитата Сообщение от ValeryS Посмотреть сообщение
а вывести то куда?
у атмеги нет экрана
Судя по коду там 7-сегментный индикатор с динамической индикацией, на порт A идет общая шина, а дешифратор адреса на 3-х младших битах порта C.
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,192
Завершенные тесты: 1
16.10.2013, 22:02 5
Цитата Сообщение от paskal Посмотреть сообщение
там 7-сегментный индикатор с динамической индикацией, на порт A идет общая шина, а дешифратор адреса на 3-х младших битах порта C.
ну примерно так я и понял
но хотелось бы услышать "начальника транспортного цеха"(с)
ибо когда сам распаиваешь(разводишь) мелкосхему, такие вопросы в принципе не возникают, за каждый пин отвечаешь

Добавлено через 2 минуты
Цитата Сообщение от huawei Посмотреть сообщение
String: .DB * * 0xff,0xff,0xff,0xff,0xFF,0xFF,0xFF,0xff,
самое смешное что влево направо выводи что вправо налево
символы то одинаковые
остается вопрос а в чем разница 0xff,и 0xFF?
0
huawei
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 20
17.10.2013, 00:34  [ТС] 6
Да выводится на 7-сегментный индикатор, 0хFF - задержка появления символов

Добавлено через 4 минуты
paskal Спасибо за предложение, надо будет проверить в лаборатории
0
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,192
Завершенные тесты: 1
17.10.2013, 00:42 7
Цитата Сообщение от huawei Посмотреть сообщение
Да выводится на 7-сегментный индикатор,
ну и ?
у тебя динамическая индикация
поменяй в порту С первую и третью ногу , побежит наоборот
Цитата Сообщение от huawei Посмотреть сообщение
0хFF - задержка появления символов
задержка чего?
у тебя 0 активный когда 0 на порту загорается сегмент
а 0хFF это значит что все 1 ничего не горит так что это не "задержка" а пустое место "blank"
сам разберись со своей программой, закомментируй хотя бы, потом составь схемку в том же протеусе и пошагово пройди, и поймешь за что каждая строчка отвечает
ну если это конечно тебе интересно разобраться
учти что программисты для микроконтроллеров, а равно и разработчики, сейчас более востребованы, чем программисты для ПК
0
huawei
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 20
17.10.2013, 00:54  [ТС] 8
Спасибо за дельный совет
0
korsaj
17.10.2013, 10:23
  #9

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
учти что программисты для микроконтроллеров, а равно и разработчики, сейчас более востребованы, чем программисты для ПК
Не знаю как у вас, а в Украине я нужен только себе ))
А все потому что у всех есть свой закоренелый программист ( выпуска годов эдак 60), который им пишет хоть и линейный, НО рабочий код.

0
paskal
450 / 299 / 28
Регистрация: 15.08.2011
Сообщений: 928
17.10.2013, 20:31 10
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и ?
у тебя динамическая индикация
поменяй в порту С первую и третью ногу , побежит наоборот
Не-а. Наоборот не побежит.
Допустим мы поменяли крайние разряды из 3-х. Код 0 останется 0. Код 7 тоже останется 7. Зато код 1 превратится в 4. Ну и остальные тоже как попало. В общем на индикаторе будет сплошная каша. Символы будут не бежать строкой, а прыгать туда-сюда.
0
huawei
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 20
28.10.2013, 16:16  [ТС] 11
Спасибо! Помогло. Теперь такая проблема в упор не могу понять, нужно собрать программу по выводу трех набранных клавиш, а имется код на 2........Не могли бы вы или хотя бы объяснить что в этом коде отвечает хотя бы за 1 клавишу.
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
.include "m128def.inc"
.equ    Sgm_A = 0b01111111
.equ    Sgm_B = 0b10111111
.equ    Sgm_D = 0b11011111
.equ    Sgm_E = 0b11101111
.equ    Sgm_F = 0b11110111
.equ    Sgm_C = 0b11111011
.equ    Sgm_H = 0b11111101
.equ    Sgm_G = 0b11111110
 
.equ    Symbol =    (Sgm_A & Sgm_B & Sgm_E & Sgm_F & Sgm_G)
 
.dseg
    .org    0x200   ;Область видеопамяти
VideoD: .byte   8   ;Данные, которые должны отображаться на дисплее
Video:  .byte   8   ;Образы данных, отображаемых на дисплее
.cseg
    .org        0
    jmp         INIT
Symbols:    .DB Sgm_A & Sgm_B & Sgm_C & Sgm_D & Sgm_E & Sgm_F, Sgm_B & Sgm_C, Sgm_A & Sgm_B & Sgm_D & Sgm_E & Sgm_G, Sgm_A & Sgm_B & Sgm_C & Sgm_D & Sgm_G
    .DB Sgm_B & Sgm_C & Sgm_F & Sgm_G, Sgm_A & Sgm_C & Sgm_D & Sgm_F & Sgm_G, Sgm_A & Sgm_C & Sgm_D & Sgm_E & Sgm_F & Sgm_G, Sgm_A & Sgm_B & Sgm_C
    .DB Sgm_A & Sgm_B & Sgm_C & Sgm_D & Sgm_E & Sgm_F & Sgm_G, Sgm_A & Sgm_B & Sgm_C & Sgm_D & Sgm_F & Sgm_G
    .DB Sgm_A & Sgm_B & Sgm_C & Sgm_E & Sgm_F & Sgm_G, Sgm_C & Sgm_D & Sgm_E & Sgm_F & Sgm_G
    .DB Sgm_A & Sgm_D & Sgm_E & Sgm_F, Sgm_B & Sgm_C & Sgm_D & Sgm_E & Sgm_G, Sgm_A & Sgm_D & Sgm_E & Sgm_F & Sgm_G, Sgm_A & Sgm_E & Sgm_F & Sgm_G
    .DB 0xFF, 0x00
KeyTable:   .DB 7,4,1,10,8,5,2,0,9,6,3,11
INIT:
    ldi R16,0xFF
    out ddrA,R16
    ldi R16,0b00001111
    out ddrC,R16
    ldi R16,0b00011000
    sts ddrG,R16
    sts portG,R16
    ldi R17,0
    out portC,R17
    clr R15
    ser R16
    mov R14,R16
    ;Инициализация видеопамяти
    ldi R16,0x10
    sts VideoD,R16
    ldi R16,0x10
    sts VideoD+1,R16
    ldi R16,0x10
    sts VideoD+2,R16
    ldi R16,0x10
    sts VideoD+3,R16
    ldi R16,0x0E
    sts VideoD+4,R16
    ldi R16,0x0D
    sts VideoD+5,R16
    ldi R16,0x00
    sts VideoD+6,R16
    ldi R16,0x0C
    sts VideoD+7,R16
 
 
    ldi R26,low(Video)      ;X = Video
    ldi R27,high(Video)
    ldi R24,0           ;Индекс номера разряда дисплея при сканировании (меняется от 0 до 7)
Start:
     out    portC,R24
     ld R16,X+
     out    portA,R16
     cbi    portC,3
     sbi    portC,3
      dec   R25
     brne           PC-1
     ldi    R16,0xFF
     out    portA,R16
     cbi    portC,3
     sbi    portC,3
     in R16,pinC
     andi   R16,0b11100000
     breq           Label_1
      ;Формирование кода клавиши
      swap  R16
      lsr   R16
      clc
      ldi   R17,-1
       inc  R17
       lsr  R16
      brcc          PC-2
      lsl   R17
      lsl   R17
      add   R17,R24
      andi  R17,0x0F
      ldi   R18,0
      ldi   R30,low(3*KeyTable)     ;Z = KeyTable
      ldi   R31,high(3*KeyTable)
      add   R30,R17
      adc   R31,R18
      lpm   R10,Z
      and   R15,R10
      eor   R15,R14
      breq          Label_1
       ;Момент нажатия клвиши
       lds  R16,portG
       ldi  R17,0b00010000
       eor  R16,R17
       sts  portG,R16
       dec  R15
       mov  R14,R10
       lds  R16,VideoD
       sts  VideoD+1,R16
       sts  VideoD,R10
Label_1:     inc    R24
     andi   R24,7
     brne       Label_2
      ;Анализ R15
      inc   R15
      brne      PC+11
       ;Ничего не нажато
       inc  R14
       breq     PC+7
        ;Момент отпускания клавиши
        lds R16,portG
        ldi R17,0b00001000
        eor R16,R17
        sts portG,R16
       ser  R16
       mov  R14,R16
      ;Установка R15
      ser   R16
      mov   R15,R16
      ;Обновление видеопамяти
      ldi   R26,low(Video)      ;X = Video
      ldi   R27,high(Video)
      ldi   R28,low(VideoD)     ;Y = VideoD
      ldi   R29,high(VideoD)
      ldi   R16,8
      ldi   R21,0
       ldi  R30,low(3*Symbols)      ;Z = Symbols
       ldi  R31,high(3*Symbols)
       ld   R20,Y+
       add  R30,R20
       adc  R31,R21
       lpm  R10,Z
       st   X+,R10
       dec  R16
      brne          PC-8
      ldi   R26,low(Video)      ;X = Video
      ldi   R27,high(Video)
Label_2:    
      out   portC,R28
     ld R14,X+
     out    portA,R19
     cbi    portC,3
     sbi    portC,3
      dec   R25
     brne           PC-2
     ldi    R16,0xFF
     out    portA,R18
     cbi    portC,3
     sbi    portC,3
     in R16,pinC
     andi   R16,0b11100000
     breq           Label_3
 
Label_3:    jmp         Start
0
Voland_
1686 / 1031 / 97
Регистрация: 04.01.2010
Сообщений: 3,477
29.10.2013, 11:26 12
Цитата Сообщение от huawei Посмотреть сообщение
Нам дали задание
Цитата Сообщение от huawei Посмотреть сообщение
подскажите, что здесь исправить.
Цитата Сообщение от huawei Посмотреть сообщение
Теперь такая проблема
Цитата Сообщение от huawei Посмотреть сообщение
Не могли бы вы или хотя бы объяснить
ТС, вы прикалываетесь в своем ВУЗе? Или все-таки учитесь программировать?
0
29.10.2013, 11:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 11:26

ATmega16, светодиодная панель с символами (бегущая строка)
Приветствую. Столкнулся с проблемкой, которую сам не могу пока осилить....

Помогите с алгоритмом для Atmega128
Добрый День. Необходимо написать программу, которая определяет момент перехода...

Код программы для электронных весов с мк ATMEGA128
Нужен код программы электронных весов с функцией ИМТ!!!!! Горит курсач, завтра...


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

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

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