Gast
#3804152
Hi,
ich bin gerade dabei beim Keil XC 167 Board den AD Wanlder einzustellen.
Allerdings gibt er immer 0 aus!:(
Ich schreib euch den Code mal hier rein. Sry das der Code so ausführlich
ist, aber ich bin in der Materie MC erst seid 1 Woche!
/*/**********************************************************/
/* */
/* AD Wandler */
/* */
/**********************************************************/
#include <reg167.h>
#include <stdio.h>
#include <math.h>
#define VREF 5 /* ADC Voltage Reference
*/
/***********************************************************************
*******/
/*************************** MAIN PROGRAM
***************************/
/***********************************************************************
*******/
unsigned int adcwert;
unsigned int adcberechnet;
sfr ALTSEL0P3 = 0xF126; // Umleitung des Seriellen Ports !!!
void main (void)
{
/*
Konfiguration der seriellen Schnittstellen
*/
P3 |= 0x0400; // Port 3.10 = 1 zur Ausgabe benutzen
DP3 |= 0x0400; // Port 3.10 für Datenausgabe konfigurieren
DP3 &= 0xF7FF; // Port 3.11=0 für Datenausgabe konfigurieren
ALTSEL0P3 |= 0x0400; // Umleiten COM auf SubD9 Schnittstelle !!!
S0TIC = 0x0080; // Transmit Interruptflag setzen
S0RIC = 0x0000; // Recieve Interruptflag löschen
S0RBUF =
S0CON =0x8011; // Serial Channel 0 Control 0x8011 = 1 0
0 0 0 0 0 0 0 0 0 1 0 001
/*
Wird alles in S0CON definiert
S0M = 001 ; // asynchron 8-bit Daten
S0STP = 0; // Anzahl der Stopbits -> eins
S0REN = 1; // Freigabe des Empfängers auf frei setzen
S0PEN = 0; // Freigabe der Paritätsprüfung auf freigegeben setzen
S0FEN = 0; // Freigabe der Rahmenprüfung auf freigegeben setzen
S0OEN = 0; // Freigabe der Überlaufsprüfung auf freigegeben setzen
S0PE = 0; // Fehlermarke Paritätsprüfung -> Bit durch Befehl löschen
S0FE = 0; // Fehlermarke Rahmenprüfung -> Bit durch Befehl löschen
S0OE = 0; // Fehlermarke Überlaufsprüfung -> Bit durch Befehl löschen
S0ODD = 0; // Auswahl der Parität -> gerade
S0BRS = 0; // Baudratenauswahl -> Teiler durch zwei
S0LB = 0; // Freigabe Rückführung auf nein
S0R = 1; // Freigabe Baudgenerator -> Takt freigegeben
*/
S0BG = 0x04; // Baudrate auf 19200 setzen 20MHz
S0TBIC =1 ; // Daten nach Schieberegister
/*
AD Wandler
*/
ADCON = 0x0111; // A/D Wandler Control 00 00 0 0 1 0 0 01 0001 =
0x0111
/*
Wird alles in ADCON definiert
ADCH = 0001; // Port 5.1 als Startkanal
ADM = 01; // ein Kabal, fortlaufende Messung
ADST = 0; // Startet die Wandlung sobalds im Programm auf 1 gesetzt
wird
ADBSY = 0; // wird während der Wandlung von der Steuerung auf 1
gesetzt
ADWR = 1; // wartet bis daten gelesen sind 1 = ja
ADCIN = 0; // keine Einzelmessungen einfügen
ADCRQ = 0;
ADSTC = 00; // Sample Zeit 00= 1 Takt
ADCTC = 00; // 00 = 24 Takte
*/
/* Test ob Serielle Schnittstelle funktioniert
while(1)
{printf("Hey Test!\n");
}
*/
while(1)
{
ADST =1; // startet den wandler
while(ADBSY);
{}
adcwert = (ADDAT & 0x3ff) >>2;
adcberechnet = (adcwert*5)/(1024*1000);
printf("%i", adcberechnet);
printf("Hi");
}
}