как в АСМе узнать какие биты в данном РОНе =1?

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

кто сталкивался помогите плз

in Temp1,PinA

какие в Temp1 биты равны "1" ???
как это узнать??
побитно перебирать сотни комбинаций как-то тяжеловато
я могу получать вот такие данные
0b00100110,
0b00001000
кусок кода скиньте плз (если не проблемно) буду очень рад
Контактная информация:
Реклама
Вечно гонимый
Аватара пользователя
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам

Сообщение avr123.nm.ru »

пока не ответили шепну - посмотри страницы 5 - обе части.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

я понял что надо массивом проверять, только не въехать так сразу
и ктому же там на С всё
опять же если я начну изучать С у меня времени реально уйдет очень много

а я сейчас почти все сделал осталось разобраться с этим вопросом и
ЕЩЕ ОДНИМ ВОПРОСОМ:

- как выяснить что больше Temp4 или Temp5 ?????
и ... можно сдавать программу в прошивку
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам

Сообщение avr123.nm.ru »

надо поискать подходящую инструкцию или вычесть одно из другого и посмотреть больше ли нуля ?

тут же вроде народ на АСМе пишет.... АУ ?????
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
P S
Открыл глаза
Аватара пользователя
Сообщения: 62
Зарегистрирован: Вс авг 20, 2006 21:04:41
Откуда: Москва

Сообщение P S »

На асме не скажу, но идея у меня такая: методом последовательного приближения. Т.е.
a:=Temp1; bit[1]....bit[7]:=0;
if a>=128 then begin bit7:=1; a:=a-128 end;
if a>=64 then begin bit6:=1; a:=a-64 end;
if a>=32 then begin bit5:=1; a:=a-32 end;
if a>=16 then begin bit4:=1; a:=a-16 end;
if a>=8 then begin bit3:=1; a:=a-8 end;
if a>=4 then begin bit2:=1; a:=a-4 end;
if a>=2 then begin bit1:=1; a:=a-2 end;
if a>=1 then bit0:=1

Где-то так. Это идея, которую можно ещё оптимизировать под свои цели. А вообще так работают многие АЦП 8)
МуррррК
Контактная информация:
Реклама
Вечно гонимый
Аватара пользователя
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам

Сообщение avr123.nm.ru »

сделайте в компиляторе CVAVR и посмотрите листинг на АСМе. делайте так же.

Си изучать не нужно - просто открыть любой пример компилятора и добавить свое выражение в прогу.
Контактная информация:
Реклама
P S
Открыл глаза
Аватара пользователя
Сообщения: 62
Зарегистрирован: Вс авг 20, 2006 21:04:41
Откуда: Москва

Сообщение P S »

или ещё мысль: сдвигать вправо и смотреть чётное или нет
МуррррК
Контактная информация:
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

спасибо всем что не оставили
за выходные не нытьем так каканием вот что получилось

Код: Выделить всё

Start:
	in Temp1,PinA
	cpse Temp1,0	;данные есть?? в порту А
	rjmp Not_Zero	;если НЕ НОЛЬ в порту А
	rjmp Zero	;если НОЛЬ в порту А
 ret
	Opros_1:
		cpse Temp2,0	;ОПРОС первый?
		rcall Opros_2	; если ОПРОС не первый		--переход
		inc Temp2	; если ОПРОС первый		увеличиваем счетчик ОПРОСОВ
		rcall Delay	;-----задержка
	 ret
	Not_Zero:	; ---==// поступили данные на входе ПОРТА *А* \\==---
		inc Temp5	;увеличим счетчик ЕДИНИЦ
		rcall Opros_1
		rjmp Start				;--go to Start--
	Zero:		; ---==// нет данных на входе ПОРТА *А* \\==---
		inc Temp4
		rcall Compare_T45	;проверяем, если у нас были ЕДИНИЦЫ - РеСтарт!!!
		rcall Opros_1
		rjmp Start				;--go to Start--
	Opros_2:
		cpse Temp2,1	;ОПРОС второй?
		rcall Shag_PB	; ОПРОС третий!!		--переход
	 ret
;*************************************************
;СРАВНЕНИЕ ПЕРЕМЕННЫХ нолЕВЫХ и единиц
	Compare_T45:		;уходит на СТАРТ, если НОЛей ((1) или (2 и 1-единица))
		cp Temp4,Temp5		;--это у нас для все остальных подпрограмм
		breq Clr_S
		cpi Temp5,1	;ЭТО у нас для если все НОЛики и 1 иголочка!!!
		breq Clr_S
	 ret
	  Clr_S:
	  	rcall Clear_S
	  	Rcall Delay
	  	rjmp Start
