Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige Kategorie: C-Control I V1.1 (von OLLI - 12.12.2005 15:50)
 Als Antwort auf Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige von Dierk - 12.12.2005 15:33
OLLI nutzt:  CC1-M-Unit V1.2/2.0

> Hallo,
> der .S19 Treiber ist nicht für die C-Control I V1.1, also nicht für die M-Unit V2.0 oder die Micro.

Hallo Danke für die prompte Anwort.

Ich habe den Assemblercode mal gepostet.
Wer hätte eine Idee den Code für die "M"Unit umzuschreiben. Ich bin Assembler Neuling und habe keine Ahnung wie ich das machen soll:
PS Ich kann den Author des Progs nicht per Email erreichen!

*************************************************************
* -- U H R 5 7 S M 3 . A S M --------------- AUGUST 2004 -- *
* TREIBER FUER 7-SEGMENTANZEIGEN                            *
*************************************************************
* TREIBER AUF DAS LAYOUT FšR 57mm 7-SEGMENTANZEIGEN VOM     *
* TYP "LTS23805 HRB" MIT GEMEINSAMMER ANODE ABGESTIMMT.     *
* (SCHIEBEREGISTER UND TREIBER-IC IN SMD TECHNIK)           *
*************************************************************
*                                     a                     *
* AUSGABEREIHENFOLGE:               ŚÄÄÄÄæ                  *
*                                 f ³ g  ³ b                *
* DP;G;F;A;B;E;D;C                  ĆÄÄÄÄ“                  *
*                                 e ³    ³ c                *
*                                   ĄÄÄÄÄŁ  .dp             *
*                                     d                     *
* BEI EINEM HIGH AM AUSGANG 74 HC 595 LEUCHTET DAS SEGMENT  *
*************************************************************
* ADRESSEN FUER DEN C-CONTROL/BASIC SYS-BEFEHL:             *
* define LEDVAL    &H101    ANZEIGE VON ZAHLENWERTEN        *
* define LEDDIGIT  &H192    ANZEIGE VON EINZELNEN ZEICHEN   *
* define DCFSTATUS &H1C0    MERKER DCF-STATUS AKTUALISIEREN *
* define DEFINIERT &H1CB    PORT-A AUF AUSGANG SCHALTEN     *
*************************************************************
* VERWENDETE PORTS UND MERKER/BITS                          *
* CC-PORT 6        CLOCK FUER DIE SCHIEBEREGISTER           *
* CC-PORT 7        CLOCK FUER DIE UEBERNAHME ZUR ANZEIGE    *
* CC-PORT 8        DATEN FUER DIE SCHIEBEREGISTER           *
* CC-BIT [192]     DCFSTATUS WIRD EIN DCF SIGNAL EMPFANGEN? *
*************************************************************

USRDATA equ $A1        ; ANFANG DER 24 USERBYTES IM RAM
VSTACK  equ $91        ; ANFANG DER 7 WORDS DES RECHEN-STACKS
_A      equ $91        ; ZULETZT AUF DEN RECHENSTACK GEBRACHTER WERT
_A_lo   equ $92        ; RECHENERGEBNIS
_B      equ $93
_B_lo   equ $94
_C      equ $95
_C_lo   equ $96
_D      equ $97
_D_lo   equ $98
_E      equ $99
_E_lo   equ $9A
_F      equ $9B
_F_lo   equ $9C
_G      equ $9D
_G_lo   equ $9E

*** PROZESSORPORTS DEFINIEREN/AUSWAEHLEN *********************
ledshclk equ 5         ;CC-PORT 6 CLOCK SCHIEBEREGISTER
ledclk   equ 6         ;CC-PORT 7 CLOCK UEBERNAHME ZUR ANZEIGE
ledshdat equ 7         ;CC-PORT 8 DATEN

*** BYTEPORT DEFINIEREN/AUSWAEHLEN ***************************
pcdat  equ $01         ;PORT B ($01) = CCPORT 1 BIS 8
pcdir  equ $05         ;PORT B DATENRICHTUNGSREGISTER ($05)

*** EINSPRUNGADRESSEN IN DAS C-CONTROL BASIC BETRIEBSSYSTEM **
NumPush    equ $1187
Abs        equ $13BA
Div        equ $137E
Mul        equ $1360
Sub        equ $1351

*** LED INTERFACE ********************************************
        org $101
