Проблема с COUNT

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

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

		ldi		count,8
		sei
;************************************************
;* 	;;/ Send command SEARCH and two READ ;;* 	*
;************************************************
Wait_Bit_SEND:
		sbrs	Flags,fl_Bit_SEND
		rjmp	Wait_Bit_SEND
		cbr		Flags,1<<fl_Bit_SEND
		dec		count
		breq	SEND_twoREAD_BIT
		outi	UCSRB,1<<RXCIE|1<<TXCIE|1<<RXEN|1<<TXEN
		rjmp	Wait_Bit_SEND
SEND_twoREAD_BIT:
		outi	UCSRA,1<<TXC
		subi	count,-2
SEND_READ_BIT:
		outi	UDR,READDS18
WAIT_READ:
		in		temp,UCSRA
		sbrs	temp,RXC
		rjmp	WAIT_READ
		in		temp,UDR
		dec		count
		breq	SEARCH_VALUE_BIT
		mov		temp1,temp
		rjmp	SEND_READ_BIT
;************************************************
;* 				;;/ FIND NUMBER ;;* 			*
;************************************************
SEARCH_VALUE_BIT:	
		cpse	temp1,temp
		rjmp	Not_Conflict
		cpse	TEMP1,ZERO
		rjmp	ERROR_SENSOR
		rjmp	Found_Conflict
Not_Conflict:
		cpse	temp1,zero
		sbr		Shift_REG,1<<MSB_REG
		lsr		Shift_REG
		out		UDR,temp1
		inc		count
		sbrc	count,Value_8
		st		-X,Shift_REG
		inc		Bit_Number
		cpi		Bit_Number,64
		brne	SEND_twoREAD_BIT
Что бы не использовать два регистра, использую count сразу для двух циклов. Но вот после этого

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

sbrc	count,Value_8
		st		-X,Shift_REG
мне бы его обнулить. Никак не придумаю , как. Help me , please
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20093
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

CLR не катит?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Катит :))) , так же eor , andi с нулем , subi из count 8, но вот куда бы их впихнуть. Так не хочется разновидности br** использовать
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

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

sbrc   count,Value_8
      st      -X,Shift_REG
Т.е. тебе места не хватает на месте "st -X,Shift_REG"? Сделай rjmp куда-нибудь, скажем перед Not_Conflict , сделай что надо там и rjmp назад. :)

:idea: Или дважды sbrc count,Value_8 :))
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Мне не хватает "ширины шага" команды SBRC . Надо записать в SRAM и обнулить count . Shift_REG - может втолкнуть в себя только 8-бит , а надо же 64. Ставить 8 регистров - какое-то гадостное душевное чувство не позволяет. А два rjmp для одного действия - перебор. Похоже придётся всё таки к BR** " обращаться".
Реклама
Опытный кот
Аватара пользователя
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна

Сообщение avreal »

Kavka писал(а)::idea: Или дважды sbrc count,Value_8 :))
+1
Я не стесняюсь ставить две skip-команды с одинаковым условием подряд (не по периферии, конечно :-) )

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

      sbrc   count,Value_8
      st      -X,Shift_REG
      sbrc   count,Value_8
      clr    count
просто чтобы метку не ставить, глаз об неё не тормозить потом (gnu as имеет локальные метки, так что выдумывать не надо, но чтобы не рябило).
По сравнению с

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

      sbrc   reg, bit
      rjmp 1f
      command1
      command2
1:
вариант

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

      sbrc   reg, bit
      command1
      sbrc   reg, bit
      command2
по размеру кода не отличается, по времени выполнения на один такт больше в случае невыполнения условия и одинаково в случае выполнения.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Kavka , avreal СПАСИБО!!! Пойду этим путём.

Кстати avreal из Ваших P.S пора уже сбоник издавать :)))
Ответить

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