Forum: Projekte & Code bin2bcd & bcd2bin, 8-6-4 digits, double dabble algorithm


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Apollo M. (Firma: @home) (majortom)


Angehängte Dateien:

Lesenswert?

Wer es gebrauchen kann ... frisch aus meiner Giftküche!

... bin2bcd und bcd2bin, wahlweise 8,6 oder 4 Digits ohne mul/div/mod 
mit dem double dabble Algorithmus, wenn es schnell und mit kleinem 
Footprint sein soll.

https://en.wikipedia.org/wiki/Double_dabble

: Bearbeitet durch User
von Peter M. (barrelshifter)


Lesenswert?

Kann man so machen.
Ich mache das so:
1
uint16_t convtab[4]={10,100,1000,10000};
2
3
void tobcd(volatile uint8_t *p, uint_fast16_t val){
4
  
5
  uint_fast8_t i,res;
6
  volatile uint8_t *bp;
7
  
8
  register uint8_t sreg;
9
  
10
  sreg = SREG;
11
  asm("cli");
12
  
13
  // first clear old values
14
  // keep signs and double informations
15
  bp = p;
16
  for(i=0; i < (DISP_BUF_MAX/2); i++)
17
      *bp++ &= 0xf0;
18
  
19
    
20
  i= ((DISP_BUF_MAX/2) - 1);    // Number of digits minus 1
21
  
22
  do {
23
    i--;
24
    
25
    for(res=0; val >= convtab[i]; val -= convtab[i]){
26
      res++;
27
    }
28
    *p |= res;
29
    p++;
30
    
31
    
32
  } while(i);
33
  *p |= val;
34
  
35
  clear_leading_zero();
36
  SREG = sreg;
37
}

von Wilhelm M. (wimalopaan)


Lesenswert?

Da die Größe des Flash auf µC meistens kein Problem ist, bietet sich 
eine Lösung mit 2/4 LUTs an und einer folgenden BCD-Addition.

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Wilhelm M. schrieb:
> Da die Größe des Flash auf µC meistens kein Problem ist

Ich denke da eher an Pic16XXX mit 2-7 kWorte und werde nachdem klarer 
ist das/wie dieser funktioniert nun den Algorithmus auch in pic-as 
umsetzen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.