elektronikkindustrien forum

Regler | Recent posts | emnet RSS | Søk | Registrer | Logg inn

hjelp på seriell kommunikasjon benytter programvare ikke UART


Post new topic Reply to topic EDAboard.com Forum Hovedsiden -> Microcontrollers -> hjelp på seriell kommunikasjon benytter programvare ikke UART
Forfatter Melding
ece4afe



Joined: 16 juni 2005
Innlegg: 16


Post 22 april 2006 17:31

UART seriell kommunikasjon


hallo,

Pls råde meg hvordan man implementerer seriell kommunikasjon tru programvare programmering. il bruker en pic16f84a som ikke har en innebygd UART. Jeg vet teorien om seriell kommunikasjon, og jeg vil implementere det gjennom programvaren programmering. Vennligst lære meg å programmere den, eller hvis du har eksempelkode for meg å lese og forstå. Dette er min første gang å programmere seriell kommunikasjon. min plan er å sende ASCII tegn fra PIC til PC, som vil bli sett i HyperTerminal. Jeg ønsker å realisere og verdsette teorien om seriell kommunikasjon.
Behage hjelpe meg på denne.

Tnx,

Chris
Tilbake til toppen
hermin



Joined: 19 Apr 2005
Innlegg: 135
Hjalp: 9


Post 22 april 2006 17:50

m_rs096.asm


først velge hva programmeringsspråk du vil bruke, slik at datamaskinen og MCU ville formidle, kan du bruke enten C, Visual Basic og selv matlab. For MCU, kan du enten lage en inngang være en seriell inngang bare ved å lage et program som gjør at porten mottar serielle data
Tilbake til toppen
BeeBop



Joined: 19 februar 2006
Innlegg: 161
Hjalp: 15


Post 23 april 2006 3:46

hva er linjeskift i seriell kommunikasjon


Hei Chris,
Jeg trodde jeg hadde noen av mine egne eksempler, men det har blitt lenge siden jeg gjorde noe med F84, men jeg finner noe som er pent kodet, og skal tjene deg godt. Jeg tror det kom fra: http://www.electronic-engineering.ch/microchip/index.html
som er en nyttig side. (og du kan trenge noen andre header filer derfra)
Allikevel, her er eksempel, jeg håper det fungerer for deg.
Best wishes,
Robert

PS, ja du må gå til sitt nettsted og få M_WAIT og m_bank filer, men skal du ha noen problemer, la meg vite, og jeg skal hjelpe deg så mye som jeg kan.
hilsen

Code:
;************************************************* **************************
;
; RS232 Communication Test for PIC 16XXX
; ======================================
;
; Skrevet av Peter Luethi, 26.03.1999, Dietikon, Sveits
; Http://www.electronic-engineering.ch
; Sist oppdatert: 11.04.2004
;
; V1.02: Fast kopier / lim inn nummeret av ISR sammenheng lagre / gjenoppretting
; (Ingen er perfekte): feilaktig slettet INTCON, INTF
; Clearing, som resulterer i endeløs ISR ringer ...
; Re-strukturerte hele ISR og RS232 ekko sub-rutiner
; (11.04.2004)
; V1.01: ISR sammenheng gjenopprette forbedringer (30.12.2000)
; V1.00: Første utgave (26.3.1999)
;
; Denne koden og tilhørende filer kan distribueres fritt og
; Endret, forutsatt at denne overskriften med mitt navn og denne kunngjøringen fortsatt
; Intakt. Eierrettigheter fortsatt med meg.
; Du kan ikke selge denne programvaren uten godkjenning min.
;
; Denne programvaren leveres med ingen garanti eller garanti fra meg
; Gode intensjoner. Ved å bruke denne koden du godtar å beskytte meg fra
; Ethvert ansvar som måtte oppstå fra bruken.
;
;
; SPESIFIKASJONER:
; ===============
; Prosessor: Microchip PIC 16F84
; Clock Frequency: 4.00 MHz XT
; Throughput: 1 MIPS
; Baud Rate: 9600 baud, 8 bit, ingen paritet, 1 stopbit
; Kode Størrelse på hele programmet: ca. 570 instruksjon ord
; Nødvendig maskinvare: 232 MAX, dot matrix LCD-skjerm
;
;
; BESKRIVELSE:
; ============
; Utviklet og testet på 16F84 PIC, executeable på alle avbryte
; Kjennetegnet pics.
; Programmet håndterer alle aspekter av
; Transmission (Registrer TXD) og
; Reception (Registrer RXD) gjennom avbrudd.
; Visning av mottatt ASCII tegn sendt fra RS232 vert og
; Deres desimal representasjon på punktmatrise LCD-display.
; The microcontroller sender tilbakemeldinger på mottatte tegn til
; Terminalvinduet.
;
;************************************************* **************************

;***** COMPILATION MELDINGER & ADVARSLER *****

ERRORLEVEL -207; funnet etiketten etter kolonne 1
ERRORLEVEL -302 registrere i Operand ikke i banken 0

;***** PROCESSOR ERKLÆRING & KONFIGURASJON *****

PROCESSOR 16F84
# include "p16f84.inc"

; Embed Configuration Data innenfor. ASM File
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;***** MEMORY STRUKTUR *****

ORG 0x00; prosessor tilbakestille vektor
goto MAIN; hovedprogrammet

ORG 0x04; interrupt vektor
goto ISR; Interrupt Service Routine (ISR)

;***** PARAMETERIZATION *****

KONSTANT LCDWAIT = 0x02; LCD vente for initialisering
KONSTANT LCDSPEED = 0x01; konfigureres i henhold til PIC klokke

;***** PORT ERKLÆRING *****

# define TXport PORTA, 0x00, RS232-utgang, kan
# define TXtris Trisa, 0x00; noen aktiv push / pull-port

LCDtris EQU TRISB
LCDport EQU PORTB

;***** KONSTANT ERKLÆRING *****

KONSTANT BASE = 0x0C; base-adressen til brukeren registrerer filen

;***** REGISTRER ERKLÆRING *****

TEMP1 satt BASE d'0 '; Universal midlertidig register
TEMP2 satt BASE d'1 '; ATTENTION!
TEMP3 satt BASE d'2 '; De brukes av ulike moduler.
TEMP4 satt BASE d'3 '; Hvis du bruker dem, sørg for å ikke bruke
TEMP5 satt BASE d'4 '; dem samtidig! Ingen bruk i ISR!

LO EQU BASE d'5 '
LO_TEMP EQU BASE d'6 '

FLAGreg EQU BASE d'7 '
# define RSflag FLAGreg, 0x00; RS232 data mottak flag
# define LCDbusy FLAGreg, 0x01; LCD opptatt flag
# define LCDcflag FLAGreg, 0x02; LCD kommando / data flag
# define BCflag FLAGreg, 0x04, blank brikke for foregående nuller

TXD EQU BASE d'8 '; TX-Data register
RXD EQU BASE d'9 '; RX-Data register

W_TEMP EQU BASE d'10 '; kontekst register (ISR)
STATUS_TEMP EQU BASE d'11 '; kontekst register (ISR)
PCLATH_TEMP EQU BASE d'12 '; kontekst register (ISR)
FSR_TEMP EQU BASE d'13 '; kontekst register (ISR)

;***** Inkluderer filer *****

# include ".. \ .. \ m_bank.asm"
# include ".. \ .. \ m_wait.asm"
# include ".. \ .. \ m_lcd_bf.asm"
# include ".. \ .. \ m_lcdv08.asm"
# include ".. \ .. \ m_rs096.asm", standard RS232 overføringshastighet

;***** MACroS *****

;***** SUB-ETTERSYN *****

RSservice
LCD_DDAdr 0x45
movfw RXD; bli mottatt RS232 data
LCDw; sende til LCD-skjerm
LCD_DDAdr 0x4D
movfw RXD
movwf LO
LCDval_08; display desimalverdi

SEND TAB
SEND 'r'
SEND 'e'
SEND 'c'
SEND 'e'
SEND 'i'
SEND 'v'
SEND 'e'
SEND 'd'
SEND ''

movfw RXD; bli mottatt RS232 data
SENDw; overføre over RS232

SEND ''
SEND 'o'
SEND 'n'
SEND ''
SEND 'M'
SEND 'i'
SEND 'c'
SEND 'r'
SEND 'o'
SEND 'c'
SEND 'h'
SEND 'i'
SEND "p"
SEND ''
SEND "P"
SEND 'jeg'
SEND 'C'
SEND '1 '
SEND '6 '
SEND "F"
SEND '8 '
SEND '4 '
SEND CR; Vognretur
SEND LF; Line Feed

