12f683. GPIO nepracuje spravne

ahojte, mam taky delikatny problem :slight_smile: mam zapojenych 5 led na GPIO(0,1,2,4,5). Podla programu by sa mali postupne zasviecovat kym nebudu svietit vsetky a potom naraz zhasnut a nanovo ist. Ale robi to taku sprostost, ze 1. zasvieti, 2. zasvieti pricom prva zhasne, 3. zasvieti ale druha zhasne a potom uz robi jak ma. Neviete kde je problem ?

[code]LIST P=12F683, R=DEC ; direktivy prekladace
#include <p12f683.inc>

__CONFIG _MCLRE_OFF&_CP_OFF&_WDT_OFF&_INTRC_OSC_NOCLKOUT

C1 EQU 20h
C2 EQU 21h
C3 EQU 22h

ORG 0
GOTO START

START
BSF STATUS,RP0
MOVLW B’00000000’ ; individualni nastaveni pull-up
MOVWF WPU
MOVLW B’01001000’
MOVWF OPTION_REG
MOVLW B’01110101’
MOVWF OSCCON
MOVLW B’01110000’
MOVWF ANSEL
MOVLW B’00001000’
MOVWF TRISIO
BCF STATUS,RP0

MOVLW b’00000000’ ; povoleni (zakaz) preruseni
MOVWF INTCON ; ok
MOVLW B’00000000’ ; inicializace I/O - nastavime hodnoty,zatim 0
MOVWF GPIO ; ok
MOVLW B’00000000’
MOVWF ADCON0
MOVLW B’00000000’ ; vypnuti WatchDogu
MOVWF WDTCON
CLRF GPIO

GOTO PROGRAM

PROGRAM

BSF GPIO,0
CALL CAKAJ
BSF GPIO,1
CALL CAKAJ
BSF GPIO,2
CALL CAKAJ

BSF GPIO,4
CALL CAKAJ
BSF GPIO,5
CALL CAKAJ

CLRF GPIO
CALL CAKAJ

GOTO PROGRAM

CAKAJ
MOVLW .10
MOVWF C3
MOVLW .255
MOVWF C1
MOVWF C2
DECFSZ C1
GOTO $-1
MOVWF C1
DECFSZ C2
GOTO $-4
DECFSZ C3
GOTO $-6
RETURN

END[/code]

Program som vobec nezmenil, a teraz prezmenu robi to, ze prvu vobec nezasvieti, caka cyklus, zasvieti prvu a druhu naraz, dvojka zhasne a zasvieti trojka (jednotka ostava svietit) prebehne normalne a zase zacne robit svoje :smiley: :smiley: Viete si to niekto vysvetlit, respektive mi to :smiley: dakujem

Takhle to funguje, stačí nastavit všechno.

[code] LIST P=12F683, R=DEC ; direktivy prekladace
#include <p12f683.inc>
__CONFIG _MCLRE_OFF&_CP_OFF&_WDT_OFF&_INTRC_OSC_NOCLKOUT
C1 EQU 20h
C2 EQU 21h
C3 EQU 22h
ORG 0x00
GOTO START
START
BSF STATUS,RP0
MOVLW B’00000000’ ; individualni nastaveni pull-up
MOVWF WPU
MOVLW B’01001000’
MOVWF OPTION_REG
MOVLW B’01110101’
MOVWF OSCCON

BANKSEL GPIO
CLRF	GPIO 
MOVLW	07h
MOVWF	CMCON0 
BANKSEL ANSEL 
CLRF	ANSEL
MOVLW	.0
MOVWF	TRISIO 
banksel	0
MOVLW   b'00000000' ; povoleni (zakaz) preruseni
MOVWF   INTCON ; ok
MOVLW   B'00000000' ; inicializace I/O - nastavime hodnoty,zatim 0
MOVWF   GPIO ; ok
MOVLW   B'00000000'
MOVWF   ADCON0
MOVLW   B'00000000' ; vypnuti WatchDogu
MOVWF   WDTCON
CLRF   GPIO

PROGRAM

BSF      GPIO,0
CALL   CAKAJ
BSF      GPIO,1
CALL   CAKAJ
BSF      GPIO,2
CALL   CAKAJ
BSF      GPIO,4
CALL   CAKAJ
BSF      GPIO,5
CALL   CAKAJ
CLRF   GPIO
CALL   CAKAJ
GOTO   PROGRAM

CAKAJ
MOVLW .10
MOVWF C3
MOVLW .255
MOVWF C1
MOVWF C2
DECFSZ C1
GOTO $-1
MOVWF C1
DECFSZ C2
GOTO $-4
DECFSZ C3
GOTO $-6
RETURN

END[/code]

super super. Nevem co si zmenil, ale ide to. Velke DAKUJEM :slight_smile:

Si porovnej oba ASM a uvidíš, co ti tam chybělo. Pokud v inicializaci na něco zapomeneš, tak to většinou nebude fungovat.

jj, uz vidim, jeden register som nenastavil. Dakujem za pomoc :slight_smile: