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; } } }







Zitieren

Lesezeichen