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"
Gruß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
lk







Zitieren

Lesezeichen