Forum

Einloggen | Registrieren | RSS  

nochmal Ratschlag: .. (Schaltungstechnik)

verfasst von Mike252, 11.09.2010, 08:47 Uhr

.include "m8515def.inc"

.def Temp = R16 ; Register Für Kleinere Arbeiten
.def Zeichen = R17 ; In Diesem Register Wird Das Zeichen An Die
.def Sum = R18
.def Alarm = R19
; Ausgabefunktion übergeben

.equ F_cpu = 4000000 ; Systemtakt In Hz
.equ Baud = 9600 ; Baudrate

; Berechnungen
.equ Ubrr_val =((f_cpu + Baud * 8) /(baud * 16) -1) ; Clever Runden
.equ Baud_real =(f_cpu /(16 *(ubrr_val + 1))) ; Reale Baudrate
.equ Baud_error =((baud_real * 1000) / Baud -1000) ; Fehler In Promille

.if((baud_error > 10) ||(baud_error < -10)) ; Max. + / -10 Promille Fehler
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
.endif

; Stackpointer initialisieren

ldi temp, HIGH(RAMEND)
Out Sph , Temp
ldi temp, LOW(RAMEND)
Out Spl , Temp


; Port a = Ausgang // Portnummer und Bit korrigieren

ldi temp, 0xFF
Out Ddra , Temp
ldi temp,0
Out Porta , Temp / / Kein Alarm


; Baudrate einstellen





; Baudrate einstellen

ldi temp, HIGH(UBRR_VAL)
Out Ubrrh , Temp
ldi temp, LOW(UBRR_VAL)
Out Ubrrl , Temp

; Frame-Format: 8 Bit

ldi temp, (1< Out Ucsrc , Temp

sbi UCSRB,TXEN ; TX aktivieren
sbi UCSRB, RXEN ; RX (Empfang) aktivieren




/ / Empfangen

Receive:

Receive_loop:
sbis UCSRA, RXC ; warten bis ein Byte angekommen ist
rjmp receive_loop
in temp, UDR ; empfangenes Byte nach temp kopieren
ret





/ / Hauptschleife

Start:

ldi sum,0xFF //Checksum Reset
ldi alarm,0 // nix alarm

rcall receive
cpi temp, 0x3a //start des blockes??
brne start

rcall receive
cpi temp, 0x10 // meine Adresse?
brne start
Sub Sum , Temp / / Checksum Aufaddieren


rcall receive
cpi temp, 0x01 // Kommando 01 wenn nicht nix mache
brne start
Sub Sum , Temp / / Checksum Aufaddieren


rcall receive
cpi temp, 0x08 // ALARM
brne weiter

ldi alarm,1 //Alarm Bit setzen, nicht ALARM ausloesen

Weiter:
Sub Sum , Temp / / Checksum Aufaddieren




rcall receive //checksumme empfangen

cp temp, sum //checksummen vergleichen
/ / Brne Checksumme Falsch
/ / Keinen Alarm Auslösen

/ / Checksumme Richtig Alarm Ausloesen Oder Sonstigen Befehl Verarbeiten

cpi alarm,1

rcall myALARM


rcall receive //CR
rcall receive // und LF empfangen


rcall SENDEN //Bestätigung senden


rjmp start //ende Hauptschleife


/ / Alarm
Myalarm:

/ / Setze Bit Für Relais Zu Ziehen
ldi temp,1
Out Porta , Temp ; Und An Port D Ausgeben.

ret



/ / / / Senden

Senden:

ldi sum,0xFF


Loop:

ldi zeichen, 0x3a
rcall serout ; Start Block
subi sum, 0x3a //Checksumme berechnen


ldi zeichen, 10
rcall serout ; Adresse Interface
subi sum, 0x10


ldi zeichen, 01 ; Kommando

subi sum, 01
rcall serout ; ...


ldi zeichen, 00 ; Daten still alive
rcall serout
/ / Subi Sum , 00


cp zeichen, sum ; checksumme senden

rcall serout



ldi zeichen, 10 ; CR
rcall serout
ldi zeichen, 13 ;LF
rcall serout

reti //zurueck zur Hauptschleeife



Serout:
sbis UCSRA,UDRE ; Warten bis UDR für das nächste
; Byte bereit ist
rjmp serout
Out Udr , Zeichen
ret ; zurück zum Hauptprogramm



kann das bitte jemand für mich simulieren?
Wenn Fehler drin sind event. auch korrigieren?

DANKE



Gesamter Thread:

Schnittstelle RS485 zu Binärausgang - Mike252, 03.09.2010, 13:34
Schnittstelle RS485 zu Binärausgang - hws(R), 03.09.2010, 14:00
Schnittstelle RS485 zu Binärausgang - Mike252, 03.09.2010, 15:12
Schnittstelle RS485 zu Binärausgang - hws(R), 03.09.2010, 16:11
Schnittstelle RS485 zu Binärausgang - Mike252, 04.09.2010, 08:50
Schnittstelle RS485 zu Binärausgang - hws(R), 04.09.2010, 10:05
Schnittstelle RS485 zu Binärausgang - Mike252, 06.09.2010, 10:04
Schnittstelle RS485 zu Binärausgang - Mike252, 06.09.2010, 10:05
Schnittstelle RS485 zu Binärausgang - hws(R), 06.09.2010, 11:38
Schnittstelle RS485 zu Binärausgang - Mike252, 06.09.2010, 14:16
Schnittstelle RS485 zu Binärausgang - el-haber, 06.09.2010, 14:38
Schnittstelle RS485 zu Binärausgang - el-haber, 03.09.2010, 16:08
nochmal Ratschlag: .. - hws(R), 06.09.2010, 19:00
nochmal Ratschlag: .. - Mike252, 08.09.2010, 20:07
nochmal Ratschlag: .. - hws(R), 08.09.2010, 21:41
nochmal Ratschlag: .. - Mike252, 09.09.2010, 20:39
nochmal Ratschlag: .. - hws(R), 10.09.2010, 01:28
nochmal Ratschlag: .. - Mike252, 11.09.2010, 08:47
nochmal Ratschlag: .. - hws(R), 11.09.2010, 09:55