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

Внешние прерывания МК ATmega8535

18.04.2017, 15:53. Показов 789. Ответов 2
Метки нет (Все метки)

Народ, кто-нибудь поможет решить задачу или хотя бы подсказать с чего начать?
Просто знания нулевые, я не представляю (или мозги не заточены под это) как за полсеместра научиться программировать, но преподавателя это не волнует.

К сути.

Мое задание вытекает из первого, нужно добавить только внешние прерывания с помощью тумблеров, первый тумблер вывод количество совпадение, второй тумблер какое число совпало.

Первое задание: "В памяти задать два одномерных массива по 5 ячеек в каждом. В ячейки необходимо записать шестнадцатеричные цифры от 0 до F, причём цифры во всех ячейках первого и второго массивов должны различаться за исключением одной, т.е. одна и та же цифра будет присутствовать в обоих массивах. Разработать программу, которая определит цифру, присутствующую в обоих массивах, и при кратковременном нажатии на кнопку SB3 будет выводить её в шестнадцатеричном виде на индикаторе HG2. Если же окажется, что цифры в массивах разные, то при нажатии на кнопку SB3 на индикаторе HG2 будет отображаться символ «Н» (нет)."

Код первой лабы:
Кликните здесь для просмотра всего текста
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
;********************************************************************************
;*** В памяти задать два одномерных массива по 5 ячеек в каждом. В ячейки     ***
;*** необходимо записать шестнадцатеричные цифры от 0 до F, причём цифры во   ***
;*** всех ячейках первого и второго массивов должны различаться за            ***    
;*** исключением одной, т.е. одна и та же цифра будет присутствовать в обоих  ***
;*** массивах. Разработать программу, которая определит цифру,                *** 
;*** присутствующую в обоих массивах, и при кратковременном нажатии на        ***
;*** кнопку SB3 будет выводить её в шестнадцатеричном виде на индикаторе      ***
;*** HG2. Если же окажется, что цифры в массивах разные, то при нажатии на    ***
;*** кнопку SB3 на индикаторе HG2 будет отображаться символ «Н» (нет).        ***
;***                                                                          ***
;*** Автор:           .                                                       *** 
;*** Дата создания: 28.02.2017                                                ***
;********************************************************************************
 
       .include "8535def.inc" ; определения для ATmega8535
       .dseg
       .org $60
arr1:  .byte 5                 ; первый массив из 5 ячеек
arr2:  .byte 5                 ; второй массив из 5 ячеек
       
       .org $70
 
cod0:.byte 1                   ; блок памяти данных для хранения кодов, представляющих 16-ричные цыфры на HG2
cod1:.byte 1                    
cod2:.byte 1
cod3:.byte 1
cod4:.byte 1
cod5:.byte 1
cod6:.byte 1
cod7:.byte 1
cod8:.byte 1
cod9:.byte 1
codA:.byte 1
codB:.byte 1
codC:.byte 1
codD:.byte 1
codE:.byte 1
codF:.byte 1       
       
       .cseg
       .org $0
       rjmp reset
 
       .org $30
reset:
        ldi r16, $00    ; организовать стек
        out sph, r16
        ldi r16, $ff
        out spl, r16
        ldi r17, $3f
        sts cod0, r17
        ldi r17, $06
        sts cod1, r17
        ldi r17, $b5
        sts cod2, r17
        ldi r17, $4f
        sts cod3, r17
        ldi r17, $66
        sts cod4, r17
        ldi r17, $6d
        sts cod5, r17
        ldi r17, $7d
        sts cod6, r17
        ldi r17, $07 
        sts cod7, r17
        ldi r17, $7f
        sts cod8, r17
        ldi r17, $6f
        sts cod9, r17
        ldi r17, $77
        sts codA, r17
        ldi r17, $7c
        sts codB, r17
        ldi r17, $39
        sts codC, r17
        ldi r17, $5e
        sts codD, r17
        ldi r17, $79
        sts codE, r17
        ldi r17, $71
        sts codF, r17
        
        ldi r26, low(arr1)
        ldi r27, high(arr1)
        ldi r16, 5
        ldi r17, 0         ; начинаем инициализацию элементов arr1 c 0
m1:     st       x+, r17
        dec      r16
        inc      r17
        cpi      r16, 0
        brne m1
 
        ldi      r26, low(arr2)
        ldi      r27, high(arr2)
        ldi      r16, 5
        ldi      r17, 5    ; начинаем инициализацию элементов arr2 c 5
m2:     st       x+, r17
        dec      r16
        inc      r17
        cpi      r16, 0
        brne m2
 
        clr      r2        ; кол-во совпадений
        clr      r3        ; совпавшая цифра
        ldi      r26, low(arr1)
        ldi      r27, high(arr1) 
        ldi      r16, 6
m3:     ld       r0, x+
        dec      r16
        breq m6
        ldi      r28, low(arr2)
        ldi      r29, high(arr2)
        ldi      r17, 6
m4:     dec      r17
        breq m3
        ld       r1, Y+
        cp       r0, r1
        breq m5
        rjmp m4
m5:     inc      r2
        mov      r3, r1
        rjmp m4
