jogsen
22.02.2007, 10:10
Hallo,
ich kann die gemessenen Werte nicht auslesen.
Kann mir jemand sagen was ich falsch mache.
#include "system.h"
#include "PIC16F877A.h"
#pragma CLOCK_FREQ 20000000
#pragma DATA 0x2007, _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_ON & _CP_OFF
char RxHiData;
char RxLoData;
void Bus_reservieren();
void Bus_freigeben();
void main()
{
set_bit (trisc,3); // RC3 als Eingang
set_bit (trisc,4); // RC4 als Eingang
sspadd = 12;
sspcon = 8; // Master Mode
set_bit (sspcon, 5); // IIC einschalten
while (1)
{
Bus_reservieren();
sspbuf = 0xE4;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
sspbuf = 0x0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet
sspbuf = 0x51;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Befehl gesendet
Bus_freigeben();
delay_ms(65); // warten
Bus_reservieren();
sspbuf = 0xE0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
sspbuf = 0x02;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet
Bus_freigeben();
// bis hier scheint er fehlerfrei zu laufen
Bus_reservieren();
sspbuf = 0xE1;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxHiData = sspbuf; // Byte gelesen
set_bit (sspcon2, 4); // Ack senden
set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxLoData = sspbuf; // Byte gelesen
Bus_freigeben();
}
}
void Bus_reservieren()
{
clear_bit (pir1, 3);
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus übernommen
}
void Bus_freigeben()
{
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus freigegeben
}
Danke im voraus.
ich kann die gemessenen Werte nicht auslesen.
Kann mir jemand sagen was ich falsch mache.
#include "system.h"
#include "PIC16F877A.h"
#pragma CLOCK_FREQ 20000000
#pragma DATA 0x2007, _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_ON & _CP_OFF
char RxHiData;
char RxLoData;
void Bus_reservieren();
void Bus_freigeben();
void main()
{
set_bit (trisc,3); // RC3 als Eingang
set_bit (trisc,4); // RC4 als Eingang
sspadd = 12;
sspcon = 8; // Master Mode
set_bit (sspcon, 5); // IIC einschalten
while (1)
{
Bus_reservieren();
sspbuf = 0xE4;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
sspbuf = 0x0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet
sspbuf = 0x51;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Befehl gesendet
Bus_freigeben();
delay_ms(65); // warten
Bus_reservieren();
sspbuf = 0xE0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
sspbuf = 0x02;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet
Bus_freigeben();
// bis hier scheint er fehlerfrei zu laufen
Bus_reservieren();
sspbuf = 0xE1;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet
set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxHiData = sspbuf; // Byte gelesen
set_bit (sspcon2, 4); // Ack senden
set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxLoData = sspbuf; // Byte gelesen
Bus_freigeben();
}
}
void Bus_reservieren()
{
clear_bit (pir1, 3);
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus übernommen
}
void Bus_freigeben()
{
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus freigegeben
}
Danke im voraus.