PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler: Matrixtastatur abfragen -> an LCD senden



Import-Script
27.01.2004, 22:09
Ich brauche dringend Hilfe bei einem Assembler-Programm &#40;bin Anfänger&#41;: <BR> <BR>Tastenauswertung mit Anzeige am LCD: <BR>Je nach gedr&uuml;ckter Taste ist deren Code auszuwerten und am LCD anzuzeigen. <BR>&#34;Code xx &#40;binär&#41; entspricht Taste yy &#40;dezimal&#41;&#34;. <BR> <BR>es wird verwendet: <BR> <BR>µC: Infineon SAB 80C517A <BR>Programm: Keil µVision <BR>3x4 Matrixtastatur <BR> <BR>Wer kann mir dabei helfen? <BR>Danke im voraus!

Import-Script
28.01.2004, 07:16
Hallo Orti, <BR> <BR>guck mal unter <a href="http://www.erikbuchmann.de" target=_top>www.erikbuchmann.de</a>, unter dem Punkt &#34;Die Ansteuerung von Peripherie&#34; steuert er auch eine TM an. Vielleicht hilft das schon mal weiter. <BR> <BR>Ansonsten musst du einfach in den Spalten der Matrix eine &#40;EINE&#41; 0 durchrolieren lassen, und danach die Zeilen abfragen. Sind alle Zeilen 1 ist keine Taste gedr&uuml;ckt worden. Ist eine Zeile 0, kannst du bestimmen, welche 0 ist, weil du auch weisst, in welcher Spalte die 0 gerade anliegt. Und aus diesen beiden Werten musst dann einen sogenannten Scancode berechnen, der wiederum angibt, welche Taste gedr&uuml;ckt wurde. Daher musst du in der Software noch jeder Taste den Scancode zuordnen. <BR> <BR>Hoffe das hilft schon mal weiter. <BR> <BR>Gruß Ralf <BR> <BR>PS: Wie zur Hölle kommst du an einen 517A ???

Import-Script
28.01.2004, 09:53
Hallo. <BR> <BR>Danke f&uuml;r deinen Beitrag, allerdings hätte ich den ganzen Assembler-Code daf&uuml;r gebraucht, da ich nicht wirklich weiß wie soetwas zu machen ist, bzw. ich noch so gut wie nie etwas damit zu tun gehabt habe! Ich bin f&uuml;r jede Hilfe dankbar! <BR> <BR>P.S.: Wie ich an einen Infineon SAB 80C517a komme? - keine Ahnung, der ist der einzige der zur Verf&uuml;gung steht!

Import-Script
28.01.2004, 10:45
Hi Orti, <BR> <BR>Das Problem an der Sache ist, das es keinen Universalcode f&uuml;r so etwas gibt, ich bräuchte mindestens deinen Schaltplan, denn ich muss wissen, wie die TM angeschlossen ist. Dann können wir mal danach schauen. Garantieren tu ich aber nichts! Ist das ein privates Projekt? <BR> <BR>Gruß Ralf <BR> <BR>PS: Hast du noch 517er &uuml;brig???

Import-Script
28.01.2004, 11:12
<a href="http://217.196.76.9/austriansoccerboard/uploads/post-29-1075284415.jpg" target="_blank">http://217.196.76.9/austriansoccerboard/uploads/post-29-1075284415.jpg</a> <BR> <BR>hilft dir das weiter? <BR> <BR>517-er habe ich sonst leider keine, sorry. <BR>Die Initialisierung des Hitachi-Displays hab ich schon. <BR>