m6:     ldi      r16, $ff
        out      ddrc, r16
        ldi      r16, $00
        out      ddra, r16
        ldi      r16, $0c
        out      ddrb, r16
        rcall HG_off        ; погасить сегменты индикаторов HG1 и HG2
        ldi      zl, low(cod0)
        ldi      zh, high(cod0)
 
m7:     sbis     pina,1    ; проверка нажатия SB1
        rjmp     m8
        rjmp     m9
 
m8:     sbis     pina,2    ; проверка нажвтия SB2
        rjmp     m7
        rjmp     m12
; вывод на индикатор HG1 совпавшей цифры или симвова "Н" (если нет совпадений m9
 
m9:
        rcall    HG_off    ; погасить сигменты индикаторов HG1 и HG2
        mov      r18, r2
        cpi      r18, 0    ; проверить наличие совпадающих цифр в массивах
        brne     m10       ; есть совпадающие цифры
        ldi      r18,$76   ; код символа "Н" для вывода на индикатор 
        rjmp     m11
 
m10:    push     zl        ; сохранить адрес начала блока памяти в стеке
        add      zl,r3     ; вычеслить адрес ячейки памяти с кодом совпадающей цифры
        ld       r18,z     ; код совпадающей цифры для вывода на индикатор 
        pop      zl        ; восстановить значение в регистре z 
 
m11:    sbi      portb,2    ; выбрать индикатор HG1
        out      portc,r18 ; вывести код символа (цифры) на индикатор 
        rjmp     m7
 
; вывести на индикатор HG2 количества совпадений                                 
 
m12:
        rcall    HG_off    ; погасить сигменты индикаторов HG1 и HG2
        push     zl        ; сохранить адрес начала блдока памяти в стеке 
        add      zl,r2     ; вычеслить адрес ячейки памяти с кодом числа совпадений
        ld       r18,z     ; код числа совпадений для вывода на индикатор 
        pop      zl        ; восстановить значение в регистре z 
        sbi      portb,3   ; выбрать индикатор HG2 
        out      portc,r18 ; вывести значение счётчика на индикатор 
        rjmp     m7
; подпрограмма гашения сегметов индикаторов HG1 и HG2
HG_off:
 
        rcall   HG1_off
        rcall   HG2_off
; подпрограмма гашения сегментов индикатора HG1
 
HG1_off:
     
        push    r18
        ldi     r18,$00
        sbi     portb,2    ; выбрать индикатор HG1
        out     portc,r18  ; погасить сегменты индикатора HG1
        cbi     portb, 2
        pop     r18
        ret
; подпрограмма гашения сегментов индикатора HG2
 
HG2_off:
 
        push   r18
        ldi    r18,$00
        sbi    portb,3    ; выбрать индикатор HG2
        out    portc,r18  ; погасить сигменты индикатора HG2
        cbi    portb,3
        pop    r18
        ret


Текстовый документ это первая лаба
ПДФ лаб3 (это первая лаба)
ПДФ лаб4 (это вторая лаба, эта которую не могу решить)
ВОРД примеры на внешние прерывания
Вложения
Тип файла: txt лаб1.txt (5.6 Кб, 4 просмотров)
Тип файла: pdf МК_Лаб_3.pdf (132.8 Кб, 6 просмотров)
Тип файла: pdf МК_Лаб_4.pdf (164.3 Кб, 8 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2017, 15:53
Ответы с готовыми решениями:

Внешние прерывания
Добрый вечер, у меня на меге 8 работает ацп + необходимо обрадатывать внешнее прерывание от пина...

Внешние прерывания
Всем привет! пытаюсь осуществить светодиодную подсветку лестницы. Вверху и внизу стоят датчики...

Внешние прерывания
нужно что бы при нажатии на кнопку отрабатывало прерывание. Я сделал так (все на мегае16, на...

мега48, внешние прерывания
всем здрасти) ситуация такова: планируется устройство с емкостной сенсорной клавиатурой, каждый...

2
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 5
18.04.2017, 16:02  [ТС] 2
Примеры на прерывания
Вложения
Тип файла: doc Отчет 4 прерывания.doc (42.0 Кб, 10 просмотров)
Тип файла: doc отчёт4 прерывания.doc (44.0 Кб, 6 просмотров)
0
78 / 62 / 47
Регистрация: 05.05.2013
Сообщений: 196
26.04.2017, 07:50 3
Вышлите методичку на почту{del}

Я же правильно понимаю, что по сути нужно прикрутить внешние прерывания к первой лабе?
Отчетом служит код и блок-схема?
Первую лабу сдавали как? Просто код можно упростить
Сроки какие?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2017, 07:50

Внешние прерывания ATMega128
Всем привет. У меня задача такая: есть меиндр с изменяющейся частой и надо замерять время между...

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

внешние прерывания tiny85 - растолкуйте даташит!
я тут типа пытаюсь мелким шаговиком управлять напрямую. ловлю внешние импульсы и по их частоте -...

Не срабатывают внешние прерывания INT0/INT1 в Atmega8
Помогите разобраться новичку в МК, в чем может быть проблема. Пытаюсь освоить самостоятельно...


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

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

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