Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

PIC16F877 - nejde ani blikání LED

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
paulie2907



Založen: Feb 09, 2016
Příspěvky: 28

PříspěvekZaslal: st srpen 10 2016, 11:52    Předmět: PIC16F877 - nejde ani blikání LED Citovat

Dobrý den,

po nějaké době jsem opět narazil na zcestí. Nejde mi udělat ani blikač s PIC16F877. Nejde o blikač, ale na každé desce dělám kontrolní ledku se kterou testuju všechny funkce.

Pro jistotu jsem vzal jiné IO a zkusil na kontaktním nepájivém poli a hle, stejný výsledek i s RC tak XT oscilátorem. Ledka nezabliká - myslím, že mám nějakou botu v programu, jinak si to nedokážu vyložit. Jsem C++kař, ale dělám to v Assembleru, pro mě občas nepochopitelný jazyk Rolling Eyes .

Programátor používám PRESTO a samosebou HPV programování - proběhne bez jediné chyby.

kód:
; xxxxxxxxxxxxxxxxxxxxxxxx
; x   for UNI - BOARD v 1.0     x
; x firmware for check braket x
; xxxxxxxxxxxxxxxxxxxxxxxx


LIST P=16F877
INCLUDE<P16F877.INC>
 __CONFIG _PWRTE_OFF & _WDT_OFF & _XT_OSC & _LVP_OFF

; // Inputs
#DEFINE INT_LED PORTB,5      ; Senzor cilindru 1

; // Outputs
;#DEFINE SIREN PORTB,1      ; Výstup pro sirénu (maják)

; Registry pro Časové odpočty
CISLO   equ   20h
CISLOA   equ   21h
CISLOB   equ   22h
CISLOC   equ 23h

BSF STATUS,RP0            ;Nastavení banky 1
MOVLW B'00000000'         ;Uložením hodnoty do pracovního registru W
MOVWF TRISA               ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-výstupních pinů)
MOVLW B'00000000'         ;Uložením hodnoty do pracovního registru W
MOVWF TRISB               ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-výstupních pinů)
BCF STATUS,RP0
BCF STATUS,RP1

BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Bank0
 
CLRF PORTA ; Initialize PORTA by
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
 
 
INIT
BSF INT_LED
CALL WAIT_1000
BCF INT_LED
CALL WAIT_1000
GOTO INIT


; ---------------------------------- TIMER ZONE ----------------------------------
WAIT_200   CLRF CISLO
POINT_200    INCFSZ CISLO,1
         GOTO POINT_200
         INCFSZ CISLOA,1
         GOTO POINT_200
         RETURN

WAIT_500   CALL WAIT_200
         CALL WAIT_200
         RETURN         
         
WAIT_1000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN

WAIT_2000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN
         
WAIT_3000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN
         
WAIT_4000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN
         
WAIT_5000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN
         
WAIT_10000   CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         CALL WAIT_200
         RETURN
      
END


Pozn : Kód jsem radši dal celý pro jistotu, je to takové "homemade".
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ST78



Založen: Nov 16, 2009
Příspěvky: 113

PříspěvekZaslal: st srpen 10 2016, 12:11    Předmět: Citovat

Hluboce jsem to nestudoval, ale před hlavní smyčkou je přepnuto na jinou banku a už se to nevrátilo zpět...
Zkus si prověřit Banky Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: st srpen 10 2016, 14:13    Předmět: Citovat

Rád by som videl preklad (listing) xxxx.lst toho xxxx.asm

Možno používaš prekladač, ktorý nepotrebuje aspoň jednu medzeru pred inštrukciou. Moje všetky bežné prekladače text na začiatku riadku považujú za návestie.
edit:
Pozná to aj tak zapísané....
V tom bankovaní bude pes.
kód:
Warning[203]: Found opcode in column 1. (BSF)
0000   1683           00023 BSF STATUS,RP0            ;Nastavení banky 1
Warning[203]: Found opcode in column 1. (MOVLW)
0001   3000           00024 MOVLW B'00000000'         ;Uložením hodnoty do pracovního registru W
Warning[203]: Found opcode in column 1. (MOVWF)
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0002   0085           00025 MOVWF TRISA               ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-v
                            ýstupních pinů)
