Платка управления кучей клапанов... с компа дается команды включить клапан 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;
}