Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: MrExploit - 11 Temmuz 2014, 02:54:10

Başlık: "PORTA" Komutu Çalışmıyor
Gönderen: MrExploit - 11 Temmuz 2014, 02:54:10
Derleyiciye yeni başladım. Şöyle bir programım var...


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

void init(void){
TRISD=0b00000000;
}

void main(void) {
    init();

    PORTD=0x00; (PORTD=0b0000000 de denedim)
   while (1) {
   PORTD=0x00;;
   __delay_ms(50);
    PORTD=0xff;  (PORTD=0b11111111 de denedim)
   __delay_ms(50);
   }   
}


gördüğünüz gibi oldukça basit. Progamı yazınca , D portundaki ledler 1 kere yanıp sönüyor.

Eyer "PORTD=0x00"  yerine "RD0=0 , RD0=1" Kullanırsam hiçbir sorun olmuyor.
PORTD Komutu neden çalışmıyor ?
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: tekosis - 11 Temmuz 2014, 03:42:31
bu derleyiciyi kullanmadım ama belki port tanımlaması o şekilde olmayabilir. misal port_d gibi birşey de olabilir.
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Gökhan BEKEN - 11 Temmuz 2014, 03:46:01
portd yerine latd kullanın.
örnekler:
LATD=0x0F; //portd'ye 0x0F yaz
LATBbits.LATB1=0; //portb nin 1. pinini 0 yap

burda da yazmıştım birkaç saat önce: https://www.picproje.org/index.php/topic,54215.msg413807.html#msg413807 (https://www.picproje.org/index.php/topic,54215.msg413807.html#msg413807)
ayrıntılı anlatımı ise burda yapmıştım: https://www.picproje.org/index.php/topic,53020.msg401790.html#msg401790 (https://www.picproje.org/index.php/topic,53020.msg401790.html#msg401790)
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: bbs2006 - 11 Temmuz 2014, 03:49:02
Output_d(0x00);  yazarsan tüm çıkışlar 0 olur,  output_d(0xff) olursada tüm çıkışlar 1 olur. bu şekilde çalışır.
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Gökhan BEKEN - 11 Temmuz 2014, 03:59:46
Alıntı yapılan: bbs2006 - 11 Temmuz 2014, 03:49:02
Output_d(0x00);  yazarsan tüm çıkışlar 0 olur,  output_d(0xff) olursada tüm çıkışlar 1 olur. bu şekilde çalışır.
CCS C'nin kendi fonksiyonudur o. XC8'de sökmez. PORT ile LAT farkı önemlidir. Kısa süreli değişimlerde port kullanılmaz. PORTB=PORTB işlemi bile yapamazsınız. Çünkü bunun anlamı portb yi oku portb'ye yaz, demektir çok hızlı bir işlem olduğundan portb'ye saçmasapan bir değer yüklenir.
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: MrExploit - 11 Temmuz 2014, 05:07:58
main.c:39: error: (192) undefined identifier "LATD"

LATD ' yİ tanımıyor ki :(

tüm includeleri yaptım.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <pic16f887.h>

acaba pic16f887" kütüphanesinde mi yok bu komut.

LATBbits.LATB1=0  - Bunu tanıyor bak...
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Maxim - 11 Temmuz 2014, 06:49:25
LAT
16 serisinde yok bildiğim kadarıyla
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Gökhan BEKEN - 11 Temmuz 2014, 11:32:01
Alıntı yapılan: Maxim - 11 Temmuz 2014, 06:49:25
LAT
16 serisinde yok bildiğim kadarıyla
Evet bende öyle biliyorum. Hangi işlemciyi kullandığını belirtmemiş arkadaş, o yüzden yazdım.
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: t2 - 11 Temmuz 2014, 11:33:55
16 serisi çeşit çeşit. Enchanced diye bir grup var. onlarda LAT register  var
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Gökhan BEKEN - 11 Temmuz 2014, 11:34:11
Aradaki bekleme sürelerini artırıp denediniz mi? Bu arada gerçek devrede mi simülasyonda mı deniyorsunuz?
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: mehmet - 11 Temmuz 2014, 17:42:42
Lafı açılmışken LAT ve PORT üzerine bir şeyler söylemek istiyorum:

