<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Prostý text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Text bubliny Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.ProsttextChar
        {mso-style-name:"Prostý text Char";
        mso-style-priority:99;
        mso-style-link:"Prostý text";
        font-family:Consolas;}
span.TextbublinyChar
        {mso-style-name:"Text bubliny Char";
        mso-style-priority:99;
        mso-style-link:"Text bubliny";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=CS link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText>Jenom pro zajímavost, jak to vypadá na simulátoru<o:p></o:p></p><p class=MsoPlainText><img width=1451 height=295 id="obrázek_x0020_1" src="cid:image003.jpg@01DA860A.001FCD10"><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Jelo to asi 10minut v kuse bez bugu, pak jsem to pauznul, vymazal analyzér, aby na něm něco bylo vidět, pak dal breakpoin na retfie a držel zmáčknutou F5. Tohle z toho vylezlo.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Jindrich Fucik<br>Sent: Wednesday, April 3, 2024 6:18 PM<br>To: hw-list@list.hw.cz<br>Subject: Re: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>oops, ten komentář tam zůstal i s definicí SAF. Omlouvám se, správně jen<o:p></o:p></p><p class=MsoPlainText>takto:<o:p></o:p></p><p class=MsoPlainText>-Wa,-a -Wl,-pisrVec=4h<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Celej projekt jsem poslal úschovnou, tady třeba lst z optimálního překladu<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Dne 03.04.2024 v 16:38 Miroslav Draxal napsal(a):<o:p></o:p></p><p class=MsoPlainText>> Aha, tak jsem to do Additional options: hodil a ono to zase na mě <o:p></o:p></p><p class=MsoPlainText>> vyplivlo při kompilaci:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Kde zase dělám chybu?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make  -f nbproject/Makefile-default.mk <o:p></o:p></p><p class=MsoPlainText>> dist/default/debug/pokus3.X.debug.hex<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[2]: Entering directory 'C:/pokus3/pokus3.X'<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> "C:\Program Files\Microchip\xc8\v2.46\pic-as\bin\pic-as.exe" <o:p></o:p></p><p class=MsoPlainText>> -mcpu=PIC16F18015 -c \<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -o build/default/debug/_ext/539236051/newAsmTemplate.o \<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> C:/pokus3/pokus3.X/newAsmTemplate.s \<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -D__DEBUG=1   -mdfp="C:/Program<o:p></o:p></p><p class=MsoPlainText>> Files/Microchip/MPLABX/v6.20/packs/Microchip/PIC16F1xxxx_DFP/1.24.387/<o:p></o:p></p><p class=MsoPlainText>> xc8"  <o:p></o:p></p><p class=MsoPlainText>> -msummary=+mem,-psect,-class,-hex,-file,-sha1,-sha256,-xml,-xmlfull <o:p></o:p></p><p class=MsoPlainText>> -fmax-errors=20 -mwarn=0 -xassembler-with-cpp   -Wa,-a -Wl,-pisrVec=4h <o:p></o:p></p><p class=MsoPlainText>> -Wl,-pSAFVec=1F80h<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[2]: Leaving directory 'C:/pokus3/pokus3.X'<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[2]: Entering directory 'C:/pokus3/pokus3.X'<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> "C:\Program Files\Microchip\xc8\v2.46\pic-as\bin\pic-as.exe" <o:p></o:p></p><p class=MsoPlainText>> -mcpu=PIC16F18015 build/default/debug/_ext/539236051/newAsmTemplate.o <o:p></o:p></p><p class=MsoPlainText>> \<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -o dist/default/debug/pokus3.X.debug.hex \<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -D__DEBUG=1   -mdfp="C:/Program<o:p></o:p></p><p class=MsoPlainText>> Files/Microchip/MPLABX/v6.20/packs/Microchip/PIC16F1xxxx_DFP/1.24.387/<o:p></o:p></p><p class=MsoPlainText>> xc8"  <o:p></o:p></p><p class=MsoPlainText>> -msummary=+mem,-psect,-class,-hex,-file,-sha1,-sha256,-xml,-xmlfull <o:p></o:p></p><p class=MsoPlainText>> -mcallgraph=std -Wl,-Map=dist/default/debug/pokus3.X.debug.map <o:p></o:p></p><p class=MsoPlainText>> -mno-download-hex   -Wa,-a -Wl,-pisrVec=4h -Wl,-pSAFVec=1F80h<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ::: error: (450) psect "SAFVec" was never defined, or is local<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> (908) exit status = 1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[2]: Leaving directory 'C:/pokus3/pokus3.X'<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[2]: *** [nbproject/Makefile-default.mk:116: <o:p></o:p></p><p class=MsoPlainText>> dist/default/debug/pokus3.X.debug.hex] Error 1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make[1]: *** [nbproject/Makefile-default.mk:85: .build-conf] Error 2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> BUILD FAILED (exit value 2, total time: 1s)<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> *From:*Hw-list [mailto:hw-list-bounces@list.hw.cz] *On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> *Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Wednesday, April 3, 2024 4:01 PM<o:p></o:p></p><p class=MsoPlainText>> *To:* HW-news<o:p></o:p></p><p class=MsoPlainText>> *Subject:* RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ne ne, tam je důležitý ten komentář na začátku:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ; Add this line in the project properties box, pic-as Global Options -> Additional options:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ;   -Wa,-a -Wl,-pisrVec=4h -Wl,-pSAFVec=1F80h<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> V definici projektu je potřeba přidat linker option, že isrVec=4h <o:p></o:p></p><p class=MsoPlainText>> Jinak to linker nacpe kam se mu hodí. A kdykoli se neživý předmět může <o:p></o:p></p><p class=MsoPlainText>> rozhodnout, tak se rozhodne pro nejméně užitečnou variantu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> To .c vyzkouším večer doma<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ---------- Původní e-mail ----------<o:p></o:p></p><p class=MsoPlainText>> Od: Miroslav Draxal <evik@volny.cz><o:p></o:p></p><p class=MsoPlainText>> Komu: 'HW-news' <hw-list@list.hw.cz><o:p></o:p></p><p class=MsoPlainText>> Datum: 3. 4. 2024 15:30:18<o:p></o:p></p><p class=MsoPlainText>> Předmět: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Ono není divu, že to nechodí.  Koukněte, jak to přeloží, pokud máte<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> #define KillMe    1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> #define KillAll     1 V JAKÉKOLI kombinaci<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Interrupt vektor začíná na adresa 0x004 a on to v tomhle překladu ignoruje.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Takže než chyba křemíku chyba překladače.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> To PSECT….Je pro mě zlo, jsem rád, že jsem se ho zbavil.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    87:    ;<o:p></o:p></p><p class=MsoPlainText>> --------------- Program Section --------------------------------------<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    88:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    89:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    90:    PSECT <o:p></o:p></p><p class=MsoPlainText>> resetVec,class=CODE,delta=2,abs<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    91:    resetVec:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    92:    PowerUp:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    93:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0000  018B     CLRF INTCON                        94:      clrf     <o:p></o:p></p><p class=MsoPlainText>> INTCON               ; Disable all interrupts<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0001  018A     CLRF PCLATH                        95:      clrf     <o:p></o:p></p><p class=MsoPlainText>> PCLATH               ; Tables on page 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    96:      ;clrf     <o:p></o:p></p><p class=MsoPlainText>> STATUS               ; reset flags<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    97:      goto     <o:p></o:p></p><p class=MsoPlainText>> INIT<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    98:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    99:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    100:   ;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    101:   <o:p></o:p></p><p class=MsoPlainText>> ;*********************************************************************<o:p></o:p></p><p class=MsoPlainText>> *************************************************<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    102:   ; ISR <o:p></o:p></p><p class=MsoPlainText>> (Interrupt Service Routines)<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    103:   <o:p></o:p></p><p class=MsoPlainText>> ;*********************************************************************<o:p></o:p></p><p class=MsoPlainText>> *************************************************<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    104:   ;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    105:   PSECT<o:p></o:p></p><p class=MsoPlainText>> isrVec,class=CODE,delta=2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    106:   isr:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    107:   Interrupt:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    108:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    109:          <o:p></o:p></p><p class=MsoPlainText>> ;Transmit next bit<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0002  0140     MOVLB 0x0                          110:     movlb 0                <o:p></o:p></p><p class=MsoPlainText>> ; BANK 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0003  1018     BCF LATA, 0x0                      111:     bcf LATA,0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0004  0000     NOP                                112:     nop<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0005  1418     BSF LATA, 0x0                      113:     bsf LATA,0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0006  0141     MOVLB 0x1                          114:     <o:p></o:p></p><p class=MsoPlainText>> BANKSEL           PIR4 ; BANK 14<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0007  128C     BCF PIR0, 0x5                      115:     bcf TMR0IF     <o:p></o:p></p><p class=MsoPlainText>> ; clear timer overflow?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 0008  0009     RETFIE                             116:     retfie<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>                                                    117:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> *From:*Hw-list [mailto:hw-list-bounces@list.hw.cz] *On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> *Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Wednesday, April 3, 2024 3:00 PM<o:p></o:p></p><p class=MsoPlainText>> *To:* HW-news<o:p></o:p></p><p class=MsoPlainText>> *Subject:* RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Ten můj .S - od slova aSsembler<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> To linkování není úplně přesně. Tím "PSECT resetVec" předepisuji, že <o:p></o:p></p><p class=MsoPlainText>> se tohle složí na reset vector, což je pro tenhle procesor adresa <o:p></o:p></p><p class=MsoPlainText>> 0000. Ten program v zásadě nepřipouští dinamické linkování.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ---------- Původní e-mail ----------<o:p></o:p></p><p class=MsoPlainText>> Od: Miroslav Draxal <evik@volny.cz><o:p></o:p></p><p class=MsoPlainText>> Komu: 'HW-news' <hw-list@list.hw.cz><o:p></o:p></p><p class=MsoPlainText>> Datum: 3. 4. 2024 14:57:25<o:p></o:p></p><p class=MsoPlainText>> Předmět: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Tak teď jsem přeložil ten váš .c<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Koukám na to<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Míra<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> *From:*Hw-list [mailto:hw-list-bounces@list.hw.cz] *On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> *Miroslav Draxal<o:p></o:p></p><p class=MsoPlainText>> *Sent:* Wednesday, April 3, 2024 2:43 PM<o:p></o:p></p><p class=MsoPlainText>> *To:* 'HW-news'<o:p></o:p></p><p class=MsoPlainText>> *Subject:* RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Je skutečně škoda, že jste neposlal ten projekt, ušetřilo by to dost <o:p></o:p></p><p class=MsoPlainText>> času. Prostě jsem neviděl jak to přeložilo, do jakých paměťových lokací.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Překopal jsem si to do C., protože jsem to proste v asm. Nepřeložil.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Podle všeho je problém v<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> PSECT resetVec,class=CODE,delta=2,abs<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> resetVec:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> PowerUp:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>        clrf  INTCON                  ; Disable all interrupts<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> TADY  clrf  PCLATH                  ; Tables on page 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>        ;clrf STATUS                  ; reset flags<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>        goto  INIT<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> po přeložení nevíme od jaké adresy startuje program, to je věc <o:p></o:p></p><p class=MsoPlainText>> překladače, C to přeloží od adresy 0x0807<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Pak projede komplet inicializaci a dojde k adrese 0x0821, kde je GOTO <o:p></o:p></p><p class=MsoPlainText>> 0x22, ale protože má vynulovaný PCLATH, tak místo aby skočil na adresu<o:p></o:p></p><p class=MsoPlainText>> 0x0822 tak skočí na nesmyslnou adresu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Schválně to zkuste.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Dejte vědět. Míra<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -----Original Message-----<o:p></o:p></p><p class=MsoPlainText>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> Sent: Wednesday, April 3, 2024 1:57 PM<o:p></o:p></p><p class=MsoPlainText>> To: HW-news<o:p></o:p></p><p class=MsoPlainText>> Subject: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Trochu si myslím, že přeložením to ztratí kouzlo. Spíš pošlu celý <o:p></o:p></p><p class=MsoPlainText>> projekt, nebo ukázku, jak jej mám vytvořený.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> EQU je direktiva EQUivalent. Tedy jenom říká, že když napíšu <o:p></o:p></p><p class=MsoPlainText>> TRISA_INI, tak jsem vlastně chtěl napsat 00000000B. Jak tuto hodnotu <o:p></o:p></p><p class=MsoPlainText>> použiji už se neřeší. Pokud jí přiřadím jako literál, tak zůstane literálem:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> movlw TRISA_INI ; tohle přiřadí do W literál 00000000B<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> movwf TRISA ; a tohle pak hodnotu z W do TRISA<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Ano, pokud bych použil TRISA_INI jako referenci, byl by to ukazatel do <o:p></o:p></p><p class=MsoPlainText>> paměti na pozici 0, ale tak to nedělám.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> V dokumentu "MPLAB_XC8_PIC_Assembler_Users_Guide_50002974.pdf" je <o:p></o:p></p><p class=MsoPlainText>> popis v kapitole 4.9.16. Případně poznámka v kapitole 4.6.4.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Ono jde o to, že tenhle defekt pozoruji právě na té sadě deseti <o:p></o:p></p><p class=MsoPlainText>> procesorů co mám doma. Na jiném typu se to neděje a tak mi trvalo <o:p></o:p></p><p class=MsoPlainText>> strašnou dobu to pochopit. Je to něco, co používám často a pořád to <o:p></o:p></p><p class=MsoPlainText>> funguje, tak to beru jako fakt. Čili zajímavé by bylo to vyzkoušet na <o:p></o:p></p><p class=MsoPlainText>> stejném procesoru z jiné série. Třeba na PIC16F15313 žádný problém není.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ---------- Původní e-mail ----------<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Od: Miroslav Draxal <evik@volny.cz><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Komu: 'HW-news' <hw-list@list.hw.cz><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Datum: 3. 4. 2024 11:32:56<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Předmět: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Vytvořte úplně nový projekt na C:\<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Hoďte tam ten váš kód a zkompilujte. Pokud to projede, tak to sem hoďte. <o:p></o:p></p><p class=MsoPlainText>> Bude to mít pár kB.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Tím eliminujeme nesrovnalosti v nastavení projektu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Za moment budu mít čas se na to podívat a třeba to nahrát i do jiného PICu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ALE!<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Všiml jsem si včera letmo, možná že to má nějaký důvod.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Pokud používáte<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> TRISA_INI equ 00000000B;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Tak TRISA_INI nemá hodnotu 0x00, ale přiřazujete TRISA_INI  registr v <o:p></o:p></p><p class=MsoPlainText>> nulté stránce paměti RAM s adresou 0x00<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Takže podle mě<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> #define TRISA_INI  00000000B<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Nebo<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> TRISA_INI  set d'0'<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ALE: pokud něco dělám v asm, tak jenom opravuji staré projekty z doby <o:p></o:p></p><p class=MsoPlainText>> do 2010 a to ještě v MPLAB8.92, možná se pro mplabx něco změnilo.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Míra<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Sent: Wednesday, April 3, 2024 10:11 AM<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> To: HW-news<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Subject: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> používám mplabx verze tuším 6.5. V zásadě jsem nic neměnil proti <o:p></o:p></p><p class=MsoPlainText>> defaultu, vlastně jen tu definici vektorů, která je napsaná v prvním <o:p></o:p></p><p class=MsoPlainText>> řádku kódu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Co píše pic-as?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Vlastné - není problém se jménem souboru, které obsahuje mezery a <o:p></o:p></p><p class=MsoPlainText>> mínusko? Pravda je, že v editoru to mám s romantickým náznem default.s<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ---------- Původní e-mail ----------<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Od: Miroslav Draxal <evik@volny.cz><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Komu: 'HW-news' <hw-list@list.hw.cz><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Datum: 2. 4. 2024 21:16:30<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Předmět: RE: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Nakopněte mě. V jakém editoru to píšete (MPLABx to defect - config.s<o:p></o:p></p><p class=MsoPlainText>> otevře) ale nedokážu to asemblovat (pic-as to nějak nebere)<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Míra<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> -----Original Message-----<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of <o:p></o:p></p><p class=MsoPlainText>> Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Sent: Tuesday, April 2, 2024 7:11 PM<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> To: hw-list@list.hw.cz<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Subject: Re: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Bezva, tak jsem to dotáhl téměř k dokonalosti. Vytvořil jsem kód, <o:p></o:p></p><p class=MsoPlainText>> který<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> je složený převážně z instrukcí "nop" a "#ifdef". Na začátku jsou pak<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> dva #define, které umožňují si vybrat, co se stane. Možnosti jsou:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 1) program funguje jak má.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 2) program zamrzne zhruba na 2ms před každým přerušením<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> 3) program zamrzne úplně<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Ke stažení jako zip i se záznamem z analyzátoru:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> https://www.uschovna.cz/zasilka/OX4JT76LTH6MCBD2-XU7<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Jdu se zeptat na support, co s tím.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Dne 01.04.2024 v 22:02 Jindrich Fucik napsal(a):<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > Bezva, tohle funguje jak by se dalo očekávat.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > Jdu hledat, co tohle udělá jinak než já.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > V příloze pro porovnání výstup ze Saleae. Je hodně podobný tomu ze<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > simulátoru (ne zcela stejný).<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  ><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > Jdu hledat, co je tady nastaveno jinak.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  ><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  ><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  > Dne 01.04.2024 v 21:08 Miroslav Draxal napsal(a):<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Zkuste tohle, ověřeno v MPLABx simulátoru a výstup taktéž MPLABx <o:p></o:p></p><p class=MsoPlainText>> Logic<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Analyzer (viz příloha).<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #include <xc.h><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #include <pic16f18015.h><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // Configuration bits: selected in the GUI<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //CONFIG1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config FEXTOSC = ECH // External Oscillator Selection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bits->EC (external clock) above 16 MHz<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config RSTOSC = HFINTOSC_32MHz // Reset Oscillator<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Selection bits->HFINTOSC (32 MHz)<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config CLKOUTEN = OFF // Clock Out Enable bit->CLKOUT<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> function is disabled; i/o or oscillator function on OSC2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config VDDAR = HI // VDD Range Analog Calibration <o:p></o:p></p><p class=MsoPlainText>> Selection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->Internal analog systems are calibrated for operation between <o:p></o:p></p><p class=MsoPlainText>> VDD<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> = 2.3 - 5.5V<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //CONFIG2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config MCLRE = EXTMCLR // Master Clear Enable bit->If LVP <o:p></o:p></p><p class=MsoPlainText>> =<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> 0, MCLR pin is MCLR; If LVP = 1, RA3 pin function is MCLR<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config PWRTS = PWRT_OFF // Power-up Timer Selection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bits->PWRT is disabled<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WDTE = OFF // WDT Operating Mode bits->WDT <o:p></o:p></p><p class=MsoPlainText>> disabled;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> SEN is ignored<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config BOREN = ON // Brown-out Reset Enable <o:p></o:p></p><p class=MsoPlainText>> bits->Brown-out<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Reset enabled, SBOREN bit is ignored<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config DACAUTOEN = OFF // DAC Buffer Automatic Range <o:p></o:p></p><p class=MsoPlainText>> Select<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Enable bit->DAC Buffer reference range is determined by the REFRNG <o:p></o:p></p><p class=MsoPlainText>> bit<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config BORV = LO // Brown-out Reset Voltage Selection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->Brown-out Reset Voltage (VBOR) set to 1.9V<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config ZCD = OFF // ZCD Disable bit->ZCD module is<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> disabled; ZCD can be enabled by setting the ZCDSEN bit of ZCDCON<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config PPS1WAY = ON // PPSLOCKED One-Way Set Enable<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->The PPSLOCKED bit can be cleared and set only once after an<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> unlocking sequence is executed; once PPSLOCKED is set, all future<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> changes to PPS registers are prevented<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config STVREN = ON // Stack Overflow/Underflow Reset <o:p></o:p></p><p class=MsoPlainText>> Enable<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->Stack Overflow or Underflow will cause a reset<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //CONFIG4<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config BBSIZE = BB512 // Boot Block Size Selection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bits->512 words boot block size<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config BBEN = OFF // Boot Block Enable bit->Boot Block<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> disabled<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config SAFEN = OFF // Storage Area Flash (SAF) Enable<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->SAF disabled<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WRTAPP = OFF // Application Block Write Protection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->Application Block is NOT write protected<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WRTB = OFF // Boot Block Write Protection bit->Boot<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Block is NOT write protected<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WRTC = OFF // Configuration Register Write<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Protection bit->Configuration Register is NOT write protected<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WRTD = OFF // Data EEPROM Write Protection <o:p></o:p></p><p class=MsoPlainText>> bit->Data<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> EEPROM is NOT write-protected<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config WRTSAF = OFF // Storage Area Flash (SAF) Write<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Protection bit->SAF is NOT write protected<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config LVP = ON // Low Voltage Programming Enable bit->Low<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Voltage programming enabled. MCLR/Vpp pin function is MCLR. MCLRE<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Configuration bit is ignored<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //CONFIG5<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config CP = OFF // Program Flash Memory Code Protection<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> bit->Program Flash Memory code protection is disabled<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> #pragma config CPD = OFF // Data EEPROM Code Protection <o:p></o:p></p><p class=MsoPlainText>> bit->EEPROM<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> code protection is disabled<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> void main(void) {<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // Set the CLOCK CONTROL module to the options selected in the<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> user interface.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCCON2 = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // SOSCPWR Low power;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCCON3 = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // HFOEN disabled; MFOEN disabled; LFOEN disabled; SOSCEN<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> disabled; ADOEN disabled;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCEN = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // HFFRQ 8_MHz;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCFRQ = 0x3;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCSTAT = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // TUN undefined;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> OSCTUNE = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> // ACTEN disabled; ACTUD enabled; ACTLOCK Not locked; ACTORS In<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> range;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ACTCON = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA0 = 1;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TRISx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TRISA = 0x34;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ANSELx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ANSELA = 0x34;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> WPUx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> WPUA = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ODx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ODCONA = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> SLRCONx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> SLRCONA = 0x37;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> INLVLx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> INLVLA = 0x37;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> PPS registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> APFCON registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> /**<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> IOCx registers<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> */<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> IOCAP = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> IOCAN = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> IOCAF = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //TMR0H 119;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TMR0H = 0x77;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //TMR0L 0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TMR0L = 0x0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //T0CS FOSC/4; T0CKPS 1:1; T0ASYNC not_synchronised;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> T0CON1 = 0x50;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //Clear Interrupt flag before enabling the interrupt<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> PIR0bits.TMR0IF = 0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //Enable TMR0 interrupt.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> PIE0bits.TMR0IE = 1;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> //T0OUTPS 1:1; T0EN enabled; T016BIT 8-bit;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> T0CON0 = 0x80;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> ei();<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> do {<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA1 = 1;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> NOP();<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA1 = 0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> } while (1);<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> return;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> }<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> void __interrupt() myHighIsr(void) {<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> if (TMR0IF == 1) {<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TMR0H = 0x77;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> TMR0IF = 0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA0 = 0;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> NOP();<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> LATA0 = 1;<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> }<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> }<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> -----Original Message-----<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Sent: Monday, April 1, 2024 7:14 PM<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> To: hw-list@list.hw.cz<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Subject: Re: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Tak to jsem z toho jelen. Vzal jsem nový procesor a chová se stejně.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> V příloze je obrázek z analyzátoru.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> pochopitelně když program krokuji, tak se chová normálně. Nic<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> takového, že by přerušení skočilo někam jinam a běžel kus jiného<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> programu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >> Dne 01.04.2024 v 17:22 Jindrich Fucik napsal(a):<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> To není můj případ, start přerušení trvá tuším 3 instrukční <o:p></o:p></p><p class=MsoPlainText>> cykly,<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> procesor jede 8MHz, takže 1,5μs nebo tak něco. Program je velmi<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> primitivní, je napsaný v assembleru, abych vyloučil nějakou botu <o:p></o:p></p><p class=MsoPlainText>> z<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> jazyka.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> Nakopíruji sem podstatnou část programu. Nepodstatná nastavuje config:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> vypnutý watchdog, interní oscilátor 8MHz a tak.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> Program nedělá nic, než že v mainu bliká jedním výstupem a v <o:p></o:p></p><p class=MsoPlainText>> přerušení<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> druhým. přerušení je od časovače (v příkladu Timer 0, ale stejně <o:p></o:p></p><p class=MsoPlainText>> se<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> chová i Timer 2) a je nastaveno na 60 μs.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> Na analyzátoru je pak velice zřetelné, že proběhne 25 bliknutí <o:p></o:p></p><p class=MsoPlainText>> RA1,<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> pak je těch 350μs mezera a pak jedno bliknutí RA0 a pak hned zase <o:p></o:p></p><p class=MsoPlainText>> 25x<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> RA1 (jasně, ten kód není optimální, je to poslední troska, než <o:p></o:p></p><p class=MsoPlainText>> jsem to<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> zabalil). Podstatné je, že ta díra je větší, než vlastní běh, <o:p></o:p></p><p class=MsoPlainText>> takže je<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> to velmi zřetelné a nemá cenu zjišťovat, jestli je něco ± <o:p></o:p></p><p class=MsoPlainText>> jednotky<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> instrukčních cyklů. Zábavné je, že stejný čas dostanu i při <o:p></o:p></p><p class=MsoPlainText>> přepnutí<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> rychlosti procesoru na 4MHz (tedy díra je asi 350μs, běh se 2x<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> prodlouží).<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> -------<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> ; Timer0 management ; used for software serial Tx time ticks -<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> 60 micro sec per tick T0CON1_INI equ 0x51 ; T0CS FOSC/4; T0CKPS<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> 1:2; T0ASYNC not_synchronised; T0CON0_INI equ 0x80 ; T0OUTPS<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> 1:1; T0EN enabled; T016BIT 8-bit; TMR0H_INI equ 0x3B ; in 8 bit<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> mode the TMR0H is compared same as<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> timer2 0x3B = 59 = LN baud rate<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PIE0_INI equ 0x20 ; Enable TMR0 interrupt.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PIE1_INI equ 0x00 ; none used<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PIE2_INI equ 0x00 ; none used<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PIE3_INI equ 0x00 ; none used<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PIE4_INI equ 0x00 ; none used<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> INTC_INI equ 0xC0 ; GIE enable, PIE enable<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PSECT resetVec,class=CODE,delta=2,abs<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> resetVec:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PowerUp:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> clrf INTCON ; Disable all interrupts<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> clrf PCLATH ; Tables on page 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> ;clrf STATUS ; reset flags<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> goto START<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> PSECT isrVec,class=CODE,delta=2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> isr:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> Interrupt:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> movlb 0 ; BANK 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bsf LATA,0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> nop<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bcf LATA,0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> nop<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bsf LATA,0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> BANKSEL PIR4 ; BANK 14<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bcf TMR0IF ; clear timer overflow<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> retfie<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> START:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> (...tady je miliarda přiřazení *_INI do správných registrů ...)<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> movlw INTC_INI ; GIE enable, PEIE enable<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> movwf INTCON<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> movlb 0 ; BANK 0<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> testloop:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bsf LATA,1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> nop<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> bcf LATA,1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> goto testloop<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>> Dne 01.04.2024 v 13:46 Miroslav Draxal napsal(a):<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Dobrý den,<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Pozor na to, PICi si při přerušení ukládají registry soft, ne hw.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Kolikrát ta obsluha toho uložení registrů je docela časově náročná.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Standardně se ukládá<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> STATUS<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> WREG<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> BSR<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Pokud se někde v používájí FSRx registry, a v přerušení Se <o:p></o:p></p><p class=MsoPlainText>> používají<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> také, potom se i ty ukládají<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> FSR1<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> FSR1H<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> FSR2<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> FSR2H<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> A můžou se ukládat i další. Při ukončení přerušení se zase <o:p></o:p></p><p class=MsoPlainText>> registry<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> obnovují. Tudíž je tam nějaká režie a prodleva, než se přerušení<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> dostane na příslušnou obsluhu. Takže pokud by docházelo k velmi<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> častému přerušení, může se i občas nějaké ztratit.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> A ještě jedna věc, na kterou se zapomíná.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Novější procesory umí ukládat STATUS, WREG, BSR v režimu FAST. <o:p></o:p></p><p class=MsoPlainText>> Nebudu<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> vypisovat podrobnosti, nakoukněte do *-.pdf konkrétního PICu, <o:p></o:p></p><p class=MsoPlainText>> jestli<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> umí. Ovšem pozor, pokud odlaďujete program třeba s ICDx, potom <o:p></o:p></p><p class=MsoPlainText>> tyto<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> FAST rutiny využívá ICDx. Pokud pak natvrdo pustíte program v<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> samotném PICu, tyto rutiny většinou potom používá přerušení s <o:p></o:p></p><p class=MsoPlainText>> vysokou<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> prioritou. Takže časování je následně o něco rychlejší než při <o:p></o:p></p><p class=MsoPlainText>> ladění<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> HW prostředky.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Nahoďte při jaké příležitosti se seká, jestli je to při <o:p></o:p></p><p class=MsoPlainText>> periodickém<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> přerušení (např. od TMRx), nebo něčeho externího. Třeba nás něco<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> napadne.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Míra<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> -----Original Message-----<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Jindrich Fucik<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Sent: Monday, April 1, 2024 12:09 PM<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> To: HW-news<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Subject: defektní PIC16F18015<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Ahoj,<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> občas si tu někdo hraje s těmito typy procesorů. Narazil jsem na<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> jeden defektní kus. Bohužel to byl ten, kterej jsem si odvezl na<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> velikonoce a nemám tu náhradu.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Projevuje se tak, že při vyvolání přerušení se procesor na cca <o:p></o:p></p><p class=MsoPlainText>> 350 μs<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> zasekne. jak to tak bývá, tak mi trvalo dva dny zjistit, co se <o:p></o:p></p><p class=MsoPlainText>> děje a<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> proč se nemohu dopočítat času nějaké události.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>><o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> Tak třeba se někomu tato informace bude hodit. Nebo možná někdo <o:p></o:p></p><p class=MsoPlainText>> ví o<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>>  >>>> něčem, co jsem špatně nastavil a může mi to říci.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> _______________________________________________<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> HW-list mailing list  -  sponsored by www.HW.cz<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Hw-list@list.hw.cz<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> http://list.hw.cz/mailman/listinfo/hw-list<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> _______________________________________________<o:p></o:p></p><p class=MsoPlainText>> HW-list mailing list - sponsored by www.HW.cz Hw-list@list.hw.cz <o:p></o:p></p><p class=MsoPlainText>> http://list.hw.cz/mailman/listinfo/hw-list<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> _______________________________________________<o:p></o:p></p><p class=MsoPlainText>> HW-list mailing list - sponsored by www.HW.cz Hw-list@list.hw.cz <o:p></o:p></p><p class=MsoPlainText>> http://list.hw.cz/mailman/listinfo/hw-list<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> _______________________________________________<o:p></o:p></p><p class=MsoPlainText>> HW-list mailing list  -  sponsored by www.HW.cz Hw-list@list.hw.cz <o:p></o:p></p><p class=MsoPlainText>> http://list.hw.cz/mailman/listinfo/hw-list<o:p></o:p></p></div></body></html>