PIC16f28A - Počítaní nul na vstupech

Ahoj napsal jsem program, který má spočítat nuly na vstupech RA0 až RA3 a podle toho určit jestli se vypíšou všude na PORTB( RB0 až RB7) nuly nebo jedničky. (Když tam jsou 4 nuly tak je všude 1 na PORTB, když jich je méně tak 0)
Na vstupech RA0 až RA3 mám tlačítka, po zmáčknutí tam přivedu 5V(logická 1) jelikož ubude nula tak by se měly objevit na PORTB (RB0 až RB7) všude nuly.
V emulaci MPLAB program funguje(musím na RB0 až RB3 nuly a jedničky natavit ručně), ale po nahrátí na čip se nic neděje.

Nevím kde je chyba a prosím o pomoc.

http://www.imgup.cz/images/2016/11/15/Vystrizek1.png

[code]LIST P=16F628A
INCLUDE<P16F628A.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT

RAMOFF EQU 0X0C
NULY EQU RAMOFF+5
ORG 0X00

BNK0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM

BNK1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM

BNK1
MOVLW B’11111111’
MOVWF TRISA
MOVLW B’00000000’
MOVWF TRISB

BNK0
NOP
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START

MOVLW 0 ;Vynuluji nuly
MOVWF NULY
; Počítání nul ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTFSC PORTA,0
GOTO $+2
INCF NULY

BTFSC PORTA,1
GOTO $+2
INCF NULY

BTFSC PORTA,2
GOTO $+2
INCF NULY

BTFSC PORTA,3
GOTO $+2
INCF NULY
;…
;Když budou 4 nuly na PORTA (0 až 3) tak dám všude na PORTB jedničky, když jich bude míň bude na PORTB všude nula
MOVLW 3
SUBWF NULY

DECFSZ NULY
CALL DAL
MOVLW B’11111111’
MOVWF PORTB
GOTO START
DAL
MOVLW B’00000000’
MOVWF PORTB

GOTO START

END[/code]

Jínými slovy se po tobě chce emulovat čtyřvstupové NAND hradlo? Použij odpovídající logické instrukce.

Ano dalo by se to udělat pomocí jiných aritmetických a logických operací, ale v nich není problém- to se dá zkontrolovat pomocí MPLAB emulátoru.

Myslím že by mohl být problém bud v konfiguraci PIC nebo v počítání nul. Tam totiž nevím jak to v realu funguje.
Čtu takto správně port?

BTFSC PORTA,0 ; kontrola nuly - pokud tam je přeskočí řádek a přičte jedna k proměnné nuly GOTO $+2 ; skoč o dva řádky dál a tím přeskoč přičtení nuly INCF NULY INCF NULY

http://www.imgup.cz/images/2016/11/16/Vystrizek2.md.png

Tak mám zapojena tlačítka na nepájivém poly.
Předpokládám že když nemám zmáčknuté žádné tlačítko tak na portech RA0 až RA1 je všude nula.

Podle mě, když není sepnuté tlačítko, tak na vstupu je kdo ví co.
Dej ještě mezi vstup a zem radši odpor.
Takto
google.cz/search?q=tlačítko … KwhJ6vM%3A

A co se týče PICky, zkoušel jsi s LEDkama blikat?

ne,viz FIGURE 5-1
jak pripojit tlacitko k mcu

za dalsi pokud je na pinu vice periferii je NUTNE si v DS zjistit jestly je periferie zapla/vypla po zapnuti…

A proč to děláš tak složitě ? Načtu port, vymaskuju žádaný bity, zkontroluju, jestli je výsledek 0x00.

Ano = jsou tam 4 nuly = pošlu na port B 0xFF
Ne = je mezi nima nějaká jednička = pošlu na port B 0x00

Vzhledem k tomu, že je to domácí úloha, tak si to přelož do ASM sám.

Děkuji za vaše rady, bylo to tím zapojením tlačítka , chtělo to ten odpor.

Jeden tip: Pokud PICy mají/umí zapnout vnitřní pull-up odpory, je mnohem jednodušší je aktivovat, zapojit tlačítka proti GND a použít negativní (nebo také inverzní) logiku. Výhodou je pak jednodušší DPS.

Balů: To už jsem mu přeci taky radil, hned v následujícím příspěvku to odmítl. Nech ho být, evidentně vůbec nepochopil co se po něm chce a jaký má ten úkol význam.

Jj děkuji za radu takto je to opravdu lepší a jak píše Anonymní tak od něj sem to opravdu nepochopil co po mě chtěl.

Tak máš číst datasheety, tam je pojem “logické instrukce” jasně vymezen, a ve škole jste o nich taky museli mluvit když na to máte úkol, tak jsi tam měl dávat pozor.