Mám obavu, že budeš muset volání funkce upravit z
teplota = ds18b20_gettemp();
na
teplota = ds18b20_gettemp(cislo_cidla);
a funkci vlastní pak na
[code]int ds18b20_gettemp(char cidlo)
{
switch (cidlo)
{
#define DS18B20_DQ PA0
case 0: <obsluha čidla>;
return <teplota čidla>;
break;
#undef DS18B20_DQ
#define DS18B20_DQ PA1
case 1: <obsluha čidla>;
return <teplota čidla>;
break;
#undef DS18B20_DQ
#define DS18B20_DQ PA2
case 2: <obsluha čidla>;
return <teplota čidla>;
break;
#undef DS18B20_DQ
default: return <nesmyslná hodnota>;
}
}
[/code]
Obsluhu čidla pak stačí napsat stylem
a=DS18B20_DQ
if (DS18B20_DQ== b)
atd.
Jen jí ještě musíš pomocí CTRL-C a CTRL-V zkopírovat do všech case - tohle by mělo fungovat.
Možná by šlo kód napsat jako makro :
.macro ObsluhaTeplomeru
a=DS18B20_DQ
if (DS18B20_DQ== b)
atd.
.endm
a funkci pak
[code]int ds18b20_gettemp(char cidlo)
{
switch (cidlo)
{
#define DS18B20_DQ PA0
case 0: ObsluhaTeplomeru;
return <teplota čidla>;
break;
#undef DS18B20_DQ
#define DS18B20_DQ PA1
case 1: ObsluhaTeplomeru;
return <teplota čidla>;
break;
#undef DS18B20_DQ
#define DS18B20_DQ PA2
case 2: ObsluhaTeplomeru;
return <teplota čidla>;
break;
#undef DS18B20_DQ
default: return <nesmyslná hodnota>;
}
}
[/code]
Ale tím si nejsem 100% jistý. Výhodou by byla jednodušší úprava programu pro čidlo - nemusel bys to fyzicky rozkopírovávat. Jenže teďka nemám u sebe AS a nemůžu tuhle variantu překladu vyzkoušet.