Funkcia v C - aký údaj do definície funkcie pre určenie pinu

Zdravím.
Učím sa pracovať z MCU zn.PIC v C,soft používam Hi tech 9.6.
Pripájam zdroják v ktorom mám vytvorenú funkciu na ošetrenie zákmitov tlačidla.

#include <pic.h>
#include “delay.h”

int button (int b) //funkcia na ošetrenie zákmitov tlačidiel
{
int a =0; //prednastavenie premennej “a”
while (a<b)
{ //b počet test.cyklov(v ms)
if (RD0 == 1) //tlačidlo je zatlačené,testujeme ďalej
{
a ++; //inkrement.hodn. v “a”
//DelayMs(1);
}
else
{
return (a = 0); //tlačidlo nebolo zatlačené,odchod z cyklu
} //návratová hodnota bude “0”
}
return (a = 1); //tlačidlo bolo počas testovania zatlačené
//návratová hodnota bude “1”
}
//-----------------------hlavný program----------------------------

void main(void)
{
TRISB =0b00000000;
TRISD =0b00000001;

if ((button(20)) ==1) //ošetrenie zákmitov tlačidla (20ms)
{
RB0 =1;
DelayMs(100);
}
else
{
RB0 =0;
DelayMs(100);
}
}

Chcem sa poradiť ako mám do definície funkcie button(20) vložiť údaj o tom ktorý pin MCU vlastne chcem testovať.
Predstavujem si to napr.button(RB1,20) alebo button(PORTB,1,20)
len neviem ako na to.
Nepotrebujem hotové riešenie,len radu aký operátor použiťna riešenie tohoto problému.

Relatko.

:arrow_right: administrator: přejmenováno z "Funkcia v C"
funkcia.rar (23.3 KB)

Pomocí pointerů by to mělo jít.

[code]unsigned char button(unsigned char *pPort, unsigned char pin)
{
*pPort |= 1<<pin;
return 1;
}

void main(void)
{
button(&PORTB, 1);
}
[/code]

Pokud o pointerech nic moc nevíš, na builderu je seriál o C, tam to najdeš (jen je otázka kdy, dneska builder nějak nejede :frowning:).
edit: tak už builder frčí. builder.cz/serial3.html

Neviem,ale momentálne tá stránka nebeží,ale nevadí.
Na tejto:
inet.sk/clanok/3586/programu … smerniky-i

sa píše:

Je potom možné zapísať :button(&PORTB, 1); ?
Som už z toho zmagorený.PORTB je premenná?
Relatko.

namiesto INT puzivaj char pripadne unsigned char 9bez znamienky0

if (RD0 == 1) //tlačidlo je zatlačené,testujeme ďalej
tot staci pisat if (RD0) //tlačidlo je zatlačené,testujeme ďalej

Ano, PORTB je z pohledu překladače proměnná - má v paměti svoji adresu a není konstantní. Stejně tak když máš “int a”, překladač si vytvoří symbol “a” a přiřadí mu adresu v paměti, kde se nachází.
Možná ti to bude trochu hlásit pro nekompatibilní typy, ale to neřeš. On je totiž například registr definován jako “#define EEARL _SFR_IO8(0x1E)” (platí pro gcc) a to například nemá typ “unsigned char”, ale zachází se s tím stejně.
Podmínka může vypadat třeba takto:

if(*pPort & (1<<pin)) ...; // na pinu je 1

Nevím jakou mají stavbu io registrů picy, ale pPort musí ukazovat na čtecí registr.

Zdravím.
Využijem túto tému pre môj nový “problém”
Len pre načrtnutie problému zjednodušený projekt.

Pokiaľ vo funkcii z i dentickým názvom “funkcia” použijem globálnu premennú “B”,ale je to všetko v jednom súbore ,je všetko O.K.

char A;
char B;

char funkcia (char Z, char W)
{
char X =0;
X = ((W*B) + Z);
Z =0;
return X;
}

void main(void)

{
B =5;
A =funkcia(2,2);

}
Ale pokiaľ použijem samostatnú funkciu (viď priložený zdroják)
už je problém lebo podľa prekladača nemám spomínanú premennú “B” zadefinovanú.
Som začiatočník a poprosím zdatnejších o vysvetlenie tohoto(iste banálneho) problému.
Vopred vďaka.
Relatko.
test.rar (398 Bytes)

V souboru s funkcí je potřeba globání proměnnou z mainu importovat: pomocí “extern”. V hlavičkovym souboru nemáš ošetřený vícenásobný vložení.
Je o tom poslední díl seriálu o C na builderu.

By mě zajímalo, co všichni viděj na tom raru. Člověk kvůli tomu musí do systému nacpat další bordel. Přitom podpora zipu je ve win implementovaná.

Kde se dá stáhnout tento software a lze to importovat do MPLAB IDE v7.41? díky.

Stiahneš ho odtiaľto:
microchip.com/stellent/idcpl … e=en542849

Áno,beží to pod Mplabom.Ja používam 8.53,tam to ide.
Relatko.

Zdar na tom linku který mě poslal tak je šest souborů ke stažení tak který z nich je ten pravý a je free ?Zkoušel jsem na první kliknout a po mě to chtělo přihlášení :open_mouth: díky za pomoc

Tak se zaregistruj a přihlaš… 8)

A to je placené nebo ne? já bych potřeboval něco zadarmo díky.

Registrace je zdarma…

Chlapi nenašel by se nějaký dobrodinec který by mě ten compilátor Hi tech neposkytl? protože anglicky neumím a nerad bych něco provedl :blush: díky.

Nič neprovedeš.
Potom ako ťa to vyzve zadať email a heslo klikneš na “register now”,vyplníš tabuľku,odošleš a na mail ti príde heslo.Pri ďalšom pokuse o stiahnutie to zadáš spolu z mailovkou a sťahuješ :slight_smile:
A anglinu sa začni učiť.Bez nej je toto všetko o ničom.Ja tiež nie som moc dobrý,ale pomôže ti to.
Relatko.

Tady to máš…

edisk.cz/stahni/14605/HCPIC- … .25MB.html

:arrow_right: administrator: příspěvek byl upraven
Odkaz byl vyjmut z code (zde nejsou problémy s autorskými právy).

:arrow_right: administrator: přiloženy externí soubory
HCPIC-pro-9.71a.zip (5.93 MB)

HCPIC-pro-9.71a.zip soubor není funkční ale ten odkaz na edisk je v pořádku díky.

Soubor HCPIC-pro-9.71a.zip jsem stáhl a rozbalil a vše je v pořádku, instalátor funguje.

Zdravím
Zas"otravuji" potřeboval bych návod jak do prostředí MPLAB IDE v7.41 ten Hi tech 9.6.lite implementovat? a jak si tady to nastavit?díky
compilatorC.JPG

Nazdar.
Otvoríš Mplab,klikneš na Project >> Set Languare Tool Locations tam si rozklikneš Hitech universal Tool suite a označíš HITECH C Compiler.
Browse a zadáš cestu k súboru picc.exe.(tam kde si si zainštaloval Hitech compiler)
A hotovo.
A k tej tabuľke,CCS Compiler nepoužívam.
Relatko :smiley:
set_mplab.JPG