Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   371 / 1210
(#) Delinsky hozzászólása Feb 17, 2013 /
 
Lehet hogy hülye kérdés, de mi a különbség az RS-232-es, vagy tán soros vezérlésű, és a DMX dimmer között?
(#) kiskata hozzászólása Feb 17, 2013 /
 
Kedves Hozzáértők!
Vref alapú ADC használatakor elegendő a +Vref lábat bekötnöm a referenciafeszültségre
és a-Vref lábat használhatom másra ha a referencia a GND hez viszonyított?
Vagy a +Vref menjen a referenciafeszültségre és a -Vref láb a GND re (kötelezően) ?
Válaszaitokat köszönöm...
(#) icserny válasza Topika hozzászólására (») Feb 17, 2013 /
 
Megszakításban ki kellene olvasni a B port állapotát (pl. dummy = PORTB; ahol dummy egy char vagy unsigned char változó) és csak utána töröld a megszakításjelző bitet. (Bővebben: Link)

A késleltetést vedd ki onnan! Ha zavaró pergés jelentkezik, inkább hardveres pergésmentesítéssel próbálkozz (lásd ezen az oldalon a 7. ábrát!).
(#) Hp41C válasza Delinsky hozzászólására (») Feb 17, 2013 /
 
Szia!
Mindkettő szabványos aszinkron soros átvitel. DMX - RS485 illetve RS232
(#) icserny válasza Hp41C hozzászólására (») Feb 17, 2013 /
 
DMX-hez inkább ezt a linket ajánlanám!
(#) kissi válasza kiskata hozzászólására (») Feb 17, 2013 / 1
 
Szia!
Használhatod másra természetesen!
Steve
(#) pilotitalia hozzászólása Feb 18, 2013 /
 
Sziasztok!
Remélem jó helyre teszem fel a kérdésemet,ha nem akkor előre is elnézést!
Szóval az a kérdésem,hogy mostanság kezdtem el foglalkozni a PIC-es témakörrel és szeretnék építeni adaptert a programozómhoz,a kérdés az az,hogy bármelyiket megépíthetem?Mármint mind a kettő megfelelően van bekötve?
Előre is köszönöm a választ és a segítséget!
A hozzászólás módosítva: Feb 18, 2013
(#) potyo válasza pilotitalia hozzászólására (») Feb 18, 2013 /
 
Meg tudod indokolni, hogy miért van az adapterre szükséged?
(#) pilotitalia válasza potyo hozzászólására (») Feb 18, 2013 /
 
Pusztán csak megkérdeztem,de tudom,hogy akár magában a kész áramkörben is lehet programozni a PIC-ket!
(#) kaqkk válasza pilotitalia hozzászólására (») Feb 18, 2013 /
 
Ez tesztelt működő adapter De olvasd el a cikket is .
A hozzászólás módosítva: Feb 18, 2013
(#) pilotitalia válasza kaqkk hozzászólására (») Feb 18, 2013 /
 
Köszönöm a segitséget nagyon frappáns megoldás!
(#) Gagyicom válasza pilotitalia hozzászólására (») Feb 18, 2013 /
 
Szeretem én is magam csinálni a dolgaimat, de van egy határa az ésszerűségnek!
Foglalat+áfát számolj rá!
Kész adapter Legrosszabb esetben is csak 3500Ft!
(#) pilotitalia válasza Gagyicom hozzászólására (») Feb 18, 2013 /
 
Megoldásnak valóban nem rossz,csak nem szoktam az eBay-ròl illetve külföldről rendelni!
(#) Gagyicom válasza pilotitalia hozzászólására (») Feb 18, 2013 /
 
Érdemes körülnézni, mert én most rendeltem éppen 1000db szigetelő gyűrűt TO-220-hoz 700Ft-ért. Itthon a negyedét sem kapom meg ennyi pénzért. De ha a szükség nagy úr, akkor az ember nem foglalkozik az árral...
A hozzászólás módosítva: Feb 18, 2013
(#) Hp41C válasza Gagyicom hozzászólására (») Feb 18, 2013 /
 
Itt csak 990 Ft...
(#) Gagyicom válasza Hp41C hozzászólására (») Feb 18, 2013 /
 
Ez jó, mert még PayPal sem kell hozzá. De ez alkalmi vétel
(#) pjg válasza Hp41C hozzászólására (») Feb 18, 2013 /
 
Hamisítvány lehet, mert a 3M sokkal drágább.
Bővebben: Link
(#) pjg válasza Gagyicom hozzászólására (») Feb 18, 2013 /
 
Lehet, hogy leesett a kamionról?
(#) Moderátor hozzászólása Feb 19, 2013
 
T. Fórumtársak!
Valaki legyen szíves, mondja már meg, hogy a TO 220-as szigetelő gyűrűnek mi a manó köze van a PIC programozáshoz!
(#) tom75 hozzászólása Feb 19, 2013 /
 
Sziasztok!

Segítséget szeretnék kérni.
Van egy assemblerbe íródott program p16f873a procira nekem p16f883-os van.
És ha nem nagy munka akkor szeretnék az eszköz bekapcsolásnál egy kis bejelentkező üzenetet megjeleníteni.
Ezt a programot szeretném átírni. Mit kell változtatnom, és utána, hogy tudom lefordítani hex file-ra.

Előre is köszönöm
(#) Gagyicom válasza (») Feb 19, 2013 /
 
Ebay-en való vásárlás előnyeire hoztam fel példának. Elnézést ha ezzel megsértettem a fórumtársakat. Javítók: Pickit2 clone 3800Ft.
(#) Hp41C válasza tom75 hozzászólására (») Feb 19, 2013 /
 
Szia!
Nem látjuk a programot vagy a linket. Az ANSEL, ANSELH és az AD kezelésében van jelentős eltérés. A RA4 a 16F88x -en nem open drain kimenet.
(#) Frankye válasza Gagyicom hozzászólására (») Feb 19, 2013 /
 
Elolvastad, mit írtam? A TO220-as szigetelő gyűrűnek mi köze a PIC programozáshoz?!
(#) Hp41C válasza Gagyicom hozzászólására (») Feb 19, 2013 /
 
Olcsó klónnak híg a leve. Rengeteg klón kerül forgalomba a Vdd állítási lehetőség és ProgrammerToGo EEProm nélkül. A leírásokban általában nem található meg, hogy pontosan milyen típusokhoz jó, hanem egy felsorolást adnak meg a ma kapható Microchip kontrollerekről köztük olyanokról, amiket az eredeti PICKit2 sem tudott sohasem programozni. A kapcsolás csak néha hozzáférhető. A legtöbb esetben is egy zákbamacska. Aztán, ha elromlik kereshető a csak kínában kapható alkatrész...
A felhozott példa más okból is sántít. Ennyi pénzért jó esetben egy PICKit2 Light -et kaphatunk, USB kábellel. A HeStore kitt egy fejlesztői kártyát is tartalmaz 16F690 kontrollerrel.
Ha jobb árat akarsz, nem kell Kínából rendelni, elég a Lurdy házig elmenni: PICKit2 (nem light, ProgrammerToGo EEProm -mal, kábellel, garanciával 8,100 +Áfa) és azonnal elvihető.
A hozzászólás módosítva: Feb 19, 2013
(#) tom75 válasza Hp41C hozzászólására (») Feb 19, 2013 /
 
itt a program

  1. ;
  2. ;       Čçěĺđčňĺëü ĺěęîńňč č ESR ýëĺęňđîëčňč÷ĺńęčő ęîíäĺíńŕňîđîâ
  3. ;                C/ESR meter
  4. ;       Ŕâňîđ      Ăčíö Îëĺă
  5. ;       Âĺđńč˙    1.0
  6. ;       Äŕňŕ        22/12/2006
  7. ;
  8. ;       Â ďđîăđŕěěĺ čńďîëüçîâŕíű ôđŕăěĺíňű ęîäŕ čçěĺđčňĺë˙ FLC
  9. ;       Ŕëĺęńŕíäđŕ Áóĺâńęîăî, ă.Ěčíńę, Áĺëŕđóńü
  10.  
  11. ;       ÍŔÇÍŔ×ĹÍČĹ ÂŰÂÎÄΠĘÎÍŇĐÎËËĹĐŔ  PIC16F873A
  12. ;***************************************************************************************
  13. ;*ÍÎĂŔ *        ČĚß     *   ÍŔÇÍŔ×ĹÍČĹ
  14. ;***************************************************************************************
  15.  
  16. ; 1    *  MCLR/Vpp         *  Ńáđîń
  17. ; 2    *  RA0/AN0          *  âűőîä ÄÓ (Ęó=330)
  18. ; 3    *  RA1/AN1          *  âűőîä ÄÓ (Ęó=33)
  19. ; 4    *  RA2/AN2/Vref-    *  Ęí. Set coeff./Set "0"
  20. ; 5    *  RA3/AN3/Vref+    *
  21. ; 6    *  RA4/T0CKI        *  Ęí.+/Test
  22. ; 7    *  RA5/AN4/SS       *  Ęí.-
  23. ; 8    *  Vss              * GND
  24. ; 9    *  OSC1/CLKIN       * Ęâŕđö 20 ĚĂö
  25. ; 10   *  OSC2/CLKOUT      * Ęâŕđö 20 ĚĂö
  26. ; 11   *  RC0/T1OSO/T1CKI  * Çŕđ˙ä Ńő, I=10mA
  27. ; 12   *  RC1/T1OSI/CCP2   * Đŕçđ˙ä Ńő
  28. ; 13   *  RC2/CCP1         * Ęîěďŕđŕňîđ âĺđőíĺăî óđîâí˙ çŕđ˙äęč Ńő
  29. ; 14   *  RC3/SCK/SCL      * âő."-" íŕ çĺěëţ
  30.  
  31. ; 15   *  RC4/SDI/SDA      * âő."+" íŕ Ńő
  32. ; 16   *  RC5/SDO          * âő."-" íŕ Ńő
  33. ; 17   *  RC6/TX/CK        * Ęîěďŕđŕňîđ íčćíĺăî óđîâí˙ çŕđ˙äęč Ńő
  34. ; 18   *  RC7/RX/DT        *
  35. ; 19   *  Vss              * +5V
  36. ; 20   *  Vdd              * GND
  37. ; 21   *  RB0/INT          * LCD_D4
  38. ; 22   *  RB1              * LCD_D5
  39. ; 23   *  RB2              * LCD_D6
  40. ; 24   *  RB3/PGM          * LCD_D7
  41. ; 25   *  RB4              * LCD_R/S
  42. ; 26   *  RB5              * LCD_E
  43. ; 27   *  RB6/PGC          *
  44. ; 28   *  RB7/PGD          *
  45.  
  46. ;****************************************************************************************
  47.  
  48. Port_A_Config   equ 0xFF
  49. ; Port A bit equates
  50. Kn_Set                  equ     2
  51. Kn_Plus                 equ 4
  52. Kn_Minus                equ 5
  53.  
  54. Port_B_Config   equ b'11000000'
  55.  
  56. Port_C_Config   equ b'11000100'
  57. ; Port C bit equates
  58. Cap_Charge      equ 0
  59. Cap_Discharge   equ 1
  60. Comp_Up                 equ 2
  61. In_N_Gnd                equ 3
  62. In_P_Cx                 equ 4
  63. In_N_Cx                 equ 5
  64. Comp_Low                equ 6
  65.  
  66. ESR_ready               equ     b'00110011' ;âęë. đŕçđ˙ä, "+" č "-" ÄÓ íŕ Ńő
  67. ESR_start               equ b'00110000' ;âęë. çŕđ˙ä, "+" č "-" ÄÓ íŕ Ńő
  68. Cap_ready               equ b'00011011' ;âęë. đŕçä˙ä, "-" ÄÓ íŕ çĺěëţ, "+" íŕ Ńő
  69. Cap_start               equ     b'00011000'     ;âęë. çŕđ˙ä, "-" ÄÓ íŕ çĺěëţ, "+" íŕ Ńő
  70. Cap_start2              equ     b'00110000'     ;âęë. çŕđ˙ä, "-" ÄÓ íŕ Cx, "+" íŕ Ńő
  71.  
  72. Max_Count               equ     .70     ;ěŕęńčěŕëüíîĺ ÷čńëî (1 áŕéň, íĺ áîëĺĺ 256) ďĺđĺďîëíĺíčé TMR0 ďđč ń÷ĺňĺ
  73.                                                 ;řŕă ń÷ĺňŕ - 0.2 ěęń, 65536*0.2=13107.2 ěęń - îäíî ďĺđĺďîëíĺíčĺ
  74.                                                 ;čëč ďđč I=10mA 15 îňń÷ĺňîâ/ěęÔ 65536/15=4369 ěęô - îäíî ďĺđĺďîëíĺíčĺ
  75.                                                 ;Ďóńňü Ńő ěŕő=150000ěęÔ, 150000/4369=34
  76.                                                 ;Ó÷čňűâŕ˙ âđĺě˙ çŕđ˙äŕ äî íčćíĺé ăđŕíčöű ęîíńňŕíňó íŕäî óäâîčňü
  77. ;****************************************************************************************
  78.  
  79.  
  80.          list      p=PIC16F873a
  81.      #include  P16F873a.inc ;   ; 20.000 MHz
  82.         __CONFIG _CP_OFF & _BODEN_OFF & _HS_OSC & _WRT_OFF & _WDT_OFF & _PWRTE_ON & _DEBUG_OFF & _CPD_OFF & _LVP_OFF
  83.  
  84. ;       #define _BAT    PORTA,1         ; 0- low bat
  85.  
  86.         #define _RS         PORTB,4
  87.         #define _E          PORTB,5
  88.  
  89.  
  90.         CBLOCK 0x35 ;0x20-0x34 for FLOATING POINT LIBRARY
  91.         ;       Áëîęč äŕííűő
  92.         W_TEMP          ;ńîőđŕíĺíčĺ ęîíňĺęńňŕ ďđč ďđĺđűâŕíč˙ő
  93.         STATUS_TEMP
  94.         PCLATH_TEMP
  95.        
  96.  
  97.         Dly0  ;Stores 3 bytes of data for the delay count
  98.         Dly1  ;Dly0 is the least significant byte
  99.         Dly2  ;while Dly3 is the most significant byte
  100.  
  101. ;       Temp
  102.         Temp1
  103.         Temp2
  104.         Temp3
  105.         Temp4
  106.  
  107.         Count1
  108.         Count2
  109.  
  110.         T0
  111.         T1
  112.  
  113.         ;       Áëîęč äŕííűő
  114.         T2      ; Ńňŕđřčé áŕéň
  115.         T3
  116.         T4
  117.         T5      ; Ěëŕäřčé áŕéň
  118.  
  119.         AX      ; Ńňŕđřčé áŕéň
  120.         A0
  121.         A1
  122.         A2      ; Ěëŕäřčé áŕéň
  123.  
  124.         A3
  125.         A4
  126.         A5
  127.  
  128.         BCD0    ; Ěëŕäřčé áŕéň
  129.         BCD1
  130.         BCD2
  131.         BCD3
  132.         BCD4    ; Ńňŕđřčé áŕéň
  133.        
  134.         U330_L  ;Íŕďđ˙ćĺíčĺ ń âűőîäŕ ÄÓ, Ęó=330, ěëŕäřčé áŕéň
  135.         U330_H  ;Íŕďđ˙ćĺíčĺ ń âűőîäŕ ÄÓ, Ęó=330, ńňŕđřčé áŕéň
  136.         U33_L   ;Íŕďđ˙ćĺíčĺ ń âűőîäŕ ÄÓ, Ęó=33, ěëŕäřčé áŕéň
  137.         U33_H   ;Íŕďđ˙ćĺíčĺ ń âűőîäŕ ÄÓ, Ęó=33, ńňŕđřčé áŕéň
  138.        
  139.         TMR1_Count      ;Ń÷ĺň÷čę ďĺđĺďîëíĺíčé TMR1
  140.         TMR0_Count      ;Ń÷ĺň÷čę ďĺđĺďîëíĺíčé TMR0
  141.         Flags
  142.         EE_ADR ;âńďîěîăŕňĺëüíŕ˙ ˙÷ĺéęŕ äë˙ đŕáîňű ń EEPROM
  143.         EE_DATA
  144.         NZ      ;÷čńëî çíŕ÷ŕůčő đŕçđ˙äîâ ďđč âűâîäĺ íŕ číäčęŕňîđ
  145.         NC      ;íîěĺđ ęîíńňŕíňű
  146.         Const_ADR ;ŕäđĺń ęîíńňŕíňű â EEPROM
  147.         ENDC
  148.        
  149.         CBLOCK 0xB5
  150.         W_TEMP1         ;ńîőđŕíĺíčĺ ęîíňĺęńňŕ ďđč ďđĺđűâŕíč˙ő
  151.         ENDC
  152.        
  153. ;=========================
  154. ;       ĚŔĘĐÎŃŰ
  155. ;=========================
  156. bank0   macro
  157.             bcf STATUS, RP0
  158.         endm
  159.        
  160. bank1   macro
  161.             bsf STATUS, RP0
  162.         endm   
  163.  
  164. Dly24 MACRO DLY
  165. ;Take the delay value argument from the macro, precalculate
  166. ;the required 3 RAM values and load the The RAM values Dly2,Dly1
  167. ;and Dly0.
  168.         banksel Dly0
  169.         movlw   DLY & H'FF'
  170.         movwf   Dly0
  171.         movlw   DLY >>D'08' & H'FF'
  172.         movwf   Dly1
  173.         movlw   DLY >>D'16' & H'FF'
  174.         movwf   Dly2
  175. ;Bytes are shifted and anded by the assembler to make user
  176. ;calculations easier.
  177.         endm
  178.        
  179. ;==========================
  180.        
  181.         ORG             0x2100          ; Îáëŕńňü EEPROM
  182. ;               Äŕííűĺ                    ; Ŕäđĺń    â EEPROM
  183.  
  184. ; ęîđđĺęňčđóţůčĺ ęîýôôčöčĺíňű äë˙:
  185. USR_1           DE      0x00, 0x00, 0x03, 0xE8  ; 1 - ďđĺäĺëŕ 1 Îě
  186. USR_10          DE      0x00, 0x00, 0x03, 0xE8  ; 1 - ďđĺäĺëŕ 10 Îě
  187. USR_Cx          DE      0x00, 0x00, 0x03, 0xE8  ; 1 - čçěĺđĺíč˙ ĺěęîńňč
  188.  
  189. ;K_ESR_1                DE      0x7F, 0x00, 0x00, 0x00 ; 1 - ďđĺäĺëŕ 1 Îě
  190. ;K_ESR_10       DE      0x7F, 0x00, 0x00, 0x00 ; 1 - ďđĺäĺëŕ 10 Îě
  191. ;K_Cx           DE      0x7F, 0x00, 0x00, 0x00 ; 1 - čçěĺđĺíč˙ ĺěęîńňč
  192.  
  193. ;numbers in FLOATING POINT LIBRARY format
  194. U0_ESR_1        DE      0x85, 0x16, 0x00, 0x00 ; 75=85160000 - "0" íŕ ďđĺäĺëĺ 1 Îě
  195. U0_ESR_10       DE      0x81, 0x60, 0x00, 0x00 ;  7=81600000 - "0" íŕ ďđĺäĺëĺ 10 Îě
  196.  
  197. ; ěíîćčňĺëč äë˙ đŕń÷ĺňîâ:
  198. M_ESR_1         DE      0x75, 0x40, 0x30, 0x0C ; 1/682=7540300C
  199. M_ESR_10        DE      0x78, 0x74, 0x89, 0x8D ; 1/67=7874898D
  200. M_Cx            DE      0x74, 0x2E, 0xC3, 0x3E ; 1/(15*100)=742EC33E
  201. sub_Cx          DE      0x80, 0x40, 0x00, 0x00 ; 3=80400000 - âű÷čňŕĺňń˙ čç ďîęŕçŕíčé TMR1
  202.  
  203. ;==========================
  204.                 org     0x700 ; ďîńäĺëíčĺ 256 áŕéň 1-é ńňđŕíčöű ďŕě˙ňč ďđîăđŕěě
  205. Table   addwf   PCL,F
  206. omega   dt      b'00000000'     ;çíŕę îěĺăŕ
  207.                 dt      b'00001110'
  208.                 dt      b'00010001'
  209.                 dt      b'00010001'
  210.                 dt      b'00010001'
  211.                 dt      b'00001010'
  212.                 dt      b'00011011'
  213.                 dt      b'00000000'
  214.                
  215. mu              dt      b'00000000'
  216.                 dt      b'00000000'
  217.                 dt      b'00010010'
  218.                 dt      b'00010010'
  219.                 dt      b'00010010'
  220.                 dt      b'00011110'
  221.                 dt      b'00010001'
  222.                 dt      b'00010000'
  223. _Const  dt      "Coeff. for",0
  224. _ESR    dt      "ESR",0
  225. _Cx             dt      " Cx ",0
  226. _Time_out       dt      "Cx ---",0
  227. _1_ohm  dt      " 1 ",1,0
  228. _10_ohm dt      " 10 ",1,0
  229. _tst_1  dt      "1",1,"=",0
  230. _tst_10 dt      " 10",1,"=",0
  231. _write_U0       dt      "U0 ---> EEPROM  ",0
  232. _ready  dt      "It is ready!",0
  233.                 org     0x00
  234. ;*******************************************************************************
  235. ;                            ÍŔ×ŔËÎ  ĎĐÎĂĐŔĚĚŰ
  236. ;*******************************************************************************        
  237.                 nop                     ;for MPLAB-ICD2
  238.                 goto            init
  239. ;------------------ Interrupt ------------------
  240.                 org             0x004
  241.  
  242.                 movwf   W_TEMP          ;save W
  243.                 swapf   STATUS,W        ;swap STATUS, W
  244.                 clrf    STATUS
  245.                 movwf   STATUS_TEMP     ;save status
  246.                 movf    PCLATH,W
  247.                 movwf   PCLATH_TEMP     ;save PCLFTH
  248.                
  249.                 decfsz  TMR0_Count
  250.                 goto    restore_context
  251.                 bsf             Flags,0         ;Time Out!
  252.                 goto    stop_TMR1
  253.                
  254. restore_context
  255.                 bcf     INTCON,T0IF     ;clear interrupt flag
  256.                
  257.                 movf    PCLATH_TEMP,W
  258.                 movwf   PCLATH
  259.                 swapf   STATUS_TEMP,W   ;fetch status, reswap nibbles
  260.                 movwf   STATUS                  ;restore status
  261.                 swapf   W_TEMP,F    ;swap nibbles in preparation
  262.                 swapf   W_TEMP,W    ;for the swap restoration of w
  263.                 retfie                          ;return from interrupt
  264. ;-----------------------------------------------
  265.  
  266. init
  267.                 banksel         INTCON
  268.                 clrf            Flags
  269.                 clrf            INTCON
  270.                 clrf            PCLATH
  271.                 clrf            PORTA
  272.                 clrf            PORTB
  273.                 movlw           ESR_ready ;âęë. đŕçđ˙ä, "+" č "-" ÄÓ íŕ Ńő
  274.                 movwf           PORTC
  275.  
  276.                 banksel         TRISA
  277.                 movlw           Port_A_Config
  278.                 movwf           TRISA
  279.                 ;číčöčŕëčçŕöč˙ ŔÖĎ
  280.                 movlw           b'10000100';ďđŕâîĺ âűđŕâíčâŕíčĺ, Vdd, Vss, AN0, AN1, AN3
  281.                 movwf           ADCON1
  282.  
  283.                 movlw           Port_B_Config
  284.                 movwf           TRISB
  285.                 movlw           Port_C_Config
  286.                 movwf           TRISC
  287.  
  288. ;       Číčöčŕëčçŕöč˙ LCD â 4-ő áčňíűé đĺćčě         
  289. InitLCD
  290.         call            Delay_5_ms
  291.         call            Delay_5_ms
  292.         call            Delay_5_ms ;ďŕóçŕ 15 ěń ďîńëĺ âęë ďčňŕíč˙
  293.                 banksel         PORTB
  294.                 movlw           3
  295.                 movwf           Count1
  296.                 movwf           PORTB
  297. SetLoop
  298.         bsf             _E              ;äë˙ číčöčŕëčçŕöčč LCD 3 đŕçŕ ďîńűëŕĺňń˙ ęîěŕíäŕ 0x30
  299.                 nop
  300.                 nop
  301.                 nop
  302.                 bcf             _E
  303.                 call            Delay_5_ms
  304.                 decfsz          Count1,f
  305.                 goto            SetLoop
  306.                
  307.                 movlw           2               ; 4-x áčňíűé
  308.                 movwf           PORTB
  309.                 call            Send
  310.                 movlw           28              ; 4-ő áčňíűé, 2 ńňđîęč, 5ő7
  311.                 call            CmdLCD
  312.                 movlw           0C              ; Âęëţ÷čňü äčńďëĺé
  313.                 call            CmdLCD
  314.                 movlw           6
  315.                 call            CmdLCD
  316.                 call            Load_ZG ; Çŕăđóçčňü ńčěâîëű ěţ č îěĺăŕ
  317.         call            ClrDSP          ; Î÷čńňčňü äčńďëĺé
  318. ;--------------------------------------------------
  319.                 btfsc           PORTA, Kn_Set ;
  320.                 goto            Main
  321. ;------------ đĺćčě óńňŕíîâęč ęîíńňŕíň ------------
  322.                 goto            c_1            
  323. Const_Loop
  324.                 btfss           PORTA, Kn_Plus
  325.                 call            IncB
  326.                 btfss           PORTA, Kn_Minus
  327.                 call            DecB
  328.                 btfsc           PORTA, Kn_Set
  329.                 goto            Const_Loop
  330.  
  331.                 btfss           Flags,5 ;ôëŕă čçěĺíĺíč˙ ęîíńňŕíňű
  332.                 goto            c_3
  333.                 call            Save_Const      ;ęîíńňŕíňŕ čçěĺíčëŕńü, íŕäî ńîőđŕíčňü          
  334. c_3
  335.                 incf            NC,F
  336.                 movf            NC,W
  337.                 sublw           3       ;÷čńëî ęîíńňŕíň
  338.                 btfss           STATUS,Z
  339.                 goto            $+2
  340. c_1             clrf            NC
  341.                 bcf                     Flags,5 ;Î÷čůŕĺě ôëŕă čçěĺíĺíč˙ ęîíńňŕíňű
  342.         call            ClrDSP          ; Î÷čńňčňü äčńďëĺé
  343.                 movlw           LOW _Const
  344.                 call            Read_String
  345.                 movlw           HIGH $
  346.                 movwf           PCLATH
  347.         movf            NC,W
  348.         addwf           PCL,F ;ňŕáëč÷íűé ďĺđĺőîä
  349.         goto            const_1_ohm             ;+0
  350.         goto            const_10_ohm    ;+1
  351.         goto            const_Cx                ;+2
  352. c_2             call            ShowX
  353.         goto            Const_Loop
  354.  
  355. const_1_ohm
  356.                 movlw           LOW USR_1
  357.                 movwf           Const_ADR
  358.                 call            EEPROM_To_B
  359.                 movlw           LOW _1_ohm
  360.                 call            Read_String
  361.                 goto            c_2
  362. const_10_ohm
  363.                 movlw           LOW USR_10
  364.                 movwf           Const_ADR
  365.                 call            EEPROM_To_B
  366.                 movlw           LOW _10_ohm
  367.                 call            Read_String
  368.                 goto            c_2
  369. const_Cx               
  370.                 movlw           LOW USR_Cx
  371.                 movwf           Const_ADR
  372.                 call            EEPROM_To_B
  373.                 movlw           LOW _Cx
  374.                 call            Read_String
  375.                 goto            c_2
  376. ;------- Číčöčŕëčçŕöč˙ ěîäóë˙ ŔÖĎ ------
  377. Main
  378. ;               banksel         ADCON1
  379. ;               movlw           b'10000100';ďđŕâîĺ âűđŕâíčâŕíčĺ, Vdd, Vss, AN0, AN1, AN3
  380. ;               movwf           ADCON1
  381.  
  382. ESR_measure
  383.                 banksel         PORTC
  384.                 movlw           ESR_start ; âęë. çŕđ˙ä, "+" č "-" ÄÓ íŕ Ńő
  385.                 movwf           PORTC
  386.                
  387.                 movlw           0x4             ;Çŕäĺđćęŕ 3.6ěęń (18 öčęëîâ) äë˙ îęîí÷ŕíč˙ ďĺđĺő.ďđîöĺńńîâ - ĎÎÄÎÁĐŔŇÜ!!!
  388.                 call            Delay_go
  389.  
  390.                 bcf                     PORTC, In_P_Cx ;îňęëţ÷ŕĺě Ńçŕď îň Ńő
  391.                 nop                     ;???
  392.                 bsf                     PORTC, Cap_Charge ;âűęë. Içŕđ.
  393.  
  394.                 ;Čçěĺđ˙ĺě íŕďđ˙ćĺíčĺ ń âűőîäŕ äčô.óńčëčňĺë˙ ń Ęó=330
  395.                 banksel         ADCON0
  396.                 movlw           b'10000001' ;Fosc/32, ęŕíŕë 0, ěîäóëü ŔÖĎ âęë.
  397.                 movwf           ADCON0
  398.                 call            Delay_20_us
  399.                 bsf                     ADCON0,2        ;íŕ÷ŕňü ŕíŕëîăî-öčôđîâîĺ ďđĺîáđŕçîâŕíčĺ
  400.                 btfsc           ADCON0,2
  401.                 goto            $-1             ; ćäĺě îęîí÷ŕíč˙ ďđĺîáđŕçîâŕíč˙
  402.                 movf            ADRESH,W
  403.                 movwf           U330_H
  404.                 banksel         ADRESL
  405.                 movf            ADRESL,W
  406.                 banksel         U330_L
  407.                 movwf           U330_L
  408.                
  409.                 ;Čçěĺđ˙ĺě íŕďđ˙ćĺíčĺ ń âűőîäŕ äčô.óńčëčňĺë˙ ń Ęó=33
  410.                 banksel         ADCON0
  411.                 movlw           b'10001001' ;Fosc/32, ęŕíŕë 1, ěîäóëü ŔÖĎ âęë.
  412.                 movwf           ADCON0
  413.                 call            Delay_20_us
  414.                 bsf                     ADCON0,2        ;íŕ÷ŕňü ŕíŕëîăî-öčôđîâîĺ ďđĺîáđŕçîâŕíčĺ
  415.                 btfsc           ADCON0,2
  416.                 goto            $-1             ; ćäĺě îęîí÷ŕíč˙ ďđĺîáđŕçîâŕíč˙
  417.                 movf            ADRESH,W
  418.                 movwf           U33_H
  419.                 banksel         ADRESL
  420.                 movf            ADRESL,W
  421.                 banksel         U33_L
  422.                 movwf           U33_L
  423.  
  424. ;------------ Ĺńëč ESR>10 Îě, čçěĺđĺíčĺ ĺěęîńňč íĺ âűďîëí˙ĺě ------------
  425.                 clrf            Flags
  426.                 movlw           0x03
  427.                 subwf           U33_H,W ;ĺńëč ďîęŕçŕíč˙ ŔÖĎ>=0x300 (768)
  428.                 btfss           STATUS,Z
  429.                 goto            Cx_0    ;ďĺđĺőîä íŕ čçěĺđĺíčĺ ĺěęîńňč
  430.                 bsf                     Flags,0         ;âçâîäčě ôëŕă Time Out
  431.                 goto            Cx_3
  432. ;------------ Čçěĺđĺíčĺ ĺěęîńňč ęîíäĺíńŕňîđŕ ------------
  433. Cx_0
  434.                 movlw           Cap_ready ;âęë. đŕçä˙ä, "-" ÄÓ íŕ çĺěëţ, "+" íŕ Ńő
  435.                 movwf           PORTC
  436.                 call            TMR0_init       ;Çŕďóńęŕĺě TMR0 äë˙ ďđĺäîňâđŕůĺíč˙ çŕâčńŕíčé ďđč čçěĺđĺíčč ĺěęîńňč
  437.                
  438.                 call            Delay_200_us
  439.                 btfss           PORTC, Comp_Low ; 1 - Cx đŕçđ˙äčëń˙
  440.                 goto            $-2                             ;ćäĺě ńíîâŕ 200 ěęń
  441.                 call            Delay_200_us    ;äë˙ íŕäĺćíîńňč ĺůĺ çŕäĺđćęŕ
  442.                 call            TMR1_init
  443.  
  444.                 movlw           0x03
  445.                 subwf           U330_H,W        ;ĺńëč ďîęŕçŕíč˙ ŔÖĎ>=0x300 (768)
  446.                 btfss           STATUS,Z        ;ň.ĺ. ESR>1 Îě, ĺěęîńňü čçěĺđ˙ĺě ń ęîěďĺíńŕöčĺé ESR
  447.                 goto            Cx_1
  448.                 movlw           Cap_start2      ;âęë. çŕđ˙ä, "-" ÄÓ íŕ Cx, "+" íŕ Ńő
  449.                 movwf           PORTC
  450.                 movlw           0x4             ;Çŕäĺđćęŕ 3.6ěęń (18 öčęëîâ) äë˙ çŕđ˙äŕ Ń íŕ "-" âőîäĺ ÄÓ
  451.                 call            Delay_go
  452.                 bcf                     PORTC,In_N_Cx   ;îňęëţ÷ŕĺě "-" âőîä ÄÓ îň Ńő
  453.                 goto            Cx_2
  454. Cx_1
  455.                 movlw           Cap_start ;âęë. çŕđ˙ä, "-" ÄÓ íŕ çĺěëţ, "+" íŕ Ńő
  456.                 movwf           PORTC
  457. Cx_2           
  458.                 btfsc           PORTC, Comp_Low ; 0 - Cx çŕđ˙äčëń˙ äî íčćíĺé ăđŕíčöű
  459.                 goto            $-1
  460.                 bsf                     T1CON, TMR1ON   ; çŕďóńęŕĺě ňŕéěĺđ
  461.  
  462. tst_charge
  463.                 btfss           PORTC,Comp_Up; 0 - Cx çŕđ˙äčëń˙ äî âĺđőíĺé ăđŕíčöű
  464.                 goto            stop_TMR1
  465.                 btfsc           PIR1, TMR1IF    ; TMR1 ďĺđĺďîëíĺí?
  466.                 call            Inc_count
  467.                 goto            tst_charge
  468.  
  469. stop_TMR1
  470.                 clrf            T1CON   ;îńňŕíîâčňü TMR1
  471.                 clrf            INTCON  ;çŕďđĺůŕĺě ďđĺđűâŕíč˙
  472.                 btfsc           PIR1, TMR1IF    ;ďđîâĺđčě ďîńëĺäíčé đŕç íŕ ďĺđĺďîëíĺíčĺ ňŕéěĺđŕ
  473.                 call            Inc_count               ;áűëî ďĺđĺďîëíĺíčĺ
  474. Cx_3    movlw           Cap_ready ;âęë. đŕçä˙ä, "-" ÄÓ íŕ çĺěëţ, "+" íŕ Ńő
  475.                 movwf           PORTC
  476.  
  477. ;--------------------------------------------------------
  478. ;Âűâîäčě đĺçóëüňŕň íŕ číäčęŕňîđ
  479. ;               call            CursorHome
  480.                 call            ClrDSP
  481. ;Timeout               
  482.                 btfss           Flags,0
  483.                 goto            Disp_Cx
  484.                 movlw           LOW _Time_out
  485.                 call            Read_String
  486.                 goto            Disp_ESR
  487.  
  488. ;--------------------------------------------------------
  489.                 clrf            FPFLAGS
  490.                 bsf                     FPFLAGS, RND ; ôëŕă îęđóăëĺíč˙ ďđč đŕń÷ĺňŕő
  491. Disp_Cx
  492.                 movlw           LOW _Cx
  493.                 call            Read_String
  494.  
  495.                 clrf            AEXP
  496.                 movf            TMR1_Count,W
  497.                 movwf           AARGB0
  498.                 movf            TMR1H,W
  499.                 movwf           AARGB1
  500.                 movf            TMR1L,W
  501.                 movwf           AARGB2
  502.                
  503.                 btfsc           PORTA, Kn_Plus
  504.                 goto            Calc_Cx
  505.                 call            BCD     ;Ĺńëč íŕćŕňŕ ęíîďęŕ ďëţń, ňî ňĺńňîâűé âűâîä
  506.                 movlw           BCD4    ;ňŕéěĺđŕ áĺç îáđŕáîňęč
  507.                 call            Disp_Full
  508.                 goto            Disp_ESR
  509. Calc_Cx        
  510.                 call            FLO2424 ;Integer to float conversion
  511.                 movlw           low sub_Cx
  512.                 call            EEPROM_To_B
  513.                 call            FPS24   ;A=A-3
  514.                 movlw           low M_Cx
  515.                 call            EEPROM_To_B
  516.                 call            FPM24   ;A=A*M_Cx
  517.                 movlw           low USR_Cx
  518.                 call            X_To_B
  519.                 call            INT2424 ;Output: 24 bit 2's complement integer right
  520.                                                         ;justified in AARGB0, AARGB1, AARGB2
  521.                 clrf            AEXP
  522.                 call            BCD
  523.                 bsf                     Flags,1 ;íĺ âűâîäčňü ëčäčđóţůčĺ íóëč
  524.                 movlw           3
  525.                 movwf           NZ              ;÷čńëî çíŕ÷ŕůčő đŕçđ˙äîâ, îńňŕëüíűĺ áóäóň 0
  526.                 bsf                     Flags,3 ;âęëţ÷čňü ďđîâĺđęó çíŕ÷. đŕçđ˙äîâ ďđč âűâîäĺ
  527.                                
  528.                 movlw           BCD3
  529.                 call            DispBCD
  530.                 movlw           BCD3    ;ďîęŕçŕíč˙ óâĺëč÷ĺíű â 10 đŕç,
  531.                 call            DispBCD ;çäĺńü ńîňíč ňűń˙÷ ěęÔ        
  532.                
  533.                 movlw           BCD2    ;äĺń˙ňęč ňűń˙÷ ěęÔ
  534.                 call            DispBCD
  535.                 movlw           BCD2    ;ňűń˙÷č ěęÔ
  536.                 call            DispBCD
  537.  
  538.                 ; ĺńëč âďĺđĺäč áűëč îäíč íóëč, đŕçäĺëčňĺëü íĺ âűâîäčě
  539.                 btfsc           Flags,1
  540.                 goto            next_1
  541.                 movlw           ","             ;đŕçäĺëčňĺëü ňűń˙÷
  542.                 call            CharLCD
  543. next_1
  544.                 movlw           BCD1    ;ńîňíč ěęÔ
  545.                 call            DispBCD
  546.                 btfsc           Flags,1 ;äî ńîňĺí íĺáűëî çíŕ÷ŕůčő öčôđ,
  547.                 bsf                     Flags,2 ;áóäĺě âűâîäčňü äĺń˙ňűĺ äîëč ěęÔ
  548.                 movlw           BCD1    ;äĺń˙ňęč ěęÔ
  549.                 call            DispBCD
  550.  
  551.                 bcf                     Flags,1 ;ďđîâĺđęŕ íŕ =0 íĺ íóćíŕ, âűâîäčě âńĺ ďîäđ˙ä
  552.                 movlw           BCD0    ;ĺäčíčöű ěęÔ
  553.                 call            DispBCD
  554.                
  555.                 btfss           Flags,2 ;íóćĺí ëč âűâîä äĺń˙ňč÷íîé ňî÷ęč
  556.                 goto            next_2  ;íĺň
  557.                 bcf                     Flags,2 ;äŕ
  558.                 call            DispDot ;äĺń˙ňč÷íŕ˙ ňî÷ęŕ
  559.                 movlw           BCD0    ;äĺń˙ňűĺ ěęÔ
  560.                 call            DispBCD
  561. next_2
  562.                 call            DispSP
  563.                 movlw           2               ;ęîä ěţ
  564.                 call            CharLCD
  565.                 movlw           "F"
  566.                 call            CharLCD
  567. ;----------------------------
  568. Disp_ESR
  569.                 btfss           PORTA, Kn_Plus
  570.                 goto            tst_ESR
  571.                
  572.                 bcf                     Flags,4 ;ńáđîń ôëŕăŕ áîëüřĺ 10 Îě            
  573.                 movlw           0x03
  574.                 subwf           U330_H,W        ;ĺńëč ďîęŕçŕíč˙ ŔÖĎ>=0x300 (768)
  575.                 btfsc           STATUS,Z        ;ďđîâĺđ˙ĺě âňîđîé ęŕíŕë (10 Îě)
  576.                 goto            chk_10
  577.                
  578. ; Ęŕíŕë 1 Îě
  579.                 call            ClrA
  580.                 movf            U330_H,W ;óńčëčňĺëü Ęó=330, ďđĺäĺë 1 Îě
  581.                 movwf           AARGB0
  582.                 movf            U330_L,W
  583.                 movwf           AARGB1
  584.                 call            FLO1624 ;to 24 bit floating point
  585.                 movlw           low U0_ESR_1
  586.                 call            EEPROM_To_B
  587.                 call            FPS24   ;A=A-U0 - âű÷čňŕĺě ńěĺůĺíčĺ íóë˙
  588.                 movlw           low M_ESR_1
  589.                 call            EEPROM_To_B
  590.                 call            FPM24   ;A=A*M_ESR_1
  591.                 movlw           low USR_1
  592.                 call            X_To_B
  593.                 goto            ESR_to_LCD
  594.  
  595. chk_10
  596.                 movlw           0x03
  597.                 subwf           U33_H,W ;ĺńëč ďîęŕçŕíč˙ ŔÖĎ>=0x300 (768)
  598.                 btfsc           STATUS,Z
  599.                 bsf                     Flags,4 ;áîëüřĺ 10 Îě          
  600.  
  601. ;ęŕíŕë 10 Îě
  602.                 call            ClrA
  603.                 movf            U33_H,W ;óńčëčňĺëü Ęó=33, ďđĺäĺë 10 Îě
  604.                 movwf           AARGB0
  605.                 movf            U33_L,W
  606.                 movwf           AARGB1
  607.                 call            FLO1624 ;to 24 bit floating point
  608.                 movlw           low U0_ESR_10
  609.                 call            EEPROM_To_B
  610.                 call            FPS24   ;A=A-U0 - âű÷čňŕĺě ńěĺůĺíčĺ íóë˙
  611.                 movlw           low M_ESR_10
  612.                 call            EEPROM_To_B
  613.                 call            FPM24   ;A=A*M_ESR_10
  614.                 movlw           low USR_10
  615.                 call            X_To_B
  616.  
  617. ESR_to_LCD
  618.                 call            SecLine
  619.                 movlw           LOW _ESR
  620.                 call            Read_String
  621.                
  622.                 btfss           Flags,4 ;>10 ohm?
  623.                 goto            next_3
  624.                 movlw           ">"
  625.                 call            CharLCD
  626.                 goto            next_4
  627. next_3  call            DispSP
  628.  
  629. next_4  movlw           0x80
  630.                 andwf           AARGB0,W ;âűäĺë˙ĺě çíŕę "-"
  631.                 btfsc           STATUS,Z
  632.                 goto            next_5  ;đĺçóëüňŕň > 0
  633.                 call            ClrA    ;đĺçóëüňŕň < 0, âűâîäčě îäíč íóëč
  634.                 goto            next_6
  635. next_5  call            INT2424
  636.  
  637. next_6  bcf                     Flags,3 ;âűęëţ÷čňü ďđîâĺđęó çíŕ÷. đŕçđ˙äîâ ďđč âűâîäĺ
  638.                 bsf                     Flags,1 ;íĺ âűâîäčňü ëčäčđóţůčĺ íóëč
  639.                 clrf            AEXP
  640.                 call            BCD
  641.  
  642.                 movlw           BCD2
  643.                 call            DispBCD
  644.                 movlw           BCD2
  645.                 call            DispBCD ;äĺń˙ňęč Îě
  646.  
  647.                 bcf                     Flags,1 ;ďđîâĺđęŕ íŕ =0 íĺ íóćíŕ, âűâîäčě âńĺ ďîäđ˙ä
  648.                 movlw           BCD1    ;ĺäčíčöű Îě
  649.                 call            DispBCD
  650.                 call            DispDot
  651.                 movlw           BCD1
  652.                 call            DispBCD
  653.  
  654.                 movlw           BCD0
  655.                 call            DispBCD
  656.                 movlw           BCD0
  657.                 call            DispBCD
  658.                
  659.                 call            DispSP
  660.                 movlw           1                               ;çíŕę îě
  661.                 call            CharLCD
  662. end_disp
  663.                 banksel         PORTC
  664.                 bsf                     PORTC, Cap_Discharge ;âęë. đŕçđ˙ä Ńő
  665.  
  666.                 call            Delay_05_sec
  667.                
  668.                 banksel         PORTC
  669.                 bcf                     PORTC, Cap_Discharge ;âűęë. đŕçđ˙ä Ńő
  670.                
  671.                 goto    ESR_measure
  672.  
  673. ;Äë˙ ňĺńňčđîâŕíč˙ - âűâîä ŔÖĎ áĺç îáđŕáîňęč
  674. ;ńđŕçó 2-ő ęŕíŕëîâ (1 č 10 Îě)
  675. tst_ESR
  676.                 call            SecLine
  677.                 ;ęŕíŕë 1 Îě
  678.                 movlw           LOW _tst_1
  679.                 call            Read_String
  680.                 call            ClrA
  681.                 movf            U330_H,W ;óńčëčňĺëü Ęó=330, ďđĺäĺë 1 Îě
  682.                 movwf           AARGB1
  683.                 movf            U330_L,W
  684.                 movwf           AARGB2
  685.                 call            BCD
  686.                 movlw           BCD1
  687.                 call            Disp_Full
  688.                 ;ęŕíŕë 10 Îě
  689.                 movlw           LOW _tst_10
  690.                 call            Read_String
  691.                 call            ClrA
  692.                 movf            U33_H,W ;óńčëčňĺëü Ęó=33, ďđĺäĺë 10 Îě
  693.                 movwf           AARGB1
  694.                 movf            U33_L,W
  695.                 movwf           AARGB2
  696.                 call            BCD
  697.                 movlw           BCD1
  698.                 call            Disp_Full
  699.                 btfsc           PORTA, Kn_Set   ;ďđîâĺđęŕ ęíîďęč óńňŕíîâęč íóë˙
  700.                 goto            end_disp
  701.                 ;Ńîőđŕíĺíčĺ U0 â EEPROM ------------------------
  702.                 call            CursorHome
  703.                 movlw           LOW _write_U0
  704.                 call            Read_String
  705.                 ;U0 äë˙ l Îě
  706.                 call            ClrA
  707.                 movf            U330_H,W ;óńčëčňĺëü Ęó=330, ďđĺäĺë 1 Îě
  708.                 movwf           AARGB0
  709.                 movf            U330_L,W
  710.                 movwf           AARGB1
  711.                 call            FLO1624 ;to 24 bit floating point
  712.                 call            BEQUA
  713.                 movlw           LOW U0_ESR_1
  714.                 movwf           Const_ADR
  715.                 call            Save_Const
  716.                 ;U0 äë˙ l0 Îě
  717.                 call            ClrA
  718.                 movf            U33_H,W ;óńčëčňĺëü Ęó=33, ďđĺäĺë 10 Îě
  719.                 movwf           AARGB0
  720.                 movf            U33_L,W
  721.                 movwf           AARGB1
  722.                 call            FLO1624 ;to 24 bit floating point
  723.                 call            BEQUA
  724.                 movlw           LOW U0_ESR_10
  725.                 movwf           Const_ADR
  726.                 call            Save_Const
  727.  
  728.                 call            Delay_3_sec
  729.                 call            ClrDSP
  730.                 movlw           LOW _ready
  731.                 call            Read_String
  732.                 call            Delay_1_sec
  733.                 goto            end_disp
  734. ;------------------------- TMR1 -------------------------
  735. ;Číčöčŕëčçŕöč˙ ňŕéěĺđŕ TMR1, řŕă ń÷ĺňŕ = 0.2 ěęń
  736. TMR1_init
  737.                 clrf            TMR1L
  738.                 clrf            TMR1H
  739.                 bcf                     PIR1, TMR1IF
  740.                 movlw           b'00000000'; 1:1 Fosc/4
  741.                 movwf           T1CON
  742.                 clrf            TMR1_Count
  743.                 return
  744. ;------------------------- TMR1 -------------------------
  745. ;Óâĺëč÷čňü ń÷ĺň÷čę ďĺđĺďîëíĺíčé TMR1
  746. Inc_count
  747.                 bcf                     PIR1, TMR1IF    ;î÷čůŕĺě ôëŕă ďĺđĺďîëíĺíč˙ ňŕéěĺđŕ
  748.                 incfsz          TMR1_Count,F
  749.                 return
  750.                 bsf                     Flags,0 ;Time out
  751.                 goto            stop_TMR1;çŕ îňâĺäĺííîĺ âđĺě˙ čçěĺđĺíč˙ íĺ äîćäŕëčńü îęîí÷ŕíč˙ çŕđ˙äŕ
  752. ;------------------------- TMR0 -------------------------
  753. ;Číčöčŕëčçŕöč˙ ňŕéěĺđŕ TMR0, řŕă ń÷ĺňŕ = 0.2 ěęń
  754. TMR0_init
  755.                 movlw   Max_Count
  756.                 movwf   TMR0_Count      ;íŕ÷ŕëüíîĺ çíŕ÷ĺíčĺ ń÷ĺň÷čęŕ ďĺđĺďîëíĺíčé TMR0
  757.                 clrf    TMR0     ;clear timer
  758.                 movlw   OPTION_REG ;Work around the OPTION
  759.                 movwf   FSR             ;address OPTION_REG -> FSR
  760.                 movlw   b'00000111' ; set up timer. 1:256 presc
  761.                 movwf   INDF
  762.                
  763.                 bcf     INTCON,T0IF     ;clear tmr0 int flag
  764.                 bsf     INTCON,T0IE ;enable TMR0 int
  765.                 bsf     INTCON,GIE      ;enable global interrupts
  766.                 clrf    TMR0    ;start timer
  767.                 return
  768. ;------------------------- Delay -------------------------
  769. ;       Ďîäďđîăđŕěěű ďŕóç
  770. Delay_3_sec             ;Ďŕóçŕ 3 ńĺę
  771.                 Dly24   D'937499'   ; 3/(4/20000000)/16=937500-1=937499
  772.                 goto    DoDly24
  773.  
  774. Delay_2_sec             ;Ďŕóçŕ 2 ńĺę
  775.                 Dly24   D'624999'   ; 2/(4/20000000)/16=625000-1=624999
  776.                 goto    DoDly24
  777.  
  778. Delay_1_sec             ;Ďŕóçŕ 1 ńĺę
  779.                 Dly24   D'312499'   ; 1/(4/20000000)/16=312500-1=312499
  780.                 goto    DoDly24
  781.  
  782. Delay_05_sec            ;Ďŕóçŕ 0.5 ńĺę
  783.                 Dly24   D'156249'   ; 0.5/(4/20000000)/16=156250-1=156249
  784.                 goto    DoDly24
  785.  
  786. Delay_5_ms      ;Ďŕóçŕ 5 ěń
  787.                 Dly24   D'1562'   ; 0.005/(4/20000000)/16=1562.5=1562
  788.                 goto    DoDly24
  789.                
  790. Delay_200_us    ;Ďŕóçŕ 200 ěęń
  791.                 Dly24   D'62'   ; 0.0002/(4/20000000)/16=62.5=62
  792.                 goto    DoDly24
  793.  
  794. DoDly24         ;16 Tcy per loop
  795.                 movlw   H'FF'      ;Start with -1 in W
  796.                 addwf   Dly0,F     ;LSB decrement
  797.                 btfsc   STATUS,C   ;was the carry flag set?
  798.                 clrw               ;If so, 0 is put in W
  799.                 addwf   Dly1,F     ;Else, we continue.
  800.                 btfsc   STATUS,C
  801.                 clrw               ;0 in W
  802.                 addwf   Dly2,F
  803.                 btfsc   STATUS,C
  804.                 clrw               ;0 in W
  805.                 iorwf   Dly0,W     ;Inclusive-OR all variables
  806.                 iorwf   Dly1,W     ;together to see if we have reached
  807.                 iorwf   Dly2,W     ;0 on all of them.
  808.                 btfss   STATUS,Z   ;Test if result of Inclusive-OR's is 0
  809.                 goto    DoDly24
  810.                 return
  811.  
  812. Delay_20_us
  813.                 movlw           0x1F            ;Çŕäĺđćęŕ 20 ěęń
  814. Delay_go
  815.                 movwf           Dly0
  816.                 decfsz          Dly0,F
  817.                 goto            $-1
  818.                 nop
  819.                 nop
  820.                 return
  821.  
  822. ;---------------------- LCD ---------------------
  823. ;        Ďĺđĺâîä óęŕçŕňĺë˙  íŕ âňîđîé ńčěâîë âňîđîé ńňđîęč
  824. SecLine         movlw           0xC0
  825.  
  826. ;       Çŕăđóçęŕ ęîěŕíäű
  827. CmdLCD  movwf   Temp4
  828. ;               bcf             _RS
  829.                 swapf   Temp4, W
  830.                 andlw   0x0F
  831.                 movwf   PORTB
  832.                 bsf             _E
  833.                 nop
  834.                 nop
  835.                 nop
  836.                 bcf             _E
  837.                 movf    Temp4, W
  838.                 andlw   0x0F
  839.                 movwf   PORTB
  840.                 bsf             _E
  841.                 nop
  842.                 nop
  843.                 nop
  844.                 bcf             _E
  845. ;               clrf            PORTB
  846.                 call    Delay_200_us
  847.                 return
  848.  
  849.  
  850. ;       Ďĺđĺęîäčđîâęŕ â ASCII č âűâîä
  851. NumLCD  andlw           0x0F            ; ěŕńęŕ
  852.                 iorlw           0x30            ; ASCII
  853. ;       Âűâîä ASCII ńčěâîëŕ
  854. CharLCD movwf           Temp4
  855. SendLCD swapf           Temp4, W
  856.                 andlw           0x0F
  857.                 iorlw           b'00010000'     ; RS=1
  858.                 movwf           PORTB
  859.                 bsf             _E
  860.                 nop
  861.                 nop
  862.                 nop
  863.                 bcf             _E
  864.                 movf            Temp4, W
  865.                 andlw           0x0F
  866.                 iorlw           b'00010000'     ; RS=1
  867.                 movwf           PORTB
  868. Send    bsf             _E
  869.                 nop
  870.                 nop
  871.                 nop
  872.                 bcf             _E
  873.                 clrf            PORTB
  874.                 call            Delay_200_us
  875.                 return
  876.  
  877.  
  878.  
  879. CursorHome      movlw           0x02            ; Äčńďëĺé â čńőîäíîĺ ńîńňî˙íčĺ
  880.                         goto            LongSend
  881. ClrDSP          movlw           1               ; Î÷čńňęŕ äčńďëĺ˙
  882. LongSend        call            CmdLCD
  883.                         goto            Delay_5_ms
  884.  
  885. DispDot         movlw           "."
  886.                         goto            CharLCD
  887.  
  888. Disp0           movlw           "0"
  889.                         goto            CharLCD
  890.  
  891. DispSP          movlw           " "
  892.                         goto            CharLCD
  893.  
  894. ;-----------------------------------------------------------
  895. ;×ňĺíčĺ ńňđîęč čç ňŕáëčöű č âűâîä íŕ LCD
  896. Read_String
  897.                         movwf           Count1
  898.                         decf            Count1,F ;ęîđđĺęöč˙ íŕ÷ŕëüíîăî ńěĺůĺíč˙
  899.                         movlw           HIGH Table
  900.                         movwf           PCLATH
  901. get_next_s
  902.                         movf            Count1,W
  903.                         call            Table
  904.                         andlw           0xFF    ; ďđîâĺđęŕ íŕ ęîíĺö ńňđîęč
  905.                         btfsc           STATUS, Z
  906.                         return
  907.                         call            CharLCD
  908.                         incf            Count1,F
  909.                         goto            get_next_s
  910.  
  911. ;---------------------- Load CGRAM LCD ---------------------
  912. ;çŕăđóçčňü çíŕęîăĺíĺđŕňîđ
  913. Load_ZG
  914.                         movlw           b'01001000' ; AC in CGRAM=8
  915.                         call            CmdLCD
  916.                         movlw           HIGH Table
  917.                         movwf           PCLATH
  918.                         movlw           .16             ;2 çíŕęŕ ďî 8 áŕéň
  919.                         movwf           Count1
  920.                         movlw           LOW  omega-1
  921.                         movwf           Count2  ;ńěĺůĺíčĺ â ňŕáëčöĺ
  922.  
  923. get_s           call            Table   ;ďîëó÷čňü ńčěâîë čç ňŕáëčöű
  924.                         call            CharLCD
  925.                         incf            Count2,F
  926.                         movf            Count2,W
  927.                         decfsz          Count1,F
  928.                         goto            get_s
  929.                         return
  930. ;----------------------------------------------------------
  931. ;âűâîä čç ďĺđĺäŕííîăî â W ŕäđĺńŕ áëîęŕ BCD0...4
  932. ;íŕ číäčęŕňîđ
  933. Disp_Full
  934.                         movwf           FSR             ;ŕäđĺń ˙÷ĺéęč äë˙ âűâîäŕ íŕ LCD
  935. next_byte
  936.                         swapf           INDF,W
  937.                         call            NumLCD
  938.                         movf            INDF,W
  939.                         call            NumLCD
  940.                         ;ďđîâĺđčě, äîáđŕëčńü ëč ěű äî BCD0
  941.                         movlw           BCD0
  942.                         subwf           FSR,W
  943.                         btfsc           STATUS,Z
  944.                         return
  945.                         decf            FSR,F
  946.                         goto            next_byte
  947. ;---------------------- BCD to LCD ---------------------
  948. ;       Âűâîä đŕçđ˙äŕ č ďîäăîňîâęŕ ę âűâîäó ńëĺäóţůĺăî
  949. DispBCD         movwf           FSR
  950. NextNibble      swapf           INDF,F
  951.                 movf            INDF,W
  952.                 btfss           Flags,1 ;1 - íĺ âűâîäčňü ëčäčđóţůčĺ íóëč
  953.                 goto            chk_NZ
  954.                 andlw           0x0F
  955.                 btfsc           STATUS,Z
  956.                 return          ;ďđîďóńę âűâîäŕ
  957.                 bcf                     Flags,1 ; ýňó č âńĺ ďîńäĺäóţůčĺ öčôđű âűâîäčě
  958. chk_NZ
  959.                 btfss           Flags,3 ; 1- âűâîäčňü ňîëüęî NZ đŕçđ˙äîâ, îńňŕëüíűĺ - 0
  960.                 goto            NumLCD
  961.                 movf            NZ,F
  962.                 btfsc           STATUS,Z        ;ń÷ĺň÷čę=0?
  963.                 goto            Disp0   ;äŕ, âűâîäčě 0
  964.                 decf            NZ,F    ;íĺň, âűâîäčě ňî ÷ňî ĺńňü
  965.                 call            NumLCD
  966.                 return
  967. ;---------------------- BCD ---------------------
  968. ;       Ďĺđĺęîäčđîâęŕ çíŕ÷ĺíč˙ čç äâîč÷íîăî â äĺń˙ňč÷íűé ôîđěŕň
  969. BCD             movlw           0x20
  970.                 movwf           T1
  971.                 clrf            BCD0
  972.                 clrf            BCD1
  973.                 clrf            BCD2
  974.                 clrf            BCD3
  975.                 clrf            BCD4
  976.  
  977. BcdLoop rlf             AARGB2, F
  978.                 rlf             AARGB1, F
  979.                 rlf             AARGB0, F
  980.                 rlf             AEXP, F
  981.  
  982.                 rlf             BCD0, F
  983.                 rlf             BCD1, F
  984.                 rlf             BCD2, F
  985.                 rlf             BCD3, F
  986.                 rlf             BCD4, F
  987.                 decfsz          T1, F
  988.                 goto            Adjust
  989.                 return
  990.  
  991. Adjust  movlw           .5
  992.                 movwf           Count2
  993.  
  994.                 movlw           BCD0
  995.                 movwf           FSR
  996.                 goto            ADloop+1
  997.  
  998. ADloop  incf            FSR, F
  999.                 call            Adjbcd
  1000.                 decfsz          Count2, F
  1001.                 goto            ADloop
  1002.                 goto            BcdLoop
  1003.  
  1004. Adjbcd  movlw           0x03
  1005.                 addwf           INDF, W
  1006.                 movwf           T0             
  1007.                 btfsc           T0, 3          
  1008.                 movwf           INDF
  1009.                 movlw           0x30
  1010.                 addwf           INDF, W
  1011.                 movwf           T0
  1012.                 btfsc           T0, 7
  1013.                 movwf           INDF
  1014.                 return
  1015.  
  1016. ;-------------------------------------------------------
  1017. ;       Ęîďčđîâŕíčĺ "ďî íŕçíŕ÷ĺíčţ" áëîęŕ (4 áŕéňŕ) äŕííűő
  1018. ; Temp1 = ŕäđĺń ďîëó÷ŕňĺë˙ - óęŕçűâŕĺňń˙ ńňŕđřčé ŕäđĺń áëîęŕ
  1019. ; Temp2 = ŕäđĺń čńňî÷íčęŕ - óęŕçűâŕĺňń˙ ńňŕđřčé ŕäđĺń áëîęŕ
  1020.  
  1021. ;CEQUA          movlw           CX              ; C=A
  1022. Copy_From_A
  1023.                 movwf           Temp1           ; Xw=A
  1024.                 movlw           AEXP
  1025.                 movwf           Temp2
  1026.                 goto            Copy
  1027.  
  1028. BEQUA           movlw           AEXP            ; B=A
  1029. Copy_To_B       movwf           Temp2           ; B=Xw
  1030.                 movlw           BEXP
  1031.                 goto            Copy_B
  1032.  
  1033. ;AEQUF          movlw           FX              ; A=F
  1034. Copy_To_A
  1035.                 movwf           Temp2           ; A=Xw
  1036.                 movlw           AEXP
  1037.  
  1038. Copy_B  movwf           Temp1
  1039. Copy    movlw           4               ; Îáú¸ě áëîęŕ
  1040.                 movwf           Count1
  1041. Copy_Loop
  1042.                 movf            Temp2, W
  1043.                 movwf           FSR
  1044.                 movf            INDF, W
  1045.                 movwf           Temp3
  1046.                 movf            Temp1, W
  1047.                 movwf           FSR
  1048.                 movf            Temp3, W
  1049.                 movwf           INDF
  1050.                 decf            Temp1, F ; äâčăŕĺěń˙ â ńňîđîíó óěĺíüřĺíč˙
  1051.                 decf            Temp2, F ; ŕäđĺńîâ
  1052.                 decfsz          Count1, F
  1053.                 goto            Copy_Loop
  1054.                 return
  1055.  
  1056. ;-------------------------------------------------------
  1057. X_To_B  call            EEPROM_To_B     ; Çŕăđóçęŕ ęîýôôčöčĺíňŕ X
  1058.                 call            ASwapB
  1059.                 call            FLO2424
  1060.                 call            FPM24
  1061.                 return
  1062.  
  1063. ASwapB  movlw           T5
  1064.                 call            Copy_From_A
  1065.                 movlw           BEXP
  1066.                 call            Copy_To_A
  1067.                 movlw           T5
  1068.                 call            Copy_To_B
  1069.                 return         
  1070. ;-------------------------------------------------------
  1071. ;       Î÷čńňęŕ áëîęîâ Ŕ č Â
  1072. ClrB    movlw           BEXP    ; Î÷čńňęŕ áëîęŕ Â
  1073.                 goto            ClrA+1
  1074.  
  1075. ClrA    movlw           AEXP    ; Î÷čńňęŕ áëîęŕ Ŕ
  1076.                 movwf           FSR
  1077.                 movlw           4       ;Îáúĺě áëîęŕ
  1078.                 movwf           Count1
  1079.  
  1080. ClrLoop
  1081.                 clrf            INDF    ; Öčęë î÷čńňęč
  1082.                 decf            FSR, F  ; óěĺíüřŕĺě ŕäđĺń
  1083.                 decfsz          Count1, F
  1084.                 goto            ClrLoop
  1085.                 return
  1086. ;-------------------------------------------------------
  1087. ;       ×ňĺíčĺ äŕííűő čç EEPROM â áëîę B
  1088. EEPROM_To_B
  1089.                 movwf           EE_ADR  ; Ńîőđŕí˙ĺě ŕäđĺń ˙÷ĺéęč EEPROM
  1090.                 movlw           BEXP
  1091.                 movwf           FSR
  1092.                 movlw           4       ;Îáúĺě áëîęŕ
  1093.                 movwf           Count1
  1094. EE_read_loop
  1095.             call                ReadEEPROM
  1096.                 banksel         BEXP
  1097.                 movwf           INDF
  1098.                 incf            EE_ADR, F
  1099.                 decf            FSR, F
  1100.                 decfsz          Count1, F
  1101.                 goto            EE_read_loop
  1102.                 return
  1103.  
  1104. ;       ×ňĺíčĺ EEPROM
  1105. ReadEEPROM
  1106.                 movf            EE_ADR,W ;
  1107.                 banksel         EEADR   ; áŕíę 2
  1108.                 movwf           EEADR   ; ŕäđĺń ˙÷ĺéęč EEPROM
  1109.                 banksel         EECON1  ; áŕíę3
  1110.                 bcf                     EECON1,EEPGD ;âűáđŕňü EEPROM
  1111.                 bsf                     EECON1,RD    ;číčöčŕëčçđîâŕňü ÷ňĺíčĺ
  1112.                 banksel         EEDATA  ; áŕíę2
  1113.                 movf            EEDATA,W        ; W = EEDATA
  1114.                 return
  1115.  
  1116. ;-------------------------------------------------------
  1117. ;       Çŕďčńü áëîęŕ BARG â EEPROM
  1118. ; Ŕäđĺń â EEPROM çŕäŕĺňń˙ â Const_ADR
  1119. Save_Const
  1120.                 movf            Const_ADR,W
  1121.                 movwf           EE_ADR
  1122.                 movlw           BEXP
  1123.                 movwf           FSR
  1124.                 movlw           4       ;Îáúĺě áëîęŕ
  1125.                 movwf           Count1
  1126. EE_write_loop
  1127.                 movf            INDF,W
  1128.                 movwf           EE_DATA
  1129.                 call            WriteEEPROM
  1130.                 banksel         BEXP
  1131.                 incf            EE_ADR, F
  1132.                 decf            FSR, F
  1133.                 decfsz          Count1, F
  1134.                 goto            EE_write_loop
  1135.                 return
  1136.  
  1137. ;       Çŕďčńü EEPROM
  1138. WriteEEPROM
  1139.                 banksel         EECON1  ;áŕíę3
  1140.                 btfsc           EECON1,WR
  1141.                 goto            $-1
  1142.                 banksel         EEADR   ;áŕíę2
  1143.                 movf            EE_ADR,W
  1144.                 movwf           EEADR
  1145.                 movf            EE_DATA,W
  1146.                 movwf           EEDATA
  1147.                 banksel         EECON1
  1148.                 bcf                     EECON1,EEPGD
  1149.                 bsf                     EECON1,WREN
  1150.                 movlw           0x55
  1151.                 movwf           EECON2
  1152.                 movlw           0xAA
  1153.                 movwf           EECON2
  1154.                 bsf                     EECON1,WR
  1155.                 bcf                     EECON1,WREN
  1156.                 return
  1157. ;-------------------------------------------------------
  1158. ;       Číęđĺěĺíňčđîâŕíčĺ ďîëóáëîęŕ B
  1159. IncB
  1160.                 bsf                     Flags,5 ;óńňŕíŕâëčâŕĺě ôëŕă čçěĺíĺíč˙ ęîíńňŕíňű
  1161.         incf            BARGB2, F
  1162.                 btfsc           STATUS, Z
  1163.                 incf            BARGB1, F
  1164.                 goto            ShowX
  1165.  
  1166. ;       Äĺęđĺěĺíňčđîâŕíčĺ ďîëóáëîęŕ B
  1167. DecB
  1168.                 bsf                     Flags,5 ;óńňŕíŕâëčâŕĺě ôëŕă čçěĺíĺíč˙ ęîíńňŕíňű
  1169.         movf            BARGB2, F
  1170.                 btfsc           STATUS, Z
  1171.                 decf            BARGB1, F
  1172.                 decf            BARGB2, F
  1173.  
  1174. ShowX          
  1175.         movlw           BEXP
  1176.         call            Copy_To_A
  1177.                
  1178.                 call            BCD
  1179.                 call            SecLine
  1180.                 movlw           BCD1
  1181.                 call            DispBCD
  1182.                 call            DispDot
  1183.                 movlw           BCD1
  1184.                 call            DispBCD
  1185.                 movlw           BCD0
  1186.                 call            DispBCD
  1187.                 movlw           BCD0
  1188.                 call            DispBCD
  1189.                
  1190.                 call            Delay_05_sec
  1191.                 return
  1192.  
  1193. ;=======================================================
  1194. ;     PIC16 24 BIT FLOATING POINT LIBRARY
  1195.  
  1196. #define P16_MAP1 0
  1197. #define P16_MAP2 1
  1198.         include "math16.inc"
  1199.         include "fp24.a16"  
  1200.        
  1201.         END


köszönöm
(#) mps válasza Hp41C hozzászólására (») Feb 19, 2013 /
 
Ez igaz! "Az olcsón szerzett termék miatt érzett öröm rövidebb ideig tart mint a rossz minőség miatt érzett bosszúság!"
Vagy nagypapám szerint: "Fiam! Nem vagyunk mi olyan gazdagok, hogy jó legyen az olcsó!"
(#) szelitomi hozzászólása Feb 19, 2013 /
 
Sziasztok!
Nem találtam megfelelő topikot a kérdésemnek, ezért ide írom, mivel itt foglalkoztok PIC-ekkel.
Egy ismerősöm kért meg, hogy nem eudnák-e neki egy programot írni. Én sajnos már régen és nagyon alap szinten foglalkoztam PIC-el. És teljesen elfelejtettem mindent.
A nyákot is valószínű meg kell tervezni majd!
Amit tudnia kell: 1 impulzusra (negatív) 10 percre húzzon meg egy relét. Majd az idő letelte után engedjen el. Ha azonban a 10 perc időtartamon belül érkezik még egy impulzus, akkor azt adja hozzá az eltelt x időhöz és addig tartsa meghúzva a relét!
De ismerős biztos jobban el tudná magyarázni, mert az ő agyában fogalmazódott meg a gondolat.
Ezért, ha valaki úgy érzi, hogy nem probléma megalkotni egy ilyen kapcsolást, akkor az kérem írjon privát üzenetet egy valamilyen elérhetőséggel együtt! És én továbbítom azokat.
Köszönöm!
(#) Hp41C válasza tom75 hozzászólására (») Feb 19, 2013 /
 
Szia!
Egy csomagban az összes forrásállományt kellene feltenni fájlmellékletként vagy egy linket, ahonnan letölthetem a teljes programot...
A hozzászólás módosítva: Feb 19, 2013
(#) tom75 válasza Hp41C hozzászólására (») Feb 19, 2013 /
 
(#) qbit válasza benjami hozzászólására (») Feb 19, 2013 /
 
Igen, köszönöm! Már én is fordítgattam a PIC18 Non-J-t, csak azt hittem, ugyanúgy megy a végeredmény, mint a PINGUINO-nál (ami szintén a Microchip bootloader-ből ered). Ott nem kell boot gombot nyomni... Egyébként olvastam cikkeket, ahol leírják, hogyan kell a lkr (linker) fájlt megváltoztatni, hogy optimalizálás nélkül is beférjen a bootloadert... Sikerült is nekem, csak rb5 gomb nem volt világos a számomra. Na mindegy. Nagyon köszi a segítséget, hasznos volt!
A hozzászólás módosítva: Feb 19, 2013
Következő: »»   371 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem