🇩🇪
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.