Import-Script
28.01.2004, 11:50
Hallo Orti, <BR> <BR>Ich empfehle dir erstmal nach einem Datenblatt f&uuml;r den Keyboarddecoder 74C923 zu suchen &#40;Fairchild&#41;. Zieh dir das Teil mal rein, damit du verstehst, wie er funktioniert. Wenn du das hast, kannst du ja mal probeweise ein Programm schreiben, was selbst als purer Anfänger mit so einem tollen Chip einfach sein d&uuml;rfte. Ich habe mir sowas immer pur aufgebaut ;-&#41; <BR> <BR>Wenn du es verstanden hast, sag Bescheid. Ich nehme an, das du lernen willst, und das geht nicht, wenn ich dir den Code schreib. Aber sag Bescheid, wenn du Probleme hast. <BR> <BR>Gruß Ralf

Import-Script
28.01.2004, 12:10
Hallo. <BR> <BR>Datenblatt vom TAstaturdekoder habe ich. <BR> <BR><a href="http://217.196.76.9/austriansoccerboard/index.php?act=Attach&amp;type=post&amp;id=223197" target="_blank">http://217.196.76.9/austriansoccerboard/index.php?act=Attach&amp;type=post&amp;id=223197</a> <BR> <BR>Allerdings verstehe ich nur Bahnhof. <BR>Ich will auch Assembler nicht unbedingt lernen, sondern möchte in der nächsten Zeit mit C anfangen... <BR> <BR>Bräuchte aber dringend den Assembler-Code f&uuml;r mein Problem &#40;habe leider keine Zeit mehr mir alles &uuml;ber Assembler anzulernen&#41;. <BR> <BR>mfg <BR>Orti

Import-Script
28.01.2004, 12:20
sorry falscher link. - hab den beitrag editiert, jetzt sollts funktionieren!

Import-Script
29.01.2004, 06:59
Hallo Orti, <BR> <BR>Sorry, dass ich mich jetzt erst melde, war gestern geschäftlich abwesend. Das Problem ist, dass wenn ich jetzt versuchen w&uuml;rde, dir das Programm zu schreiben, dauerts immer eine Weile, bis ichs geschrieben, eine Weile, bis du es hast, eine Weile bis du es ausprobiert hast, und eine Weile bis du mir die Fehler mitgeteilt hast. Ein paar mal Weile gibt irgendwann eine lange Weile ;-&#41;. <BR>Naja, und dann m&uuml;sste ich noch wissen: <BR>In welcher Variablen soll die Taste nachher stehen&#40;Akku, Register B, usw.&#41;? Welche Registerbank habe ich zur Verf&uuml;gung? Ist wenigstens der Interrupt schon vorinitialisiert und steht der Rest des Programms? Welche Werte erwartet deine Displayroutine? Du siehst, so was kann ganz schön heavy werden. Hast du niemand in der Bekanntschaft, der sich damit auskennt? <BR>Wenn ich vor deiner Schaltung sitzen w&uuml;rde, wärs wahrscheinlich gar kein Problem, aber per Fernunterst&uuml;tzung... Schick mir doch mal das komplette Programm, das bis jetzt schon steht, damit ich mir ein Bild von der Sache machen kann. <BR> <BR>Gruß Ralf &#40;<a href="mailto:RalfAltmann@gmx.de">RalfAltmann@gmx.de</a>&#41;

Import-Script
29.01.2004, 11:01
&#34;Das Problem an der Sache ist, das es keinen Universalcode f&uuml;r so etwas gibt, ich bräuchte mindestens deinen Schaltplan&#34; <BR> <BR> <BR>Wozu Schaltplan, die Matrix hat 3 &#43; 4 Anschl&uuml;sse und fertig. <BR> <BR>Universell ist auch kein Problem, d.h. ob 3&#42;4 oder 8&#42;8 Tasten ist doch völlig wurscht, wenn man mal das Prinzip verstanden hat. <BR> <BR>Hier ein einfaches universelles Beispiel: <BR> <BR><a href="http://www.specs.de/users/danni/appl/soft/keyscan/index.htm" target=_top>http://www.specs.de/users/danni/appl/soft/keyscan/index.htm</a> <BR> <BR> <BR>Peter