Warning[203]: Found opcode in column 1. (MOVLW)
0003   3000           00026 MOVLW B'00000000'         ;Uložením hodnoty do pracovního registru W
Warning[203]: Found opcode in column 1. (MOVWF)
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0004   0086           00027 MOVWF TRISB               ;Přesunutí z registru W do registru TRISA (Dochází k nastavení portů vstupně-v
                            ýstupních pinů)
Warning[203]: Found opcode in column 1. (BCF)
0005   1283           00028 BCF STATUS,RP0
Warning[203]: Found opcode in column 1. (BCF)
0006   1303           00029 BCF STATUS,RP1
                      00030
MPASM  5.43                          BLIK.ASM   8-10-2016  15:23:54         PAGE  2


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

Warning[203]: Found opcode in column 1. (BCF)
0007   1283           00031 BCF STATUS, RP0 ;
Warning[203]: Found opcode in column 1. (BCF)
0008   1303           00032 BCF STATUS, RP1 ; Bank0
                      00033 
Warning[203]: Found opcode in column 1. (CLRF)
0009   0185           00034 CLRF PORTA ; Initialize PORTA by
Warning[203]: Found opcode in column 1. (BSF)
000A   1683           00035 BSF STATUS, RP0 ; Select Bank 1
Warning[203]: Found opcode in column 1. (MOVLW)
000B   3006           00036 MOVLW 0x06 ; Configure all pins
Warning[203]: Found opcode in column 1. (MOVWF)
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
000C   009F           00037 MOVWF ADCON1 ; as digital inputs
                      00038 
                      00039 
000D                  00040 INIT
Warning[203]: Found opcode in column 1. (BSF)
000D   1686           00041 BSF INT_LED
Warning[203]: Found opcode in column 1. (CALL)
000E   201B           00042 CALL WAIT_1000
Warning[203]: Found opcode in column 1. (BCF)
000F   1286           00043 BCF INT_LED
Warning[203]: Found opcode in column 1. (CALL)
0010   201B           00044 CALL WAIT_1000
Warning[203]: Found opcode in column 1. (GOTO)
0011   280D           00045 GOTO INIT
                      00046
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: st srpen 10 2016, 20:33    Předmět: Citovat

co furt mají všichni s tím assemblerem? Předpokládám, že stejný cíl lze dosáhnout C překladačem, který je zdarma.
Jinak radím maximálně zjednodušit program a vyhnout se věcem jako CALL WAIT_200 50x za sebou. Very Happy

Nedává se na začátek něco takového?
kód:

rst code  0x00                  ;Reset Vector
  pagesel Start
  goto    Start

    code                        ;Start Program
Start
  clrf   distance_reg           ;Clear register

  movlw  Tdistance1             ;Move value of Tdistance1
  movwf  distance_reg           ;into distance_reg

a instrukce musí začínat odsazené od začátku řádku?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tranzistor



Založen: Sep 23, 2012
Příspěvky: 23

PříspěvekZaslal: so srpen 13 2016, 20:46    Předmět: Citovat

Asembler je v silných rukách šikovná vec.


A pozri si register ANSEL a ANSELH v Datasheete Wink Jeho stav po resete a čo ma na starosti a hneď ti to dôjde.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2664

PříspěvekZaslal: po srpen 15 2016, 12:34    Předmět: Citovat

Tak takhle mi přeložil pokusné blikání MikroPascal (frekvence je 4MHz) :

; LST file generated by mikroListExporter - v.2.0
; Date/Time: 15.8.2016 13:23:34
;----------------------------------------------

