Для микроконтроллеров AVR существуют различные языки программирования, но, пожалуй, наиболее подходящими являются ассемблер и Си, поскольку в этих языках в наилучшей степени реализованы все необходимые возможности по управлению аппаратными средствами микроконтроллеров.
Ассемблер - это низкоуровневый язык программирования, использующий непосредственный набор инструкций микроконтроллера. Создание программы на этом языке требует хорошего знания системы команд программируемого чипа и достаточного времени на разработку программы. Ассемблер проигрывает Си в скорости и удобстве разработки программ, но имеет заметные преимущества в размере конечного исполняемого кода, а соответственно, и скорости его выполнения. Си позволяет создавать программы с гораздо большим комфортом, предоставляя разработчику все преимущества языка высокого уровня.
Основные преимущества Си перед ассемблером: высокая скорость разработки программ; универсальность, не требующая досконального изучения архитектуры микроконтроллера; лучшая документируемость и читаемость алгоритма; наличие библиотек функций; поддержка вычислений с плавающей точкой.
1. Из исходного массива составить новый, содержащий элементы исходного, которые не превышают указанного числа.
LXI H,0083
LXI D,0084
MVI B,0x09
Retry:
MOV A,M
CPI 0xAA
JC skip
CALL _ADD
Skip:
INX H
DCR B
JNZ retry
HLT
_ADD:
XCHG
MOV M,A
INX H
XCHG
RET
2. Из исходного массива составить новый, содержащий элементы исходного массива, расположенные на четных местах.
LXI H,0083
LXI D,0084
MVI B,0x09
Retry:
MOV A,M
CALL _ADD
INX H
INX H
DCR B
DCR B
JNZ retry
HLT
_ADD:
XCHG
MOV M,A
INX H
XCHG
RET
3. Из исходного массива составить новый, путем замены всех элементов исходного массива, равных указанному числу на 0.
LXI H,0083
LXI D,0084
MVI B,0x09
Retry:
MOV A,M
CPI 0xAA
JNZ skip
MVI A,0x00
Skip:
CALL _ADD
INX H
DCR B
JNZ retry
HLT
_ADD:
XCHG
MOV M,A
INX H
XCHG
RET
4. Из исходного массива составить новый, путем замены всех элементов исходного массива, меньших указанного числа на их квадрат.
LXI H,0083
LXI D,0084
MVI B,0x09
Retry:
MOV A,M
CPI 0xAA
JNC skip
MOV C,A
Sqr:
ADD M
DCR C
JNZ sqr
Skip:
CALL _ADD
INX H
DCR B
JNZ retry
HLT
_ADD:
XCHG
MOV M,A
INX H
XCHG
RET
5. Из исходного массива составить новый, значения элементов которого соответствуют номерам элементов исходного массива, равных указанному числу.
LXI H,0083
LXI D,0084
MVI B,0x09
Retry:
MOV A,B
CPI 0xAA
JNZ skip
CALL _ADD
Skip:
INX H
DCR B
JNZ retry
HLT
_ADD:
XCHG
MOV M,A
INX H
XCHG
RET
6. В заданном массиве чисел, содержащих в двух указанных разрядах(1 и 2) двоичного кода 0, найти наименьшее.
xxxxx00x -число
00000110 - маска
00000000 – то что должно быть при +
LXI H,0083
LXI D,0084
MVI С,0xff
Retry:
MOV A,M
ANI 0x06
JNZ skip
MOV A,M
CMP C
JNC skip
MOV C,M
Skip:
INX H
DCR B
JNZ retry
HLT
7. Из исходного массива чисел составить новый путем замены всех элементов исходного массива на 1, если сумма всех элементов исходного массива больше заданного числа.
LXI H,0083
MVI B,0x09
MVI C,0x00
sum:
MOV A,M
ADD C
MOV C,A
INX H
DCR B
JNZ sum
MOV A,C
CPI 0xAA
JNC stop
MVI B,0x09
LXI H,0084
retry:
MVI M,0x01
INX H
DCR B
JNZ retry
Stop: HLT
8.Составить программу подсчета суммы чисел заданного массива,и данные записать в порт С.
LXI H,0083
MVI C,0x00
MVI B,0x09
Retry:
MOV A,C
MOV D,M
ADD D
MOV C,A
INX H
DCR B
JNZ retry
OUT port C
HLT
9. Составить программу вычисления факториала заданного числа.
MVI B,0x09
MOV A,B
DCR B
retry: CALL MUL
DCR B
CPI 0x01
JNZ retru
HLT
MUL: MOV E,B
MOV A,C
_MUL: ADD A
MOV C,A
DCR E
MOV A,E
JNC_MUL
RET
10 Если в регистре С все разряды равны «1», то загрузить в регистр В данные из порта 0х8f исложить их с регистром С, иначе поместить в порт по адресу 0х55 результат операции OR(+) регистров В и С, сдвинутый вправо
MOV A,C
CPI 0xff
JZ M1
ORA B
RAR
OUT 0x55
HLT
M1: IN 0x8f
MOV B,A
MOV A,C
ADD B
11. Найти сумму элементов кратных 3 заданного массива, если первый элемент массива больше заданного числа (10)
LXI H,0083
MVI B,0x09
MVI C,0x00
MVI D,0xAA
MOV A,M
CMP D
JNC skip
HLT
Skip:
Sum: MOV A,M
ADD C
MOV C,A
INX H
INX H
INX H
DCR B
DCR B
DCR B
JNZ sum
12 Поменять местами 1-ый и 4-ый элементы массива
LXI H,(0083+0x01) (0183)
LXI D,(0083+0x04) (0483)
MVI B,0x09
MOV A,M
XCHG
MOV C,M
XCHG
MOV M,C
XCHG
MOV M,A
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.