von HEX auf ASCII
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  von HEX auf ASCII « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: von HEX auf ASCII  (Gelesen 963 mal)
 
mario2104
Newbie
*
Offline Offline

Beiträge: 14


Profil anzeigen
« am: Januar 29, 2011, 17:42:35 »

Hallo,
so ich hätte ein kleines Problem

alsoo ich habe mir einen zähler programmiert welcher mitzählt wie oft
ich eine Taste Drücke der funktioniert auch wunderbar.

Aber ich kann nur bis 9 Zählen dann werden Zeichen angezeigt, was aber
logisch ist den 30+9 = ASCII 9.

Nun würde ich gerne wissen wie ich mehr als bis 9 Zählen kann??


Verwende den PIC16f628A
und programmiere in Assembler

ich will diesen Zahlenwert dann auf einem Display wiedergeben:
http://www.conrad.at/ce/de/product/183342/LCD-MODUL-16X2-ZEICHEN/SHOP_AREA_17651

Bitte um Hilfe
Gespeichert
Holger
Gast
« Antworten #1 am: Januar 29, 2011, 19:13:07 »

Hallo,
nach Versuchen mit diversen tricky Programmschnipseln habe ich es so gelöst:
-es sollen 3 digits angezeigt werden, 000 - 999
-jedes Digit benötigt ein Byte im RAM
-diese werden mit 30 initialisiert
Jetzt werden vom Zähler(bzw. copy) 100 abgezogen, ergibt das keinen Überlauf wird das Byte für 100 um eins erhöht. Gibt es einen Überlauf wird die Operation rückgängig gemacht und solange 10 abgezogen bis es einen Überlauf gibts usw. dann auch mit der Einerstelle bis 0
Die 3 Bytes werden dann an das Display gesendet.
Mal sehen was noch für Vorschläge kommen.
Holger
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #2 am: Januar 30, 2011, 03:12:14 »

Hallo,

Beispiel ist ursprünglich von www.sprut.de

Code:
;********************************************************************************************************************
; Wandlung einer Binärzahl (< 10000) in eine Dezimalzahl
; Die Binärzahl steht in y1, y0
; die Dezimalstellen werden in ST (tausender), SH (hunderter),
;    SZ (zehner) und SE (einer) gespeichert im BCD-Code
B2D

; Test auf zehntausender 10000d = 0x2710
; movlw 0x27
; movwf x1
; movlw 0x10
; movwf x0
; call B2Da
; movwf B2D_zt
; Test auf tausender 1000d = 0x03E8
movlw 0x03
movwf x1
movlw 0xE8
movwf x0
call B2Da
movwf B2D_t
; Test auf hunderter 100d = 0x0064
clrf x1
movlw 0x64
movwf x0
call B2Da
movwf B2D_h
; Test auf zehner 10d = 0x000A
clrf x1
movlw 0x0A
movwf x0
call B2Da
movwf B2D_z
movf y0, W
movwf B2D_e
return

B2Da
clrf counter0
B2Sb
incf counter0, f ; wie oft abgezogen?
call Sub16 ; y:=y-x
btfss STATUS, C ; zu oft abgezogen?
goto B2Sb ; nein: noch einmal
call Add16 ; y:=y+x
decf counter0, w ; weil immer 1 zuviel gezählt wird
return
Code:
Add16 ; y:=y+x
movf x0, W
addwf y0, F
movf x1, W
btfsc STATUS, C
incfsz x1, W
addwf y1, F
return
;-----------------------------
Sub16                           ; 16 bit y:=y-x
         clrf    fehler          ; extraflags löschen

         movf    x0, W         ;
         subwf   y0, F

         btfsc   STATUS,C
         goto    Sub16a
         movlw   0x01            ; borgen
         subwf   y1, f

         btfss   STATUS,C
         bsf     fehler, C      ; Unterlauf

Sub16a
         movf    x1 ,w          ;
         subwf   y1 ,f

         btfss   STATUS,C
         bsf     fehler, C       ; Unterlauf

         bcf     STATUS, C       ; C-Flag invertieren
         btfsc   fehler, C
         bsf     STATUS, C
         return

Gruß,
Stefan
Gespeichert

Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.038 Sekunden mit 18 Zugriffen.
 
Top! Top!