PIC16F84A maticova klavesnice

Myslím, že otevřený kolektor máš ošetřen správně. Řekl bych, že jde o běžný tzv. read-write problém. Při použití bitově orientovaných instrukcí na portech, třeba BSF PORTA,3 se nejprve přečte celý port, provede se bitová operace a pak se celý port zase zapíše zpět. Jenže se nečte registr PORTA nebo PORTB, nýbrž stav výstupních pinů. Pokud tedy provedeš rychle po sobě bitovou operaci na portu, může dojít k tomu, že stav portu po první operaci se ještě nestačí ustálit dík parazitním kapacitám obvodu. Pak se jednotlivé bity portu chovají zdánlivě nevyzpytatelně. Řešení jsou v podstatě dvě. Vložením nějaké prodlevy mezi bitové operace na portech nebo prováděním bitové operace na pomocném registru a ten pak celý vkládat na port. Ovšem v tvém programu s RA4 manipuluješ:

CLRF PORTA ........... zapni MOVLW b'11111111' MOVWF PORTA RETURN