Avatar billede frede_manden Nybegynder
28. april 2005 - 17:07 Der er 16 kommentarer

Assembler kode - PIC16F57

Hej

Er du nogle gode mennesker som kunne skrive koden til:

Jeg har 2 inputs på RA0 og RA1.

Så vil jeg gerne ha at den skal gøre en funktion når der er input på RA0 og køre en anden funktion når der er input på RA1. Og når der ikke og noget input skal den ikke gøre noget.

Altså en AND funktion kan man sige det er. Nogle som kan skrive koden?? ALtså et eksempel.
Avatar billede wolfborn Nybegynder
28. april 2005 - 17:30 #1
btfsc porta,0
goto FUNKTION1
btfsc porta,1
goto FUNKTION2

Hvis der kommer et signal på porta's RA0 vil den gå til funktion1
Hvis der er et signal på porta's RA1 vil den gå til funktion2

Nu ved jeg ikke hvor meget du er inde i assembler, men du skal også angive PORTA's ben RA0 og RA1 til at være input, så TRIS registeret skal stå rigtigt.
Avatar billede wolfborn Nybegynder
28. april 2005 - 17:39 #2
Iøvrigt kommandoen BTFSC, betyder BIT TEST FORWARD SKIP IF CLEAR.
dvs. den BIT TESTER FORWARD (Forward er i dette tilfælde porta) og bit nummeret er 0 (RA0)
Dernæst siger den at den skal SKIP IF CLEAR, dvs. spring næste linie over hvis bit 0 er lav.
Avatar billede frede_manden Nybegynder
28. april 2005 - 17:48 #3
Sjovt nok så virker den gode ikke :-(
Avatar billede wolfborn Nybegynder
28. april 2005 - 19:23 #4
hmm....
Jeg kender ikke F57'eren, men prøv om denne kode virker, jeg tror jeg har gennemskuet den..

indtast ALT dette herunder:

porta equ 05h
portb equ 06h

goto opset

opset:
movlw b'11111'
tris porta
movlw b'00000000'
tris portb
goto start

start:
btfsc porta,0
goto FUNKTION1
btfsc porta,1
goto FUNKTION2

goto start

FUNKTION1:
movlw b'11111111'
movwf portb
goto FUNKTION1

FUNKTION2:
movlw b'10101010'
movwf portb
goto FUNKTION2

end
Avatar billede wolfborn Nybegynder
28. april 2005 - 19:25 #5
Hvis du sætter +5 volt ind på RA0, vil den gå til funktion 1, og så vil alle PORTB udgange gå høj.

Hvis du sætter +5 volt ind på RA1 vil den gå til funktion 2, og så vil PORTB udgangene komme til at se sådan ud : 10101010

prøv det....
Avatar billede frede_manden Nybegynder
29. april 2005 - 11:11 #6
Det ved jeg, men problemet drejer sig om at jeg har tændt´en matrix som danner en pil henholdvis op og ned. Problemet er at den skal blinke, og at den skal tegne en pil op når der er input på f.eks. RA0 og hvis der er input på RA1 skal den tegne en pil ned af. Det er mit problem, så hvis du kunne hjælpe lidt?

Jeg behøver ikke at få at vide hvordan man tegne pillene, men mere hvordan man laver blinket og for det komponeret med det input.
Avatar billede wolfborn Nybegynder
29. april 2005 - 16:44 #7
du skal først og fremmest have noget man kalder for et 'delay' på fagsprog.
Det kan du generere ved at gøre følgende:

delay1 equ 07h
delay2 equ 08h

Nu har du 2 memory lokationer med 8 bit.

Dernæst skal du bruge en nedtæller.

skriv disse subrutiner:

Time1:
btfsc delay1
goto time1
goto time2

Time2:
btfsc delay2
goto time1
return

Nu skal du så bare tænde og slukke for din pil ved at:
TÆND FOR DIN PIL, KALD DERNÆST DIN SUBRUTINE VED AT SKRIVE FØLGENDE:

Call Time1

DERNÆST SLUKKER DU FOR DIN PIL IGEN OG SKRIVER FØLGENDE IGEN

Call Time1
Avatar billede wolfborn Nybegynder
29. april 2005 - 16:49 #8
ups, en lille rettelse

skriv disse subrutiner:

Time1:
decfsz  delay1,1
goto time1
goto time2

Time2:
decfsz delay2,1
goto time1
return
Avatar billede frede_manden Nybegynder
29. april 2005 - 18:11 #9
Tror jeg muligivis har fundet problemet. Det er at med PIC16F57 er der en speciel måde man skal sætte RA0 - RA3 til input. Den har ikke et TRAISA register (På PIC16F84 hedder adressen jo 85h, altså TRIAS). Men der findes ikke et register som hedder TRISA eller TRISB eller for den sags skyld TRISC.
Avatar billede frede_manden Nybegynder
29. april 2005 - 18:12 #10
Hvis du evt. ville hjælpe mig ved at kigge i data bladet over den på www.microchip.com, ville jeg være taknemmelig :-)
Avatar billede wolfborn Nybegynder
29. april 2005 - 18:37 #11
udfra hvad jeg kan læse mig til skal du gøre følgende:

movlw b'11111' 
Tris porta
movlw b'00000000'
Tris portb

Tror du gør sådan, prøv engang
Avatar billede wolfborn Nybegynder
29. april 2005 - 18:57 #12
Kommandoen TRIS rykker arbejdsregisteret (W) over i F( Forward)

dvs.

Hvis:
Porta equ 05h

og du skriver

movlw b'1111'
Tris porta (flytter 1111 over på latchene på porta, som derefter er defineret til indgange)
Avatar billede frede_manden Nybegynder
29. april 2005 - 19:48 #13
Har skrevet det, men syntes ikke rigtig det virker :-(
Avatar billede wolfborn Nybegynder
29. april 2005 - 20:11 #14
jeg skal næsten selv sidde med kredsen for at få det til at fungere tror jeg....
Mit eneste råd er umiddelbart at tage en Pic16f84 kreds istedet, den virker lettere, nok også fordi det er den mest kendte
Avatar billede frede_manden Nybegynder
29. april 2005 - 23:43 #15
Har også brugt den men den har for lidt I/O Porte
Avatar billede wolfborn Nybegynder
30. april 2005 - 02:52 #16
Prøv Pic16f877 kredsen, den har ihvert fald masser at tage af, og så fungerer den på samme måde som pic16f84, hvad angår input/output assemblingen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester