Moin

Wenn ich den folgenden Code mit MPLAB simuliere wiederfährt etwas was ich nicht nachvollziehen kann.
Es geht um diese Zeilen:
incf y, f
movlw .1
movwf temp
rrf temp
rlf data_2

Normalerweise sollte nach dem incf Befehl das Z flag gesetzt sein wenn in y ein Überlauf stattfindet. So weit so gut..
Nach den nächsten zwei Zeilen wird das Z flag allerdings wieder gelöscht.
Also quasi nach dem movwf Befehl.
Ich habe gelesen dass, movf das Z flag beeinflusst, movwf jedoch nicht.
Was habe ich da übersehen?
Die Passage um die es sich handelt findet Ihr am Ende das Codes unter dem label "one"

Code:
	list p=16F84A

	#include <p16F84A.inc>

	__CONFIG 	_PWRTE_ON & _WDT_OFF & _XT_OSC 



y		Equ		0x30
data_1	Equ		0x31
data_2	Equ		0x32
temp	Equ		0x33






;****************************************************************
;*	Programmstart												*
;****************************************************************
	org 	0x0000 
  	clrf	PCLATH
   	clrf	STATUS
 	clrf	INTCON
  	goto	INIT	 
 	org 	0x0004 
    goto	INT_ROUT	
	org 0x0020 

;***************************************************************
;*	Initialisierung											   *
;***************************************************************	
INIT									; Initialization
	bsf		STATUS, RP0
	movlw	B'00000000'					; PORTA output
	movwf	TRISA
	movlw	B'00000001'					; PORTB output except RB0
	movwf	TRISB
	bcf		STATUS, RP0

CONFIG_OPTION_REG
	bsf		STATUS, RP0
	movlw	B'10000001'					; Pull-up´s off : INT on falling edge : 
	movwf	OPTION_REG					; TMR0 counts internal clock : prescaler 1:4 TMR0
	bcf		STATUS, RP0
	bcf		STATUS, Z

CONFIG_INTCON
	movlw	B'00100000'					; INT on : T0IE on : INTE :off
	movwf	INTCON						; RBIE off : T0IF, INTF, RBIF cleared

;****************************************************************
;*	Identyfikacja naglowka!										*
;****************************************************************
detect
	btfsc	PORTB, 0					; Warte auf low 
	goto	detect
	call	stoper_4t					; 2400ms (naglowek)
	btfss	PORTB, 0
	goto	detect						; Fehler, wenn nach 2,4ms immer noch low
detect_bit
	btfsc	PORTB, 0
	goto	detect_bit
	call	vor_bitempfang
	
stoper_4t
	bsf		STATUS, RP0
	movlw	B'10000011'	
	movwf	OPTION_REG					; prescaler TMR0 -> 1:16
	bcf		STATUS, RP0
	movlw	.106						; TMR0 laden für 2,4ms
	movwf	TMR0
	btfsc	INTCON, T0IF
count_1
	btfss	INTCON, T0IF
	goto	count_1
	return


vor_bitempfang
	movlw	.248						; Variable wird geladen um abzählen 
	movwf	y							; zu können ob data_1 voll ist
bitempfang	
xt
	bsf		STATUS, RP0
	movlw	B'10000001'					; prescaler TMR0 -> 1:4
	movwf	OPTION_REG
	bcf		STATUS, RP0
	bcf		INTCON, T0IF
	movlw	.109
	movwf	TMR0
count_2
	btfss	INTCON, T0IF
	goto	count_2
	btfsc	PORTB, 0
	goto	zero						; sende null
	bsf		STATUS, RP0
	movlw	B'10000001'					; prescaler TMR0 -> 1:4
	movwf	OPTION_REG
	bcf		STATUS, RP0
	bcf		INTCON, T0IF
	movlw	.109
	movwf	TMR0
count_3
	btfss	INTCON, T0IF
	goto	count_3
	goto	one
	
;**************************************************************
;*	eine 0 wurde empfangen, wird nun gespeichert			  *
;**************************************************************
zero
	btfss	STATUS, Z
	goto	teil_1z
teil_2z
	movlw	.0
	movwf	temp
	rrf		temp
	rlf		data_2
	bsf		STATUS, Z
	goto	bitempfang
teil_1z
	incf	y, f	
	movlw	.0
	movwf	temp
	rrf		temp
	rlf		data_1
	btfsc	STATUS, Z
	bsf		STATUS, Z
	goto	bitempfang

;**************************************************************
;*	eine 1 wurde empfangen, wird nun gespeichert			  *
;**************************************************************
one
	btfsc	STATUS, Z
	goto	teil_1o
teil_2o
	incf	y, f
	movlw 	.1
	movwf	temp
	rrf		temp
	rlf		data_2
	goto	bitempfang
teil_1o
	movlw	.1
	movwf	temp
	rrf		temp
	rlf		data_1
	bcf		STATUS, Z
	goto	bitempfang
	

INT_ROUT

	end
Gruß
lk