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?
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.