Платка управления кучей клапанов... с компа дается команды включить клапан n-ый.
Некрасиво жестко привязываться к архитектуре.
вот как было для другой платки на асм и как я хочу сделать сейчас:
<c>
k1 bit p1.4
k2 bit p1.5
k3 bit p1.6
k4 bit p1.7
k5 bit p3.0
k6 bit p3.1
k7 bit p3.2
; таблица пинов для управления ключами
tbportsswitch: db 0, k1, k2, k3, k4, k5, k6, k7
SWITCH_ON:
mov a,par1
mov dptr,#tbportsswitch
movc a,@a+dptr
mov b,#8
div ab
inc b ; остаток 1...8
cjne a,#0x10,sw00
mov a,#10000000b
rl a
djnz b,$-1
orl a,p0
mov p0,a
ret
sw00: cjne a,#0x12,sw01
mov a,#10000000b
rl a
djnz b,$-1
orl a,p1
mov p1,a
ret
sw01: cjne a,#0x14,sw02
mov a,#10000000b
rl a
djnz b,$-1
orl a,p2
mov p2,a
ret
sw02: cjne a,#0x16,sw03
mov a,#10000000b
rl a
djnz b,$-1
orl a,p3
mov p3,a
sw03: ret
</c>
Может и не идеал реализации, но мне показалось удобным. А на С я смог сделать только:
switch (bufRX.RX[2])
{
case 1: k1 = (bit)bufRX.RX[3]; break;
case 2: k2 = (bit)bufRX.RX[3]; break;
case 3: k3 = (bit)bufRX.RX[3]; break;
case 4: k4 = (bit)bufRX.RX[3]; break;
case 5: k5 = (bit)bufRX.RX[3]; break;
case 6: k6 = (bit)bufRX.RX[3]; break;
case 7: k7 = (bit)bufRX.RX[3]; break;
}