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