Bascom soros kommunikáció 2 stopbittel

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ha COM0-ra „2 stop bit-et” akarok beállítani! Ez így jó lesz?
Vagy létezik ennek egyszerűbb módja is?

Kód: Egész kijelölése

  'Simple MASTER sample
'RS 485
'$regfile = "m162def.dat"                                    ' specify the used micro

$regfile = "m644def.dat"                                    ' specify the used micro
$crystal = 14745600
$baud = 9600                                                ' use baud rate

$hwstack = 42                                               ' default use 32 for the hardware stack
$swstack = 40                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space

Rs485dir Alias Portd.5
Config Rs485dir = Output
Const Rs485read = 0
Const Rs485write = 1
Rs485dir = Rs485read                                        ' go to receive mode

'             TX    RX
' COM0   PD.1   PD.0  rs485
'            PD.5           data direction rs485

'some variables we will use

Dim S As String * 10
Dim Mybaud As Long

'when you pass the baud rate with a variable, make sure you dimesion it as a LONG
Mybaud = 9600

Dim B As Byte
Dim W As Word
Dim L As Long

B = &HFF
W = &H4567                                                  ' set some values
L = &H12345678

S = "1234567890"
'Read "RS-485 master"
Do

'first get some data
Rs485dir = Rs485read                                        ' go to receive mode
Waitms 10
 If Ischarwaiting(#0) <> 0 Then                             ' (#0) did we got something back?
   Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 2
   Serin B , 0 , D , 0 , Mybaud , 0 , 8 , 2
 End If
'(
'Print "RS-485 master"
'now send it
Rs485dir = Rs485write                                       ' go to Write mode
Waitms 10
Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 2
')
'                                       ^- 2 stop bit
'                                   ^----- 8 data bits
'                               ^--------- even parity (0=N, 1 = E, 2=O)
'                        ^---------------- baud rate
'                  ^---------------------- pin number
'              ^-------------------------- port so PORTD.0 and PORTD.1 are used
'          ^------------------------------ for strings pass 0
'      ^---------------------------------- variable
Wait 1
Loop

End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ez a Bascom minta 1:1-ben....
Minta a Serout utasításra....
Elvileg jó lehet....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

És ez most HW vagy SW COM-portot állít?
$regfile = "m644def.dat"
Config Com1 = Mybaud , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
:?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Config COM1 => HW portot állít...


De ha tutibiztosra akarsz menni, akkor a belső regiszterek is piszkálhatók a processzorban :P .
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Kösz közben már én is rájöttem!
Az adás megy is szépen, de a vétel pocsék!
:roll:
Megszakításban közvetlen regiszterolvasással már 1* megoldottam!
De nemlétezik, hogy másképpen nem megy!?
:(
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Tessék bufferelt bemenetet használni....
Nálam ez működik 1000+1 helyen:)....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

És mekkora buffer méret lenne az ideális?
Pontosan 22mSec-enként kellene 600 – 700 bytes átküldeni!
Illetve venni!

Most ez a buffer HW-s (USART-ban), vagy a memóriában hozza létre?
:?:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Rájöttem, ha csak 1 COM port van Akkor is kel a (#1):
For I = 1 To 255

B(i) = Inkey(#1)
' B(i) = Waitkey(#1)

Next I
Így már mind 2 utasítással megy! Hogy milyen egyszerű, és milyen nehezen jöttem rá!
A Bascom így „B(i) = Inkey(),B(i) = Waitkey() ” sem jelzet hibát! Csak éppen nem olvasott semmit!
:lol:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

2 COM eseten a megkulonboztetes miatt javasolt a #1 es a #2 hasznalata. Elvileg parameter nelkul a COM1-t kell jelentse....


HW Buffer _csak_ a SRAM-ban johet letre (hol masutt kulonben?)
Buffermeret: kerdes hogy mi az a _leghosszabb_ ido, amin nem ersz ra foglalkozni a soros porttal. ha 1 sec, akkor 9600 bps esetben 960 byte tud jonni. Na itt a ciki, mert a buffer max merete 254 byte lehet!
Válasz küldése