Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PIC16F877A Problem oko pristupa pojedinim pinovima

[es] :: Elektronika :: Mikrokontroleri :: PIC16F877A Problem oko pristupa pojedinim pinovima

[ Pregleda: 2159 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

merid
merid ljesnjanin
student,etf
negdje

Član broj: 165345
Poruke: 3
*.pppoe-8444.sa.bih.net.ba.



Profil

icon PIC16F877A Problem oko pristupa pojedinim pinovima04.03.2008. u 00:49 - pre 196 meseci
Pozdrav,


Imam sljedeci problem, kao prvo dobio sam seminarski koji se sastoji u programiranju PIC-ova, a to nikad nisam radio, medjutim mene se nista ne pita :(

Dakle ev ja cu staviti cio code, inace ovaj code treba da upravlja liftom, nemojte se smijati greskama, ipak mi je prvi put da u ovome radim, jos samo da kazem da mi prilikom pokusaja da Build-am javlja sljedecu gresku:

Line/Column Message No Message Text
10:0 11 ';' expected but .2 found
10:0 12 Internal error
10:0 12 Internal error
10:0 12 Internal error
10:0 12 Internal error

Samo jos da kazem nakon sto stavim ; mjesto .2 (dakle ;2) dobijem sljedecu poruku u koloni Message Text: Assigning to non-lvalue [] (isto dobijem kada mjesto . stavim ,)
Ja mislim da je greska u tome sto ja ne znam kako da pristupim pojedinacnim pinovima (moze biti da nisam pravilno iskoristio ni switch), googlao sam ali stvarno nisam nista nasao u cem bih se snasao, ako ima neko ko moze pomoci molim ga. Ev jos samo da pokazem code (p.s. vjerovatno ce biti jos greskica, ali trenutno mi je ovo primarnoa, medjutim ako neko neku ugleda neka kaze)


//Deklaracija

int ts,vps;

//Funkcija za realizaciju paljenjea doda
void dioda(int sprat){
switch (sprat){

case 0:{
PORTD;2=0;
PORTD.3=1;
PORTC.4=0;
PORTC.5=0;
PORTD.4=0;
PORTD.5=0;}; break;
case 1:{
PORTD.2=0;
PORTD.3=0;
PORTC.4=1;
PORTC.5=0;
PORTD.4=0;
PORTD.5=0;}; break;
case 2:{
PORTD.2=0;
PORTD.3=0;
PORTC.4=0;
PORTC.5=1;
PORTD.4=0;
PORTD.5=0;}; break;
case 3:{
PORTD.2=0;
PORTD.3=0;
PORTC.4=0;
PORTC.5=0;
PORTD.4=1;
PORTD.5=0;}; break;
case 4:{
PORTD.2=0;
PORTD.3=0;
PORTC.4=0;
PORTC.5=0;
PORTD.4=0;
PORTD.5=1;}; break;
}
}
//******************************************************************************

//Funkcija za realizaciju prikazivanja sprata na 7seg display-u
void sedmoseg(int sprat){
switch (sprat){
case 0:{
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=1;
PORTD.0=1;
PORTD.1=0;}; break;
case 1:{
PORTC.0=0;
PORTC.1=1;
PORTC.2=0;
PORTC.3=0;
PORTD.0=0;
PORTD.1=0;}; break;
case 2:{
PORTC.0=1;
PORTC.1=0;
PORTC.2=1;
PORTC.3=1;
PORTD.0=0;
PORTD.1=1;}; break;
case 3:{
PORTC.0=1;
PORTC.1=1;
PORTC.2=1;
PORTC.3=0;
PORTD.0=0;
PORTD.1=1;}; break;
case 4:{
PORTC.0=0;
PORTC.1=1;
PORTC.2=0;
PORTC.3=0;
PORTD.0=1;
PORTD.1=1;}; break;
}
}
//******************************************************************************

//Sekvence za step motor

void step(int br){
switch (br){
case 0:{
PORTD.7=1;
PORTD.6=0;
PORTB.0=0;
PORTB.1=0;}; break;
case 1:{
PORTD.7=0;
PORTD.6=1;
PORTB.0=0;
PORTB.1=0;}; break;
case 2:{
PORTD.7=0;
PORTD.6=0;
PORTB.0=1;
PORTB.1=0;}; break;
case 3:{
PORTD.7=0;
PORTD.6=0;
PORTB.0=0;
PORTB.1=1;}; break;
}
}
//******************************************************************************

//Glavni program
void main(){

TRISA = 0xFF;
TRISB = 0x3F;
TRISC = 0;
TRISD = 0;
TRISE = 0;

while (PORTB.2!=0){
PORTE.1=1;
PORTE.2=0;
}
PORTE.1=0;
PORTE.2=0;
ts=0;
dioda(0);
sedmoseg(0);
while (1){
//******************************************************************************
if (PORTA.0==1){ //Poziv na prizemlje
vps=0;
while (PORTB.3!=0){
PORTE.1=1;
PORTE.2=0;
}
}
//******************************************************************************
if (PORTA.1==1){ //Poziv na prvi sprat
vps=1;
while (PORTB.4!=0){
if (vps<ts){
PORTE.1=0;
PORTE.2=1;
}
else{
PORTE.1=1;
PORTE.2=0;
}
}
PORTE.1=0;
PORTE.2=0;
ts=vps;
dioda(ts);
sedmoseg(ts);
}
//******************************************************************************
if (PORTA.2==1){ //Poziv na drugi sprat
vps=2;
while (PORTB.5!=0){
if (vps<ts){
PORTE.1=0;
PORTE.2=1;
}
else{
PORTE.1=1;
PORTE.2=0;
}
}
PORTE.1=0;
PORTE.2=0;
ts=vps;
dioda(ts);
sedmoseg(ts);
}
//******************************************************************************
if (PORTA.1==1){ //Poziv na treci sprat
vps=3;
while (PORTB.6!=0){
if (vps<ts){
PORTE.1=0;
PORTE.2=1;
}
else{
PORTE.1=1;
PORTE.2=0;
}
}
PORTE.1=0;
PORTE.2=0;
ts=vps;
dioda(ts);
sedmoseg(ts);
}
//******************************************************************************
if (PORTA.1==1){ //Poziv na cetvrti sprat
vps=4;
while (PORTB.7!=0){
PORTE.1=0;
PORTE.2=1;
}
PORTE.1=0;
PORTE.2=0;
ts=vps;
dioda(ts);
sedmoseg(ts);
}
//******************************************************************************
if (PORTB.2=1){ //Alarm
PORTE.1=0; // Motor stani
PORTE.2=0; // Motor stani
PORTD.2=1; // Gori crvena dioda
PORTD.3=0; // Gori crvena dioda
PORTC.4=0; // Gori crvena dioda
PORTC.5=0; // Gori crvena dioda
PORTD.4=0; // Gori crvena dioda
PORTD.5=0; // Gori crvena dioda
PORTC.0=1; // Prikazi A na sedmoseg display-u
PORTC.1=1; // Prikazi A na sedmoseg display-u
PORTC.2=0; // Prikazi A na sedmoseg display-u
PORTC.3=1; // Prikazi A na sedmoseg display-u
PORTD.0=1; // Prikazi A na sedmoseg display-u
PORTD.1=1; // Prikazi A na sedmoseg display-u
}
//******************************************************************************
for (i=0,j=0;i<50;i++){ //Otvaranje vrata lifta
if (j<=3){
step(j);
j++;
}
else
j=0;
}
//******************************************************************************
for (i=0,j=3;i<50;i++){ //Zatvaranje vrata lifta
if (j>=0){
step(j);
j--;
}
else
j=3;
}
//******************************************************************************

}
}
sve se vrti u krug
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: PIC16F877A Problem oko pristupa pojedinim pinovima04.03.2008. u 07:38 - pre 196 meseci
Možda će ti ovo dalje pomoći:
http://www.elitesecurity.org/t312974-0#1875502

Sa kojim kompajlerom uopšte radiš?
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: PIC16F877A Problem oko pristupa pojedinim pinovima04.03.2008. u 08:13 - pre 196 meseci
U zavisnosti od c kompajlera nazivi portova, registra, bitova u registrima su negde definisani kroz header fajlove (extenzija .h) a negde nisu pa ih je potrebno definisati.
Recimo pristupanje pinovima kontrolera u CCS C kompajleru se moze postici na dva nacina. Prvi je kroz ugradjene funkcije:

input(), output_low(), output_high(), output_bit(), output_x(), output_float()

ili kroz definisanje varijable koja zauzima memoriski prostor PORT ili TRIS registra:

#BYTE PORTA=0x05 (definisemo varijablu PORTA koja se mapira na lokaciju u RAM-u u registar PORTA (adresa 0x05))
#BYTE TRISA=0x85 (definisemo varijablu TRISA koja se mapira na lokaciju u RAM-u u registar TRISA (adresa 0x85))

ili za pristrup pojedinacnom pinu:

#bit T0IF = 0x0b.2 (pristupamo adresi u RAM 0x0b (INTCON) bitu 2 (T0IF))

i onda mozes da ih koristis u programu:

PORTA=123;
T0IF=0;

u tvom slucaju bi bilo:

ili

output_low(pin_e1); // za gasenje motora
output_high(pin_e1); // za paljenje motora

ili definises:

#bit MOTOR = 0x09.1 // porte bit 1

pa bi onda mogao da koristis

motor=0; // za gasenje motora

[Ovu poruku je menjao sander dana 04.03.2008. u 09:47 GMT+1]
 
Odgovor na temu

merid
merid ljesnjanin
student,etf
negdje

Član broj: 165345
Poruke: 3
*.etf.unsa.ba.



Profil

icon Re: PIC16F877A Problem oko pristupa pojedinim pinovima04.03.2008. u 12:02 - pre 196 meseci
E raja puno hvala na pomoci, ja mislim da sam skontao i uspio rjesiti problem na sljedeci nacin, dakle kad hocu pristupiti pinu 2 porta B uradim sljedece

PORTB.F2=0; //nprj.

Jos jednom puno hvala sto ste u tako kratkom vremenskom preiodu reagirali.
sve se vrti u krug
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.adsl-a-1.sezampro.yu.



Profil

icon Re: PIC16F877A Problem oko pristupa pojedinim pinovima05.03.2008. u 00:48 - pre 196 meseci
Ima jos jedan zgodan nacin za pristup portovima a to je preko strukture koja se mapira preko dela ram-a gde su PORT registri:

struct lcd_pin_map { // This structure is overlayed
int unused : 4; // B0-B3 unused
int data : 4; // B4-B7 LCD.DATA
BOOLEAN rs; // C0 - RS
BOOLEAN enable; // C1 - EN.
BOOLEAN unused1; // C2 unused
BOOLEAN unused2; // C3 unused
int unused3: 4; // C4-C7 unused
} lcd;

#locate lcd = 6

definise se struktura koja se potom locira na adresi 6 u ram-u i zauzima 2 bajta (PORTB i PORTC registre). Dati primer je za kontrolu
LCD2x16 displeja. I pristupom strukturi ustvari pristupamo pinovima pomenutih portova:

lcd.data=0xf;
lcd.rs=0;
lcd.enable=1;
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC16F877A Problem oko pristupa pojedinim pinovima

[ Pregleda: 2159 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.