faruk97
Üye
- Katılım
- 1 Haz 2020
- Mesajlar
- 38
- Puanları
- 1
- Yaş
- 27
Merhaba arkadaşlar,
Ben PIC16F1509 ile bir i2c haberleşme uygulaması yapıyorum. Kullandığım program MPLAPX IDE XC8 derleyicisi. Yazdığım programda bir sorunla karşılaştım. Program 0'dan 9'a kadar sayıların gönderilmesi ve görmek. Proteus'da simülasyon yapıyorum ve gönderilen bilgiler doğru çıkmıyor. Garip çıktılar görüyorum. Bazı ekran fotoları koydum. Yardımcı olursanız çok sevinirim.
Şimdiden hepinize çok teşekkürler.
Ben PIC16F1509 ile bir i2c haberleşme uygulaması yapıyorum. Kullandığım program MPLAPX IDE XC8 derleyicisi. Yazdığım programda bir sorunla karşılaştım. Program 0'dan 9'a kadar sayıların gönderilmesi ve görmek. Proteus'da simülasyon yapıyorum ve gönderilen bilgiler doğru çıkmıyor. Garip çıktılar görüyorum. Bazı ekran fotoları koydum. Yardımcı olursanız çok sevinirim.
Şimdiden hepinize çok teşekkürler.
Kod:
// CONFIG1
#pragma config FOSC = HS // Oscillator Selection Bits (HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover Mode (Internal/External Switchover Mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 4000000
const char rakam[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int i;
void Bekle(void){
while( (SSP1CON2 & 0x1F) || (SSP1STATbits.R_nW) )
continue;
}
void Basla(void){
SSP1CON2bits.SEN=1;
//SSP1STATbits.S=1;
while(SEN);
//while(SSP1IF);
//while(SSPSTATbits.BF);
//SSP1IF = 0;
}
void Dur(void){
//SSP1IF=0;
SSP1CON2bits.PEN=1;
while(PEN);
//while(SSP1IF);
//while(SSPSTATbits.BF);
}
signed char Yaz(unsigned char veri){
Bekle();
//SSP1IF=0;
//TRISBbits.TRISB4=1;
//TRISBbits.TRISB6=1;
//SSPSTATbits.BF=0;
//SSPSR=SSPBUF;
SSP1BUF=veri;
//while(SSPSTATbits.BF);
//__delay_us(4);
//TRISBbits.TRISB4=0;
//TRISBbits.TRISB6=0;
return (ACKSTAT);
}
void main(void) {
TRISB=0xFF;
CM1CON0bits.C1ON=0;
CM2CON0bits.C2ON=0;
ANSELB=0;
SSP1CON1=0b00111000;
SSPADD=9;
SSP1STAT=0b10110000;
SSP1CON2=0;
SSP1STATbits.R_nW=0;
//ADON=0;
SSP1CON3=0b00000000;
while(1){
for(i=0;i<10;i++){
Basla();
Yaz(0x70);
//while(ACKSTAT);
Yaz(0x01);
Yaz(rakam[i]);
//Yaz(0x03);
Dur();
__delay_ms(500);
}
}
// return;
}
Ekli dosyalar
Son düzenleme: