CCS C Fonksiyonlarını Kullanarak Yazılımsal SPI İletişim İle 25640 Harici EEPROM Uygulaması

pr_01_37_max

 

/******************************************************
 PIC16F877 ile CCS C Dosyalarını Kullanarak Yazılımsal SPI İletişim İle 25640 Harici EEPROM Uygulaması
*******************************************************/

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay(clock=4000000) // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 iletişim ayarları belirtiliyor
#use spi (master, DI=pin_B2, DO=pin_B1, CLK=pin_B0, SAMPLE_RISE, bits=8, MSB_FIRST,IDLE=0) // Yazılımsal SPI iletişim ayarları tanımlanıyor

#include <input.c> // input.c dosyası programa ekleniyor
#include <stdlib.h> // stdlib.h dosyası programa ekleniyor

#define CS PIN_B3 // CS ifadesi PIN_C2 pini yerine atanıyor

int8 _adres[4],veri,adres_high,adres_low; // int8 tipinde değişkenler tanımlanıyor
int16 adres; // int16 tipinde değişken tanımlanıyor
char islem; // char tipinde değişken tanımlanıyor

/******************* ANA PROGRAM FONKSİYONU *************************/
void main ()
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı 

 printf("\n\r***********************************************************");
 printf("\n\r 25LC640 Harici EEPROM Bilgi Okuma ve Yazma Programi ");
 printf("\n\r***********************************************************");
 printf("\n\r");

 output_high(cs); // Harici EEPROM CS ucu lojik-1 yapılıyor

 while(1) // Sonsuz Döngü
 {
 do // do-while döngüsü tanımlanıyor
 {
 printf("\n\r\r\rBelirtilen adresteki veriyi oku (O)");
 printf("\n\rBelirtilen adrese istenen veriyi yaz (Y)>");

 islem=getc(); // RS232 portundan gelen veri alınıyor
 islem=toupper(islem); // Alınan karakter büyük forma getiriliyor (a > A gibi)
 putc(islem); // "islem" değişkeni içeriği RS232 portuna gönderiliyor
 } while ( (islem!='O') && (islem!='Y')); // Girilen karakter O, Y dışında ise döngü başına dön

 if (islem=='O') // Eğer okunan karakter "O" ise
 {
 printf("\n\r\rOkumak istediginiz adresi giriniz>");

 get_string(_adres,4); // Seri porttan gelen adres bilgisi string olarak alınıyor
 adres=atol(_adres); // String olarak alınan adres bilgisi tam sayıya çevriliyor
 adres_high=make8(adres,1); // Adres değerinin 8 bitlik MSB değeri adres_high değişkenine kaydediliyor
 adres_low=make8(adres,0); // Adres değerinin 8 bitlik LSB değeri adres_low değişkenine kaydediliyor

 printf("\n\r\rVeri okunuyor...");

 output_low(cs); // Entegre seçiliyor
 spi_xfer(0x03); // Okuma komutu (READ) gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 spi_xfer(adres_high); // Okunacak adres değerinin 8 bitlik MSB değeri gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 spi_xfer(adres_low); // Okunacak adres değerinin 8 bitlik LSB değeri gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 printf("\n\r\rAdres=%04lu Deger=0x%02X",adres,spi_xfer(0) ); // İstenen adresteki değer okunuyor
 output_high(cs); // Entegre bekleme konumuna getiriliyor
 delay_ms(5); // Gecikme veriliyor
 }

 if (islem=='Y') // Eğer okunan karakter "Y" ise
 {
 printf("\n\r\rBilgi yazmak istediginiz adresi giriniz> ");

 get_string(_adres,4); // Seri porttan gelen adres bilgisi string olarak alınıyor
 adres=atol(_adres); // String olarak alınan adres bilgisi tam sayıya çevriliyor
 adres_high=make8(adres,1); // Adres değerinin 8 bitlik MSB değeri adres_high değişkenine kaydediliyor
 adres_low=make8(adres,0); // Adres değerinin 8 bitlik LSB değeri adres_low değişkenine kaydediliyor

 printf("\n\r\rBilgiyi giriniz> ");
 veri=gethex(); // Yazılacak veri heksadesimal olarak alınıyor
 printf("\n\r\rVeri yaziliyor...");

 output_low(cs); // Entegre seçiliyor
 spi_xfer(0x06); // Yazmaya izin ver komutu (WREN) gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 output_high(cs); // Entegre bekleme konumuna getiriliyor

 output_low(cs); // Entegre seçiliyor
 spi_xfer(0x02); // Yazma komutu (WRITE) gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 spi_xfer(adres_high); // Okunacak adres değerinin 8 bitlik MSB değeri gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 spi_xfer(adres_low); // Okunacak adres değerinin 8 bitlik LSB değeri gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 spi_xfer(veri); // Belirtilen adrese yazdırılacak veri gönderiliyor
 delay_ms(5); // Gecikme veriliyor
 output_high(cs); // Entegre bekleme konumuna getiriliyor
 printf("\n\r\rYazma islemi bitti.");
 }
 }
}

CCS C Fonksiyonlarını Kullanarak Yazılımsal SPI İletişim İle 25640 Harici EEPROM Uygulaması

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.