

program Test_16F628A_lecture_poussoir;
procedure Init;
begin
TRISA := %11111111; // toutes lignes du port A (RA0 à RA7) configurées en entrées logiques
TRISB := %00000000; // toutes lignes du port B (RB0 à RB7) configurées en sorties logiques
end;
procedure Read_Input_1;
begin
if TestBit(PORTA, 0) = 1 then // lecture ligne RA0
begin
// action si SW1 enfoncé
end;
end;
procedure Read_Input_2;
begin
if TestBit(PORTA, 1) = 0 then // lecture ligne RA1
begin
// action si SW2 enfoncé
end;
end;
// Main program
begin
Init;
while true do
begin
Read_Input_1;
Read_Input_2;
delay_ms(100);
end;
end.
procedure Read_Input_1;
begin
if Button(PORTA, 0, 50, 1) then // lecture ligne RA0
begin
// action si SW1 enfoncé
end;
end;
procedure Read_Input_2;
begin
if Button(PORTA, 1, 50, 0) then // lecture ligne RA1
begin
// action si SW2 enfoncé
end;
end;
Button(PORTA, 0, 50, 1)- PORTA correspond, comme on pourrait un peu s'en douter, au port sur lequel est branché le bouton poussoir.
Button(PORTA, 1, 50, 0)- PORTA correspond au même port que précédement, pas de surprise.
procedure Read_Input_1;
var
bSW1: boolean;
begin
if Button(PORTA, 0, 50, 1) and (bSW1 = false) then // lecture ligne RA0
begin
// action si SW1 enfoncé
bSW1 := true;
end;
if PORTA.0 = 0 then bSW1 := false;
end;
procedure Read_Input_2;
var
bSW2: boolean;
begin
if Button(PORTA, 1, 50, 0) and (bSW2 = false) then // lecture ligne RA1
begin
// action si SW2 enfoncé
bSW2 := true;
end;
if PORTA.1 = 1 then bSW1 := false;
end;
procedure Read_Input_1;
begin
if PORTA.0 = 1 then Delay_ms(50); // lecture ligne RA0
if PORTA.0 = 1 then
begin
// action si SW1 enfoncé
end;
end;


program electronique_pic_tuto_base_lecture_poussoir_001c;
var
iValue: byte;
// initialisation générale
procedure Init;
begin
TRISA := %00000000; // port A configuré en sortie
TRISB := %11111111; // port B configuré en entrée
CMCON := $07; // désactivation comparateurs
OPTION_REG.NOT_RBPU := 0; // mise en service pullup
end;