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

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


Nuke - Elektro Bastlirna: Diskuzní fórum

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

Hodiny a seriový přenost Pic 16F628

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



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: út únor 09 2010, 22:45    Předmět: Hodiny a seriový přenost Pic 16F628 Citovat

zdravím
Jsem našel dva programy pro hodiny a na sériový přenos dat do PC a potřeboval bych je spojit v jedno aby hodiny šly a po stisku tlačítka byl ten aktuální čas přenesen pomocí seriového portu do PC přikládám zdrojový kód
kód:

; Zakladni nastaveni procesoru PIC16F628                        (10.7.2003)

;**************************************************************************
;*                       http://www.cmail.cz/doveda                       *
;**************************************************************************
;*                                  PIC16F628                             *
;*                             --------\/--------                         *
;*                            -|RA2          RA1|-                        *
;*                            -|RA3          RA0|-                        *
;*                            -|RA4ck       osc1|-  \ Krystal 4,00MHz     *
;*                       +5V  -|MCLR        osc2|-  /                     *
;*                        0V  -|Vss          Vdd|-  +5V                   *
;*                            -|RB0/INT  PGD/RB7|-                        *
;*                            -|RB1/Rx   PGC/RB6|-                        *
;*                            -|RB2/Tx       RB5|-                        *
;*                            -|RB3      PGM/RB4|-                        *
;*                             ------------------                         *
;*                                              DOVEDA BOYS (c) 1997-2003 *
;**************************************************************************

list   p=16f628A, R=DEC
include   "p16f628A.inc"

W    EQU   D'0'
F   EQU   D'1'
W_save   equ   30h   ; zaloha pri preruseni
Sta_sav   equ   31h   ; zaloha pri preruseni
PCL_sav   equ   32h   ; zaloha pri preruseni
FSR_sav   equ   33h   ; zaloha pri preruseni
dataL equ 35h
CISLO   equ   34h

;BLOK RAM PAMĚTI
#define RAM_Start   20h
CBLOCK RAM_Start

RAM   ; prvni adresa pameti RAM pro PIC16F628 - 224bajtu (20h-7Fh)
TMP_W   ; temp preruseni
TMP_S   ; temp preruseni
TMP_PCL
TMP0   ; pomocny MP1   ; pomocny registr
TMP2   ; pomocny registr

EE_ADR   ; pomocný registr zápisu a čtení EEPROM
EE_DATA


MIN
HOD
SEC
TMR
endc


#define   Q_OUT1   PORTA,0      ; vystup 1
#define   Q_OUT2   PORTA,1      ; vystup 2
#define Q_OUT3   PORTA,2      ; vystup 3
#define Q_OUT4   PORTA,3      ; vystup 4
#define Q_OUT5   PORTA,4      ; vystup 5

   org   0x2007      ; adresa nastaveni pojistek pro PIC16F627 a PIC16F628
   dw _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _HS_OSC
; _BODEN_OFF & _CP_OFF & _PWRTE_OFF & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _HS_OSC {default)
; typ oscilatoru
;   _LP_OSC                      EQU     H'3FEC'
;   _XT_OSC                      EQU     H'3FED'
;   _HS_OSC                      EQU     H'3FEE'

;   _ER_OSC_CLKOUT               EQU     H'3FFF'
;   _ER_OSC_NOCLKOUT             EQU     H'3FFE'
;   _INTRC_OSC_CLKOUT            EQU     H'3FFD'
;   _INTRC_OSC_NOCLKOUT          EQU     H'3FFC'
;   _EXTCLK_OSC                  EQU     H'3FEF'

; Code Protect (ochrana proti precteni)
;   _CP_ALL                      EQU     H'03FF'
;   _CP_75                       EQU     H'17FF'
;   _CP_50                       EQU     H'2BFF'
;   _CP_OFF                      EQU     H'3FFF'

; Power Up Timer (casovac pro nabeh napeti 72ms)
;   _PWRTE_ON                    EQU     H'3FF7'
;   _PWRTE_OFF                   EQU     H'3FFF'

; WatchDog (hlidaci pes)
;   _WDT_ON                      EQU     H'3FFF'
;   _WDT_OFF                     EQU     H'3FFB'


