12 Serici Pic Programlama Yardım (MPLAB XC8)

  • Konbuyu başlatan Konbuyu başlatan Pumppit
  • Başlangıç tarihi Başlangıç tarihi

Pumppit

Üye
Katılım
9 Mar 2012
Mesajlar
6
Puanları
1
Merhaba ;

16F877a yada 16F84a da mplab xc8 de yazdığım kodlar çalışıyor . Maliyetli olduğu için kodları değiştirerek 12Fxx serisi bir pic kullanarak aşağıdaki kodları yazdım. Örneğin 12F629 kullanarak (6 INPUT/OUTPUT var gözüküyor) aşağıdaki kodlar sorunsuz çalışıyor fakat sadece GP2 den çıkış alabiliyorum. Diğer 3 pinden çıkış alamıyorum.

Yardımcı olursanız çok sevinirim. Daha ucuz bir pic'de olabilir. Yeterki 4 çıkışı olsun :)

C:
#define _XTAL_FREQ 8000000
#include <xc.h>

#pragma config FOSC = XT        // Oscillator Selection bits (HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#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)


int bekleme = 4;

void adim1() {
    
    GP0 = 1;
    GP1 = 0;
    GP2 = 0;
    GP3 = 0;
    __delay_ms(bekleme) ;
}
void adim2() {
    
    GP0 = 0;
    GP1 = 1;
    GP2 = 0;
    GP3 = 0;
    __delay_ms(bekleme) ;
}
void adim3() {
    
    GP0 = 0;
    GP1 = 0;
    GP2 = 1;
    GP3 = 0;
    __delay_ms(bekleme) ;
}
void adim4() {
    
    GP0 = 0;
    GP1 = 0;
    GP2 = 0;
    GP3 = 1;
    __delay_ms(bekleme) ;
}
void dur() {
  
    GP0 = 0;
    GP1 = 0;
    GP2 = 0;
    GP3 = 0;
    __delay_ms(bekleme) ;
}





void main (){
    
    TRISIO=0x00;
    GPIO=0x00;
    
 
     while(1)
    
     {
 
for (int i = 0; i < 512; i++)
{
    
    adim1();
    adim2();
    adim3();
    adim4();
    }

dur();
__delay_ms(5000);


for (int i = 0; i < 512; i++)
{
    
    adim4();
    adim3();
    adim2();
    adim1();
    }

dur();
__delay_ms(5000);


}
    }
 
Öncelikle main fonksiyonunun başında "CMCON = 0x07; " ifadesiyle komparatörler kapatılmalı.

Bunun dışında GP3 sadece giriş için, çıkış alamazsın. Yerine GP4 veya 5 kullanılabilir.

başarılar
 

Forum istatistikleri

Konular
133,385
Mesajlar
971,028
Kullanıcılar
459,239
Son üye
ekocaman

Yeni konular

Geri
Üst