Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 17
1

Вычислить Х=А+В-С, где А, В и С – 8-битные переменные хранящиеся в ячейках памяти данных $0101.$0103. При Х=0 обнулить

11.11.2020, 18:28. Показов 1372. Ответов 6

Author24 — интернет-сервис помощи студентам
Добрый день! Подскажите, пожалуйста, как решать данную задачу?

Вычислить Х=А+В-С, где А, В и С – 8-битные переменные хранящиеся в ячейках памяти данных $0101..$0103. При Х=0 обнулить регистр R0, при отрицательном результате – обнулить регистр R1.

Используем программу AVR Studio для микроконтроллера ATmega16
0
Лучшие ответы (1)
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
11.11.2020, 19:22 2
Используйте команду LDS Rd, k
Rd - регистр назначения
k - Ваш адрес

Добавлено через 2 минуты
Это для загрузки Ваших переменных в регистры. Но сначала их туда надо загрузить, нужно использовать команду
STS k, Rr

Добавлено через 30 секунд
где
Rr - регистр источник;
k - Ваш адрес.
1
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 17
11.11.2020, 19:23  [ТС] 3
FFPowerMan, спасибо, но не очень помогло... я новичок в этой теме. моя вторая программа, можно сказать
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
11.11.2020, 19:27 4
Несмотря на то что в этих командах(LDS и STS) используются регистры(Rr и Rd) от R0 до R31. Старайтесь работать с регистрами от R16 до R31.

Добавлено через 1 минуту
А что Вы умеете? Стэк можете настроить?
Ну если не можете в Интернете посмотрите(в любом проекте) как в начале стэк настраивается. Еще нужно сегменты определить. И таблицу прерываний настроить.

Добавлено через 2 минуты
Выкладывайте 1-ый проект.
1
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 17
11.11.2020, 19:29  [ТС] 5
FFPowerMan, 1 тоже не сама писала. разбиралась с кодом. Скопировать 16 байт данных из области памяти с начальным адресом $01F0 в область памяти с начальным адресом $0200.
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
11.11.2020, 20:06 6
Лучший ответ Сообщение было отмечено A2906 как решение

Решение

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
;Programma dlya zapisi chisel
.include "m16def.inc"
 
.def    temp  = r16
.def    A     = r17
.def    B     = r18
.def    C     = r19
.def    XR    = r20
 
;Konstanti
.equ Digit  = 0x0B
.equ Digit2 = 0x02
.equ Digit3 = 0x0D
 
;Tablica prerivanii
.org $0000 rjmp Reset
.org $0002 reti
.org $0004 reti
.org $0006 reti
.org $0008 reti
.org $000A reti
.org $000C reti
.org $000E reti
.org $0010 reti
.org $0012 reti
.org $0014 reti
.org $0016 reti
.org $0018 reti
.org $001A reti
.org $001C reti
.org $001E reti
.org $0020 reti
.org $0022 reti
.org $0024 reti
.org $0026 reti
.org $0028 reti
 
.org $002A
Reset:
    ;Nastroika steka
    ldi temp, Low(RAMEND)
    out SPL,temp    
    ldi temp, High(RAMEND)
    out SPH,temp
 
    ldi temp, 1
    sts 0, temp
 
    ;Zagruzka chisel
    ldi temp, Digit
    sts 0x0101, temp
    ldi temp, Digit2
    sts 0x0102, temp
    ldi temp, Digit3
    sts 0x0103, temp
 
    ;Zagruzka
    lds A, 0x0101
    lds B, 0x0102
    lds C, 0x0103
 
    ;Deistviya
    add A, B
    sub A, C
    mov XR, A
    
    brne NeObnulyat
    ldi temp, 0
    sts 0, temp
 
NeObnulyat:
MainLoop:
    rjmp MainLoop
1
0 / 0 / 0
Регистрация: 11.10.2020
Сообщений: 17
12.11.2020, 09:27  [ТС] 7
FFPowerMan, спасибо Вам огромное! Буду разбираться! Очень помогли мне!
0
12.11.2020, 09:27
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru