Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 2.643 pregleda

Najnovija ↓

USART asinhroni mod 10.04.2012. u 19:10 · pre 177 meseci #1
Interesuje me kako se programira ovaj mod ? Pratio sam uputsvta iz data sheet-a i nikako nisam uspeo da isimuliram to u proteusu. Da li bi neko mogao da postuje kod u asembleru za predajnik i za prijemnik asinhronog moda pa da taj kod iskoristim za svoje potrebe?
Hvala unapred
Re: USART asinhroni mod 10.04.2012. u 19:35 · pre 177 meseci #3
Da ali kako se programira ?
Re: USART asinhroni mod 10.04.2012. u 19:58 · pre 177 meseci #5
na primer C18 (pic 18Fxxxx)

Code:


//...

#include <stdio.h>
#include <usart.h>


void sendFloat(float x){
  long int lPart;
  long int rPart;
  lPart = (long int) x;
  rPart = (long int)( x * 10000.0)-lPart*10000;
  fprintf(_H_USART,  (const far rom char*)"%li.%04li,", lPart,rPart);
}


void main(void) {
    volatile int i;
    float f;
    
    CMCON               = 0x07; // comparators off

    OpenUSART( USART_TX_INT_OFF  &
              USART_RX_INT_OFF  &
              USART_ASYNCH_MODE &
              USART_EIGHT_BIT   &
              USART_CONT_RX     &
              USART_BRGH_HIGH,
              51                ); //  FOSC / (16 * (spbrg + 1)) = 57692.31

    fprintf (_H_USART,  (const far rom char*)"KUKURIKU\r\n");
    fprintf ((FILE *)_H_USART, (const far rom char*) "%i\r\n",123);     
    sendFloat(123,1325);     

    while(1);        
}


Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Sviđa mi se1
Re: USART asinhroni mod 10.04.2012. u 20:06 · pre 177 meseci #6
Hvala bogdane, a da li bi neko mogao da mi da ovaj kod u asembleru jer u C-u ne umem da programiram na zalost? To sam naveo i u pocetnom pitanju. Ja cu da programiram 16f628a ali nije veliki problem ukolio mi navedete za neki drugi.
Hvala unapred
Re: USART asinhroni mod 10.04.2012. u 20:23 · pre 177 meseci #7
ja asembler smatram teskim gubljenjem vremena (tako da sam nesvesno izignorisao taj deo u originalnom postu) no .. pogledaj npr: http://www.winpicprog.co.uk/pic_tutorial7.htm ne znam da li mu taj primer koristi 16F876 ili 16F628. Nigelovi primeri su super za pocetnike koji zele da se gube vreme na asm

imas ovo: http://www.oz1bxm.dk/PIC/628uart.htm to ti je bas za 16f628


Code:


;*******************************************************************
; Function:  Sends alive message, then echoes characters at 9600 bps
; Processor: PIC16F628 at 4 MHz using internal RC oscillator
; Hardware:  Testboard K4
; Filename:  628uart.asm
; Author:    Lars Petersen, [email protected]
; Website:   www.qsl.net/oz1bxm/PIC/pic.htm
; Credit:    Tony Nixon's test program at
;            www.piclist.com/techref/microchip/16f877/setup.htm
;*******************************************************************

        LIST P=16F628, R=DEC    ; Use the PIC16F628 and decimal system

        #include "P16F628.INC"  ; Include header file

        __config  _INTRC_OSC_NOCLKOUT & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON

        CBLOCK 0x20             ; Declare variable addresses starting at 0x20
          dataL
        ENDC

        ORG    0x000            ; Program starts at 0x000
;
; --------------------------------
; 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 
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Sviđa mi se1
Re: USART asinhroni mod 10.04.2012. u 20:36 · pre 177 meseci #8
Hvala ti bogdane na odgovorima, a mozes li da mi predlozis odakle da ucim C? Svi mi kazu da je na to dat dogovor, da ucim obican C i povezujem ga sa mikrokntrolerima, ali mi ne uspeva i ne mogu nigde da nadjem neki dobar tutorijal. Na primer nigde nisam uspeo da nadjem u C-u sta je komanda ekvivalentna komandi goto u asembleru. Dakle molim ukoliko mislis da je neki tutorial posebno dobar za ucenje C-a za PIC da mi das link. Inace C znam po malo ali sam samo pimenjivao na racunare i to su isuvse glupi primeri. I ovi primeri sto si naveo su za predaju racunaru, a sta se desava kada treba 2 mikrokontrolera da komuniciraju ?
Re: USART asinhroni mod 10.04.2012. u 20:51 · pre 177 meseci #9
Goto ne bi trebao da upotrebljavas u C programu, vec za kontrolu toka programa postoje razne kontrolne strukture (for, while, if, switch, ..).
Re: USART asinhroni mod 10.04.2012. u 20:55 · pre 177 meseci #10
U C-u pandam za naredbu goto iz asemblera je naredba goto :D ( http://c.comsci.us/syntax/statement/goto.html )

stos je u tome da se u C-u koriscenje goto naredbe smatra losim programiranjem

odakle da ucis C, nemam pojma, najiskrenije, pogledaj po netu nesto tipa "learn c in 21 day" .. nebitno dal je za pic ili za desktop, kad naucis c lako ga primenis bilo gde .. ja sam imao neke knjige za pocetnike za C (jedno 10tak komada) i sve sam podelio i niko od tih ljudi nije naucio C .. tako da .. nemam pojma dal ima neka dobra knjiga / odakle se to uci.. pogleda
http://kldp.org/files/c+in+21+days.pdf
http://newdata.box.sk/bx/c/

cuo sam da je ovo dobra knjiga: http://www.amazon.com/Programm...llers-Technology/dp/0750682922
ali ja je nisam citao tako da ne znam sta pise unutra

pogledaj sta ljudi kazu o tome kako uciti:
http://www.eevblog.com/forum/b...-learn-c-for-microcontrollers/
http://www.edaboard.com/thread24706.html


Citat:

I ovi primeri sto si naveo su za predaju racunaru, a sta se desava kada treba 2 mikrokontrolera da komuniciraju ?


nema nikakve razlike, mcu salje, mcu prima, samo nemas izmedju max232 :D ... nego zasto bi 2 pica pricala preko uart-a? mnogo bolje da koristis i2c ako ti ne treba velika brzina ili spi ako ti treba veca brzina ili pmp ako ti treba bas turbo velika brzina ..
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: USART asinhroni mod 10.04.2012. u 21:04 · pre 177 meseci
izmenjeno 1 put, poslednji put nikolapirot 10.04.2012. u 21:15
  1. nikolapirot10.04.2012. u 21:15zapis iz teksta poruke
#11
Iskreno zato sto je ovo jedini vid komunikacije (koliko sam ja video) koji koristi samo jednu zicu a to mi trenutno treba. A ja sam ucio kontrolere iz datasheet-a i u skoli nesto povrsno ali sve to u asembleru. Za I2C komunikaciju sam cuo ali nikad upotrebio, a za ove ostale nisam nikad ni cuo... Tek se upustam u dubine ovih stvarcica, i hvala na trudu za pisanje ovolikih odgovora.
A mozes li da mi kazes sta znaci printf za mikrokontroler? Znam da je za PC prikaz na desk top ali sta je za mcu ?
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme