Stránka 1 z 1

PIC16F505

Napsal: 02 zář 2008, 16:41
od Seeter
Dobrý den...nedávno jsem si pořídil tento procesor a vůbec nevím, jak nastavím jeho nožičky na vstupy a výstupy pomocí příkazu TRIS, protože narozdíl od např.: PIC16F627 výraz TRIS není definován...nemá podle dokumentace žádnou adresu nebo jsem jí nenašel. Rád bych věděl, jak mám procesor nadefinovat. Také jsem chtěl použít soubor #include, ale zjistil jsem, že ho nemám k dispozici a tak jsem chtěl proměnné definovat klasicky, ale zjistil jsem že funkce jako MCLRE, CP, OSC nemám zase kam přidělit...nenašel jsem jejich pozici v paměti a v dokumentaci neni definována a dole je pouze odkaz, abych si přečetl specifikace paměti. Prosím pomozte...děkuji...

Napsal: 02 zář 2008, 16:58
od mikollar
skus TRISB TRISA podla nazvu portu a do tohto registra zapis hodnotu

Napsal: 02 zář 2008, 17:53
od urbanek
U 505ky se vstupy a výstupy nastavují tak, že se do W dá příslušná hodnota 0 pro výstup 1 pro vstup, a pak se zavolá TRIS s operandem 6 pro port B nebo 7 pro port C. Port A 505ka nemá. Takže to vypadá třeba takto:

movlw 0xFF
tris 6

movlw 0x00
tris 7

tím se nastaví celý port B jako vstupní a port C jako výstupní (samozřejmě jde nastavit každý pin jinak, jen ten co se používá pro MCLR jde použít jen jako vstupní)

Napsal: 02 zář 2008, 18:21
od Seeter
a jak je to s definováním MCLRE/nebo vstupního pinu, CP-on/of... ?

Napsal: 02 zář 2008, 18:31
od urbanek
to se dělá v CONFIGu tak, jako u jiných PICů, záleží na překladači - u CCS C compileru jsou to direktivy #FUSES. Nebo se to dá nastavit až při vlastním programování procesoru

Napsal: 02 zář 2008, 19:05
od Seeter
Ještě jedna věc...mám program, který mi nefunguje...ty pojistky definuji při programování, Watchdog je vypnutý, MCLR zapnutý,....interní oscilátor, program je v příloze.

Napsal: 02 zář 2008, 19:40
od urbanek
nevidím tam nikde žádnou "nekonečnou" smyčku. Co ten procesor udělá po vykonání instrukce MOVWF PORTC ??

Napsal: 02 zář 2008, 19:50
od Seeter
rozsvítí LED diodu....

Napsal: 02 zář 2008, 20:28
od urbanek
To jo, ale co bude pak dělat dál, po provedení té instrukce? musí tam být nějaká smyčka, něco ve smyslu

loop:
goto loop

Napsal: 02 zář 2008, 21:55
od Seeter
nic tam není...podle mne procesor nic víc nepotřebuje...potom je konec programu, protože vezme informaci do W potom jí přemístí na PortC - diody se rozsvítí a potom je konec...vždy mi to fungovalo tím způsobem, že to takto fungovalo a svítilo neustále...tedy hlavně přes emulátor MUBeta; zkusil jsem dát i GOTO $-1 ale ani to nepomohlo

Napsal: 03 zář 2008, 09:51
od jankop
Procesor bez ohledu na tvoje představy pokračuje ve vykonávání následujících instrukcí. A protože další obsah programové paměti nemusí být definován, může dělat naprosto co ho napadne. Pak se nediv, že ti programek nefunguje.

V úpravě jsem ho ověřil a nenašel jsem problém.

Kód: Vybrat vše

    list      P=PIC16F505       ; list directive to define processor
    #include <P16F505.INC>      ; processor specific variable definitions
    errorlevel -302
    __CONFIG  _MCLRE_ON&_WDT_OFF&_CP_OFF&_IntRC_OSC_RB4EN

;--------- CONSTANT DEFINITIONS ---------------------------------------
#define RAM_Start 0x10
;--------- VARIABLE DEFINITIONS ---------------------------------------
    CBLOCK RAM_Start
    ENDC
;--------- ZACATEK PROGRAMU -------------------------------------------
    org 0x0000                  ; zacatek programu
        movwf OSCCAL
        movlw B'00000000'
        tris PORTB
        movlw B'00000000'
        tris PORTC
        movlw B'00000111'
        movwf PORTC
loop    goto loop
    end                         ; konec programu

Napsal: 03 zář 2008, 19:46
od Atlan
nechce sa mi to studovat ...ale vseto je v jednej banke 0 alebo to nepouziva tie banky.

Napsal: 03 zář 2008, 19:55
od urbanek
Celý SFR je v jedné bance, je to jednoduchej procesůrek...