Hi Allan,

I am using PIC16F737 internal clock 8MHz, Card 1 is connected to RA6 and RA7, Cards 2, 3, and 4 are connected to PORTC<0:2,5:7>, and Cards 5,6,7,and 8
are connected to PORTB. All 16 card pins 1K resistors pull up to 5V.

I use the following code to determine which card has presented.

MainLoop:
CurrCard = 0
' Card reader 1
CheckPortA:
TempVar = PORTA
if TempVar < $C0 then CurrCard = 1 : goto FoundCard

' Card readers 5, 6, 7, and 8
CheckPortB:
TempVar = PORTB
if TempVar < $FF then
if TempVar.0 = 0 then CurrCard = 5 : goto FoundCard
if TempVar.1 = 0 then CurrCard = 5 : goto FoundCard
if TempVar.2 = 0 then CurrCard = 6 : goto FoundCard
if TempVar.3 = 0 then CurrCard = 6 : goto FoundCard
if TempVar.4 = 0 then CurrCard = 7 : goto FoundCard
if TempVar.5 = 0 then CurrCard = 7 : gosub FoundCard
CurrCard = 8
goto FoundCard
endif

' Card readers 2, 3, and 4
CheckPortC:
TempVar = PORTC
TempVar = TempVar & %11100111
if TempVar < %11100111 then
if TempVar.0 = 0 then CurrCard = 2 : goto FoundCard
if TempVar.1 = 0 then CurrCard = 2 : goto FoundCard
if TempVar.2 = 0 then CurrCard = 3 : goto FoundCard
if TempVar.5 = 0 then CurrCard = 3 : goto FoundCard
CurrCard = 4
goto FoundCard
endif

goto Mainloop

FoundCard:
select case CurrCard
Case 1: ' scan card 1
...
end select
...
goto Mainloop