;   _BODEN_ON                    EQU     H'3FFF'
;   _BODEN_OFF                   EQU     H'3FBF'

;   _LVP_ON                      EQU     H'3FFF'
;   _LVP_OFF                     EQU     H'3F7F'

;   _MCLRE_ON                    EQU     H'3FFF'
;   _MCLRE_OFF                   EQU     H'3FDF'

;************************ Nastavení dat v EEPROM **************************

   org   0x2100      ; tabulka v pameti EEPROM (128 bytu)
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
   de   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

;************************     Reset procesoru     *************************

   org   0x0000      ; zacatek programu
   goto   INIT      ; skok na pocatecni inicializaci

   org   0x0004      ; vektor preruseni
   goto   PRERUS   

;**************************************************************************
;*                      preruseni                                         *
;**************************************************************************

PRERUS   movwf   TMP_W      ; (ulozeni hodnot registru W a STATUS)
   movf   STATUS,W   ; prohodi nibble STATUS a ulozi do W
   clrf   STATUS      ; nastaveni banky 0
   movwf   TMP_S      ; ulozit STATUS

   movf   PCLATH,W
   movwf   TMP_PCL
   clrf   PCLATH      ; nastaveni banky 0
;       ------------------------
   bcf   INTCON,T0IF   ; vynulovat priznak preruseni (pretekl casovac TMR0)
;-------------------------------



   MOVLW    4         ; první proměnnná menšitele
   MOVWF    TMR0
   INCF    TMR,1
   MOVFW    TMR
   ;Při krystalu 20 MHz 155 a při 4 MHz 31 druhá část menšitele
   XORLW    31           ;31 155    druhá proměnná menšitele
   BTFSS    03,2      ; aktuální nastavení má odchylku 0,000432s , tzn. za jeden den se čas
   GOTO    CAS_1      ; odchýlí od skutečnosti o 37,3 sekundy , za měsíc to činí 18,6 minuty
   CLRF    TMR         ; toto velmi jemné donastavení můžeš provést kapacitním trimrem u krystalu
   INCF    SEC,1      ; A PŘEDEVŠÍM SI VŠIMNI , JAK SE PÍŠOU POZNÁMKY !
   MOVFW    SEC
   XORLW    60
   BTFSS    03,2
   goto    CAS
   CLRF    SEC
   INCF    MIN,1
   MOVFW    MIN
   XORLW    60
   BTFSS    03,2
   GOTO    CAS
   CLRF    MIN
   INCF    HOD,1
   MOVFW    HOD
   XORLW    24
   BTFSC    03,2
   CLRF    HOD
   goto    CAS_1
CAS    
   MOVLW    132
CAS_1

;------------------------------- (obnovení hodnot registru W a STATUS)
INT_END movf   TMP_PCL,W
   movwf   PCLATH      ; obnova PCLATH

   movf   TMP_S,W      ; prohodi nibble TMP_S a ulozi do W
;   swapf   TMP_S,W      ; prohodi nibble TMP_S a ulozi do W
   movwf   STATUS      ; obnova STATUS

   swapf   TMP_W,F      ; prohodi nibble TMP_W a ulozi do W
   swapf   TMP_W,W      ; obnova W
   retfie

;************************ Inicializace procesoru  *************************

INIT
   movlw   b'00000'
   movwf   PORTA
   movlw   b'00000000'
   movwf   PORTB

   movlw   b'00000111'   ; digitalni vstupy na PORTu A (PIC16F627 a 628)
   movwf   CMCON
;       ------------------------
   bcf   STATUS,RP1
   bsf   STATUS,RP0   ; banka registru 1
   movlw   b'11111'   ; portA 4-0, 5*vstupy
   movwf   TRISA

   movlw   b'11010110'   ; PULL-UPy OFF, preddelic=1:128 pripojen k TMR0
   movwf   OPTION_REG   ;
   movlw   b'11111011'   ; portB 7-0, 7*vstupy, 1*vystupy
   movwf   TRISB

   bcf   STATUS,RP0   ; banka registru 0
;       ------------------------
   movlw   b'10100000'   ; povolena všechna přerušení a od přetečení TMR0
   movwf   INTCON

   bsf   INTCON,T0IE; 1=povoleno přerušení při přetečení TMR0
