PIC18F26K22 nelze nastavit jednotlivé bity v C

Zdravím fórum,

mám PIC18F26K22 a zatím jsem si chtěl rozblikat jen pár LEDek a hned tu mám záhadu. Nastavil jsem vnitřní oscilátor a PLL a PICka běhá na 60MHz. Dvě LEDky jsou na pinech RB1 a RB2. Když mám

while(1){
	DelayMs(1000);
	PORTBbits.RB1 = 0;
	PORTBbits.RB2 = 0;
	DelayMs(1000);
	PORTBbits.RB1 = 1;
	PORTBbits.RB2 = 1;
}

tak bliká jen RB2. I když prohodím řádky s přiřazením, tak stejně vždy bliká jen ta druhá v pořadí.
Až když dám čekací smyčku za první LEDku, tak blikají obě tak jak mají.

while(1){
	DelayMs(1000);
	PORTBbits.RB1 = 0;
	DelayUs(10);
	PORTBbits.RB2 = 0;
	DelayMs(1000);
	PORTBbits.RB1 = 1;
	DelayUs(10);
	PORTBbits.RB2 = 1;
}

Má k tomu někdo vysvětlení? Rád bych se podobné chybě příště vyvaroval a štve mě že se na to nemohu spolehnout.

Notík

RMW … pozri ako to prelozil prekladac…

Nevím co je RMW?

Ale překladač to překládá takto:

60: while(1){
012C D7E1 BRA 0xf0
61: //Vysli();
62: DelayMs(1000);
00F0 0EE8 MOVLW 0xe8
00F2 6EE6 MOVWF 0xfe6, ACCESS
00F4 0E03 MOVLW 0x3
00F6 6EE6 MOVWF 0xfe6, ACCESS
00F8 DFA2 RCALL 0x3e
00FA 52E5 MOVF 0xfe5, F, ACCESS
00FC 52E5 MOVF 0xfe5, F, ACCESS
63: PORTBbits.RB1 = 0;
00FE 9281 BCF 0xf81, 0x1, ACCESS
64: DelayUs(10);
0100 0E0A MOVLW 0xa
0102 6EE6 MOVWF 0xfe6, ACCESS
0104 6AE6 CLRF 0xfe6, ACCESS
0106 DF86 RCALL 0x14
0108 52E5 MOVF 0xfe5, F, ACCESS
010A 52E5 MOVF 0xfe5, F, ACCESS
65: PORTBbits.RB2 = 0;
010C 9481 BCF 0xf81, 0x2, ACCESS
66: DelayMs(1000);
010E 0EE8 MOVLW 0xe8
0110 6EE6 MOVWF 0xfe6, ACCESS
0112 0E03 MOVLW 0x3
0114 6EE6 MOVWF 0xfe6, ACCESS
0116 DF93 RCALL 0x3e
0118 52E5 MOVF 0xfe5, F, ACCESS
011A 52E5 MOVF 0xfe5, F, ACCESS
67: PORTBbits.RB1 = 1;
011C 8281 BSF 0xf81, 0x1, ACCESS
68: DelayUs(10);
011E 0E0A MOVLW 0xa
0120 6EE6 MOVWF 0xfe6, ACCESS
0122 6AE6 CLRF 0xfe6, ACCESS
0124 DF77 RCALL 0x14
0126 52E5 MOVF 0xfe5, F, ACCESS
0128 52E5 MOVF 0xfe5, F, ACCESS
69: PORTBbits.RB2 = 1;
012A 8481 BSF 0xf81, 0x2, ACCESS
70: }
71: }
012E 0012 RETURN 0

Nevím co dělá ten ACCESS, ješte jsem nenaučil ASM příkazy v řadě PIC18, ale jinak se mi to zdá docela v pořádku.
Nemůže to být tím, že při frekvenci 60MHz není dost času na provedení změny a další operace křekryje tu předešlou?
Je to záhada…

Popsáno je to zde.

Děkuju všem.
Už tomu rozumím, v tom odkazu to bylo krásně popsaný. Buď budu používat LAT místo PORT nebo budu prokládat NOP.

Ještě jednou dík…

Pozor, je tam ještě takovej chyták:
Pro nastavení pinů používej LATx
Pro čtení pinů používej PORTx
Čtení LATx čte stav výstupu, takže když je pin nastaven jako vstup budeš číst stav LATx, tj. výstupního klopáku, nikoliv pinu.
Takže pokud jsi při inicializaci mazal LATx, tak budeš stále číst samé 0 u vstupů.

Už je mi jasný rozdíl mezi LAT a PORT.
Dík…