Atmel 89C2051. Einlesen des Gesamten Port 1

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 3 2024  13:33:51      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Autor
Atmel 89C2051. Einlesen des Gesamten Port 1

    







BID = 126439

Studi26

Gerade angekommen


Beiträge: 2
Wohnort: Hannover
 

  


Hallo auch !!

ich habe nur sehr (!) begrenzte Ahnung vom Programmieren, trotzdem muss ich einem Atmel 89C2051 beibiegen das er auf Anfrage (es wird ein"A" an ihn gesendet) zwei BCD-Schalter ausliest (sollen an Port 1 angeschlossen werden), diesen Wert in Hexadezimal umwandelt und dann diesen Wert wieder ausgibt ( Die Anfrage und Ausgabe geschieht über eine Western-Buchse ).
Schreiben soll ich das in C mit einem Programm von Raisonance ( RIDE51 ).
Füge auch gleich mal den Anzupassenden Quelltext bei, habe mir sagen lassen da muss man wohl nur ein paar Sachen ändern und die hälfte weglassen.
BITTE helft mir !!!!!! Direkte mails an mich sind für dieses Thema auch absolut kein Problem. (     Studi26 äht gmx.net (automatisch editiert wegen spamgefahr)    )

/**
*
* Project:
*
* Target: Intel 8051 core
* IniDate: 2004
* LU Date: 2004
*
* Author:
* Company:
*
****/

#include <reg51.h>

/* ============================== MAIN =================================== */

#include <stdio.h>
#include <string.h>
#define WAITTIME 10000
#define BUF_LEN 16
#define NOP asm {0x00}
#define CHAN0 0x8e
#define CHAN1 0xce
#define CHAN2 0x9e
#define CHAN3 0xde
#define CHAN4 0xae
#define CHAN5 0xee
#define CHAN6 0xbe
#define CHAN7 0xfe

char *gpcCommand;
int ReadAdcChan (unsigned char ucCommand);

void SerialInt (void);
void Int0 (void);
void TxChar (unsigned char);
void TxNumber (int);
void TxString (char*);
int ExtractNumber (char*);
void DacWrite (int );
void LedBlink(char);

sbit BCD_0 = 0xB2;
sbit BCD_1 = 0xB3;
sbit BCD_2 = 0xB4;
sbit BCD_3 = 0xB5;
sbit LED = 0xB7;
sbit SCLK = 0X97;
sbit D_OUT = 0X96;
sbit LD_DAC = 0X95;
sbit D_IN_DAC = 0X94;

//sbit CPU1_CS_ADC = 0X93;
sbit CPU1_SCK = 0X97;
sbit CPU1_DIN = 0X96;
//sbit CPU1_DOUT_ADC = 0X92;

bit bCommandReady;
bit bTxBufFull;
bit bOk;
bit bTxValue;
bit bIdentify;
char sCommand[16];
char sRxBuffer[16];
char cRxChar;
char cDevice;
unsigned char ucMode;
unsigned char cRxIndex;
unsigned char ucOldValue;
int iDataMode;
unsigned int uiTimeout;
unsigned char adccmd[8];
unsigned int uiBrightness;
bit bEnable;