LEDVAL:
        lda _C               ;LADE AKKUMULATOR
        sta _D               ;SPEICHERE AKKUMULATOR
        lda _C_lo            ;LADE AKKUMULATOR
        sta _D_lo            ;SPEICHERE AKKUMULATOR
        lda _A               ;LADE AKKUMULATOR
        sta _C               ;SPEICHERE AKKUMULATOR
        lda _A_lo            ;LADE AKKUMULATOR
        sta _C_lo            ;SPEICHERE AKKUMULATOR
        lda _D               ;LADE AKKUMULATOR
        sta _A               ;SPEICHERE AKKUMULATOR
        lda _D_lo            ;LADE AKKUMULATOR
        sta _A_lo            ;SPEICHERE AKKUMULATOR
        brclr 7,_A,nextdigit ;SPRINGE WENN BIT 7,_A GELOESCHT ZU ..
        bset 0, _B           ;SETZE BIT 0 , _B
        jsr Abs              ;SPRINGE ZUR UNTERROUTINE ...
nextdigit:
        jsr NumPush          ;SPRINGE ZUR UNTERROUTINE ...
        jsr NumPush          ;SPRINGE ZUR UNTERROUTINE ...
        lda _C               ;LADE AKKUMULATOR        sta _A               ;SPEICHERE AKKUMULATOR
        sta _B               ;SPEICHERE AKKUMULATOR
        lda _C_lo            ;LADE AKKUMULATOR
        lda _A_lo            ;LADE AKKUMULATOR
        lda _B_lo            ;LADE AKKUMULATOR
        jsr NumPush          ;SPRINGE ZUR UNTERROUTINE ...
        jsr load10           ;SPRINGE ZUR UNTERROUTINE ...
        jsr Div              ;SPRINGE ZUR UNTERROUTINE ...
        jsr NumPush          ;SPRINGE ZUR UNTERROUTINE ...
        jsr load10           ;SPRINGE ZUR UNTERROUTINE ...
        jsr Mul              ;SPRINGE ZUR UNTERROUTINE ...
        jsr Sub              ;SPRINGE ZUR UNTERROUTINE ...
        ldx _A_lo            ;LADE INDEX REGISTER
        lda ledcodes,x       ;ZEICHEN AUS VORRAT LADEN
        ldx _C_lo            ;LADE INDEX REGISTER
        beq nopoint          ;DEZIMALPUNKT NICHT VERWENDET
        dec _C_lo            ;REGISTER C_LOW UM 1 VERMINDERN
        bne nopoint          ;DEZIMALPUNKT VERWENDET, ABER ANDERE STELLE
        bra point            ;DEZIMALPUNKT VERWENDET, DIESE STELLE
nopoint:
        and #$7F             ;DEZIMALPUNKT ABSCHALTEN (BIT 7)
point:
        jsr digit            ;SPRINGE ZUR UNTERROUTINE ...
        jsr load10           ;SPRINGE ZUR UNTERROUTINE ...
        jsr Div              ;SPRINGE ZUR UNTERROUTINE ...
        lda _B_lo            ;LADE AKKUMULATOR
        bne no0check         ;SPRINGE WENN NICHT GLEICH ...
        lda _A               ;LADE AKKUMULATOR
        ora _A_lo            ;LOGISCHE ODER VERKNUEPFUNG
        beq sign             ;SPRINGE, WENN NULL ...
no0check:
        dec _C_lo            ;VERMINDERE REGISTER UM 1
        bne nextdigit        ;SPRINGE, WENN NICHT GLEICH ...
        rts                  ;UNTERROUTINE BEENDEN
sign:
        dec _C_lo            ;VERMINDERE REGISTER UM 1
        beq exit             ;SPRINGE, WENN NULL ...
        brclr 0,_B,space     ;SPRINGE, WENN BIT 0,_B = LOW
        brclr 1,_B,minus     ;SPRINGE, WENN BIT 1,_B = LOW
        lda #$BF             ;LADE AKKU MIT CODE FUER "0"
        jsr digit            ;SPRINGE ZUR UNTERROUTINE ...
        jmp nextspace        ;SPRINGE NACH NEXTSPACE
minus:
        lda #$40             ;BITMUSTER FUER DAS MINUSZEICHEN
        jsr digit            ;SPRINGE ZUR UNTERROUTINE ...
