А mux8 не получится использовать?
А потом bitslice на биты полученное число разобьёт. А дальше все просто.
А mux8 не получится использовать?
Код: Выделить всё
/* sudo halcompile --install btn3x6.comp */
component btn3x6 "btn3x6";
description "";
//Input 
pin in bit PB0;
pin in bit PB2;
pin in bit PB4;
//Output
pin out bit S1;
pin out bit S2;
pin out bit S3;
pin out bit S4;
pin out bit S5;
pin out bit S6;
pin out bit S7;
function _;
license "GPL"; 
;;
FUNCTION(_){
    if ( PB4 && PB2 && PB0 ) {
	S1 = 0; S2 = 0; S3 = 0; S4 = 0; S5 = 0; S6 = 0; S7 = 0;
    }
    
    else  if ( PB4 && PB2 && !PB0 ) {
	S1 = 1; S2 = 0; S3 = 0; S4 = 0; S5 = 0; S6 = 0; S7 = 0;
    }
    
    else  if ( PB4 && !PB2 && PB0 ) {
	S1 = 0; S2 = 1; S3 = 0; S4 = 0; S5 = 0; S6 = 0; S7 = 0;
    }
    
    else  if ( PB4 && !PB2 && !PB0 ) {
	S1 = 0; S2 = 0; S3 = 1; S4 = 0; S5 = 0; S6 = 0; S7 = 0;
    }
    else  if ( !PB4 && PB2 && PB0 ) {
	S1 = 0; S2 = 0; S3 = 0; S4 = 1; S5 = 0; S6 = 0; S7 = 0;
    }
    else  if ( !PB4 && PB2 && !PB0 ) {
	S1 = 0; S2 = 0; S3 = 0; S4 = 0; S5 = 1; S6 = 0; S7 = 0;
    }
    
    else  if ( !PB4 && !PB2 && PB0 ) {
	S1 = 0; S2 = 0; S3 = 0; S4 = 0; S5 = 0; S6 = 1; S7 = 0;
    }
    
    else  if ( !PB4 && !PB2 && !PB0 ) {
	S1 = 0; S2 = 0; S3 = 0; S4 = 0; S5 = 0; S6 = 0; S7 = 1;
    }
}
это готовый компонент именно с твоей логикой работы
и всёsudo halcompile --install btn3x6.comp
Код: Выделить всё
loadrt btn3x6
addf btn3x6.0 servo-thread
net pb0 btn3x6.0.PB0
net pb2 btn3x6.0.PB2
net pb4 btn3x6.0.PB4
loadusr sim_pin  pb0  pb2  pb4спасибо, не знал что так можно свой компонент создать.
Код: Выделить всё
net brun    btn3x6.0.S1  halui.program.run
net bstop   btn3x6.0.S2  halui.program.stop
net bhome   btn3x6.0.S3  halui.home-all
net bmdi0   btn3x6.0.S4  halui.mdi-command-00
net bmdi1   btn3x6.0.S5  halui.mdi-command-01
net bmdi2   btn3x6.0.S6  halui.mdi-command-02 Код: Выделить всё
[HALUI]
MDI_COMMAND = G28
MDI_COMMAND = G0 G53 X0 Y0
MDI_COMMAND = G0 G54 X12