Malumunuzdur pic mcularda yaklaşık dört çevrimde bir komut işletilir. PORT
komutu da bu dört çevrimde işleyen komutlardandır. LAT ise dört çevrime
girmeden ilk çevrimde değişikliğe gitmesini sağlar. Burada bir handikap
vardır. Siz LAT ile daha yeni değer değiştirmiş bir pini yeniden değiştirmeye
çalışırsanız biraz gariplikler olacaktır.
Bence LAT sadece kritik zamanlama işlerinde kullanılması daha yerinde olacaktır...

Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Tagli - 11 Temmuz 2014, 19:27:46
mehmet hocam, sen LAT ile PORT olayını karıştırdın sanırım. O dediğin read-modify-write olayı PORT için geçerli. LAT zaten bunu çözmek için eklenmiş. Başka bir işlevi yok. Daha önce bu konu dile getirilmişti birkaç kez forumda.

Ama arkadaşın sorunu bunlarla ilgili gibi gözükmüyor. Özellikle de bitleri tek başına sorunsuz kullanabilmesi şaşırtıcı. Maalesef benim de aklıma bir şey gelmedi. XC8'in delay kodlarıyla ilgili eskiden sorun yaşamıştım, ki bu konuda da forumda başlıklar var. Bekleme için, __delay_ms(1)'i döngü içinde kullanarak bir fonksiyon yazılarak denenebilir.
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: MrExploit - 11 Temmuz 2014, 21:12:36
İŞLEMCİM PIC16F887 ,XC8 , AMA HALA LAT KOMUTUNU TANIMIYOR VE PORT KOMUTUDA DÜZGÜN İŞLEMİYOR. ANLAMADIM GİTTİ!
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Gökhan BEKEN - 12 Temmuz 2014, 00:03:48
16F serisi olduğu için tanımayabilir. Programınızda başka eksikler var.
mesela ben kullandığım işlemcinin header dosyasını yüklüyorum
örneğin: #include "p18cxxx.h"
sigorta ayarlarınızı yapmamışsınız, örnek: #pragma config OSC = HS, WDT = OFF, LVP = OFF
osilatörüzü belirtmemişsiniz:
#define _XTAL_FREQ 4000000 //Bekleme fonksiyonlarini 4mhz kristal için ayarlar
16F serisini bilmiyorum ama 18F serisinde anolog pinleri çıkış olarak yazmanın dışında, digital olduğunu da belirtmek gerekebiliyor: ADCON1 = 0x0F; //bütün pinler dijital olsun

__delay_ms(50); yazdığınız yerleri şu iki komutla değiştirerek deneyebilirsiniz: i=0xFFFF; while(--i);

bu arada proje özelliklerinden bakarak doğru pic'i seçtiğinizden emin olun.

Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: MrExploit - 12 Temmuz 2014, 04:49:41
Dediklerinizin hepsini header file içinde yaptım zaten...


#include <xc.h>
#include "PIC16F887.h"

#pragma config FOSC = INTRC_CLKOUT// Oscillator Selection bits (INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF       // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF       // Brown Out Reset Selection bits (BOR enabled)
#pragma config IESO = OFF        // Internal External Switchover bit (Internal/External Switchover mode is enabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
#pragma config LVP = ON         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled)
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)


#define _XTAL_FREQ 8000000
Başlık: Ynt: "PORTA" Komutu Çalışmıyor
Gönderen: Tagli - 12 Temmuz 2014, 09:16:41
MrExploit, proje klasörünü sıkıştırıp bir dosya paylaşım sitesi aracılığı ile burada paylaş, bakalım. Ben de merak ettim durumu.