;   bsf   INTCON,INTE   ; 1=povoleno přerušení z portu RB0/INT
;   bsf   INTCON,GIE   ; 1=povolena všechna nemaskovaná přerušení

;   !!! zde napiste vynulovani a nastaveni promenych !!!
   clrf   MIN
   clrf   HOD
   clrf   SEC
   clrf   TMR

   MOVLW    4         ; pre-set timeru
   MOVWF    TMR0

   goto   MAIN

;************************     Hlavní program      *************************

MAIN   

  call auart
;   !!! zde napiste vlasni hlavní program !!!

   nop

   goto   MAIN

;************************        PIC16F628        *************************

READ   bsf   STATUS,RP0   ; banka 1   !!! nastav EE_ADR !!!
   movf   EE_ADR,W
   movwf   EEADR
   bsf   EECON1,RD   ; cteni EEPROM
   movf   EEDATA,W   ; nactena data z pameti EEPROM do registru W
   bcf   STATUS,RP0   ; banka 0
;-------------------------------
   return         ;      !!! data v registru W !!!

;************************        PIC16F628        *************************

WRITE   bsf   STATUS,RP0   ; banka 1   !!! nastav EE_ADR !!!
   movwf   EEDATA      ; prepsat W -> EEDATA

   movf   EE_ADR,W
   movwf   EEADR

   bsf   EECON1,WREN   ; povolit zapis do EEPROM
   bcf   INTCON,GIE   ; zakazat vsechna preruseni
;       ------------------------; aktivace zapisu
   movlw   0x55      ; odblokovani zapisu (povinna povolovaci sekvence)
   movwf   EECON2
   movlw   0xAA
   movwf   EECON2
   bsf   EECON1,WR   ; spustit zapis
;       ------------------------; konec aktivace
   bsf   INTCON,GIE   ; povolit vsechna preruseni

   btfsc   EECON1,WR   ; pockat na konec zapisu
   goto   $-1      ; =1

   bcf   EECON1,WREN   ; zakazat zapis do EEPROM
   bcf   STATUS,RP0   ; banka 0
;-------------------------------
   return
;-----------------------------Seriovy prenos-----------------------------
   
    

;************************      Konec programu     *************************
auart
; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------
;
   movlw 7
   movwf CMCON      ; CMCON=7 set comperators off         
;
; ----------------
; INITIALIZE PORTS
; ----------------
;
   movlw b'00000000'       ; set up portA
        movwf PORTA   
       
        movlw b'00000100'   ; RB2(TX)=1 others are 0
        movwf PORTB

        bsf STATUS,RP0          ; RAM PAGE 1

        movlw 0xFF
        movwf TRISA      ; portA all pins input

        movlw b'11110010'   ; RB7-RB4 and RB1(RX)=input, others output
        movwf TRISB

; ------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
; ------------------------------------
; Boot Baud Rate = 9600, No Parity, 1 Stop Bit
;
        movlw 0x19              ; 0x19=9600 bps (0x0C=19200 bps)
        movwf SPBRG
        movlw b'00100100'       ; brgh = high (2)
        movwf TXSTA             ; enable Async Transmission, set brgh

        bcf STATUS,RP0          ; RAM PAGE 0

        movlw b'10010000'       ; enable Async Reception
        movwf RCSTA
;
; ------------------------------------
; PROVIDE A SETTLING TIME FOR START UP
; ------------------------------------
;
        clrf dataL
settle  decfsz dataL,F
        goto settle

        movf RCREG,W
        movf RCREG,W
        movf RCREG,W            ; flush receive buffer
;
; ---------
; MAIN LOOP
; ---------
;
   call message           ; send "16F628 alive"
   loop    call receive            ; wait for a char
   call send               ; send the char
        goto loop
;
; -------------------------------------------
; RECEIVE CHARACTER FROM RS232 AND STORE IN W
; -------------------------------------------
; This routine does not return until a character is received.
;
receive btfss PIR1,RCIF         ; (5) check for received data
        goto receive

        movf RCREG,W            ; save received data in W
        return
;
; -------------------------------------------------------------
; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING
; -------------------------------------------------------------
;
send    movwf TXREG             ; send data in W

