🇩🇪
unsigned char i;
PORTD=0x01;
for (i=0;i<8;i++){
_delay_ms(100);
PORTD <<=1;
}
for (i = 0; i < 8; i++) {
PORTD ^= (1 << i);
_delay_ms(100);
PORTD ^= (1 << i);
}
x &= (~(1<<6));
x &= 0xbf; // so lösche ich das Bit 6
ZitatPORTB ^= (1 << 6);^ bedeutet doch xor, mit PORTB ^= (1 << 6) müßte dann Bit 6 gedreht werden, es wird aber nicht immer auf Null gesetzt.
#include <xc.h>
#include"PIC18F14K22_config.h" // Konfigurations Bits
#define _XTAL_FREQ 1000000UL // Int. Oszillator 1 Mhz.
// Funktions Definition.
void wechselblinken(void);
void main(void) {
ANSELH = 0; // ANSEL Register alles auf Digital I/O
TRISB = 0b00100000; // TRISB Register RB5 Eingang, Rest Ausgang I/O
PORTB = 0b00000000; // PORTB Alles Low. (Je nach Anschluss von VSS an der LED)
while (1) {
if (PORTBbits.RB5 == 0) {
wechselblinken();
} else {
LATBbits.LB6 = 0;
LATBbits.LB7 = 0;
}
}
return;
}
// Funktionen.
void wechselblinken(void) {
for (int i = 0; i < 5; i++) {
LATBbits.LB6 = 1;
__delay_ms(500);
LATBbits.LATB6 = 0; // Das geht auch kürzer :) bsp: PORTB ^= (1 << 6);
__delay_ms(500);
LATBbits.LB7 = 1;
__delay_ms(500);
LATBbits.LATB7 = 0;
__delay_ms(500);
}
}
}
Zitat von: PICkel in 10.11.2023, 10:24:25 CETsetze mal ANSELB = 0; // gesamter PORTB ist digitaler Input.
Zitat von: Peter in 09.11.2023, 13:29:16 CETDu hast den Port nicht auf digital gesetzt.Ich merke schon, alles etwas anders als bei den AVR's.
Müsste hier das ANSEL Register sein.