Es gibt eben kein pin0, die Pins für den Port B sind so definiert:
Code:
/* PORTB */
#define PB7 7
#define PB6 6
#define PB5 5
#define PB4 4
#define PB3 3
#define PB2 2
#define PB1 1
#define PB0 0
/* DDRB */
#define DDB7 7
#define DDB6 6
#define DDB5 5
#define DDB4 4
#define DDB3 3
#define DDB2 2
#define DDB1 1
#define DDB0 0
/* PINB */
#define PINB7 7
#define PINB6 6
#define PINB5 5
#define PINB4 4
#define PINB3 3
#define PINB2 2
#define PINB1 1
#define PINB0 0
Das stammt aus der oben gezeigten iom8.h-Datei.
Die Datenrichtung wird wird im Datenrichtungsregister (DataDirectionRegister oder DDRx) angegeben, das ist aber auch in Bascom so. Ein gesetzes Bit im Register bedeutet Ausgang, nicht gesetzt bedeutet Eingang. Um PORTB.0 als Ausgang zu nutzen, muss man das Bit 0 im DDRB-Register setzen, möglichst ohne die anderen Bits zu beeinflussen. Das würde dann so aussehen:
DDRB = DDRB | 1; // Die Kurzform wäre DDRB |= 1; Pin B0 ist Ausgang
DDRB = DDRB & 254; // Kurzform DDRB &= 254; Pin B0 ist Eingang
Für die 1 kann man auch (1<<0) schreiben, oder, weil lesbarer, (1<<DDB0)
Pin auf High: PORTB |= (1<<PB0);
Pin auf Low: PORTB &= ~(1<<PB0); // ausgeschrieben ist das PORTB = PORTB & ~(0b0000 0001); die Tilde~ invertiert jedes Bit, also PORTB = PORTB & 0b1111 1110
Pin als Eingang auf High prüfen: if(PINB & 1)... wobei man dann die 1 wieder durch (1<<PINB0) ersetzen kann. usw.usw.
http://www.mikrocontroller.net/artic...f_auf_Register
http://www.mikrocontroller.net/artic...f_auf_IO-Ports
Gruß
mic
Lesezeichen