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----------------------------
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.
administrator: přejmenováno z “Funkcia v C” funkcia.rar (23.3 KB)
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 ).
edit: tak už builder frčí. builder.cz/serial3.html
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á.
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í díky za pomoc
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š
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.
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