Xc8 de fonksiyon içinde assembly kullanma sorunu

Başlatan seyityildirim, 02 Ağustos 2015, 15:58:55

seyityildirim

xc8 user guide da asm kodlarını şu şekilde c içinde kullanabileceğimiz yazıyor
#asm
MOVE r0,#00h
#endasm

xc8 e yazdığımda syntax error veriyor. acaba asm yi etkinleştirmek için bir ayar mı yapıyoruz. çünkü keil de öyle birşey vardı.

Tagli

MOVE diye bir komut yok ki. Komutlarin PIC asm diliyle uyumlu olması gerekiyor.
Gökçe Tağlıoğlu

seyityildirim

#2
oraya yanlış yazmışım kusura bakmayın MOVE yazıyordu baktığım pdf te. programı yazarken pic in komut setinden bakıp da yazdım. birkaçını denedim olmadı kullandığım RLF komut idi. şu an telefondan yazdığım için kod penceresine yazamadım tüm kodları kusura bakmayın. çalışmayan kod parçası şu şekilde


#asm
RLF PORTB,d
#endasm

mesaj birleştirme:: 03 Ağustos 2015, 11:31:40

Sorunu buldum galiba. asm kodu olarak sadece NOP yazarsam çalışıyor. PORTB yazarsam bu ifadeyi algılamıyor. sanırım kullandığım picin header dosyasını include etmediğimden.

mesaj birleştirme:: 03 Ağustos 2015, 11:42:52

Sorunun header dosyasında olduğuna karar verdim. ancak

#include <pic16F84.h>
yazdığımda cannot find include file şeklinde hata veriyor. xc8 de bu pic lerin header dosyaları yok mu? Ya da sorun başka mı?

kantirici

asm("NOP");  gibi " " içerisine asm kodu yazıp denermisin.

RaMu

#4
C:\Program Files\Microchip\xc8\v1.33\include
dosyasında, pic16f84.inc ve pic16f84.h var.

MpLAB 8.91 (ASM için) vs. deki gibi yazdığın şekilde kullanmak istiyorsan
C:\Program Files\Microchip\MPASM Suite
dosyasında, p16f84.inc var.

mesaj birleştirme:: 03 Ağustos 2015, 00:02:14

Biraz önce denedim sorunsuz derleniyor
altdaki program:

/* 
 * File:   c_de_asm.c
 * Author: RaMu
 *
 * Created on 02 A?ustos 2015 Pazar, 23:41
 */

#include <stdio.h>
#include <stdlib.h>

//asm için include
//#include "pic16f84.h" //böylede yazılabilir
////#include <pic16f84.h> //böylede yazılabilir
//hatta
#include "C:\Program Files\Microchip\xc8\v1.33\include\pic16f84.h"
//şeklindede yazılabilir
//asm için include son
/*
 * 
 */
int main(int argc, char** argv) {

    while(1)
    {

#asm
_asm
  BSF 0x06,1  //#include "pic16f84.h" kullanılmazsa, register adresi yazılmak zorunda
  BCF PORTB,1
_endasm
#endasm
    }
    return (EXIT_SUCCESS);
}
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

seyityildirim

#asm
_asm

// asm kodları

_endasm
#endasm

şeklinde yazınca pic in header dosyasını eklemeden de kabul ediyor.
teşekkürler @RaMu ve @kantirici