Import-Script
29.01.2004, 13:58
Hallo Peter, <BR> <BR>das ist schon richtig, was du sagst, aber er hat erstens einen Keyboard-Decoder, von dem ich nur weiss, das er einen Interrupt auslöst,von den restlichen Pins weiss ich nichts &#40;ist nicht unbedingt wichtig, ich weiss&#41; und zweitens wäre es gut zu wissen, wie die bereits bestehende Software aussieht. Wenn du es ohne diese Angaben hinkriegst, die Software f&uuml;r den Decoder zu schreiben, ohne zu wissen, was die Software, die schon drauf ist, macht &#40;so wie die Microsoft-Leute&#41;, dann tu das. Er sagte, er kann kein Assembler und er WILL kein Assembler lernen. Er will C lernen, aber das Programm will er in Assembler. <BR>Sicher, der Link f&uuml;r das Beispiel ist zweifellos daf&uuml;r geeignet, die Prinzipien einer Tastaturmatrix zu verstehen, aber er muss verstehen, wie er die Daten aus dem Decoder holt. <BR>Und du setzt dich garantiert nicht dran, schreibst eine Routine, und dann bekommst du gesagt, das die Routine M&uuml;ll ist, weil sie wichtige Messdaten &uuml;berschreibt. Das du nicht gewusst hast, dass das Programm dort Messdaten ablegt, zählt in so einem Fall nichts, glaubs mir, ich bin nämlich genau deswegen mal auf die Nase gefallen und mache daher keine Zusatzsoftware f&uuml;r einen Controller, f&uuml;r den mir nicht die bestehende Software vorliegt. <BR> <BR>Gruß Ralf <BR> <BR>Gruß Ralf

Import-Script
29.01.2004, 14:20
@Ralf, <BR> <BR>&#34;...aber er hat erstens einen Keyboard-Decoder...&#34; <BR> <BR>Das muß ich dann wohl &uuml;berlesen haben, daß er einen verwenden muß. Ich halte sowas f&uuml;r absolute Verschwendung, wenn sowieso ein MC dran soll. <BR> <BR> <BR>&#34;er WILL kein Assembler lernen... ...das Programm will er in Assembler&#34; <BR> <BR>Das geht ja nur, wenn man einen Profi beauftragt, d.h. kräftig Mäuse daf&uuml;r abdr&uuml;ckt. <BR> <BR> <BR>Peter <BR>

Import-Script
29.01.2004, 14:53
Hallo Peter, <BR> <BR>so schlimm sehe ich das gar nicht. Erstens ist ASM nicht &#40;so&#41; schwer. Zweitens, wenn man SÄMTLICHES Material, also Schaltpläne, Software und so weiter zur Verf&uuml;gung hat, kann man ihm das Programm schon schreiben. M&uuml;sste sogar einfacher sein als bei einer normalen Tastaturmatrix, weil der Controller einen Interrupt auslöst. Er muss ja im Prinzip nur, wenn der IRQ kommt, &uuml;ber eine Tabelle auslesen, welche Taste es war, und damit hats sich. In meinem Kopf hat die Interruptroutine nicht mehr wie 10-15 Zeilen. Der Controller entprellt die Tasten, er erkennt sogar mehrere gleichzeitig gedr&uuml;ckte Tasten &#40;glaub ich&#41;. <BR> <BR>Gruß Ralf

