12 Serici Pic Programlama Yardım (MPLAB XC8)

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
 
Daha fazla pin için dahili kristal ile
iki pin daha kazanırsınız. 12F629,
12F675 4MHz ile 12F683 8MHz ile
çalışır.
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,912
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst