Kleines programier Problem Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
Kleines programier Problem |
|
|
|
|
BID = 157214
terra_5 Gerade angekommen
Beiträge: 2 Wohnort: Schweiz
|
|
Also ich bin eigentlich ein anfänger im programieren, und dadurch hab ich nicht so viel anung von der materie, programmieren.
Also mein problem:
ich habe die hardware für ein laufliecht hergestellt,
die hardware stimmt und sie hat keine fehler dadurch werde ich nicht näher auf diese sache eingehen.
nur dies, ich habe zwei tastschalter für die geschwindigkeit und zwei tastschalter für LEds lichter dazu und weg zu schalten, dazu kommt noch einschiebe schalter um die zweite funktion aufzurufen.
Leider hab ich es nicht geschaft das die flankenerkennung richtig funktioniert und darum schaltet es nur LEDs dazu oder weg wenn das programm ganz durchgeloffen ist.
UNd wenn jemand eine lösung für dieses problem hätte wäre ich sehr dankbar.
p.s veränderbara stärke der leds währen auch von vorteil.
hier mall mein programm.
#pragma DEBUG OBJECTEXTEND SMALL OPTIMIZE(4,speed)
#include <at89x52.h> // MS21 MESA speedy mit AT89S8252 uC
#include <intrins.h>
unsigned char ZEIT;
unsigned char i;
unsigned char Tabelle[6]=
{
129,66,36,24,36,66
}
;
unsigned char Tabelle2[7]=
{
1,3,7,15,31,63,127
}
;
bit l;
bit u;
bit o;
bit x;
bit GN;
bit cou_t0;
bit cou_t1;
bit pos_flanke;
bit rcou_t0;
bit rcou_t1;
bit Geschw_up_t0;
bit Geschw_down_t0;
bit Geschw_up_t1;
bit Geschw_down_t1;
bit pos_flanke_1;
bit pos_flanke_2;
bit pos_flanke_up;
bit pos_flanke_down;
unsigned char counter;
unsigned char input;
unsigned char Intervall;
unsigned char ZEIT_old;
extern void DEL_10MS(char);
void main (void)
{
i=0; // Initialisierung
l=1;
x=0;
cou_t0=0;
rcou_t0=0;
counter=0;
Intervall = 0;
while( 1 )
{
input=P3; // Port Einlesen
cou_t0 = cou_t1; // Flanken erkennung
rcou_t0 = rcou_t1;
Geschw_up_t0 = Geschw_up_t1;
Geschw_down_t0 = Geschw_down_t1;
DEL_10MS(1);
rcou_t1 =P3&32;
cou_t1 = P3&16;
Geschw_up_t1 = P3&1;
Geschw_down_t1 = P3&2;
pos_flanke =cou_t1 & ~cou_t0;
pos_flanke_2 =rcou_t1 & ~rcou_t0;
pos_flanke_up = Geschw_up_t1 & ~Geschw_up_t0;
pos_flanke_down = Geschw_down_t1 & ~Geschw_down_t0; //
o=P1&128;
u=P1&1;
GN=input&1;
if( pos_flanke_up )
{
ZEIT_old = ZEIT;
ZEIT = (ZEIT + 1) & 0x0F;
}
if( pos_flanke_down )
{
ZEIT_old =ZEIT;
ZEIT = (ZEIT - 1) & 0x0F;
}
if( (Intervall <= 0) || (ZEIT!= ZEIT_old) )
{
ZEIT_old = ZEIT;
Intervall = ZEIT;
}
else
{
Intervall --;
}
if( !Intervall )
{
if( ((P3&128)==128) )
{
if( i==6 )
{
i=0;
}
P1=~Tabelle[i];
i++;
x=0;
l=1;
}
else
{
if( x==1 )
{
}
else
{
P1=~Tabelle2[counter];
}
x=1;
if( o==0 )
{
l=0;
}
else
{
if( u==0 )
{
l=1;
}
}
if( pos_flanke )
{
if( counter>=6 )
{
counter=6;
}
else
{
counter++;
}
P1=~Tabelle2[counter];
l=1;
}
if( pos_flanke_2 )
{
if( counter<=0 )
{
counter=0;
}
else
{
counter--;
}
P1=~Tabelle2[counter];
l=1;
}
if( l==1 )
{
P1=_crol_(P1,1);
}
else
{
P1=_cror_(P1,1);
}
}
}
}
}
grux terra |
|
BID = 157264
largefeet Gelegenheitsposter
Beiträge: 57
|
|
Hier ein Tipp zur Flankenerkennung:
/*********************************************************
******************** Positive Flanken *******************
*********************************************************/
unsigned char Input_PortX_t0;
unsigned char Input_PortX_t1;
unsigned char pos_edge_PortX;
unsigned char Bit0;
unsigned char Bit3;
// Port_X wird eingelesen
Input_PortX_t1 = PortX;
// Testen, ob pos. Flanke an Port_X
pos_edge_PortX = Input_Port_t1 & ~Input_Port_t0;
// nereu Wert => alter Wert
Input_PortX_t0 = Input_PortX_t1;
// Einzelne Flanken den Bit-Variablen zuweisen:
/***********************************************/
// Modulo 2 liefert Wert des LSB
Bit0 = pos_edge_P0 % 2;
// Bit 3 in LSB schieben
pos_edge_PortX = pos_edge_PortX >>3;
// Modulo 2 liefert Wert des LSB
Bit3 = pos_edge_P0 % 2; |
|
BID = 157265
terra_5 Gerade angekommen
Beiträge: 2 Wohnort: Schweiz
|
danke das kann ich schon ein bischen brauchen
|
BID = 157595
largefeet Gelegenheitsposter
Beiträge: 57
|
und wegen der helligkeit,
komm und frag mich,
greez Tomer
|
|
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 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst © x sparkkelsputz Besucher : 182401629 Heute : 1404 Gestern : 7426 Online : 253 26.11.2024 8:36 8 Besucher in den letzten 60 Sekunden alle 7.50 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0250289440155
|