Код: Выделить всё
LDI R16,(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)Код: Выделить всё
LDI R16,(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)Можно сразу в машинном коде писатьГолимый писал(а):И зачем такие усложнения, если можно просто LDI R16, 0x00000000b?
ниоткуда они там не взялись: имена битов использовались для вычисления нужного значения, которое потом было помещено в R16. имена - это ведь просто названия. вы можете называть что угодно как угодно, ничего в мире от этого не изменится. но когда вы собираетесь изменять содержимое регистра управления компаратором, вам лучше знать, что те или иные биты соответствуют правильным битам в этом регистре. и дя этого лучше применять правильные их названия.Голимый писал(а): откуда в регистре R16 взялись биты, с именами битов управляющего регистра компаратора.
Имена битов определены в специальных файлах. В зависимости от среды программирования их надо включать проект самому или среда сама их включит при выборе камня. Вот кусок из файла io8a.hГолимый писал(а):...именами битов управляющего регистра компаратора. ...
Код: Выделить всё
#define ACSR _SFR_IO8(0x08)
#define ACIS0 0
#define ACIS1 1
#define ACIC 2
#define ACIE 3
#define ACI 4
#define ACO 5
#define ACBG 6
#define ACD 7Код: Выделить всё
; ***** BIT DEFINITIONS **************************************************
; ***** ANALOG_COMPARATOR ************
; SFIOR - Special Function IO Register
.equ ACME = 3 ; Analog Comparator Multiplexer Enable
; ACSR - Analog Comparator Control And Status Register
.equ ACIS0 = 0 ; Analog Comparator Interrupt Mode Select bit 0
.equ ACIS1 = 1 ; Analog Comparator Interrupt Mode Select bit 1
.equ ACIC = 2 ; Analog Comparator Input Capture Enable
.equ ACIE = 3 ; Analog Comparator Interrupt Enable
.equ ACI = 4 ; Analog Comparator Interrupt Flag
.equ ACO = 5 ; Analog Compare Output
.equ ACBG = 6 ; Analog Comparator Bandgap Select
.equ ACD = 7 ; Analog Comparator Disable
; ***** SPI **************************
; SPDR - SPI Data Register
.equ SPDR0 = 0 ; SPI Data Register bit 0Код: Выделить всё
ldi temp, (1<<DDD6)|(1<<DDD7)
out DDRD, temp
ldi temp, (1<<DDB0)
out DDRB, tempВозможно, я уже писал об этом где-то...ARV писал(а):а когда написано (1<<ADEN) - это однозначно скажет, что бит будет стоять на нужном месте.
Код: Выделить всё
CLR R16
ORI R16,1
ORI R16,2
ORI R16,8
Код: Выделить всё
.equ BITS 8 ;имелось в виду количество бит в байте
.equ BASE 2 ;имелось в виду основание двоичной системы
.equ TRUE 1 ;единственная осмысленная константа
clr r16
;какой-то код
ori r16, TRUE
;какой-то код
ori r16, BASE
;какой-то код
ori r16, BITSКод: Выделить всё
LDI R16, 0x11Код: Выделить всё
ori r16,1
ori r16,2
andi r16,252
ori r16,8
andi r16,240
andi r16,224
andi r16,192
andi r16,128В том-то и делоЯ может чего то не догоняю в асме, но разве невозможно записать в регистр число одной командой?
Так я ж объясяю: это писала ДЕВИЦА, в первый раз увидевшая МК.FitoKot писал(а):Я может чего то не догоняю в асме, но разве невозможно записать в регистр число одной командой?