nextspace:
        dec _C_lo            ;VERMINDERE REGISTER UM 1
        beq exit             ;SPRINGE, WENN NULL
space:
        lda #0               ;ALLE SEGMENTE AUS = LEERZEICHEN
        jsr digit            ;SPRINGE ZUR UNTERROUTINE ...
        bra nextspace        ;SPRINGE IMMER ...
exit:        
        rts                  ;UNTERROUTINE BEENDEN
LEDDIGIT:
        lda _A_lo            ;LADE AKKUMULATOR
digit:
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        jsr shift            ;SPRINGE ZUR UNTERROUTINE ...
        rts                  ;UNTERROUTINE BEENDEN
shift:
        bclr ledshdat,pcdat  ;PORT DATA LOW SCHALTEN
        lsra                 ;SHIFT NACH LINKS
        bcc shftex           ;SPRINGE, WENN CARRY GELOESCHT ...
        bset ledshdat,pcdat  ;PORT DATA HIGH SCHALTEN
shftex:
        bset ledshclk,pcdat  ;PORT CLOCK HIGH SCHALTEN
        bclr ledshclk,pcdat  ;PORT CLOCK LOW SCHALTEN
        rts                  ;UNTERROUTINE BEENDEN
load10:
        clr _A               ;LOESCHE AKKUMULATOR
        lda #10              ;LADE TEILUNGSFAKTOR HIER DEZIMAL
        sta _A_lo            ;SPEICHERE AKKUMULATOR
        rts                  ;UNTERROUTINE BEENDEN

* ABFRAGE OB DCF SIGNAL EMPFANGEN WIRD **********************
* WIRD KEIN SIGNAL EMPFANGEN SO IST MERKER [192] = LOW
* WIRD  EIN SIGNAL EMPFANGEN SO IST MERKER [192] AM BLINKEN 1-SEK TAKT
* IST DAS DCF SIGNAL ERKANNT. D.H. DIE INNERE UHR IST DCF SYNCRON,
* DANN IST DER MERKER [192] = HIGH.
DCFSTATUS:
        brset 4,$00,dcf1     ;WENN BIT-5 PORT-A GESETZT SPRINGE NACH DCF1
        bset 7,$B8           ;SETZE CC-MERKER = BIT [192]
        jmp dcfend           ;SPRINGE NACH DCFEND
dcf1:
        bclr 7,$B8           ;LOESCHE CC-MERKER = BIT [192]
dcfend:
        rts                  ;UNTERROUTINE BEENDEN

* ALLE EINGAENGE VON PORT-A AUF AUSGANG SCHALTEN: ***********
* WENN DIE EINGAENGE ALS AUSGANG DEFINIERT SIND, SO SIND DIESE
* NIEDEROHMIG UND LIEGEN AUF GND POTENTIAL
* D.H. SIE SIND WENIGER EMPFINDLICH GEGEN STATISCHE ENTLADUNGEN
DEFINIERT:
        lda $04              ;DDRA HOLEN (SOLLTE %01011111 SEIN)
        ora #%11011110       ;CTS ZUSAETZLICH ALS AUSGANG SCHALTEN
        sta $04              ;AKKU AUF ADRESSE .. SPEICHERN
        lda $01              ;PORT A HOLEN
        and #%01111111       ;CTS AUF 0-VOLT SETZEN (GND)
        sta $01              ;AKKU AUF ADRESSE .. SPEICHERN
        rts                  ;UNTERROUTINE BEENDEN
       
* ZEICHENTABELLE FUER DIE ZEICHEN 0,1,2,3,4 *****************
* ............................... 5,6,7,8,9
* DIESE TABELLE MUSS IMMER AM ENDE DES ASSEMBLERPROGRAMMS STEHEN!
ledcodes:
        fcb $BF, $89, $DE, $DB, $E9
        fcb $F3, $F7, $99, $FF, $FB



Danke im Voraus!!

Gruß OLLI

 Antwort schreiben

Bisherige Antworten:

Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige (von Topmail - 12.12.2005 18:21)
    Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige (von OLLI - 12.12.2005 19:18)
        Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige (von Topmail - 15.12.2005 18:23)
            Re: Probleme mit DCF-Uhr mit 6-stelliger 7-Segment-LED-Anzeige (von OLLI - 16.12.2005 0:49)