Register-Port-Bits direkt ansteuern
Hallo!
Edit: Programmieren in C und zwar C18 von Microchip
Ich hab ne Frage bezüglich der Ansteuerung von einzelnen Port-Bits eines Registers. Also ich dachte das geht so ähnlich:
#define E PORTBbits.RB0
#define F PORTBbits.RB1
TRISB = 0x00; //Alle Bits von Port B als Ausgang verwenden
E = 1; //RB0 auf HIGH setzen -> Leuchtdiode leuchtet
F = 1; //RB1 auf HIGH setzten -> Leuchtdiode an RB1 leuchtet, Leuchtdiode an RB0 ist dunkel
Da liegt auch schon das Problem. Ich will das beide leuchten! Wieso leuchtet nach F = 1; nur mehr die an RB1 und die an RB0 nicht mehr? Ich hab ja beide Ausgänge auf HIGH geschalten!!
Bitte um Hilfe!!
Anbei noch der gesamte Code.
Code:
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include <stdlib.h>
#include <delays.h>
#include "waits.h" // für die Warteschleife
/** D E C L A R A T I O N S **************************************************/
#define LCD_TEST 1
#define PORT_TEST 1
#define WAIT_TEST 0
#define TRIS_LCD TRISB
#define LCD_PORT PORTB
#define LCD_STEUER_PORT PORTD
#define D0 PORTBbits.RB0 //Dx .... Datenleitung x
#define D1 PORTBbits.RB1
#define D2 PORTBbits.RB2
#define D3 PORTBbits.RB3
#define D4 PORTBbits.RB4
#define D5 PORTBbits.RB5
#define D6 PORTBbits.RB6
#define D7 PORTBbits.RB7
#define RS PORTDbits.RD0 //Register Select
#define RW PORTDbits.RD1 //Read / Write
#define E PORTDbits.RD2 //Enable
/** Configuration ********************************************************/
#pragma config FOSC = HS //Externer Takt
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF //Watchdog Timer
#pragma config LVP = ON //Low Voltage ICSP
#pragma config CPUDIV = OSC1_PLL2 //CPU-Frequenz nicht dividiert, PLL durch 2;
#pragma config PLLDIV = 5
#pragma code
void main(void)
{
#if WAIT_TEST
{
int a=0;
TRISB = 0x00;
while(a<5)
{
LATB = 0x0F;
wait_s(1);
LATB = 0x00;
wait_s(1);
a++;
}
}
#endif
#if PORT_TEST
{
int a=0;
TRISB = 0x00;
TRISD = 0x00;
while(a<5)
{
D0 = 1;
E= 1;
wait_s(1);
D1 = 1;
wait_s(1);
D2 = 1;
wait_s(1);
D3 = 1;
wait_s(1);
D3=0;
D2=0;
D1=0;
D0=0;
wait_s(2);
a++;
}
}
}
Im Code stecken noch mehr Dinge drinnen. Die wait_s(x); sind in einem anderen C-File, aber funktionieren ganz gut. Also da wartet er x-Sekunden.
Ja ich hoffe euch fällt dazu was ein.
lg