Import-Script
29.01.2004, 18:37
Hallo. <BR> <BR>Zuersteinmal danke f&uuml;r eure Antworten. <BR>Das Programm soll sehr einfach gemacht sein. <BR>Und wenn es nicht 100%-ig passt, ist es auch egal! Ich brauche in erster Linie mal ein Grundger&uuml;st, das halbwegs passt! <BR>&#40;Also nach diesem Schema ungefähr m&uuml;sste es gehen: <BR>&uuml;ber einen Port eine der Steuerleitungen auf 1 setzen und die anderen <BR>auf 0 belassen. Danach kann man die Leseleitungen abfragen und somit <BR>herausfinden, welche Taste gedr&uuml;ckt wurde.&#41; <BR>Das Problem ist eben nur dass ich nicht weiß wie ich dies realisieren soll! <BR> <BR>Das einzige, das ich bis jetzt habe, ist die Initialisierung vom Display. Die wurde mir schon zur Verf&uuml;gung gestellt. <BR>Ich poste das mal rein: <BR> <BR>&#40; <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;LCD.ASM&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;Hitachi - LCD - Display : Unterprogramme&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR>;------------------------------------------------------------------------- <BR> <BR>$NOMOD51 <BR>$INCLUDE&#40;REG517A.INC&#41; <BR> <BR>; LCD-Controller: HD 44780; Ansteuerung &uuml;ber P5.1 ...P5.7 <BR>; 2 Zeilen, 4 Bit-Ansteuerung <BR>; P5.1 = RS P5.2 = R/W P5.3 = E P5.4 .. P5.7 = DB4 .. DB7 <BR> <BR>; temporär benötigte Register während der Abarbeitung : R1,R2,R4,R5,R6 <BR> <BR>; permanent benötigte Register f&uuml;r Variablen&uuml;bergabe in Oneascout und DATAtoLCD: <BR>; in R4 steht die Position &#40;Adresse&#41;, <BR>; in R5 das ASCII - Zeichen <BR>; Permanent benötigter Datenbereich: DATA : 7Eh,7Fh f&uuml;r DPTR <BR> <BR> <BR>PUBLIC LCD_init,datatolcd,oneascout,lcd_write_reg,lcd_bus y,lcd_enable,lcd_clr_home <BR> <BR>lcd_port equ 0f8h ;Port 5 <BR> <BR>LCDINITIAL segment code ; verschiebbares Code - Segment <BR> RSEG LCDINITIAL <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR>; Unterprogramm LCD_INIT <BR>; Voraussetzungen: keine Bedarf: R1,R4,R6 <BR> <BR>lcd_init: mov r1,#0ffh ;Verzoegerungsschleife fr 15ms, <BR> mov r6,#30d ;Die Verz&#34;gerungsschleifen sind fr 12MHz Systemtakt ausgelegt! <BR>loop: djnz r1,loop <BR> djnz r6,loop <BR> mov lcd_port,#00110000b ;Function set, 8 Bit-Init. A5=A4=1 <BR> call lcd_enable ;macht setb en clrb en <BR> mov r6,#9d ;Verz&#34;gerungsschleife 4,1ms <BR>loop2: djnz r1,loop2 <BR> djnz r6,loop2 <BR> call lcd_enable ;noch einmal <BR> mov r1,#100d ;Verz&#34;gerungsschleife 100us <BR>loop3: djnz r1,loop3 <BR> call lcd_enable <BR> mov lcd_port,#00100000b ;Interfacelaenge = 4Bit, Function set <BR> call lcd_enable ; DL = 0, D3 bis D0 = egal <BR> call lcd_busy <BR> mov r4,#00101000b ;jetzt endlich 4Bit:progr. 2 Zeilen, 5&#42;7 <BR> call lcd_write_reg ;unteres und dann oberes Nibble senden <BR> mov r4,#00001000b ;Display off <BR> call lcd_write_reg <BR> mov r4,#00001100b ;Display on <BR> call lcd_write_reg <BR> mov r4,#00000110b ;entry mode : Bewegungsrichtung Cursor rechts <BR> call lcd_write_reg <BR> call lcd_clr_home ;clear display <BR> call lcd_home <BR> ret <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;weitere Unterprogramme&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>lcd_home: mov r4,#2d ;Cursor Home &#40;00H,DD RAM Adr. bleibt!&#41; <BR> jmp lcd_write_reg <BR> <BR>lcd_clr_home: <BR> mov r4,#1d ;Clear Home <BR> jmp lcd_write_reg <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;LCD_ENABLE&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42; <BR> <BR>; Voraussetzungen: keine Bedarf: keiner <BR> <BR>lcd_enable: setb lcd_port.3 ;Enable 1 setzen <BR> clr lcd_port.3 ;Enable 0 setzen <BR> ret <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;LCD.BUSY&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>; Voraussetzungen: keine Bedarf: keiner <BR>;Busyflag pr&uuml;fen und gegebenenfalls warten <BR> <BR>lcd_busy: mov lcd_port,#11110100b ;Port auf Eingabe schalten, R/W = 1 <BR>lcd_busy_en: <BR> setb lcd_port.3 ;Enable auf 1 <BR> jb lcd_port.7,noch_busy ;noch busy ?, busy bit = P5.7 <BR> clr lcd_port.3 ;Enable auf 0 <BR> call lcd_enable ;Dummyread fr die unteren 4Bits <BR> ret <BR>noch_busy: clr lcd_port.3 ;Enable auf 0 <BR> call lcd_enable ;Dummyread fr die unteren 4Bits <BR> jmp lcd_busy_en <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;Unterprogramm Lcd_Write_reg&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>;Voraussetzungen: R4 mit LCD - Adresse Bedarf: R4 <BR>;Adresse in R4 am LCD-Modul einstellen <BR>lcd_write_reg: <BR> call lcd_busy <BR> mov a,#11110000b ;das obere Nibble ausmaskieren <BR> anl a,r4 <BR> mov lcd_port,a <BR> call lcd_enable ;und ausgeben <BR> mov a,#00001111b ;das untere Nibble ausmaskieren <BR> anl a,r4 <BR> swap a ;Nibbles tauschen <BR> mov lcd_port,a <BR> call lcd_enable ;und ausgeben <BR> ret <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;ONEASCOUT&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>; Voraussetzungen: R4,R5 mit Werten Bedarf: R4,R5 <BR>;schreibt ein ASCII -Zeichen &#40;in R5&#41; auf Adresse &#40;in R4&#41; des LCD raus <BR>Oneascout: push acc <BR> push PSW <BR> call lcd_write_reg ; <BR> call lcd_busy <BR> mov a, r5 ;oberes Nibble senden <BR> anl a, #11110000b <BR> mov lcd_port,a <BR> setb lcd_port.1 ;RS = 1 <BR> call lcd_enable ;und ausgeben <BR> mov a, r5 ;unteres Nibble senden <BR> swap a <BR> anl a,#11110000b ; <BR> mov lcd_port,a <BR> setb lcd_port.1 ;RS = 1 <BR> call lcd_enable ;und ausgeben <BR> pop PSW <BR> pop acc <BR> ret ; <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;DATAtoLCD&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>; Voraussetzungen: DPTR mit Adresse des Strings <BR>; Bedarf: R2,R4,R5 DATA: 7E, 7F als Zwischenspeicher f&uuml;r DPTR <BR>; Schreibt Datenstring &#40;2mal 20 Zeichen max. zweizeiliges Display &#41; aus ROM <BR>; zeichenweise nach R5, die Adresse nach R4 und ueber ONEASCOUT aufs Display <BR>; Abbruchbedingung ist &#39;0&#39; nach String <BR>; String darf nicht länger als 40 Zeichen sein. 2.Zeile = 21. Zeichen,vorher Blanks! <BR> <BR>DATAtoLCD: push acc <BR> push PSW <BR> Mov R2, #00H ; Zeichenzaehler <BR> mov 7Eh,dpl ; DPTR sichern <BR> mov 7Fh,dph <BR>output: mov dpl,7Eh ; DPTR f&uuml;r auszugebenden Text <BR> mov dpH,7Fh <BR> mov a,R2 <BR> movc a,@a&#43;DPTR ; ASCII - Zeichen in den Acc <BR> jnz naechster; <BR> pop PSW <BR> pop acc <BR> Ret ; Ausgabe beendet <BR>naechster: mov r5, a ; ASCII - Zeichen nach R5 <BR> mov dptr,#zeichenadr ; Zeichenadresse <BR> mov a,R2 ; und nach R4 <BR> movc a,@a&#43;dptr <BR> inc R2 <BR> mov r4,a <BR> call oneascout <BR> jmp output <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR>Zeichenadr: ;Position&#40;Adresse&#41; d. Zeichen &#40;zweizeilig, 2&#42;20 Zeichein&#41;immer gleich <BR> <BR> db 80H,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8c h,8dh,8eh,8fh <BR> db 90H,91h,92h,93h <BR> db 0c0h,0c1h,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H,0C8H,0C9H, 0cah,0cbh,0cch,0cdh,0ceh,0cfh <BR> db 0d0h,0d1h,0d2H,0d3H <BR> <BR>;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; &#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR>end <BR>&#41; <BR> <BR>mfg <BR>Orti