TransWt bsf STATUS,RP0      ; RAM PAGE 1
WtHere  btfss TXSTA,TRMT        ; (1) transmission is complete if hi
        goto WtHere

        bcf STATUS,RP0          ; RAM PAGE 0
        return
;
; -------
; MESSAGE
; -------
;
message movlw    '1'      
   call   send
   movlw    '6'
   call   send
   movlw    'F'
   call   send
   movlw    '6'
   call   send
   movlw    '2'
   call   send
   movlw    '8'
   call   send
   movlw    ' '
   call   send
   movlw    'a'
   call   send
   movlw    'l'
   call   send
   movlw    'i'
   call   send
   movlw    'v'
   call   send
   movlw    'e'
   call   send
   movlw    0x0D   ; CR
   call   send
   movlw    0x0A   ; LF
   call   send
   return

        END
   

ale vyhazuje mě to toto
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data

kde dělám chybu? díky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



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

PříspěvekZaslal: st únor 10 2010, 0:31    Předmět: Citovat

Ten mix programov má len tak sám od seba fungovať?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: st únor 10 2010, 9:08    Předmět: Citovat

procesor napsal(a):
Ten mix programov má len tak sám od seba fungovať?

Nemá to je jen rozdělaný program který by měl ve finále měřit teplotu pomocí čidla DS18S20 po určitých intervalech třeba v nočních hodinách a ukládat do univerzálních registrů a pak po přenést naměřené hodnoty s časovým údajem po seriové lince do PC.A k té chybě co jsem prvně uvedl nebude to v špatně zvolené bance? díky za pomoc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



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

PříspěvekZaslal: st únor 10 2010, 21:24    Předmět: Citovat

markoni napsal(a):
ale vyhazuje mě to toto
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data


Kto, čo ...to vyhadzuje?
RCREG je v bank-u 0, takže to je o.k. Píše sa tam o tom, že sa deje s RCREG niečo bezdôvodne. Zrejme to vypisuje nejaký (aký?) simulačný-ladiaci, emulačný program. Nie je to trestné, ak sa chce vyčistiť vstupný FIFO a RCREG. TAkže to je len upozornenie na takéto čítanie RCREG bezdovodne (nie je nastavený flag RCIF v PIR1)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: st únor 10 2010, 22:10    Předmět: Citovat

Zdravím
Na těchto instrukcích
movf RCREG,W
movf RCREG,W
movf RCREG,W
UART-W0002: Read attempted from an Empty RCREG SFR, invalid data

abys rozuměl dávám dohromady dva programy a to hodiny a přenos do PC po seriové usart lince každý sám o sobě mě funguje takto chci dát do hromady aby mě to fungovalo když stisknu na jednom pinu tlačítko aby mě ten čas který je právě aktuální se přenesl do PC a zobrazil v terminálu který je součástí WXP.Moje představa je přes noc měřit teplotu pomocí teplotního čidla DS18S20 v určitých intervalech a nechávat je v univerzálních registrech s časovým údajem (proto chci ti běžící hodiny) až po měření to pak připojit na PC a přečíst ty naměřené teploty z údajem o čase v tom terminálu. Takže s toho co jsi napsal jsem pochopil že to není na závadu UART-W0002: Read attempted from an Empty RCREG SFR, invalid data je to tak?díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



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

PříspěvekZaslal: st únor 10 2010, 23:19    Předmět: Citovat

Pýtam sa na to, čo za program ti vypisuje tú hlášku. Predpokladám, že to nie je prekladač. Môže to byť nejaký ladiaci prostriedok, všetky nepoznám.
K tým dvom častiam: teba to spojiť tak aby nar. inicializácia portov a iných sfr bola spoločná. Hodinky využívajú prerušovací systém, a vhodnejší by bolo aj pre sériový kanál používať prerušenia najmä pre príjem. Predpokladám, že podnet na prenos údajov bude dávať PC ako master. Ak v PC bude iba čítací program v PIC-ku prijímacia časť ani nemusí byť implementovaná a PC sa musí chovať ako SLAVE.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: čt únor 11 2010, 11:16    Předmět: Citovat

Tu hlášku mě vypisuje MPLAB SIM,další já tam nepotřebuji do Pic-ku přijímací část ten program v Pic-ku bude vysílat naměřenou teplotu s časovým údajem do terminálu v PC.díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

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

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

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


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