Versuche hier die serielle Schnittstelle für den C515 µC zu
programmieren.
Die Quarzfrequenz ist 12 MHz, P3.0 = RXD, P3.1 = TXD.
Kann man beim C515 den Timer2 für die serielle Schnittstelle nicht
verwenden wie z. B. beim 8052?
Habe es mit folgenden Unterprogrammen versucht,
aber keine Antwort bekommen.
SD_BAUD_9600 EQU 100h-36 ; = 0DDh
SD_BAUD_4800 EQU 100h-72 ; = 0BAh
SD_BAUD_2400 EQU 100h-144 ; = 074h
; ===============================
SDINIT:
MOV SCON,#01010000b ; set Mode 1 (8 Bit UART)
; Receive enabled
ORL PCON,#00000000b ; Set SMOD=0, division by 2
MOV T2CON,#00000000b ; Clear T2CON
SETB RCLK ; Set Receive Mode for T2
SETB TCLK ; Set Transmit Mode for T2
MOV TH2,#0FFh ; Set High-Counter to 0FFh
MOV TL2,#SD_BAUD_9600 ; Set Low-Counter to Reload value
MOV RCAP2L,#SD_BAUD_9600 ; Set Low-Reload to Reload value
MOV RCAP2H,#0FFh ; Set High-Reload to 0FFh
SETB TR2 ; Start Timer 2
SETB TI ; Enable TI
RET
; ================================
; SDSEND: Send 1 Byte to serial Port
; -------
; Registers: A : Byte to be sent
;
;
SDSEND:
PUSH PSW ; save PSW
JNB TI,$ ; Wait until sendbuffer is empty
CLR TI ; Clear sendbuffer flag
MOV SBUF,A ; put it into serial buffer
POP PSW ; restore PSW
RET
;
========================================================================
===================
; SDRECEIVE: Receive 1 Byte from serial Port
; ---------
; Registers: A : Byte received (OUTPUT)
;
;
SDRECEIVE:
PUSH PSW ; save PSW
JNB RI,$ ; Wait until byte is in buffer
CLR RI ; Clear receivebuffer flag
MOV A,SBUF ; put it into Acc
POP PSW ; restore PSW
RET
Kann mir jemand das passend machen?
Schau mal ins Datenblatt. Da ist von Timer 1 und von einem dedizierten Baudraten-Generator die Rede: <http://www.keil.com/dd/docs/datashts/infineon/80x515_um.pdf> Seite 51ff Von Timer2 steht da nichts.
khs schrieb: > Kann mir jemand das passend machen? So trivial ist das nicht, der 515 hat eine ganz andere Schnittstelle, u.a. mit Baudrate Generator. Auszug:
1 | ; |
2 | ; Serial Port starten |
3 | ; |
4 | A51FUNC SIINIT,SERIAL |
5 | clr ES |
6 | mov trmidx,#255 |
7 | mov rcvidx,#0 |
8 | mov lrchar,#0 |
9 | mov lanaddr,#0 |
10 | mov rcvto,#0 |
11 | mov trmto,#0 |
12 | setb BD |
13 | mov a,PCON |
14 | orl a,#80h ;Baud rate gen ein |
15 | mov PCON,a |
16 | mov SCON,#01011000b ;Mode 1,Rcv ein |
17 | setb ES |
18 | setb V24RTS |
19 | setb V24CTS |
20 | setb EAL |
21 | ret |
Da kommt natürlich noch eine menge dazu, z.B. eine Interrupt Service Routine, aber das wird für dich sowieso nicht passen. Gruss Reinhard
Danke für die Antworten. Habe gestern noch im Tread Assembler Crashkurs 8051 in diesem Forum einen Link zu einem ausführlichen C515er-Datenblatt gefunden, da war auch der Timer 1 für die serielle Schnittstelle angegeben, geht scheinbar mit T2 gar nicht. T1 soll mir auch recht sein, doch in dem Auszug von Reinhard Kern kann ich widerum einige Labels nicht zuordnen, wie z. B. trmidx,lanaddr. PCON,SCON, ES, oder EAL zwar schon. Eine genauere Quellenangabe wäre von Vorteil. Der 515er ist scheinbar bei den Heimwerkern weniger vorhanden als die 40poligen, habe aber auch noch nicht so intensiv danach gesucht und gegoogelt. Vielleicht hat da doch noch jemand hilfreiches eingestellt, oder Tips dazu, Gruß Hans
khs schrieb: > Der 515er ist scheinbar bei den Heimwerkern weniger vorhanden Wie auch, die alte Krücke ist doch schon lange abgekündigt. Wenn du unbedingt etwas mit 8051 machen willst, schau bei Silabs, NXP oder Atmel rein.
Im Anhang ASM Quelltext für die S1 des 80C517. Sollte aber passen. Allerdings sind afaik die Register S0CON beim 515 z.b. nur SCON etc. weiteres sollte der Siemens A51 Pocket Guide zu tage fördern können :)
Den C515 verwende ich hier deshalb, weil ich da im Schrott eine komplette Steuerplatine mit gesockeltem Eprom und gesockeltem 68pol. MC fand. außer einem 24c02, einem Relais und einem Drucksensorwar da nichts drauf, so daß da noch jede Menge frei Ports da sind. Es gibt natürlich modernere Sachen, aber mit so einer fertigen Platine spart man sich eine neue und viel Löterei. Die Programmierung ist natürlich nicht "ISP", aber ich verwende bei der Entwicklung auch keine Eproms, sondern habe da einen Batterie-gepufferten RAM-Adapter, den ich mit einem homemade-Eprommer ruckzuck überschreiben kann. Unter der Adresse http://www.microcontroller-online.de/microcontroller/theorie/uc_doku_kapitel_08.html fand ich eine Beschreibung wo es heißt Die serielle Schnittstelle des 80(C)515/-535 ist vollständig kompatibel mit der des 80(C)51. ...der ja nur 2 Timer hat. Danke auch für das File, das mir zu der ausführlichen deutschen Beschreibung in obigem Link sicher noch mehr hilft. Gruß Hans
khs schrieb: > Den C515 verwende ich hier deshalb, weil ich da im Schrott eine > komplette > Steuerplatine mit gesockeltem Eprom und gesockeltem 68pol. MC fand. Was hast du denn vor? Möchtest du nur ein wenig spielen? Oder altes Wissen auffrischen? Oder hast du ein kleines Projekt? Heute gibt es von 5...25€ Demo Boards verschiedener Hersteller. Die Dinger haben ein paar Led, Taster, Poti, ... drauf. Ports, Schnittstellen, ADC, ... sind auf Stiftleisten geführt. Die haben Versorgung, JTAG, RS232, ... über USB. Die Quälerei mit EPROM-Emulator und dem alten MC würde ich mir schenken.
Das ganze soll eine Pumpen-/Solarheizungssteuerung werden, nicht nur
zum basteln und probieren.
Habe inzwischen schon gemerkt, daß die einzelnen Derivate je nach
Ausstattung Unterschiede aufweisen, wie auch der 517 mit 2 mal
RXD/TXD.
Trotzdem habe ich am Samstag schon auf Anhieb ein einfaches
Programm hinbekommen, da ich hier 12 MHz habe und den internen
Baudratengenerator verwenden konnte, hier die paar Zeilen:
;********************* S1_RT.ASM
*****************************************
$NOMOD51
$INCLUDE (C515.MCU)
; Übertragung mit serieller Schnittstelle
; Übertragungsrate 4800 Bd, 8Bit
ORG 0
LJMP main
main: NOP
s1_ini: MOV SCON,#01010000b ;8 Bit,Mode 1, Receiver enable
SETB BD ;Baudratengenerator einsch.
ANL PCON,#01111111b ;4800 Bd SMOD = 0 = Vorgabe
; ORL PCON,#10000000b ;9600 Bd SMOD = 1
init: MOV R3,#0 ;Empfangsregister löschen
mainlp: MOV P5,R3 ;Kontrollausgabe des empf. Zeichens
;---------- ISR serielle Schnittstelle 1
;Senden: Datenwort muß in R2 stehen
;Empfangen: Datenwort ist in R3
;seriell: PUSH ACC
seriell: MOV A,SCON
JNB ACC.0,seriell ;wenn I.-Request-Flipflop RI=1
empfang: MOV R3,SBUF ;empfangenes Zeichen nach R3
ANL SCON,#11111110b ;Interrupt-Request-Flipflop RI löschen
MOV P5,R3 ; zum testen des Programms
MOV R2,P5
LCALL senden ; Echoausgabe
LJMP seriell
senden: MOV SBUF,R2 ;Senden starten
sen_ti0: MOV A,SCON ;Warten, bis Senden beendet, d.h. TI=1
JNB ACC.1,sen_ti0
ANL SCON,#11111101b ;TI1 löschen
RET
END
Ist zwar noch nicht interruptgesteuert, deshalb werde ich mir das
File von Georg G. auch noch vornehmen, vielen Dank dafür.
Daß es für 5 € schon Demos gibt, hätte ich jetzt nicht gedacht.
Habe da noch ein paar Platinen für 40pol. 51er, muß aber schon
zugeben, bis man sich da durchgepiepst hat und ev. noch einiges
entfernen muß braucht schon auch seine Zeit.
Danke noch mal für alle Antworten, Gruß
Hans
khs schrieb: > Der 515er ist scheinbar bei den Heimwerkern weniger vorhanden Siemens hat sich zu lange auf seinen alten OTP und ROM-less Dampflocks ausgeruht und die anderen im Flash-Zug an sich vorbei brausen lassen, allen voran Atmel.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.