;**************-конец сравнения-******************
	Clear_s:				;Clear RON 4,5,2
	  	ldi Temp4,0	;в НОЛЬ --счетчик "нулей"
	  	ldi Temp5,0	;в НОЛЬ --счетчик "единиц"
	  	ldi Temp2,0	;в НОЛЬ --счетчик "опросов"
	  ret
Мрррррр рррр
жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
ТЯПЕРИЧА другой ВОПРОС
как мне передать регистры скажем R21,22,23 (РОН) Блоку Управления??
Характеристика обмена:
- скорость обмена 19200 бит\с
- проверка четности - нет
- один стартовый бит
- два стоп бита
- режим обмена - RTU
связь с использованием протокола MODBUS (похоже наш протокол, т.к. не встречался раньше с ним.
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Вообще в асме есть специальные комманды... переход если больше, если меньше... равно не равно... :cry:
Today fine night...
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

а какие?
подскажи плз
просто это все что я нашел,
может чего на свежачка подскажешь...?
Контактная информация:
Вечно гонимый
Аватара пользователя
Сообщения: 331
Зарегистрирован: Пн сен 04, 2006 20:25:28
Откуда: самоучитель по микроконтроллерам

Сообщение avr123.nm.ru »

они начинаются на BR т.е. "бранч" - ветвление.

инструкции хорошо описаны на gaw.ru по-русски
и в помощи по АСМу в VMLAB
Контактная информация:
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

угу, спасибо
век живи век учись
тут новый вариант

Код: Выделить всё

Start:
	in Temp1,PinA
	ldi Temp3,0
	cpse Temp1,Temp3	;данные есть?? в порту А
	rjmp Not_Zero		;если НЕ НОЛЬ в порту А
	rjmp Zero		;если НОЛЬ в порту А
 ret
	Opros_1:
		ldi Temp3,0
		cpse Temp2,Temp3;ОПРОС первый?
		rcall Opros_2	; если ОПРОС не первый		--переход
		inc Temp2	; если ОПРОС первый		увеличиваем счетчик ОПРОСОВ
		rcall Delay	;-----задержка
	 ret
	Not_Zero:	; ---==// поступили данные на входе ПОРТА *А* \\==---
		inc Temp5	;увеличим счетчик ЕДИНИЦ
		rcall Opros_1
		rjmp Start				;--go to Start--
	Zero:		; ---==// нет данных на входе ПОРТА *А* \\==---
		inc Temp4
		rcall Compare_T45	;проверяем, если у нас были ЕДИНИЦЫ - РеСтарт!!!
		rcall Opros_1
		rjmp Start				;--go to Start--
	Opros_2:
		ldi Temp3,1
		cpse Temp2,Temp3	;ОПРОС второй?
		rcall Shag_PB		; ОПРОС третий!!		--переход
	 ret
	Shag_PB:
		cpi Temp0,0		;здесь мы пытаемся начать работу с Портом В
		breq Temp0_Step		;присвоить Порту В 0b0001000 & Go to !!!-Start-!!!
		cpi Temp1,0		;в порту А   ПУСТО??
		breq Temp0_Step		;в Порту А данных нет --проверяем следующий столбец
		rjmp Identifer		;идентифицируем нажатую кнопушку
;*************************************************
;СРАВНЕНИЕ ПЕРЕМЕННЫХ нyлЕВЫХ и единиц
	Compare_T45:		;уходит на СТАРТ, если НОЛей ((1) или (2 и 1-единица))
		cp Temp4,Temp5	;--это у нас для все остальных подпрограмм
		brsh Clr_S
		cpi Temp5,1	;ЭТО у нас для если все НОЛики и 1 иголочка!!!
		breq Clr_S
	 ret
	  Clr_S:
	  	rcall Clear_S
	  	Rcall Delay
	  	rjmp Start
;**************-конец сравнения-******************
	Clear_s:		;Clear RON 4,5,2
	  	ldi Temp4,0	;в НОЛЬ --счетчик "нулей"
	  	ldi Temp5,0	;в НОЛЬ --счетчик "единиц"
	  	ldi Temp2,0	;в НОЛЬ --счетчик "опросов"
	  ret
в принципе, здесь другим манером сделать как мне кажется нельзя
это наиболее оптимальный вариант

ХОТЯ, если есть варианты жду ОТВЕТов...
Контактная информация:
Встал на лапы
Сообщения: 138
Зарегистрирован: Пн сен 18, 2006 13:39:03
Откуда: Попуа Новой Гвинеи (Зимбабва)

Сообщение CyberMerlin »

помогите плз
сколько я могу Регистров общего Н использовать под свои нужды в ATmega 162????
я сейчаст семь с R16 по R24 использую
и мне не хватает жестко.
могу ли использовать первые 15 регистров???? R1-R15???
Контактная информация:
Ответить

Вернуться в «AVR»