;Address Opcode ASM
0x0000 0x2803 GOTO 3
_main:
;LedBlinking.mpas,27 :: begin
;LedBlinking.mpas,29 :: TRISA := 0; // set direction to be output
0x0003 0x1683 BSF STATUS, 5
0x0004 0x1303 BCF STATUS, 6
0x0005 0x0185 CLRF TRISA
;LedBlinking.mpas,31 :: while TRUE do
L__main2:
;LedBlinking.mpas,34 :: PortA := 0x00; // Turn OFF LEDs on PORTE
0x0006 0x1283 BCF STATUS, 5
0x0007 0x0185 CLRF PORTA
;LedBlinking.mpas,35 :: Delay_ms(1000); // 1 second delay
0x0008 0x3006 MOVLW 6
0x0009 0x00FB MOVWF R11
0x000A 0x3013 MOVLW 19
0x000B 0x00FC MOVWF R12
0x000C 0x30AD MOVLW 173
0x000D 0x00FD MOVWF R13
L__main6:
0x000E 0x0BFD DECFSZ R13, 1
0x000F 0x280E GOTO L__main6
0x0010 0x0BFC DECFSZ R12, 1
0x0011 0x280E GOTO L__main6
0x0012 0x0BFB DECFSZ R11, 1
0x0013 0x280E GOTO L__main6
0x0014 0x0000 NOP
0x0015 0x0000 NOP
;LedBlinking.mpas,37 :: PortA := 0xFF; // Turn ON LEDs on PORTE
0x0016 0x30FF MOVLW 255
0x0017 0x0085 MOVWF PORTA
;LedBlinking.mpas,38 :: Delay_ms(1000); // 1 second delay
0x0018 0x3006 MOVLW 6
0x0019 0x00FB MOVWF R11
0x001A 0x3013 MOVLW 19
0x001B 0x00FC MOVWF R12
0x001C 0x30AD MOVLW 173
0x001D 0x00FD MOVWF R13
L__main7:
0x001E 0x0BFD DECFSZ R13, 1
0x001F 0x281E GOTO L__main7
0x0020 0x0BFC DECFSZ R12, 1
0x0021 0x281E GOTO L__main7
0x0022 0x0BFB DECFSZ R11, 1
0x0023 0x281E GOTO L__main7
0x0024 0x0000 NOP
0x0025 0x0000 NOP
;LedBlinking.mpas,39 :: end; // Endless loop
0x0026 0x2806 GOTO L__main2
;LedBlinking.mpas,40 :: end.
L_end_main:
0x0027 0x2827 GOTO $+0
; end of _main
Symbol List:
//** Routines locations **
//ADDRESS SIZE PROCEDURE
//----------------------------------------------
0x0003 [37] _main
//** Variables locations **
//ADDRESS SIZE VARIABLE
//----------------------------------------------
0x0005 [1] PORTA
0x0070 [1] R0
0x0071 [1] R1
0x0072 [1] R2
0x0073 [1] R3
0x0074 [1] R4
0x0075 [1] R5
0x0076 [1] R6
0x0077 [1] R7
0x0078 [1] R8
0x0079 [1] R9
0x007A [1] R10
0x007B [1] R11
0x007C [1] R12
0x007D [1] R13
0x007E [1] R14
0x007F [1] R15
0x0085 [1] TRISA
//** Label List: **
//----------------------------------------------
L_end__main
L__main1
L__main2
L__main3
L__main4
L__main5
L__main6
L__main7
L_end_main
_main
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Habesan



Založen: Jan 12, 2009
Příspěvky: 7096
Bydliště: Plzeňsko

PříspěvekZaslal: st srpen 17 2016, 16:07    Předmět: Citovat

Ale tohle je assemblerový kód, který vznikl během překladu pascalového kódu.

To jste se ve škole neučili: "preprocesor, kompiler, assembler, linker..." ???
(Asi poslední příležitost, kdy člověk ty pojmy použije.)

_________________
Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2664

PříspěvekZaslal: st srpen 17 2016, 21:15    Předmět: Citovat

No já jsem si myslel, že zadavatel původního příspěvku chce assembler. Proto jsem použil výpis, kde má jak zdrojový kód (řádky se znakem ; na začátku), tak i přeložené příkazy MikroPascalu do assembleru (časové smyčky 1s jsou vypočítání pro krystal 4MHz).

PF
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Rako



Založen: Mar 29, 2014
Příspěvky: 40

PříspěvekZaslal: ne září 04 2016, 15:16    Předmět: Citovat

Program nefunguje hlavne preto že pred vstupom do hlavnej slučky MAIN je
nastavená banka1 ale pracovné registre CISLO a CISLOA su v banke 0.
Takže treba nakoniec inicializácie vložiť príkaz BANKSEL CISLO.
Ďalej chýba vstupný bod programu. To vo finále môže byť chyba ale nemusí,
v závislosti od prekladača. Doplnil by som teda následujúcu sekvenciu príkazov.

ORG 0H
GOTO INIT
ORG 4H
NOP


Opravený, plne funkčný program v prílohe.



Blikač.asm
 Komentář:
Zdrojový súbor.

Stáhnout
 Soubor:  Blikač.asm
 Velikost:  4.96 kB
 Staženo:  138 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.18 sekund