Autor Tema: problema con lasimulacion de pic16f877a no borra flac rbif  (Leído 2242 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado 17noe

  • PIC10
  • *
  • Mensajes: 7
problema con lasimulacion de pic16f877a no borra flac rbif
« en: 27 de Septiembre de 2015, 11:43:11 »
hola atodos los usuarios de todo pic soy nuevo en el tema y e tenido un problema en la simulacion con el pic16f877a.
el progra es para medir laduracion del pico positibo de la red qe por aqui es 50 hz supuestamente.
mide el tiempo por interrupcion de RB0 a trabes de un optocoplador.
en si esta destinado a medir linea trifasica... para no confudirlos con mi explicacion tratare de mostrar una imagen


no e podido subir la imagen pero aqui esta el programa completo

lo qe esta en rojo es el problema

en mplap
relog 8 Mhz
stimulos  clokc stimulus PB7 estado inicial bajo  ciclo bajo 10580 ciclo alto 9850
                                   PB0 estado inicial bajo  ciclo bajo 9850 ciclo alto 10580
en proteus
v3phase prinera linea al catodo del optocoplador segunda linea al anodo del opto conectada a rb0 con optocoplador en modo inversor i un transistor 2n2222 en modo inversor

segunda linea al catodo del optocoplador y tercera linea al anodo del opto conectada a rb7 con optocoplador en modo inversor i un transistor 2n2222 en modo inversor

y una cosa mas ya e intetaso poner el nibble alto del puertob como salida el error sigue
y si alguien me podriua decir como subir las fotos se loagradeceria mucho
espero sus respuestas :(
;====================================================================
; DEFINITIONS
;====================================================================

   list p=16f877a
#include p16f877a.inc                ; Include register definition file

;====================================================================
; VARIABLES
;====================================================================
reg1 EQU 0x20
reg2 EQU 0x21
reg3 EQU 0x22
;====================================================================
; VARIABLES
; Para combercion de binario a decimal
;====================================================================
Uni_bit0 EQU 0x23 ; Nible bajo de 8 bits
Dec_bit0 EQU 0x24
Cen_res0 EQU 0x25
Uni_bit1 EQU 0x26
Dec_bit1 EQU 0x27
Cen_res1 EQU 0x28
Uni_bit2 EQU 0x29
Dec_bit2 EQU 0x2A
Cen_res2 EQU 0x2B ; Nible alto de 16 bits
Uni_bit3 EQU 0x2C
Dec_bit3 EQU 0x2D
Dbit0 EQU 0x2E
Dbit1 EQU 0x2F
Dbit2 EQU 0x30
Dbit3 EQU 0x31
Dbit4 EQU 0x32
Dbit11 EQU 0x33
Dbit12 EQU 0x34
Dbit13 EQU 0x35
Dbit14 EQU 0x36
Dbit15 EQU 0x37
Dbit16 EQU 0x38
Dbit17 EQU 0x39
Dbit18 EQU 0x3A
Nu_bit EQU 0x3B
Bit_0a7 EQU 0x3C
Bit_8a15 EQU 0x3D
STATUS_temp EQU 0x3E
W_temp EQU 0x3F
Unidad EQU 0x40
Decena EQU 0x41
Centena EQU 0x42
punto EQU 0x43
Uni_mil EQU 0x44
Dec_mil EQU 0x45
Reg_suma2 EQU 0x46
Reg_suma3 EQU 0x47
Reg_resulta00low EQU 0x48
Reg_resulta01low EQU 0x49
Reg_resulta02low EQU 0x4A
Reg_resulta03low EQU 0x4B
Reg_resulta04low EQU 0x4C
Uni EQU 0x4D
Dec EQU 0x4E
Int_ctrL EQU 0x50 ;Control de interrupciones
Sal_ctrl EQU 0x51 ;Control de saltos
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================

   ; Reset Vector
   ORG  0x0
    GOTO  Inicio
   ;vector de interrupcion
   ORG   0x04
   GOTO  ISR
   ORG   0x05
;====================================================================
; CODE SEGMENT
;====================================================================
Tabla_cara ADDWF PCL,F
   RETLW '0'
   RETLW '1'
   RETLW '2'
   RETLW '3'
   RETLW '4'
   RETLW '5'
   RETLW '6'
   RETLW '7'
   RETLW '8'
   RETLW '9'
Tabla ADDWF PCL,F
   GOTO Cero0
   GOTO Uno1
   GOTO Uno2
   GOTO Uno3
   GOTO Uno4
   GOTO Uno5
   GOTO Uno6
   GOTO Uno7
   GOTO Uno8
   GOTO Uno9
   GOTO Uno10
   GOTO Uno11
   GOTO Uno12
   GOTO Uno13
   GOTO Uno14
   GOTO Uno15
   GOTO Uno16
   GOTO Uno17
   GOTO Uno18
   GOTO Uno19
   GOTO Dos20
   GOTO Dos21
   GOTO Dos22
   GOTO Dos23
   GOTO Dos24
   GOTO Dos25   
;====================================================================
;====================================================================
Inicio BSF STATUS,RP0
   MOVLW  0x06
   MOVWF  ADCON1
   MOVLW b'00000000'
   MOVWF TRISA
   MOVLW b'10000001'
   MOVWF TRISB
   MOVLW b'00000000'
   MOVWF TRISC
   MOVLW b'00000000'
   MOVWF TRISD
   BCF STATUS,RP0 ; Aseguramos Banco 0.-
   CLRF PORTA
   MOVLW B'00101100'
   MOVWF punto
;====================================================================
   CALL Demora_15ms
   MOVLW 0x30
   CALL LCD_Comando
   CALL Demora_5ms
   MOVLW 0x30
   CALL LCD_Comando
   CALL Demora_5ms
   MOVLW 0x30
   CALL LCD_Comando
   CALL Demora_5ms
   MOVLW b'00111000'
   CALL LCD_Comando
   CALL Demora_2ms
   MOVLW b'00001110'
   CALL LCD_Comando
   CALL Demora_2ms
   MOVLW b'00000110'
   CALL LCD_Comando
   CALL Demora_2ms
;====================================================================
;====================================================================
   MOVLW  b'10000000';195
   CALL LCD_Comando
   MOVLW 'T' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW 'C' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW 'X' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW '0' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW 'm' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 's' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW  b'11000000';195
   CALL LCD_Comando
   MOVLW 'T' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 'F' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW 'a' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW 'F' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC ;Rutina para escribir un carácter en el LCD.
   MOVLW ' ' ;Coloca el carácter ASCII en W
   MOVLW 'm' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 's' ;Coloca el carácter ASCII en W
   CALL LCDC
;====================================================================
;====================================================================
No0 BTFSS PORTB,0
   GOTO No1
   GOTO No0
No1 BTFSC PORTB,0
   GOTO No2
   GOTO No1
No2 BTFSS PORTB,0
   GOTO No3
   GOTO No2
;====================================================================
No3 BCF INTCON,1
   MOVLW b'11010000'
   MOVWF INTCON
   BSF STATUS,RP0 ;Banco1
   BSF OPTION_REG,6
   BCF STATUS,RP0 ;Banco 0
;====================================================================   
No4 BTFSC Int_ctrL,0
   GOTO No5
   GOTO No4
No5
No6 BTFSC Int_ctrL,1
   GOTO No7
   GOTO No6
   
;====================================================================
;====================================================================
No7 CALL Bi_a_dec
   MOVLW  b'10000101';195
   CALL LCD_Comando
   MOVF Dec_mil,W
   CALL LCDC
   MOVF Uni_mil,W
   CALL LCDC
   MOVF punto,W
   CALL LCDC
   MOVF Centena,W
   CALL LCDC
   MOVF Decena,W
   CALL LCDC
   MOVF Unidad,W
   CALL LCDC
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 'm' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 's' ;Coloca el carácter ASCII en W
   CALL LCDC
   GOTO NoA0
;====================================================================
;====================================================================
LCDC
   BSF PORTA,0
   BSF PORTA,1
   MOVWF PORTD
   NOP
   NOP
   NOP
   BCF PORTA,1 ; Se enviara Caracter.-
   CALL Demora_100Us
   RETURN
;====================================================================
LCD_Comando
   BCF PORTA,0
   BSF PORTA,1
   MOVWF PORTD   ; Se enviara Comando.-
   NOP
   NOP
   NOP
   BCF PORTA,1 ; Envio Comando.-
   CALL Demora_100Us
   RETURN
;====================================================================
;====================================================================
Demora_100Us MOVLW .150
   MOVWF reg1
dos2 DECFSZ reg1,1
   GOTO dos2 ; cuando reg1 llegue a 0
   RETURN
;====================================================================
;====================================================================
Demora_2ms MOVLW .21 ; Aquí se cargan los registros
   MOVWF reg1 ; reg1, reg2 y reg3
; con los valores 10, 20 y 30
dos1 MOVLW .67 ; respectivamente
   MOVWF reg2
uno1   DECFSZ reg2,1 ; le quitare 1 a reg2
   GOTO uno1 ; cuando reg2 llegue a 0
   DECFSZ reg1,1 ; le quitare 1 a reg1
   GOTO dos1 ; cuando reg1 llegue a 0
   RETURN ; regresare al lugar
;====================================================================
;====================================================================   
Demora_5ms MOVLW .31 ; Aquí se cargan los registros
   MOVWF reg1 ; reg1, reg2 y reg3
; con los valores 10, 20 y 30
dos MOVLW .108 ; respectivamente
   MOVWF reg2
uno   DECFSZ reg2,1 ; le quitare 1 a reg2
   GOTO uno ; cuando reg2 llegue a 0
   DECFSZ reg1,1 ; le quitare 1 a reg1
   GOTO dos ; cuando reg1 llegue a 0
   RETURN ; regresare al lugar
;====================================================================
;====================================================================
Demora_15ms MOVLW .16 ; Aquí se cargan los registros
   MOVWF reg1 ; reg1, reg2 y reg3
; con los valores 10, 20 y 30
tres0 MOVLW .25 ; respectivamente
   MOVWF reg2
dos0 MOVLW .25
   MOVWF reg3
uno0 DECFSZ reg3,1 ; Aquí se comienza a decrementar
   GOTO uno0 ; Cuando reg3 llegue a 0
   DECFSZ reg2,1 ; le quitare 1 a reg2
   GOTO dos0 ; cuando reg2 llegue a 0
   DECFSZ reg1,1 ; le quitare 1 a reg1
   GOTO tres0 ; cuando reg1 llegue a 0
   RETURN
;====================================================================
;====================================================================
Bi_a_dec BTFSS Bit_8a15,0
   GOTO B_8a15B0
   BSF STATUS,C
   GOTO B_8a15B1
B_8a15B0 BCF STATUS,C
B_8a15B1 RRF Bit_0a7
   BCF STATUS,C
   RRF Bit_8a15
;====================================================================
;Suma de los dos registros capturados para combersion
;binario decimal
;====================================================================
   BTFSS Bit_8a15,6 ;Comiensa sumando bit - significatibos de 14 a 0
   GOTO Bit13_0
   MOVLW .1
   MOVWF Dbit4
   MOVLW .6
   MOVWF Dbit3
   MOVLW .3
   MOVWF Dbit2
   MOVLW .8
   MOVWF Dbit1
   MOVLW .4
   MOVWF Dbit0
Bit13_0   BTFSS Bit_8a15,5
   GOTO Bit12_0

   MOVLW .8
   ADDWF Dbit3,F
   MOVLW .1
   ADDWF Dbit2,F
   MOVLW .9
   ADDWF Dbit1,F
   MOVLW .2
   ADDWF Dbit0,F
Bit12_0   BTFSS Bit_8a15,4
   GOTO Bit11_0
   MOVLW .4
   ADDWF Dbit3,F
   MOVLW .9
   ADDWF Dbit1,F
   MOVLW .6
   ADDWF Dbit0,F
Bit11_0   BTFSS Bit_8a15,3
   GOTO Bit10_0
   MOVLW .2
   ADDWF Dbit3,F
   MOVLW .4
   ADDWF Dbit1,F
   MOVLW .8
   ADDWF Dbit0,F
Bit10_0 BTFSS Bit_8a15,2
   GOTO Bit9_0
   MOVLW .1
   ADDWF Dbit3,F
   MOVLW .2
   ADDWF Dbit1,F
   MOVLW .4
   ADDWF Dbit0,F
Bit9_0 BTFSS Bit_8a15,1
   GOTO Bit8_0
   MOVLW .5
   ADDWF Dbit2,F
   MOVLW .1
   ADDWF Dbit1,F
   MOVLW .2
   ADDWF Dbit0,F
Bit8_0 BTFSS Bit_8a15,0
   GOTO Bit7_0
   MOVLW .2
   ADDWF Dbit2,F
   MOVLW .5
   ADDWF Dbit1,F
   MOVLW .6
   ADDWF Dbit0,F
Bit7_0 BTFSS Bit_0a7,7
   GOTO Bit6_0
   MOVLW .1
   ADDWF Dbit2,F
   MOVLW .2
   ADDWF Dbit1,F
   MOVLW .8
   ADDWF Dbit0,F
Bit6_0 BTFSS Bit_0a7,6
   GOTO Bit5_0
   MOVLW .6
   ADDWF Dbit1,F
   MOVLW .4
   ADDWF Dbit0,F
Bit5_0 BTFSS Bit_0a7,5
   GOTO Bit4_0
   MOVLW .3
   ADDWF Dbit1,F
   MOVLW .2
   ADDWF Dbit0,F
Bit4_0 BTFSS Bit_0a7,4
   GOTO Bit3_0
   MOVLW .1
   ADDWF Dbit1,F
   MOVLW .6
   ADDWF Dbit0,F
Bit3_0 BTFSS Bit_0a7,3
   GOTO Bit2_0
   MOVLW .8
   ADDWF Dbit0,F
Bit2_0 BTFSS Bit_0a7,2
   GOTO Bit1_0
   MOVLW .4
   ADDWF Dbit0,F
Bit1_0 BTFSS Bit_0a7,1
   GOTO Bit0_0
   MOVLW .2
   ADDWF Dbit0,F
Bit0_0 BTFSS Bit_0a7,0
   GOTO No8
   MOVLW .1
   ADDWF Dbit0,F

;====================================================================
No8 BTFSS Sal_ctrl,0
   GOTO No9
   RETURN
;====================================================================
No9 MOVF Dbit0,W
   MOVWF Reg_resulta00low
   MOVF Dbit1,W
   MOVWF Reg_resulta01low
   MOVF Dbit2,W
   MOVWF Reg_resulta02low
   MOVF Dbit3,W
   MOVWF Reg_resulta03low
   MOVF Dbit4,W
   MOVWF Reg_resulta04low
   CALL Borra
;====================================================================
   MOVF Reg_resulta00low,W ;Verrificar si la suma de los bit 0 es - de 10
   SUBLW .9
   BTFSC STATUS,C
   GOTO Bit00 ;si es menor guardar en unidad para desplegar en el lcd
   MOVF Reg_resulta00low,W ;si es mayor
   MOVWF Bit_0a7
   BSF Sal_ctrl,0
   CALL Bit6_0
   MOVF Dbit0,W
   MOVWF Uni_bit0
   MOVF Dbit1,W
   MOVWF Cen_res0
   CALL Borra
;====================================================================
No10 MOVF Reg_resulta01low,W
   SUBLW .9
   BTFSC STATUS,C
   GOTO Bit01
   MOVF Reg_resulta01low,W
   MOVWF Bit_0a7
   CALL Bit4_0
   MOVF Dbit0,W
   MOVWF Uni_bit1
   MOVF Dbit1,W
   MOVWF Cen_res1
   CALL Borra

;====================================================================

   
No11 MOVF Uni_bit0,W
   CALL Tabla
   MOVF Uni,W
   MOVWF Unidad
   MOVF Dec,W
   ADDWF Cen_res0,F
   MOVF Uni_bit1,W
   CALL Tabla
   MOVF Uni,W
   ADDWF Cen_res0,F
   MOVF Dec,W
   ADDWF Cen_res1,F
   MOVF Cen_res0,W
   SUBLW .9
   BTFSC STATUS,C
   GOTO Dec_bit_cero
   MOVF Cen_res0,W
   CALL Tabla
   MOVF Uni,W
   MOVWF Decena
   MOVF Dec,W
   ADDWF Cen_res1,F
Buel MOVF Reg_resulta02low,W
   CALL Tabla
    MOVF Uni,W
   ADDWF Cen_res1,F
   MOVF Dec,W
   MOVWF Cen_res2
   MOVF Cen_res1,W
   SUBLW .9
   BTFSC STATUS,C
   GOTO Bit02
   MOVF Cen_res1,W
   CALL Tabla
   MOVF Uni,W
   MOVWF Centena
   MOVF Dec,W
   MOVWF Uni_bit3
No12 MOVF Reg_resulta03low,W
   CALL Tabla
   MOVF Uni,W
   ADDWF Uni_bit3,F
   MOVF Dec,W
   MOVWF Dec_bit3
   MOVF Uni_bit3,W
   CALL Tabla
   MOVF Uni,W
   MOVWF Uni_mil
   MOVF Dec,W
   MOVWF Dec_mil
;====================================================================
   CALL Tabla_cara ;Llama tabla caracteres
    MOVWF Dec_mil
   MOVF Unidad,W
   CALL Tabla_cara ;Llama tabla caracteres
    MOVWF Unidad
   MOVF Decena,W
   CALL Tabla_cara ;Llama tabla caracteres
    MOVWF Decena
   MOVF Centena,W
   CALL Tabla_cara ;Llama tabla caracteres
    MOVWF Centena
   MOVF Uni_mil,W
   CALL Tabla_cara ;Llama tabla caracteres
   MOVWF Uni_mil
   CLRF Uni_bit0
   CLRF Cen_res0
   CLRF Uni_bit1
   CLRF Cen_res1
   CLRF Uni_bit2
   CLRF Cen_res2
   CLRF Uni_bit3
   CLRF Dec_bit3
   CLRF Sal_ctrl
   CLRF Int_ctrL
   RETURN
;====================================================================
Bit00 MOVF Reg_resulta00low,W
   MOVWF Uni_bit0
   GOTO No10
Bit01 MOVF Reg_resulta01low,W
   CALL Tabla
   MOVF Uni,W
   MOVWF Decena
   GOTO No11
Bit02 MOVF Cen_res1,W
   MOVWF Centena
   GOTO No12
Dec_bit_cero MOVF Cen_res0,W
   MOVWF Decena
   GOTO Buel
;====================================================================
;====================================================================
NoA0 BTFSS PORTB,0
   GOTO NoA1
   GOTO NoA0
NoA1 BTFSC PORTB,0
   GOTO NoA2
   GOTO NoA1
NoA2 BTFSS PORTB,0
   GOTO NoA3
   GOTO NoA2
;====================================================================
NoA3 BCF INTCON,1
   MOVLW b'11010000' ; aqui pone a cero por alguna rason e intentado esta misma intruccion en ves de BCF pero el
   MOVWF INTCON       ;problema sigue
   BSF STATUS,RP0 ;Banco1
   BSF OPTION_REG,6
   BCF STATUS,RP0 ;Banco 0
;====================================================================   
NoA4 BTFSC Int_ctrL,0
   GOTO NoA5
   GOTO NoA4
NoA5 BCF INTCON,0 ;asta aqi ya ubo un cambio para solicitar interrupcion por rb7 quiero pponer RBIF acero pero no se puede
   BSF INTCON,3
NoA6 BTFSC Int_ctrL,1
   GOTO NoA7
   GOTO NoA6
   
;====================================================================
;====================================================================
NoA7 CALL Bi_a_dec
   MOVLW  b'11000101';195
   CALL LCD_Comando
   MOVF Dec_mil,W
   CALL LCDC
   MOVF Uni_mil,W
   CALL LCDC
   MOVF punto,W
   CALL LCDC
   MOVF Centena,W
   CALL LCDC
   MOVF Decena,W
   CALL LCDC
   MOVF Unidad,W
   CALL LCDC
   MOVLW ' ' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 'm' ;Coloca el carácter ASCII en W
   CALL LCDC
   MOVLW 's' ;Coloca el carácter ASCII en W
   CALL LCDC
   GOTO No0   
;====================================================================
;====================================================================
;* Salva información de contexto previo a la ruitna de atención a la interrupción
ISR MOVWF W_temp ;Salva el registro W en en un registro temporal
   SWAPF STATUS,W ;Copia STATUS en W (usa SWAP para no alterarlo al copiarlo)
   CLRF STATUS ;Banco cero, sin importar banco actual
   MOVWF STATUS_temp ;Salva STATUS en STATUS_temp (Banco 0)
; MOVF PCLATH,W ;sólo se requiere si se están usando las páginas 1,2,y/o 3
; MOVWF PCLATH_temp ;salva PCLATH
; CLRF PCLATH ;página 0 sin importar página actual
;aquí se escribe el código de la rutina de atención a la interrupción

   BTFSC Int_ctrL,0
   GOTO ret
   CLRF TMR1L ;limpia la cuenta del timer 1
   CLRF TMR1H
   BSF T1CON,0
   BSF Int_ctrL,0
   BCF INTCON,1
   BSF STATUS,RP0 ;Banco1
   BCF OPTION_REG,6
   BCF STATUS,RP0 ;Banco 0
   GOTO ret1
ret BCF T1CON,0
   BCF INTCON,1
   BCF INTCON,4
   MOVF TMR1L,W
   MOVWF Bit_0a7
   MOVF TMR1H,W
   MOVWF Bit_8a15
   BCF Int_ctrL,0
   BSF Int_ctrL,1
   BCF INTCON,0 ;no se pone acero al correr el progra es por eso que no puede medir
   BCF INTCON,3 ;tiempo fase a fase
;* A continuación restablece la información de contexto que salvó al inicio
; MOVF PCLATH_Temp.,W ;rescata PCLATH
; MOVWF PCLATH ;si se usan las paginas 1,2 y/o 3
ret1 SWAPF STATUS_temp,W ;rescata el STATUS original
   MOVWF STATUS ;restablece banco original
   SWAPF W_temp,F ;rescata el W original
   SWAPF W_temp,W ;sin alterar el STATUS ya rescatado.
   RETFIE
;====================================================================
;====================================================================
Borra CLRF Dbit0
   CLRF Dbit1
   CLRF Dbit2
   CLRF Dbit3
   RETURN
;====================================================================
Cero0 MOVLW .0
   MOVWF Dec
   MOVLW .0
   MOVWF Uni
   RETURN
Uno1 MOVLW .0
   MOVWF Dec
   MOVLW .1
   MOVWF Uni
   RETURN
Uno2 MOVLW .0
   MOVWF Dec
   MOVLW .2
   MOVWF Uni
   RETURN
Uno3 MOVLW .0
   MOVWF Dec
   MOVLW .3
   MOVWF Uni
   RETURN
Uno4 MOVLW .0
   MOVWF Dec
   MOVLW .4
   MOVWF Uni
   RETURN
Uno5 MOVLW .0
   MOVWF Dec
   MOVLW .5
   MOVWF Uni
   RETURN
Uno6 MOVLW .0
   MOVWF Dec
   MOVLW .6
   MOVWF Uni
   RETURN
Uno7 MOVLW .0
   MOVWF Dec
   MOVLW .7
   MOVWF Uni
   RETURN
Uno8 MOVLW .0
   MOVWF Dec
   MOVLW .8
   MOVWF Uni
   RETURN
Uno9 MOVLW .0
   MOVWF Dec
   MOVLW .9
   MOVWF Uni
   RETURN
Uno10 MOVLW .1
   MOVWF Dec
   MOVLW .0
   MOVWF Uni
   RETURN
Uno11 MOVLW .1
   MOVWF Dec
   MOVLW .1
   MOVWF Uni
   RETURN
Uno12 MOVLW .1
   MOVWF Dec
   MOVLW .2
   MOVWF Uni
   RETURN
Uno13 MOVLW .1
   MOVWF Dec
   MOVLW .3
   MOVWF Uni
   RETURN
Uno14 MOVLW .1
   MOVWF Dec
   MOVLW .4
   MOVWF Uni
   RETURN
Uno15 MOVLW .1
   MOVWF Dec
   MOVLW .5
   MOVWF Uni
   RETURN
Uno16 MOVLW .1
   MOVWF Dec
   MOVLW .6
   MOVWF Uni
   RETURN
Uno17 MOVLW .1
   MOVWF Dec
   MOVLW .7
   MOVWF Uni
   RETURN
Uno18 MOVLW .1
   MOVWF Dec
   MOVLW .8
   MOVWF Uni
   RETURN
Uno19 MOVLW .1
   MOVWF Dec
   MOVLW .9
   MOVWF Uni
   RETURN
Dos20 MOVLW .2
   MOVWF Dec
   MOVLW .0
   MOVWF Uni
   RETURN
Dos21 MOVLW .2
   MOVWF Dec
   MOVLW .1
   MOVWF Uni
   RETURN
Dos22 MOVLW .2
   MOVWF Dec
   MOVLW .2
   MOVWF Uni
   RETURN
Dos23 MOVLW .2
   MOVWF Dec
   MOVLW .3
   MOVWF Uni
   RETURN
Dos24
Dos25
;====================================================================
;====================================================================
   END

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problema con lasimulacion de pic16f877a no borra flac rbif
« Respuesta #1 en: 27 de Septiembre de 2015, 12:00:21 »
Recorda que para borrar el flag de cambio del puerto B,  RBIF, debes leer el puerto antes y luego borrar el flag. Es decir:

Código: ASM
  1. MOVF  PORTB,F        ;Lees el puerto
  2. BCF    INTCON,RBIF  ; Borras el flag


Del datasheet:

Citar
The user, in the Interrupt Service Routine, can clear the interrupt in the following manner:
  • Any read or write of PORTB. This will end the mismatch condition.
  • Clear flag bit RBIF.
A mismatch condition will continue to set flag bit RBIF. Reading PORTB will end the mismatch condition and allow flag bit RBIF to be cleared


PD: Podrias simplificar mucho tu programa. cambiando condiciones de salto, o haciendo un codigo que sirva para todos.
« Última modificación: 27 de Septiembre de 2015, 12:09:21 por KILLERJC »

Desconectado 17noe

  • PIC10
  • *
  • Mensajes: 7
Re: problema con lasimulacion de pic16f877a no borra flac rbif
« Respuesta #2 en: 27 de Septiembre de 2015, 18:12:03 »
muchas gracias por responder KILLERJC y por los concejos

Desconectado 17noe

  • PIC10
  • *
  • Mensajes: 7
Re: problema con lasimulacion de pic16f877a no borra flac rbif
« Respuesta #3 en: 27 de Septiembre de 2015, 18:28:32 »
otra ves muchas gracias acabo de simular el programa el flag borra dando una lectura de linea r a s  6.634 milisegundos