Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#151 27.09.2006 22:22:49

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: AVR для "чайников"

ну, пока вроде речь шла об одной кнопке. Если их несколько, можно читать весь порт где они висят и запоминать в однобайтную переменную. Тогда же легко реализуется выполнение какого-либо действия при одновременном нажатии нескольких кнопок. Но мне в данный момент одновременное нажатие нескольких не нужно.


......There is someone in my head, but it's not me.......

Вне форума

#152 28.09.2006 09:43:58

Dmitry
Забанен
Откуда: Запорожье
Здесь с 03.02.2004
Сообщений: 3,105
Сайт

Re: AVR для "чайников"

Так отож...


Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....

Вне форума

#153 29.09.2006 11:13:46

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: AVR для "чайников"

Dmitry пишет:

Так отож...

Глубокомысленное заявление... smile

Блин, вообще нет времени заниматься АВРами.. Засада какая-то настала... sad


......There is someone in my head, but it's not me.......

Вне форума

#154 02.10.2006 09:33:43

Dmitry
Забанен
Откуда: Запорожье
Здесь с 03.02.2004
Сообщений: 3,105
Сайт

Re: AVR для "чайников"

Матроскин пишет:

Глубокомысленное заявление... smile

Не нравится украинчкие присказки, пожадте немецкие:
"Аппетит приходит во время еды".
==============================
Это сегодня Вам достаточно одной кнопки, а завтра - захочется больше. Переделывать придется все по-новой....
=============================
(еще не проснулся, много стучать по клаве лень)


Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....

Вне форума

#155 05.10.2006 18:12:52

dr_allcom
Новичок
Здесь с 05.10.2006
Сообщений: 2

Re: AVR для "чайников"

Здрасте всем! У меня такой вопрос: кто-нибудь делал что-то серъезное с макросами, используя параметры @0, @1 и т.д.?

Вне форума

#156 05.10.2006 23:19:05

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

Что серъезное можно сделать с макросами? Даже страшно стало smile

Использую такие макросы:

.macro	clbr			;clear bit in register
	cbr @0,exp2(@1)
.endm

.macro	stbr			;set bit in register
	sbr @0,exp2(@1)
.endm

.macro	bbrc			;branch if bit in register clear
	sbrs @0,@1
	rjmp @2
.endm

.macro	bbrs			;branch if bit in register set
	sbrc @0,@1
	rjmp @2
.endm

.macro	bbic			;branch if bit in I/O clear
	sbis @0,@1
	rjmp @2
.endm

.macro	bbis			;branch if bit in I/O set
	sbic @0,@1
	rjmp @2
.endm

.macro	addi			;add immediate 
	subi @0,-@1
.endm

.macro	ldx			;load XL, XH with word
	ldi 	XL,byte1(@0)
	ldi 	XH,byte2(@0)
.endm

.macro	ldy			;load YL, YH with word
	ldi	YL,byte1(@0)
	ldi	YH,byte2(@0)
.endm

.macro	ldz			;load ZL, ZH with word
	ldi	ZL,byte1(@0)
	ldi	ZH,byte2(@0)
.endm

.macro	table			;load Z pointer
	ldi	ZL,low (@0*2)
	ldi	ZH,high(@0*2)
.endm

Вне форума

#157 06.10.2006 20:18:28

dr_allcom
Новичок
Здесь с 05.10.2006
Сообщений: 2

Re: AVR для "чайников"

Тогда еще вопросы.
1. Как компилятор понимает символы @0, @1 и т.д. ? Как числа ?
2. Кроме как использования в выражениях (expression) их еще можно где-нибудь использовать?
3. Конструкции .if и #if по Help'у одно и тоже (при проверке параметров макросов), а на самом деле?

Вне форума

#158 07.10.2006 00:47:58

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

dr_allcom пишет:

1. Как компилятор понимает символы @0, @1 и т.д. ? Как числа ?

Вместо @0 и т.д. тупо подставляется тот текст, что Вы написали через запятые в качестве параметров при вызове макроса.

dr_allcom пишет:

2. Кроме как использования в выражениях (expression) их еще можно где-нибудь использовать?

Внутри макроса можно использовать везде: в instructions, directives, expressions.

dr_allcom пишет:

3. Конструкции .if и #if по Help'у одно и тоже (при проверке параметров макросов), а на самом деле?

Конструкции .if и #if  - не одно и то же. Конструкции типа .if и подобные являются директивами ассемблера, а конструкции типа #if - директивами препроцессора. Директивы препроцессора имеют стиль языка Си.  Они работают только с символами препроцессора, определенными с помощью #define. Символы, которые не определены таким образом, приравниваются к нулю. Директивы ассемблера работают с символами, определенными с помощью .equ. Вот примеры использования:

альтернатива 1:
----------------------------------
.equ Fclk = 16000 ;Fclk, kHz
.equ Tbas = 5 ;time base, mS

.equ T1Div = Fclk*Tbas
.equ MAXWORD = 0xFFFF

.if T1Div > MAXWORD
.error "out of range constant"
.endif
-----------------------------------

альтернатива 2:
-----------------------------------
#define Fclk  16000  //Fclk, kHz
#define Tbas  5      //time base, mS

#define T1Div  Fclk*Tbas
#define MAXWORD  0xFFFF

#if T1Div > MAXWORD
#error "out of range constant"
#endif
-----------------------------------

Во втором примере комментарии тоже выполнены в стиле языка Си, чтобы не смешивать разные стили.

Вне форума

#159 07.10.2006 20:57:51

ASni
Участник
Откуда: Николаев / Украина
Здесь с 18.11.2004
Сообщений: 34

Re: AVR для "чайников"

Помогите разобраться с AVR
измерение скорости вращения двигателя
взято из книги "программирование на С для avr и pic"
90S8535, 8MHz
прерывание с оптоперывателя, каждый оборот

........
PORTD = _BV(PD6);
TIMSK = _BV(TICIE1);
TCCR1B = _BV(CS11);
TCNT1 = 0;
......

INTERRUPT(SIG_INPUT_CAPTURE1)
{
  unsigned int CurrentTime, T;
  CurrentTime = (256 * ICR1H) + ICR1L;
  if (CurrentTime > PreviousTime) T = CurrentTime - PreviousTime;
  else T = 0xFFFF - CurrentTime + PreviousTime;
  sprintf(buffer, "%06u rpm", (unsigned long)60E6 / (unsigned long)T );
  SetLCDPosition(3, 4);
  ShowStr(buffer);
  PreviousTime = CurrentTime;
}

мне непонятна вот эта сторока
CurrentTime = (256 * ICR1H) + ICR1L
зачем умножать на 256 старший байт и прибавлять младший?

как я понял при прерывании в ICR1 попадает число из TCNT1.
это не то число что нам нужно для вычислений? надо еще с ним извращатся?

Отредактировано ASni (08.10.2006 22:00:48)

Вне форума

#160 08.10.2006 23:46:04

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

ASni пишет:

мне непонятна вот эта сторока CurrentTime = (256 * ICR1H) + ICR1L зачем умножать на 256 старший байт и прибавлять младший? как я понял при прерывании в ICR1 попадает число из TCNT1. это не то число что нам нужно для вычислений? надо еще с ним извращатся?

Именно это число нам и нужно. Просто регистр захвата 16-разрядный, читать его нужно побайтно. Нужно сначала считать младший байт, затем считать старший, умножить его на 256 (или сдвиуть 8 раз влево) и сложить с младшим. Так мы из двух отдельных байтов снова сделаем 16-разрядное число.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.077 сек, 7 запросов выполнено - Использовано памяти: 601.54 Кбайт (Пик: 651.91 Кбайт) ]