hallo,
ich bekomme meine srf05 Sensoren die die testweise besitze,
nicht ausgelsen.....
könnt ihr euch das mal anschauen, eventuell findet ihr ja auf anhieb den fehler!
ich bin nämlich schon fehlerblind 
gruss
Code:
#include <t89c51ac2.h> // Header für Controller "AT89C51AC3"
#include <stdio.h> // Standard-Eingabe-Ausgabe-Header
// sfr P0 = 0x80; /* Port-0, address 80h */
// sfr P1 = 0x90; /* Port-1, address 90h */
// sfr P2 = 0xA0; /* Port-2, address 0A0h */
// sfr P3 = 0xB0; /* Port-3, address 0B0h */
/*---------------------------------------------------------------------------
Dieses Programm liest die Entfernug aus dem Ultraschall Sensor SRF05 aus,
und gibt die Entferung in cm auf Port 2 in Form von aufleuchtenden LEDs aus.
-----------------------------------------------------------------------------*/
/*--- Eingaenge und Ausgaenge deklarieren ---*/
sfr srfPort = 0x90; // Die Ports MÜSSEN mit der Hex-Adress angegeben werden (0x90 = Port 1)
sfr ausgabe = 0xA0; // Die Ports MÜSSEN mit der Hex-Adress angegeben werden (0xA0 = Port 2)
sbit trigger_pin = P1^4;
sbit echo_pin = P1^3;
/*--- Variablen und Konstanten Deklarieren ---*/
unsigned int i;
/*--- Methoden und Prototypen ---*/
void main(void); // Hauptprogramm
void srf_messung_ein(void); // Schaltet den Port 1 auf High
void srf_messung_aus(void); // Schaltet den Port 1 auf Low und auf "einlesen"
void delay_10ms(void); // Wartet bis ein Burst ausgesendet wurde
void echo(void);
/*--- Hauptprogramm ---*/
void main(void){
while(1){
ausgabe=0x1; //Port 2.1 zeigt den Betrieb an
srf_messung_ein();
delay_10ms();
srf_messung_aus();
echo();
}
} // main
/*--- Zusatzfunktionen ---*/
void delay_10ms(void) {
// Timer0 vorbereiten
TMOD=0x01; // Timer 0 im 16 Bit-Betrieb (Mode1) Binär 000010000
TH0=0xF5; // Reload Wert ist 0xFFFF = 65535
TL0=0xFF; // Startwert = 55535 d.h. 10ms bis 65535 -> High-Bit des Zählers
TF0=0; // Timer 0 Überlaufflag löschen
TR0=1; // Timer 0 starten
}
void srf_messung_ein(void){
trigger_pin = 1; // trigger_pin auf HIGH
}
void srf_messung_aus(void){
trigger_pin = 0; // trigger_pin auf LOW
echo_pin = 0xFF; // echo_pin "aufeinlesen"
}
/*------------------------------------------------------------------
Hier wird wohl der Fehler sein
--------------------------------------------------------------------*/
void echo(void){
TMOD=0x10; // Timer1 im 16Bit Modus
TH1=0xCF; // Startwert 8ACF = 35535 = 30ms bis 65535, wenn der Zähler bis zum HIGH- Bit
TL1=0x8A; // zählt dann ist kein Objekt in Reichweite
TF1=0; // Überlaufflag löschen
TR1=1; // Timer1 starten
while (echo_pin != 0 && TF1 !=1){ // Misst die Dauer des “eingelesenen” High- Impulses
i = (unsigned int) (TL1/29); // schreibe gezählten Timerwert in "i" und gib es in cm aus
if(i == 0 ){
ausgabe=0x03;
}
if(i > 20 ){ // Objekt weiter weg wie 20 cm?
ausgabe=0x07;
}
if(i > 60 ){ // Objekt weiter weg wie 60 cm?
ausgabe=0x0F;
}
}
}
Lesezeichen