Сб мар 28, 2020 09:59:33
Сб мар 28, 2020 10:31:39
Сб мар 28, 2020 10:41:45
COKPOWEHEU писал(а):На самом деле разницы между метками в .cseg и .dseg нет: это просто адреса памяти в удобочитамом виде. Заполнением памяти или ее распределением они не занимаются.
Сб мар 28, 2020 11:28:41
Сб мар 28, 2020 11:35:13
Сб мар 28, 2020 12:03:37
Сб мар 28, 2020 12:18:35
Отсутствие поддержки этой иллюзии в языке.shonty писал(а):"Переменная" - это иллюзорное понятие. материализованное в понимании многих программистов. Но что мешает создать эту иллюзию в ассемблере?
Starichok51 писал(а):shonty, регистру тоже можно присвоить имя.
Сб мар 28, 2020 13:14:54
COKPOWEHEU писал(а):А теперь уберите оттуда метки и убедитесь, что объем не изменился.
Память вы заняли директивой .byte, а метка только указывает на нее.
Сб мар 28, 2020 20:11:03
Вс мар 29, 2020 11:31:46
да, r16 - это тоже имя. и меня всегда бесило, зачем в многочисленных примерах плодят эти новые имена temp, temp1 и тому подобное. логика такой замены сомнительна (для меня).COKPOWEHEU писал(а):А чем регистр по имени temp лучше регистра по имени r16?
Вс мар 29, 2020 13:33:46
Starichok51 писал(а):новые имена я присваиваю только тем регистрам, которые несут определенную функцию в программе, чтобы по имени сразу было видно, для чего регистр предназначен.
Вс мар 29, 2020 14:58:09
Вс мар 29, 2020 17:09:32
Вс мар 29, 2020 23:11:19
/* МАТРИЧНАЯ КЛАВИАТУРА с выводом в порт двоичного значения (на дисплей символа) нажатой кнопкой
Программа производит считывание матричной клавиатуры.
При нажатой кнопке - выводим ее двухзначный код, иначе - выводим "0".
Матричная клавиатура состоит из 16 клавиш
МЛАДШИЕ 4 разряда порта - столбцы
СТАРШИЕ 4 разряда порта - строки
1 клавиша - на пересечении "1" и "А".
Микроконтроллер ATtiny2313
Тактовая частота 8 MHz
*/
.include "tn2313def.inc"
;НАСТРОЙКА ПОРТОВ
.def temp =R16
.def line =R17
.def column =R18
.def number =R19
.def count_delay =R20
.equ PORT_LED =PORTD
.equ PORT_SW =PORTB
.equ PIN_SW =PINB
.cseg
.org 0x00 rjmp init
;ИНИЦИАЛИЗАЦИЯ
init: ldi temp,low(RAMEND) ;Инициализация стековой памяти
out SPL,temp
ser temp
out DDRD,temp ;Порт D на выход с 0
clr temp
out PORT_LED,temp
ldi temp,0x0F ;Младшая тетрада - выход с 0
out DDRB,temp ;Старшая тетрада - вход с подтяжкой
swap temp
out PORT_SW,temp
;ОСНОВНОЙ ЦИКЛ
MAIN: rcall Keyboard
out PORT_LED,number
clr number
rjmp MAIN
Keyboard: ldi column,0b11111110 ;Обнуление первого столбеца
Next_column:rcall Ch_of_line ;Вызов подпрограммы проверки строк
brne SW_press ;Если кнопка нажата, то Z=0 (в регистре line осталось какое то число)
rol column ;Обнуление след. столбца
sbrc column,4 ;Если еще/уже не были/были обнулены все столбцы по очередно, то
rjmp Next_column ;-обнуляем следующый столбец
rjmp Keyboard ;-обнуляем снова первый столбец
SW_press: rcall delay
rcall Ch_of_line ;Считывание устойчивого состояния
breq Keyboard ;В случае ложного срабатывания (от помехи) - опрашиваем заново
mov R5,line ;Сохранение значения
rcall Ch_of_line ;Ожидание отпускания кнопки
brne PC-1 ;
rcall delay
mov line,R5
add number,line ;Загрузка в регистр number относительного адреса нажатой клавиши
lsr column ;Определение абсолютного адреса нажатой клавиши
brcc Exit_SW
subi number,-4
rjmp PC-3
Ch_of_line: out PORT_SW,column ;Обнуление выбранного столбеца
ldi line,5 ;Регистр будет сдвинут 4 раза
in temp,PIN_SW ;Считывание состояния Вывода порта SW
m1: dec line
breq Exit_SW
lsl temp ;Сдвиг регистра для определения нажатой кнопки
brcs m1
Exit_SW: ret
delay:
; ===========
; delay loop generator
; 400000 cycles:
; ----------
; delaying 399999 cycles:
ldi R21, $97
WGLOOP0: ldi R22, $06
WGLOOP1: ldi R23, $92
WGLOOP2: dec R23
brne WGLOOP2
dec R22
brne WGLOOP1
dec R21
brne WGLOOP0
; ----------
; delaying 1 cycle:
nop
; ===========
ret
Пн мар 30, 2020 09:53:18
Пн мар 30, 2020 11:08:43
Пн мар 30, 2020 11:13:36
да, r16 - это тоже имя. и меня всегда бесило, зачем в многочисленных примерах плодят эти новые имена temp, temp1 и тому подобное. логика такой замены сомнительна (для меня)....COKPOWEHEU писал(а):А чем регистр по имени temp лучше регистра по имени r16?
Пн мар 30, 2020 16:02:41
//==================
//---------- List used register ----------
// n/u - Not Used
// = r0 result multiply
// = r1 result multiply
.def RSREG = r2
.def CNT_LCD = r3
.def CNT_2 = r4
.def KEYS_PREV = r5
.def KEYS_CURRENT = r6
// = r7
// = r8
// = r9
// = r10
// = r11
// = r12
// = r13 n/u
// = r14 Used.
// = r15 Used.
//----------
.def TEMP = r16 // Used. Everywhere
// = r17 Used. Everywhere
// = r18 Used. Everywhere
// = r19 Used. Everywhere
.def FSM_STATE = r20
.def FSM_FLAGS = r21
.def CNT = r22
.def FLAGS = r23
// = r24 // adiw/sbiw
// = r25 // adiw/sbiw
// = r26 XL
// = r27 XH
// = r28 YL
// = r29 YH
// = r30 ZL
// = r31 ZH
//==================
Пн мар 30, 2020 17:10:34
Пн мар 30, 2020 18:45:21