Страница 1 из 1

Проблема с COUNT

Добавлено: Чт окт 25, 2012 23:33:05
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

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 09:07:35
Gudd-Head
CLR не катит?

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 09:29:42
ILYAUL
Катит :))) , так же eor , andi с нулем , subi из count 8, но вот куда бы их впихнуть. Так не хочется разновидности br** использовать

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 12:16:37
Kavka

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

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

:idea: Или дважды sbrc count,Value_8 :))

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 13:31:05
ILYAUL
Мне не хватает "ширины шага" команды SBRC . Надо записать в SRAM и обнулить count . Shift_REG - может втолкнуть в себя только 8-бит , а надо же 64. Ставить 8 регистров - какое-то гадостное душевное чувство не позволяет. А два rjmp для одного действия - перебор. Похоже придётся всё таки к BR** " обращаться".

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 13:47:17
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
по размеру кода не отличается, по времени выполнения на один такт больше в случае невыполнения условия и одинаково в случае выполнения.

Re: Проблема с COUNT

Добавлено: Пт окт 26, 2012 14:20:05
ILYAUL
Kavka , avreal СПАСИБО!!! Пойду этим путём.

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