; Slutten av RS232-tjenesten (ekko & display)
BCF RSflag; restarte RS232 data mottak flag
bSF INTCON, INTE; aktivere RB0/INT avbryte
RETURN


;***** Avbryte SERVICE rutine *****

ISR ;************************
; *** ISR CONTEXT SPAR ***
;************************

BCF INTCON, GIE; deaktivere alle avbrudd
btfsc INTCON, GIE; forsikrer avbrudd er deaktivert
goto ISR
movwf W_TEMP; sammenheng spare: W
swapf STATUS, W; kontekst spare: STATUS
movwf STATUS_TEMP; sammenheng lagre
clrf STATUS; banken 0, uavhengig av nåværende bank
movfw PCLATH; sammenheng spare: PCLATH
movwf PCLATH_TEMP; sammenheng lagre
clrf PCLATH; siden null, uavhengig av gjeldende side
BCF STATUS, IRP; tilbake til banken 0
movfw FSR; sammenheng spare: FSR
movwf FSR_TEMP; sammenheng lagre
; *** Sammenheng lagre gjort ***

;**************************
; *** ISR MAIN EXECUTION ***
;**************************

; *** Fastslå opphavet til avbruddet ***
btfsc INTCON, INTF; sjekk for RB0/INT avbryte
goto _ISR_RS232; hvis angitt, var det et tastatur hjerneslag

; Catch-all
goto ISRend; uventet IRQ, si utføring av ISR

;******************************
; *** RS232 DATA ACQUISITION ***
;******************************
_ISR_RS232
; Først deaktivere avbryte kilde
BCF INTCON, INTE; deaktivere RB0/INT avbryte
; Andre, skaffe RS232 data
MOTTA; makro av RS232 programvare timer
bSF RSflag; aktivere RS232 data mottak flag
goto _ISR_RS232end; avslutte RS232 ISR riktig

;***********************************
; *** Clearing av Interrupt FLAGS ***
;***********************************
; MERK: Nedenfor jeg bare klare avbruddet flaggene! Dette er ikke
; Nødvendigvis bety at den avbryter allerede reaktiveres.
; Utgangspunktet interrupt re-aktivering blir utført på slutten av
; Tilsvarende tjeneste rutine i normal drift modus.
; Flagget ansvarlig for den aktuelle ISR samtalen må være ryddet
; Å hindre rekursive ISR samtaler. Andre avbryte flagg, aktiveres
; Under utførelse av denne ISR, vil umiddelbart bli servert ved
; Oppsigelse av gjeldende ISR løpe.
_ISR_RS232error
bSF INTCON, INTE; etter feil, aktiverer IRQ allerede her
_ISR_RS232end
BCF INTCON, INTF; klart RB0/INT avbryte flag
; goto ISRend; avslutte utførelse av ISR

;*****************************************
; *** ISR OPPSIGELSE (CONTEXT RESTORE) ***
;*****************************************

ISRend movfw FSR_TEMP; sammenheng restaurere
movwf FSR; sammenheng restaurere
movfw PCLATH_TEMP; sammenheng restaurere
movwf PCLATH; sammenheng restaurere
swapf STATUS_TEMP, W; sammenheng restaurere
movwf STATUS; sammenheng restaurere
swapf W_TEMP, F; sammenheng restaurere
swapf W_TEMP, W; sammenheng restaurere
RETFIE; aktivere global interrupt (INTCON, GIE)

;***** END OF avbryte TJENESTEN rutine *****


;************** MAIN **************

MAIN LCDinit; LCD Initialisering
RS232init; RS232 Initialisering
clrf FLAGreg; initialisere alle flagg

; *** Oppstartsmeldingen av LCD ***
LCDchar 'R'
LCDchar 'S'
LCDchar '2 '
LCDchar '3 '
LCDchar '2 '
LCDchar ''
LCDchar 'C'
LCDchar 'o'
LCDchar 'm'
LCDchar 'm'
LCDchar 'u'
LCDchar 'n'
LCDchar 'i'
LCDchar 'c'
LCDchar 'a'
LCDchar '-'

LCDline 2

LCDchar 't'
LCDchar 'i'
LCDchar 'o'
LCDchar 'n'
LCDchar ''
LCDchar 'o'
LCDchar 'n'
LCDchar ''
LCDchar 'P'
LCDchar 'jeg'
LCDchar 'C'
LCDchar '1 '
LCDchar '6 '
LCDchar 'F'
LCDchar '8 '
LCDchar '4 '

