C kodlarının arasına ASM girmem gerekiyor. Ancak Bit işlemlerinde takıldım.
Eğer asm("BCLR 5,0xe0") gbi bir komut girersem sorun yok. p0_5 üzerinde işlem yapabiliyorum.
veya herhangi bir pointerin adresini
asm("MOV.W pointer, A0");
şeklinde bir pointerden alıp
asm("MOV.B #0x45, [A0]");
gibi bir komutla dolaylı adresleme işlemi de yapıyorum.
buraya kadar sorun yok.
ama 0xe0 olan port adresini ve bit numarasını bir pointerden veya aşka bir değişkenden almanın bir yolunu bilmiyorum.
Aslında bir yolu olduğunu da sanmıyorum. Yine de mümkün müdür? diye sormaktan kendimi alamıyorum.
Dolaylı adresleme ile bit işlemi yapmanın bir yolu var mı?
Kafam karisti. # Immediate deger alinacagini belirtsin.
B bit numarasi, A da adres olmak uzere
Mov #B,#A ve Mov #B, A seklinde 2 komutumuz mu var.
Amacimiz Mov B,A seklini mi olusturmak?
Yok hocam.
Aşağıdaki işi yapacak bir yöntem. Bit işlkemi yaparken Port ve bit bilgisini fonksiyona geçilen parametreden almak.
void yaz ( unsigned char *port , unsigned char bit){
asm("MOV.W port, A0");
asm("BCLR bit, [A0]");
}
yaz (&p0,2);