Atmel 89C2051. Einlesen des Gesamten Port 1 Im Unterforum Microcontroller - Beschreibung: 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;
}
|
|
|
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 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182421148 Heute : 187 Gestern : 5459 Online : 544 29.11.2024 1:26 2 Besucher in den letzten 60 Sekunden alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0816028118134
|