; *** Oppstartsmeldingen til RS232 ***
, Dette gjøres ved å lese en look-up table
; Definere mengden tabellen elementer for oppstart melding
# define tab_size4 d'48 '
movlw tab_size4; store beløp på bordet elementer i skranke
movwf TEMP5
; Sende melding
_ILOOP1 Movlw HIGH WelcomeTable; få riktig side for PCLATH
movwf PCLATH; forberede høyre side bit for table lese
movfw TEMP5; får faktisk telle ned verdien
sublw tab_size4; tabellen offset: w = tab_size4 - TEMP6
Ring WelcomeTable; samtale søketabellen
SENDw; RS232 utgang
decfsz TEMP5, f; Decrement counter
goto _ILOOP1

0x1a WAITX, b'00000111 '; vent litt tid

; Litt animasjon ...
SEND 'a'
SEND 'n'
SEND 'i'
SEND 'm'
SEND 'a'
SEND 't'
SEND 'i'
SEND 'n'
SEND 'g'
SEND ''
SEND 'L'
SEND 'C'
SEND 'D'
SEND ".
SEND ".
SEND ".
SEND CR; Vognretur
SEND LF; Line Feed

movlw d'16 '
movwf TEMP5
_SHL1 LCDcmd LCDSL; skift venstre LCD display innhold
WAIT 0xC0
decfsz TEMP5, f
goto _SHL1

, Og endelig restarte / clear LCD
LCDcmd LCDCLR

LCDchar 'R'
LCDchar 'S'
LCDchar '2 '
LCDchar '3 '
LCDchar '2 '
LCDchar ''
LCDchar 'R'
LCDchar 'e'
LCDchar 'c'
LCDchar 'e'
LCDchar 'p'
LCDchar 't'
LCDchar 'i'
LCDchar 'o'
LCDchar 'n'
LCDchar ':'

LCDline 2

LCDchar 'C'
LCDchar 'h'
LCDchar 'a'
LCDchar 'r'
LCD_DDAdr 0x47
LCDchar 'V'
LCDchar 'a'
LCDchar 'l'
LCDchar 'u'
LCDchar 'e'

SEND 'r'
SEND 'e'
SEND 'a'
SEND 'd'
SEND "y"
SEND ".
SEND ".
SEND ".
SEND CR; Vognretur
SEND LF; Line Feed

;******************************
LOOP btfsc RSflag; finne RS232 data mottak flag
Ring RSservice; hvis angitt, kaller RS232 ekko & LCD display rutine
goto LOOP
;******************************

; ORG 0x230, om nødvendig, flytte look-up bord

WelcomeTable
addwf PCL, F; legge utlignet til bords base pekeren
retlw CR
retlw LF
DT «Microchip PIC16F84 tilkoblet og stand-by ..." , Opprette tabell
retlw CR
WTableEND retlw LF
IF (HIGH (WelcomeTable)! = HØY (WTableEND))
ERROR "WelcomeTable treff siden grensen!"
Endif

END
Tilbake til toppen
ece4afe



Joined: 16 juni 2005
Innlegg: 16


Post 24 april 2006 9:34

UART teori


hallo,

mitt mål er å ha en seriell kommunikasjon, som er en ren programvare, ingen UART siden f84 har ingen innebygd UART, og ingen interrupt også. Så derfor vil programmet se slik måte,

la oss si at hvis jeg vil sende kapital C som er 43hex, til PC, vil jeg sende første start bit som er en logikk null, forsinkelse (9600kbps ---> om 104us) og dataene som er bokstaven C (01000011 i binær), hvor i, MSB først, deretter forsinkelse igjen, så neste bit, forsinkelse ............... før jeg ankommer Siste eller høyttaler, forsinkelse så stopp bit, noe som er en logikk én.

Jeg bruker C i programmering.

Kan du gi meg atleast et hint om hvordan du skal angripe dette problemet

Hilsen,

Chris
Tilbake til toppen
hermin



Joined: 19 Apr 2005
Innlegg: 135
Hjalp: 9


Post 24 april 2006 13:30

kommuniserer via UART i c


Jeg tror det beste du kan bruke vil være en konstant bithastighet, seriell kommunikasjon. og jeg anbefaler også å bruke et null-tegn i stedet for en start eller stopp litt,
Tilbake til toppen
Google
AdSense
Google Adsense




