PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Frequenzzähler mit LPH2673-1 (zum Nachbauen)



PICture
23.04.2009, 13:21
Hallo!

Zuletzt habe ich mir einen kleinen (80x40x28 mm) einfachen mit einem 2,4 V / 140 mAh (Varta 110) betriebenen Frequenzzähler mit dem LPH2673-1 Display von Pollin gebaut. Ich habe wegen minimalsten Stromverbrauch keinen Eingangsverstärker eingebaut. Die Skizze der Hardware und der ASM Quellcode befinden sich im Code.

Das Programm basiert auf dem in unserem Wiki erklärtem, wo die leere Schleife durch eine endlose Schleife fürs Display ersetzt wurde.

Der Frequenzzähler misst 1 s und als Ergebnis werden max. 6 Ziffer ohne führenden Nullen in zwei Bereichen angezeigt. Ohne Doppelpunkt wird die Frequenz in Hz dargestellt und der sichtbare Doppelpunkt zeigt, dass die gemessene Frequenz mindestens 1 MHz ist und trent die zwei MHz stellen von den anderen. Für einen Uhrenquarz wird 32768 und für 16 MHz 16:0000 gezeigt.

Das Display wurde "auf dem Kopf gestellt" damit sich der Doppelpunkt auf der richtiger Stelle befindet. Genauere Beschreibung der Funktionsweise ist in: https://www.roboternetz.de/community/threads/23308-Testprogramm-f%C3%BCr-LPH2673-1 . Zum Laden des Akkus wurde an die Spitze und GND Krokoklemme durch Zeitschaltuhr angeschlossenes stabiliesiertes Netzgerät +5 V vorgesehen. Der Stromverbrauch bei 2,4V beträgt ca. 2,7 mA.

Weil das Programm ziemlich groß ist, musste ich es auf zwei Beiträge verteilen. Die beide Teile muss man in eine Datei nacheinander kopieren.

MfG

Ziffer 1 2 3 4 5 6
-------------------------------------------- a
| -- -- -- -- -- -- | ---
| | | | | PROG | | | | o | | | | STOP | f| g |b
| -- -- -- -- -- -- | ---
| | | | | DATE | | | | o | | | | START | e| |c
| -- -- -- -- -- -- | ---
-------------------------------------------- d
Pin1| | | | | | | | | | | | | | | | | | |Pin19



--------------------------------------------------------------------------
|Seg1|Sg2|Sg3|Sg4|Sg5|Seg6|Sg7|Sg8|Sg9|S10|Sg11|Sg 12|Sg13|Sg14|Sg15|Seg16|
-------------------------------------------------------------------------------
|Com3|STOP| a1| b1| a2| b2|DATE| a3| b3| a4| b4| dp | a5 | b5 | a6 | b6 |START|Pin19
-------------------------------------------------------------------------------
|Com2| - | f1| g1| f2| g2| c2 | f3| g3| f4| g4| c4 | f5 | g5 | f6 | g6 | c6 |Pin18
-------------------------------------------------------------------------------
|Com1|PROG| e1| d1| c1| e2| d2 | e3| d3| c3| e4| d4 | e5 | d5 | c5 | e6 | d6 |Pin17
-------------------------------------------------------------------------------
Pin1 P2 Pin3 Pin4 P5 Pin6 Pin7 P8 P9 P10 P11 Pin12 P13 Pin14 P15 Pin16

VCC
+
| ___
10k +-|___|-+
|
___ |
10k +-|___|-+
| |
| \] |
100µ +--|]---+
| /]+ |
=== .-.
GND Rs*| |
6k8| |
'-'
18x150k (2 Netzwerke 9x150k) |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | | | | | | | | | | | | | | | | |
| .-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-..-.
| | || || || || || || || || || || || || || || || || || |
| | || || || || || || || || || || || || || || || || || |
| '-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-'
| | | | | | | | | | | | | | | | | | |
V V V V V V V V V V V V V V V V V V V Display
1 19

220
___
+-----------------------|___|--+
| .----U----. |
| -|VPP B7|- |
| D19<-|A0 B6|->D2 o
| D18<-|A1 B5|->D3 __--o-+
| D17<-|A2 B4|->D4 +-o |
| ___ -|A3 B3|->D5 | |+
Spitze <-----+-|___|-|A4 B2|->D6 | -
470 -|A5 B1|->D7 +--+ ---
+--+----------------|VDD B0|->D8 | | | Akku
| | || /----------|OSC1 VCC|-------+ --- - 2,4V
=== +-||-+22p+-------|OSC2 VDD|-------+ --- µ1 ---
GND | || | | D16<-|C0 C7|->D9 | | |-
| _-_ | D15<-|C1 C6|->D10 +--+-------+
| |___| | D14<-|C2 C5|->D11 |
| - | D13<-|C3 C4|->D12 |
| || | | '---------' |
+-||-+---+ PIC16F870 |
|| 7,3728 MHz \|/
X
22p / \
/ \
D2...D19 - Displaypins GND


; Programm zum Messen der Frequenz am T0CKI Pin mit 7,3728 MHz Quarz und Display LPH2673-1
LIST P=16F870
include "P16F870.inc"
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
; TOCKI PORTA,4 ;I Frequenzeingang
#define _C STATUS,C
#define _Z STATUS,Z
#define _DC STATUS,DC
#define _RP0 STATUS,RP0
#define _Fcra Flags,0
#define _Fcrp Flags,1
#define _Fdca Flags,2
#define _Ferr Flags,3 ;Überlauf (Fehler)
#define _Frs Flags,4
#define _Fnz Flags,5
#define _Flow Flags,6
#define _Ftmp Flags,7 ;Zwischenspeicher
#define DATE TB3,2 ;Segmentszuweisung
#define START TC3,0
#define dp TC3,5 ;Doppelpunkt
#define a1 TB3,6
#define b1 TB3,5
#define c1 TB1,4
#define d1 TB1,5
#define e1 TB1,6
#define f1 TB2,6
#define g1 TB2,5
#define a2 TB3,4
#define b2 TB3,3
#define c2 TB2,2
#define d2 TB1,2
#define e2 TB1,3
#define f2 TB2,4
#define g2 TB2,3
#define a3 TB3,1
#define b3 TB3,0
#define c3 TC1,7
#define d3 TB1,0
#define e3 TB1,1
#define f3 TB2,1
#define g3 TB2,0
#define a4 TC3,7
#define b4 TC3,6
#define c4 TC2,5
#define d4 TC1,5
#define e4 TC1,6
#define f4 TC2,7
#define g4 TC2,6
#define a5 TC3,4
#define b5 TC3,3
#define c5 TC1,2
#define d5 TC1,3
#define e5 TC1,4
#define f5 TC2,4
#define g5 TC2,3
#define a6 TC3,2
#define b6 TC3,1
#define c6 TC2,0
#define d6 TC1,0
#define e6 TC1,1
#define f6 TC2,2
#define g6 TC2,1
;Com1 PORTA,2 ;Portszuweisung
;Com2 PORTA,1
;Com3 PORTA,0
;Seg1 PORTB,7
;Seg2 PORTB,6
;Seg3 PORTB,5
;Seg4 PORTB,4
;Seg5 PORTB,3
;Seg6 PORTB,2
;Seg7 PORTB,1
;Seg8 PORTB,0
;Seg9 PORTC,7
;Seg10 PORTC,6
;Seg11 PORTC,5
;Seg12 PORTC,4
;Seg13 PORTC,3
;Seg14 PORTC,2
;Seg15 PORTC,1
;Seg16 PORTC,0
A3 equ 20 ;Register fürs Rechnen Hex_Dec
A2 equ 21
A1 equ 22
A0 equ 23
B3 equ 24
B2 equ 25
B1 equ 26
B0 equ 27
C3 equ 28
C2 equ 29
C1 equ 2A
C0 equ 2B
D3 equ 2C
D2 equ 2D
D1 equ 2E
D0 equ 2F
Flags equ 30
Tmp equ 31 ;vorläufige Register
ATmp equ 32
HTmp equ 33 ;Zwischenspeicher
RTmp equ 34
DTmp equ 35 ;temporary (temp) für Display
DTmp1 equ 36
PA equ 37 ;temp für PORTA
PB equ 38 ;temp für PORTB
PC equ 39 ;temp für PORTC
TA1 equ 3A ;temp für TRISA bei Com1
TA2 equ 3B ;temp für TRISA bei Com2
TA3 equ 3C ;temp für TRISA bei Com3
TB1 equ 3D ;temp für TRISB bei Com1
TB2 equ 3E ;temp für TRISB bei Com2
TB3 equ 3F ;temp für TRISB bei Com3
TC1 equ 40 ;temp für TRISC bei Com1
TC2 equ 41 ;temp für TRISC bei Com2
TC3 equ 42 ;temp für TRISC bei Com3
SWR equ 43 ;sicherung vom W-Register
SSR equ 44 ;Sicherung vom STATUS-Register
ORG 0
call Init ;alles initialisieren
Main goto DispLoop ;und in die endlose Schleife springen
ORG 4 ;hier fängt ISR (interrupt service routine) an
bcf INTCON,GIE ;alle interrupts sperren
movwf SWR ;W-Register sichern
movf STATUS,0 ;STATUS Register
movwf SSR ;sichern
btfss INTCON,T0IF ;ist Timer0 überlaufen ?
goto CheckTMR1 ;nein, dann prüfe Timer1
bcf INTCON,T0IF ;ja, Timer0 interrupt flag löschen und bearbeiten
movlw 1
addwf A2,1 ;erhöhe A2 durch Addition
btfsc _C ;um Überlauf von A2 zu erkennen und
incf A3,1 ;increment A3, wenn A2 überlaufen ist
CheckTMR1 btfss PIR1,TMR1IF ;ist Timer1 überlaufen ?
goto ISREnd ;nein, dann ISR beenden und interrupts erlauben
bcf PIR1,TMR1IF ;Timer1 interrupt flag löschen
call Multip ;Interrupts vom Timer1 im UP "Multip" zählen
ISREnd movf SSR,0 ;STATUS Register
movwf STATUS ;wiederherstellen
movf SWR,0 ;W-Register wiederherstellen
retfie ;ISR beenden und interrupts erlauben
Multip incf Tmp,1 ;Interruptszähler von Timer1 erhöhen
btfss Tmp,2 ;schon 4.interrupt?
return ;nein, dann zurück
bsf _RP0 ;ja, weiter
movf TRISA,0 ;stopp Timer 0 usw.
andlw 0xEF
movwf TRISA ;TOCKI Pin (A4) als Ausgang
bcf _RP0
bcf T1CON,TMR1ON ;stopp Timer1
GetFreq movf TMR0,0 ;Prescaler ins Register A0 kopieren
movwf A1
movwf RTmp
clrf ATmp
incf ATmp,1
bsf _RP0
bsf OPTION_REG,T0SE
bcf OPTION_REG,T0SE
bcf _RP0
movf TMR0,0
subwf RTmp,0
btfsc _Z
goto $-8
comf ATmp,1
incf ATmp,0
movwf A0
GetFreq1 call Hex_Dec ;Messergebnis auf Decimal wandeln
call DispSet ;und auf das Display übergeben
call AClr
clrf Tmp
call TMRStart ;beide Timer starten
return
AClr clrf A0 ;Register A löschen
clrf A1
clrf A2
clrf A3
return
TMRStart clrf TMR0 ;TMR0 und Prescaler löschen
movlw 30 ;Timer1 konfigurieren
movwf T1CON ;(Psc=8) und laden
movlw 7B ;berechneter Wert: TMR1H=7Ch
movwf TMR1H
movlw 0xF8 ;berechneter Wert: TMR1L=0
movwf TMR1L
bsf _RP0 ;start Timer0
movf TRISA,0
iorlw 10
movwf TRISA ;TOCKI Pin (A4)als Eingang
bcf _RP0
bsf T1CON,TMR1ON ;start Timer1
return
Hex_Dec call DClr ;Hex>A, D>Dec
movlw 1
movwf C0
movlw 20 ;32 bit Hex > 32 bit Dec (8 Stellen)
movwf HTmp
btfsc A0,0
call AddDC
call CopyCB
call AddCB
call ARotRb
decfsz HTmp,1
goto $-6
return
DClr clrf D0
clrf D1
clrf D2
clrf D3
clrf C0
clrf C1
clrf C2
clrf C3
return
CopyCB movf C0,0
movwf B0
movf C1,0
movwf B1
movf C2,0
movwf B2
movf C3,0
movwf B3
return
AddCB movlw B0 ;C+B>C
movwf FSR
goto AddR
AddDC movlw C0 ;D+C>D
movwf FSR
AddR bcf _Ferr ;Addiere zwei Register
bcf _Fcrp
movlw 4 ;X=4 Bytes lang
movwf ATmp
bcf _Fdca
bcf _Fcra
movf INDF,0
movwf RTmp
movlw 4 ;X=4
addwf FSR,1
btfss _Fcrp
goto $+4
movlw 1
addwf INDF,1
call DecCor
movf RTmp,0
addwf INDF,1
call DecCor
btfss _Fdca
goto $+3
movlw 6
addwf INDF,1
btfss _Fcra
goto $+5
movlw 60
addwf INDF,1
btfsc _C
bsf _Fcra
movf INDF,0
andlw 0xF0
sublw 0xA0
btfss _Z
goto $+6
movf INDF,0
andlw 0x0F
clrf INDF
addwf INDF,1
bsf _Fcra
bcf _Fcrp
btfsc _Fcra
bsf _Fcrp
movlw 5 ;X+1=5
subwf FSR,1
decfsz ATmp,1
goto $-28
btfsc _Fcra
bsf _Ferr
return
DecCor btfsc _DC ;dezimale Korrektur (equ "DAW" bei PIC18FXXX)
bsf _Fdca
btfsc _C
bsf _Fcra
movf INDF,0
andlw 0F
sublw 9
btfss _C
bsf _Fdca
movf INDF,0
andlw 0xF0
sublw 90
btfss _C
bsf _Fcra
return
ARotRb movlw A3 ;rotiere A Register 1 Bit rechts
movwf FSR
RRotRb movlw 4 ;rotiere X=4 Bytes
movwf ATmp
bcf _Fcrp
btfsc A0,0
bsf _Fcrp
bcf _Fcra
btfsc INDF,0
bsf _Fcra
bcf _C
btfsc _Fcrp
bsf _C
rrf INDF,1
bcf _Fcrp
btfsc _Fcra
bsf _Fcrp
incf FSR,1
decfsz ATmp,1
goto $-0C ;RRotRbL
return

PICture
23.04.2009, 13:26
Und hier das zweite Teil des Codes.

Die Laufzeit ist für jede Ziffer fast gleich. Das kaum bemerkbare Kurzblinken der Anzeige ist normal, da das Display kein Kontroller und damit kein eigener Speicher besitzt. Deswegen während Ausführung der ISR erlischt es kurz, da die endlose Displayschleife durch ISR kurz für "GetFreq", "Hex_Dec", usw. angehalten wird.

MfG

DispSet clrf TB1 ;alle Segmente an
clrf TB2
clrf TB3
clrf TC1
clrf TC2
clrf TC3
bcf _Fnz
bsf DATE ;diese Segmente aus
bsf START
movlw D3 ;alle Segmente für Display festlegen
movwf FSR
movf INDF,0
movwf DTmp
movf DTmp,1
btfss _Z
goto $+3
bsf dp
incf FSR,1
movlw 7
movwf PCLATH
swapf INDF,0
andlw 0F
movwf DTmp
movf DTmp,1
btfss _Z
bsf _Fnz
btfsc _Fnz
goto SetDig6
goto Dig6A
Digit5 movlw 7
movwf PCLATH
movf INDF,0
andlw 0F
movwf DTmp
movf DTmp,1
btfss _Z
bsf _Fnz
btfsc _Fnz
goto SetDig5
goto Dig5A
Digit4 incf FSR,1
movlw 7
movwf PCLATH
swapf INDF,0
andlw 0F
movwf DTmp
movf DTmp,1
btfss _Z
bsf _Fnz
btfsc _Fnz
goto SetDig4
goto Dig4A
Digit3 movlw 7
movwf PCLATH
movf INDF,0
andlw 0F
movwf DTmp
movf DTmp,1
btfss _Z
bsf _Fnz
btfsc _Fnz
goto SetDig3
goto Dig3A
Digit2 incf FSR,1
movlw 7
movwf PCLATH
swapf INDF,0
andlw 0F
movwf DTmp
movf DTmp,1
btfss _Z
bsf _Fnz
btfsc _Fnz
goto SetDig2
goto Dig2A
Digit1 movlw 7
movwf PCLATH
movf INDF,0
andlw 0F
goto SetDig1
Dig60 bsf g6
goto Digit5
Dig61 bsf a6
bsf b6
bsf c6
bsf d6
bsf g6
goto Digit5
Dig62 bsf c6
bsf f6
goto Digit5
Dig63 bsf b6
bsf c6
goto Digit5
Dig64 bsf a6
bsf b6
bsf d6
goto Digit5
Dig65 bsf b6
bsf e6
goto Digit5
Dig66 bsf e6
goto Digit5
Dig67 bsf a6
bsf b6
bsf c6
bsf g6
goto Digit5
Dig68 goto Digit5
Dig69 bsf b6
goto Digit5
Dig6A bsf a6
bsf b6
bsf c6
bsf d6
bsf e6
bsf f6
bsf g6
goto Digit5
Dig50 bsf g5
goto Digit4
Dig51 bsf a5
bsf b5
bsf c5
bsf d5
bsf g5
goto Digit4
Dig52 bsf c5
bsf f5
goto Digit4
Dig53 bsf b5
bsf c5
goto Digit4
Dig54 bsf a5
bsf b5
bsf d5
goto Digit4
Dig55 bsf b5
bsf e5
goto Digit4
Dig56 bsf e5
goto Digit4
Dig57 bsf a5
bsf b5
bsf c5
bsf g5
goto Digit4
Dig58 goto Digit4
Dig59 bsf b5
goto Digit4
Dig5A bsf a5
bsf b5
bsf c5
bsf d5
bsf e5
bsf f5
bsf g5
goto Digit4
Dig40 bsf g4
goto Digit3
Dig41 bsf a4
bsf b4
bsf c4
bsf d4
bsf g4
goto Digit3
Dig42 bsf c4
bsf f4
goto Digit3
Dig43 bsf b4
bsf c4
goto Digit3
Dig44 bsf a4
bsf b4
bsf d4
goto Digit3
Dig45 bsf b4
bsf e4
goto Digit3
Dig46 bsf e4
goto Digit3
Dig47 bsf a4
bsf b4
bsf c4
bsf g4
goto Digit3
Dig48 goto Digit3
Dig49 bsf b4
goto Digit3
Dig4A bsf a4
bsf b4
bsf c4
bsf d4
bsf e4
bsf f4
bsf g4
goto Digit3
Dig30 bsf g3
goto Digit2
Dig31 bsf a3
bsf b3
bsf c3
bsf d3
bsf g3
goto Digit2
Dig32 bsf c3
bsf f3
goto Digit2
Dig33 bsf b3
bsf c3
goto Digit2
Dig34 bsf a3
bsf b3
bsf d3
goto Digit2
Dig35 bsf b3
bsf e3
goto Digit2
Dig36 bsf e3
goto Digit2
Dig37 bsf a3
bsf b3
bsf c3
bsf g3
goto Digit2
Dig38 goto Digit2
Dig39 bsf b3
goto Digit2
Dig3A bsf a3
bsf b3
bsf c3
bsf d3
bsf e3
bsf f3
bsf g3
goto Digit2
Dig20 bsf g2
goto Digit1
Dig21 bsf a2
bsf b2
bsf c2
bsf d2
bsf g2
goto Digit1
Dig22 bsf c2
bsf f2
goto Digit1
Dig23 bsf b2
bsf c2
goto Digit1
Dig24 bsf a2
bsf b2
bsf d2
goto Digit1
Dig25 bsf b2
bsf e2
goto Digit1
Dig26 bsf e2
goto Digit1
Dig27 bsf a2
bsf b2
bsf c2
bsf g2
goto Digit1
Dig28 goto Digit1
Dig29 bsf b2
goto Digit1
return
Dig2A bsf a2
bsf b2
bsf c2
bsf d2
bsf e2
bsf f2
bsf g2
goto Digit1
Dig10 bsf g1
return
Dig11 bsf a1
bsf b1
bsf c1
bsf d1
bsf g1
return
Dig12 bsf c1
bsf f1
return
Dig13 bsf b1
bsf c1
return
Dig14 bsf a1
bsf b1
bsf d1
return
Dig15 bsf b1
bsf e1
return
Dig16 bsf e1
return
Dig17 bsf a1
bsf b1
bsf c1
bsf g1
return
Dig18 return
Dig19 bsf b1
return
DispLoop movf PA,0 ;endlose Displayschleife
movwf PORTA
movf PB,0
movwf PORTB
movf PC,0
movwf PORTC
movf TA1,0 ;Com1
andlw 0xFB
bsf _RP0
movwf TRISA
bcf _RP0
movf TB1,0
bsf _RP0
movwf TRISB
bcf _RP0
movf TC1,0
bsf _RP0
movwf TRISC
bcf _RP0
call Del ;Dauer vom Com1
movf TA2,0 ;Com2
andlw 0xFD
bsf _RP0
movwf TRISA
bcf _RP0
movf TB2,0
bsf _RP0
movwf TRISB
bcf _RP0
movf TC2,0
bsf _RP0
movwf TRISC
bcf _RP0
call Del ;Dauer vom Com2
movf TA3,0 ;Com3
andlw 0xFE
bsf _RP0
movwf TRISA
bcf _RP0
movf TB3,0
bsf _RP0
movwf TRISB
bcf _RP0
movf TC3,0
bsf _RP0
movwf TRISC
bcf _RP0
call Del ;Dauer vom Com3
bcf _Ftmp ;alle Signale invertieren
btfss PA,4
bsf _Ftmp
comf PA,1
bcf PA,4
btfss _Ftmp
bsf PA,4
comf PB,1
comf PC,1
goto DispLoop
Del movlw 0C ;Verzögerungsschleife ca. 5ms
movwf DTmp1
clrf DTmp
decfsz DTmp,1
goto $-1
decfsz DTmp1,1
goto $-4
return
Init clrf ADCON0 ;schalte ADC aus
movlw 7 ;sperre ADC
movwf ADCON1 ;und definiere A0-A7 als digitale I/Os
clrf PORTA ;Registerwerte vorm Start festlegen
clrf PORTB
clrf PORTC
clrf Flags
call AClr
movlw 7
movwf PA
clrf PB
clrf PC
movlw 0xFB
movwf TA1
movlw 0xFD
movwf TA2
movlw 0xFE
movwf TA3
bsf _RP0 ;Bank 1
movlw 7 ;sperre ADC
movwf ADCON1 ;und definiere A0-A7 als digitale I/Os
movlw 0xFF
movwf TRISA ;alle PORTA Pins als Eingänge
movlw 27 ;Takt für Timer0 vom T0CKI Pin usw.
movwf OPTION_REG ;Timer0 konfigurieren
bsf PIE1,TMR1IE ;TMR1 interrupt erlauben
bcf _RP0 ;Bank 0
movlw 0xE0 ;GIE, PEIE & TMR0IE erlauben
movwf INTCON
goto TMRStart ;beide Timer starten
org 7A0
SetDig6 addwf PCL,1
goto Dig60
goto Dig61
goto Dig62
goto Dig63
goto Dig64
goto Dig65
goto Dig66
goto Dig67
goto Dig68
goto Dig69
org 7B0
SetDig5 addwf PCL,1
goto Dig50
goto Dig51
goto Dig52
goto Dig53
goto Dig54
goto Dig55
goto Dig56
goto Dig57
goto Dig58
goto Dig59
org 7C0
SetDig4 addwf PCL,1
goto Dig40
goto Dig41
goto Dig42
goto Dig43
goto Dig44
goto Dig45
goto Dig46
goto Dig47
goto Dig48
goto Dig49
org 7D0
SetDig3 addwf PCL,1
goto Dig30
goto Dig31
goto Dig32
goto Dig33
goto Dig34
goto Dig35
goto Dig36
goto Dig37
goto Dig38
goto Dig39
org 7E0
SetDig2 addwf PCL,1
goto Dig20
goto Dig21
goto Dig22
goto Dig23
goto Dig24
goto Dig25
goto Dig26
goto Dig27
goto Dig28
goto Dig29
org 7F0
SetDig1 addwf PCL,1
goto Dig10
goto Dig11
goto Dig12
goto Dig13
goto Dig14
goto Dig15
goto Dig16
goto Dig17
goto Dig18
goto Dig19
end