Текст подпрограмм
В независимости от функционального назначения устройства алгоритм его работы содержит последовательность типовых операций: инициализация системы, чтение/запись памяти, чтение клавиатуры и портов ввода, вывод информации на индикаторы и порты вывода и др.
Рассмотрим примеры инициализации и работы с устройствами ввода-вывода разработанного устройства.
;ATmega64
.include "m64def.inc"
.def out_fig_code = r21 ;код выводимого символа для индикатора
.def out_seg = r22 ;номер текущего сегмента
.def d1 = r4
.def d2 = r5
.def d3 = r6d1 = r7
.def d2 = r8
.def d3 = r9d1 = r10
.def d2 = r11
.def d3 = r12d1 = r13
.def d2 = r14
.def d3 = r15d1 = r16
.def d2 = r17d1 = r18
.def d2 = r19
.equ out_seg16 = 7
.dseg
.org 0x100
.cseg
.org 0reset
;-------------
; начало программы
reset:out_fig_codeout_seg
ldi r20, out_seg16
; программирование портов F и С на вывод
ldi r20, 7ddrc, r20r20, $ffddrf, r20:out_seg, 1 ; на сегмент 1out_fig_code, LLHLHHHL ; вывод . out_pp ; вызов подпрограммы вывода
ldi out_seg, 2 ; на сегмент 2out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, 3 ; на сегмент 3out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
rcall delay05out_seg, 4 ; на сегмент 4out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, 5 ; на сегмент 5out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, 6 ; на сегмент 6out_fig_code, LLHLHLHL ; вывод *
rcall out_pp ; вызов подпрограммы вывода
rcall delay05out_seg, 7 ; на сегмент7out_fig_code, LHLLHLLL ; вывод H
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, 8 ; на сегмент 8out_fig_code, LHLLLHLH ; вывод E
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, 9 ; на сегмент 9out_fig_code, LHLLHHLL ; вывод L
rcall out_pp ; вызов подпрограммы вывода
rcall delay05out_seg, A ; на сегмент 10out_fig_code, LHLLHHLL ; вывод L
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, B ; на сегмент 11out_fig_code, LHLLHHHH ; вывод O
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, C ; на сегмент 12out_fig_code, LLHLHLHL ; вывод *
rcall out_pp ; вызов подпрограммы вывода
rcall delay05out_seg, D ; на сегмент 13out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, E ; на сегмент 14out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
ldi out_seg, F ; на сегмент 15out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
rcall delay05out_seg, 10 ; на сегмент 16out_fig_code, LLHLHHHL ; вывод .
rcall out_pp ; вызов подпрограммы вывода
;-------------
; подпрограмма вывода на индикатор
out_pp:
out PORTC, r20PORTF, out_fig_code
out PORTC, out_seg
Рис.
Другое по теме:
Цифровой блок управления электроприводом Номер зачетной книжки 20001484 Элементная база: ТТЛ Диапазон изменения угла поворота: a=150+5n±5=165 - 175 кодовых импульсов Относительный световой ток фотодиода: IC / IT = 5+n=9 Относительная амплитуда помехи: IП / IC = 0,1 Номина ...