K (→C-Code) |
|||
| Zeile 18: | Zeile 18: | ||
=C-Code= | =C-Code= | ||
| − | Der folgende C-Code ist Pseudocode, was | + | Der folgende C-Code ist Pseudocode, was Setzen der Ports angeht. Die entsprechenden Befehle sind durch die richtigen C-Befehle für diese Ports zu ersetzen. |
;MAKE_OUT (X): Schaltet X als Ausgang (DDR-Register) | ;MAKE_OUT (X): Schaltet X als Ausgang (DDR-Register) | ||
;SET (X): Setzt Ausgang X auf HIGH (PORT-Register) | ;SET (X): Setzt Ausgang X auf HIGH (PORT-Register) | ||
| Zeile 95: | Zeile 95: | ||
</pre> | </pre> | ||
| + | [[Kategorie:Microcontroller]] | ||
| + | [[Kategorie:Kommunikation]] | ||
[[Kategorie:Praxis]] | [[Kategorie:Praxis]] | ||
[[Kategorie:Quellcode C]] | [[Kategorie:Quellcode C]] | ||
Version vom 9. Januar 2006, 19:53 Uhr
|
An diesem Artikel arbeitet gerade Mitglied SprinterSB.
Am besten momentan noch keine gravierenden Ergänzungen / Änderungen vornehmen. Dieser Hinweis verschwindet wenn der Autor soweit ist. Sollte dieser Hinweis länger als drei Tage auf einer Seite sein, bitte beim Autor SprinterSB per PM / Mail oder Forum nachfragen ob er vergessen wurde. |
- Vorteile
- schnell
- preiswert
- einfach anzusteuern (auch ohne Hardware-Unterstützung)
- modular aufgebaut und erweiterbar
- alle Ports können gleichzeitig geschaltet werden, auch 100 Stück
- SPI-Interface und ISP-Pins können verwendet werden
- Bus hat nur 3 Leitungen, dadurch kein kompliziertes Layout mit vielen Leitungen
- Nachteile
- bei dieser Version nur Ausgabe möglich
Inhaltsverzeichnis
Schaltplan
C-Code
Der folgende C-Code ist Pseudocode, was Setzen der Ports angeht. Die entsprechenden Befehle sind durch die richtigen C-Befehle für diese Ports zu ersetzen.
- MAKE_OUT (X)
- Schaltet X als Ausgang (DDR-Register)
- SET (X)
- Setzt Ausgang X auf HIGH (PORT-Register)
- CLR (X)
- Setzt Ausgang X auf LOW (PORT-Register)
Mit SPI-Hardware
Ohne SPI-Hardware
serpa.h
#ifndef _SERPA_H_ #define _SERPA_H_ /* 4 Bytes (32 Ports) */ #define SERPA_SIZE 4 extern unsigned char serpa[]; extern void serpa_out(); extern void serpa_init(); #endif /* _SERPA_H_ */
serpa.c
/* SERiell nach PArallel (serpa) via Software */
#include "serpa.h"
// Array für die Daten
unsigned char serpa[SERPA_SIZE];
void serpa_init ()
{
// Verwendete Ports auf OUT
MAKE_OUT (PORT_SER);
MAKE_OUT (PORT_SCK);
MAKE_OUT (PORT_RCK);
// SCR und RCK auf definierten Level HIGH
SET (PORT_SCK);
SET (PORT_RCK);
}
void serpa_out ()
{
unsigned char anz = SERPA_SIZE;
unsigned char* serp = serpa+SERPA_SIZE;
do
{
unsigned char bits;
unsigned char data = *--serp;
// 8 Bits pro Byte rausschieben
for (bits = 8; bits > 0; bits--)
{
CLR (PORT_SER);
if (data & 0x80)
{
SET (PORT_SER);
}
data <<= 1;
// Strobe an SCK schiebt Daten im Gänsemarsch
// um 1 Position weiter durch alle Schieberegister
CLR (PORT_SCK);
SET (PORT_SCK);
}
}
while (--anz > 0);
// Strobe an RCK bringt die Daten von den Schieberegistern in die Latches
CLR (PORT_RCK);
SET (PORT_RCK);
}