Post 24 april 2006 13:30

Annonser




Tilbake til toppen
BeeBop



Joined: 19 februar 2006
Innlegg: 161
Hjalp: 15


Post 24 april 2006 15:44

hvordan programvaren leser seriell kommunikasjon


Chris,
Hvis du så på forsamlingen jeg ga deg, det er for en 16F84, som jeg skjønner har ingen maskinvare UART. Og hvis du ser på dataarket for PIC finner du på side 3 at den har:
Quote:
Fire avbryte kilder:
- Eksterne RB0/INT pin
- TMR0 timer overflow
- PORTB <7:4> avbruddet på endring
- Data EEPROM skrive ferdig

Du gjorde ikke si hvordan du programmerer den, men du sa du ville
Quote:
å forstå og sette pris på teorien om seriell kommunikasjon
som ledet meg til å tro at du ville ha noe i forsamlingen. Mens C er nærmere maskinvaren enn de fleste høye språk, er det fortsatt et høyt nivå språk, og du vil ikke få så mye ut av det som du ville gjort montering. Når det er sagt, som C-kompilator bruker du? De har sine egne måter å produsere hex-kode, og noen enda inkludere enkelte biblioteker. I mange kompilatorer, for å få riktig timing, må du inline assembly, iallfall for forsinkelsene, for at dette skal fungere godt.
Hvis jeg husker også, sender du LSB først, ikke MSB.
I utgangspunktet sløyfe deg gjennom byte du vil sende. Din linjen er høy i inaktiv, fjerner du den til å sende en start litt, og deretter ringe forsinkelsen. Les den første bit av dataene du ønsker å sende. Hvis det er en, og angi deretter pin og ringe forsinkelsen. (Her er blir vanskelig med C - hvor mange ganger tar det å komme inn i Dely med kompilatoren?) Så du flytter din biter til høyre, og se neste bit. Hvis bit er høy, sett pin. Hvis bit er lav, fjerne pin. Så ringe forsinkelsen igjen. Gjør dette før du har skiftet din byte ut, og når du er ferdig, sende stoppbit.
Jeg vil anbefale å sende bare ett tegn før du har det fungerer.
Hvis du bare sende fra PIC, mottar ikke, bør du kunne gjøre det uten avbrudd, med mindre du velger å bruke dem for timing.
Igjen, som kompilator bruker du?
Hilsen,
Robert

PS her er en tutorial på programvare Serial Comms: http://www.sparkfun.com/commerce/present.php?p=The% 20Serial% 20Biggie% 20Page1
Tilbake til toppen
Arabiske versjonen Bulgarsk versjon Catalan versjon Tsjekkisk versjon Dansk version Tysk versjon Gresk versjon English version Spansk versjon Finsk versjon Fransk versjon Hindi versjon Kroatisk versjon Indonesisk versjon Italiensk versjon Hebraisk versjon Japansk versjon Koreanske versjonen Litauisk versjon Latvisk versjon Nederlandsk versjon Norsk versjon Polsk versjon Portugisisk versjon Rumensk versjon Russisk versjon Slovakisk versjon Slovensk versjon Serbisk versjon Svensk versjon Tagalog version Ukrainsk versjon Vietnamesisk versjon Kinesisk versjon
Post new topic Reply to topic EDAboard.com Forum Hovedsiden -> Microcontrollers -> hjelp på seriell kommunikasjon benytter programvare ikke UART
Side 1 av 1

subj

text

Alle klokkeslett er GMT 1 Hour
Lignende emner:
Kommunikasjon Controller>> Serial UART i Verilog Nee (1)
Hvordan Lage UART med Software (ikke brukt SBUF) på 8051 (7)
GSM med 8051-kontrolleren ikke kunne gjøre seriell kommunikasjon (2)
Programvare UART for 8051 Bruke Embedded C (1)
Nice Seriell kommunikasjon dataskjerm programvare (1)
Serial Communication Bruke VB (2)
Serial Communication bruker I2C (19)
Seriell kommunikasjon ved hjelp Matlb ... (2)
YI kan ikke kompilere passere bruker VC (Seriell kommunikasjon) (2)
Rx / Tx seriell kommunikasjon via Hyperteminal hjelp PIC18F .. (2)


Abuse | | Administrator | | Moderatorer | | Støtt oss | | sitemap
topic RSS