void main (void)
/****
*
* main -
*
****/
{
int iValue;

/****
*
* init serial device
*
****/
PCON |= 0x80; // Doubles the Baudrate
SCON = 0x52;
TMOD = 0x20;
TCON = 0x40;
TH1 = 0xFA; /* E6 = 2400 Baud at 12.000, FA = 9600 Baud at 11.059 */
ES = 1;
EA = 1;

adccmd[0] = CHAN0;
adccmd[1] = CHAN1;
adccmd[2] = CHAN2;
adccmd[3] = CHAN3;
adccmd[4] = CHAN4;
adccmd[5] = CHAN5;
adccmd[6] = CHAN6;
adccmd[7] = CHAN7;

/****
*
* init variables
*
****/

bCommandReady = 0;
cRxIndex = 0;
bTxBufFull = 0;
bTxValue = 0;

TxString ("Dev D");

// LedBlink(2);

// SCLK = 0;
// LD_DAC = 1;

// LedBlink(3);

BCD_0 = 1;
BCD_1 = 1;
BCD_2 = 1;
BCD_3 = 1;

// LedBlink(4);

ucMode = BCD_3;
ucMode <<= 1;
ucMode += BCD_2;
ucMode <<= 1;
ucMode += BCD_1;
ucMode <<= 1;
ucMode += BCD_0;
ucMode = (~ucMode)&0x0f;

bEnable = 0;
uiBrightness = 0;
// LedBlink(5);

cDevice = (ucMode < 10) ? ucMode + '0' : ucMode - 10 + 'A';

TxNumber (ucMode);

// TxString (" found\r\n");

// LedBlink(6);
LED = 0;
while (1)
{
if (bCommandReady)
{
bOk = 0;
bCommandReady = 0;
bIdentify = 0;
if (strcmp ("A", sCommand) == 0)
{
bIdentify = 1;
bOk = 1;
}
/* if (strncmp ("SB ", sCommand, 3) == 0)
* {
* uiBrightness = ExtractNumber(sCommand+3);
* if ( bEnable )
* DacWrite (uiBrightness);
* bOk = 1;
}
if (strncmp ("EN ", sCommand, 3) == 0)
{
bEnable = (*(sCommand + 3) == '1');
if ( bEnable ) {
DacWrite (uiBrightness);
}
else
DacWrite (0);
bOk = 1;
}
if (strncmp ("A ", sCommand, 2) == 0)
{
DacWrite (ExtractNumber(sCommand+2));
bOk = 1;
}
if (strncmp ("R ", sCommand, 2) == 0)
{
iValue = ExtractNumber(sCommand+2);
if (iValue >=0 && iValue < 8 )
{
iValue = ReadAdcChan ( adccmd[iValue] );
bOk = 1;
bTxValue = 1;
}
}
if (bOk)
{
// ucErrorCode &= 0xFB;
if (bIdentify)
{
TxString (BUILD);
//TxString(" 102");
}
if (bTxValue)
{
TxChar (' ');
TxNumber (iValue);
bTxValue = 0;
}
TxChar ('*');
TxChar (0x0d);
}
}
}
}

/* ============================ END MAIN ================================== */
/*
void LedBlink(char times)
{
int timeout;
TxString (".");
while(times--)
{
TxString (".");
LED = 0;
for (timeout = 0 ; timeout < WAITTIME; timeout++)NOP;
LED = 1;
for (timeout = 0 ; timeout < WAITTIME; timeout++)NOP;
}
TxString ("\r\n");
}

*/
void DacWrite (int w12Analog )
{
char i;
i = 12;
LD_DAC = 0;
while (i--)
{
if (w12Analog & 0x0800)
D_OUT = 1;
else
D_OUT = 0;
NOP;
SCLK = 1;
NOP;
SCLK = 0;
w12Analog<<=1;
}
LD_DAC = 1;
}
int ExtractNumber (char *pcCommand)
{
int iNumber;
for (iNumber=0; *pcCommand >= '0' && *pcCommand <= '9'; pcCommand++)
iNumber = (iNumber * 10) + (*pcCommand - '0');
return iNumber;
}
void TxNumber (int iNumber)
{
char *pcChar;
pcChar = sCommand + 10;
*pcChar = 0;
do
{
*--pcChar = (iNumber % 10) + 48;
iNumber /= 10;
}
while (iNumber);
while (*pcChar)
TxChar (*pcChar++);
}
void TxString (char *pcChar)
{
while (*pcChar)
TxChar (*pcChar++);
}
void SerialInt (void) interrupt 4 using 1
/****
*
* SerialInt - read/write serial line
*
****/
{
if (RI)
{
cRxChar = SBUF;
RI = 0;
if ((cRxChar == 0x0d) && (strlen (sRxBuffer) >= 2))
{
if ((sRxBuffer[0] == 'D') && (sRxBuffer[1] == cDevice) && (sRxBuffer[2] == ' '))
{
strcpy (sCommand, sRxBuffer+3);
bCommandReady = 1;
}
sRxBuffer[0] = 0;
cRxIndex = 0;
}
else
{
if (((cRxChar >= '0') && (cRxChar <= 'Z')) || (cRxChar == ' '))
{
sRxBuffer[cRxIndex++] = cRxChar;
if (cRxIndex >= BUF_LEN)
{
cRxIndex = 0;
}
sRxBuffer[cRxIndex] = 0;
}
}
}
if (TI) /* Service Transmitter interrupt */
{
TI = 0;
bTxBufFull = 0;
}
}
void TxChar (unsigned char c)
/*****
*
* TxChar - replaces Library version
* unbuffered version, polls till transmitter ready
*
*****/
{
while (bTxBufFull);
bTxBufFull = 1;
SBUF = c;
}
int ReadAdcChan (unsigned char ucCommand)
{
int i, iRetValue;
CPU1_CS_ADC = 0;
iRetValue = 0;
for (i = 0; i < 8; i++)
{
CPU1_DIN = (ucCommand & 0x80) ? 1 : 0;
ucCommand <<= 1;
CPU1_SCK = 1; NOP;
CPU1_SCK = 0; NOP;
}
CPU1_DIN = 0; NOP;
for (i = 0; i < 12; i++)
{
CPU1_SCK = 1; NOP;
CPU1_SCK = 0; NOP;
iRetValue <<= 1;
iRetValue |= (CPU1_DOUT_ADC) ? 1 : 0;
}
for (i = 0; i < 4; i++)
{
CPU1_SCK = 1; NOP;
CPU1_SCK = 0; NOP;
}
CPU1_CS_ADC = 1;
return iRetValue;
}


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 13 Beiträge verfasst
© x sparkkelsputz        Besucher : 180690887   Heute : 6785    Gestern : 12674    Online : 398        29.3.2024    13:33
17 Besucher in den letzten 60 Sekunden        alle 3.53 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0353271961212