Import-Script
30.01.2004, 07:09
Hallo Orti, <BR> <BR>mit dem Tastaturdecoder m&uuml;sste das in etwa so funktionieren: <BR> <BR>1. Interrupt 0 initialisieren <BR>2. Interrupt 0 Routine: Jedesmal wenn der Interrupt ausgelöst wird, wurde auch eine Taste gedr&uuml;ckt. Im Datenblatt steht ja, welche der Tasten in der Matrix welchen Wert gibt. <BR> <BR>Mich w&uuml;rde jetzt halt noch interessieren, wie genau der Decoder mit dem 517 verschaltet ist. <BR> <BR>Auf alle Fälle sieht das ungefähr so aus: <BR> <BR>1. Interrupt wird ausgelöst <BR>2. 517 holt die Daten <BR>3. 517 wandelt die Daten &uuml;ber eine Tabelle in einen Zeichencode &#40;ASCII&#41; <BR> <BR>Wenn ich ein System hätte, bei dem der Decoder im Speicherbereich &#40;also memory mapped IO&#41; liegt, w&uuml;rde meine Routine ungefähr so aussehen: <BR> <BR>int0: push psw ;Daten sichern <BR>push acc <BR>push dpl <BR>push dph <BR> <BR>mov dptr,#decoder ;Daten vom Decoder holen <BR>movx a,@dptr <BR>mov dptr,#tabelle ;Matrixwert in Zeichen wandeln <BR>movc a,@a&#43;dptr <BR>mov key,a ;neuen Tastenwert speichern <BR> <BR>pop dph <BR>pop dpl <BR>pop acc <BR>pop psw <BR>reti <BR> <BR>In Key wird die neue Taste gespeichert, alle benutzten Register weisen nach dem Interrupt die gleichen Werte wie vorher auf &#40;Ausser Key nat&uuml;rlich ;-&#41;&#41;. <BR> <BR>Du kannst f&uuml;r den ersten Test in die Tabelle folgendes schreiben: <BR> <BR>tabelle: db &#39;0123456789ABCDEF&#39; <BR> <BR>Das sind normale ASCII-Zeichen &#40;Ich weiss nicht, ob du von den ASCII-Werten noch etwas abziehen musst, damit du es auf deinem Display darstellen kannst&#41;. <BR>Du schreibst ein Programm, dass dir eben jeden Tastendruck aufs Display ausgibt, und notierst dir, welcher Wert f&uuml;r jede Taste rauskommt. Und dann ersetzt du in der Tabelle einfach den Wert, der die jeweilige Taste in Wirklichkeit darstellt. <BR> <BR>So, ich hoffe, dass das so funktioniert. Wenn nicht, sag bitte Bescheid, will wissen, obs tut. <BR> <BR>Gruß Ralf