NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3783 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 20 از 23

موضوع: مشکل در رابط USART در BASCOM

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Oct 2007
    نوشته ها
    24
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض مشکل در رابط USART در BASCOM

    به نام خدا

    با عرض سلام خدمت دوستان خوب ودانشمندم.
    من برای ارسال دعدد دما به نقطه ای دور برای یک میکرو دیگر دچار مشکل شده امآیا رابط USART BASCOM مشکل دارد یا اشکال از کار من است اگر اشکال از کار من است لطف کنید و یک نمونه مثال از رابطه USART دو میکرو برای من قرار دهید متشکرم.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Aug 2007
    نام
    سعید نیکنامی
    نوشته ها
    253
    تشکر
    1
    تشکر شده 28 بار در 20 پست

    پیش فرض

    با سلام
    چشم اما يه پيشنهاد .. شما بياين سي كار كنين بخدا راحت تر از بيسيك هستش
    اشكال و باگ هم نداره نمي دونم اين ايراني ها از جونه بيسيك چي مي خوان
    مايكرو سافت بيسيك رو براي آموزش ابتدايي زبان برنامه نويسي نوشته واسه پروژه بايد سي كار كنين

  4. #3
    مدیر باز نشسته
    تاریخ عضویت
    Aug 2007
    نام
    تهران
    نوشته ها
    384
    تشکر
    2
    تشکر شده 57 بار در 31 پست

    پیش فرض سلام

    اولا به بيسيك بي احترامي نكنيد
    اگه c اخرشه ولي بيسيك هم باحاله
    بيسيك بعضي از توابعش درست كار نميكنه اين درسته ولي خيلي چيزا داره كه سرعت اجراي پروه رو بالا ميبره
    مثلا uart نرم افزاري كه تو سي بايد بنويسيد ولي بيسيك تابعش هست

    اما شما دوست عزيز ديتا رو از چه طريق به فاصله دور ميفرستيد؟

  5. تشکرها از این نوشته :


  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Oct 2007
    نوشته ها
    24
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    به نام خدا
    باز هم سلام اولا این که برنامه ای که من روی اون کار می کنم نیاز به ال سی دی گرافیکی داره و code vision ال سی دی گرافیکی نداره البته راستیتش من codevision را هم دست و پا شکسته بلدم وفقط کتابهاش رو خوندم و با وجود bascom به این راحتی زیاد رقبت نمی کنم با codevision کار کنم اما قبول دارم که codevision از bascom بهتره و
    امیدوارم با داشتن دوستان خوبی مثل شما ab) زبان سی رو که برای من سختتر از بیسیک هست را یاد بگیرم
    و دوما این که من فاصله زیاد را می خواهم به وسیله تراشه rs485 ایجاد کنم سوال من فقط همین است که ایا رابط usart
    در BASCOM درست کار می کند یا نه و اگر بله هر وقت بیکار بودید لطف کنید یک برنامه کوچک در این رابطه که عملا جواب هم داده قرار دهید .

  7. #5
    مدیر باز نشسته
    تاریخ عضویت
    Aug 2007
    نام
    تهران
    نوشته ها
    384
    تشکر
    2
    تشکر شده 57 بار در 31 پست

    پیش فرض سلام

    سلام
    دوست عزیر بیسکام خیلی راحت با uart ارتباط برقرار میکنه
    شما بنویسید:
    baud=9600
    بعدش هرچی دلتون خواست با print بفرستید
    با input بگیرید
    اول باود رو $ بذازید
    اما با هر برنامه ای که بفرستید بیسیک یا سی بازهم مواردی هست که باید در نظر داشته باشید
    اولا rs485 یه طور دیگه هست که توی help اینرو سرچ کنید توضیح مفصل داده:
    config print
    خوب هم کار میکنه
    اما اگه با rs232 بخوایید رادیویی بفرستید بستگی داره به ماژول شما که نویز رو کنسل میکنه یا نه چون avr به نویز حساسه اگه ماژول نویز رو کنسل نمیکنه برنامه نویسی شما پیچیده میشه
    به طوری که باید اول و آخر داده های شما با crc بسته بشه
    بعد شما کارکتر به کارکتر crc رو دریافت میکنید تا به داده برسید
    از اینتراپت اصلا نمیشه استفاده کرد چون میکرو هنگ میکنه
    اما روش های دیگه ای برای ارسال داده به مصافت دور هم هست
    مثلا x10 که روی خط برقه و بیسکام ساپورت میکنه
    از طریق خط تلفن lan یا شبکه هم میشه که بیسکام ساپورت میکنه
    اینها به شما کمک میکنه سرعت اجرای پروژه رو بالا ببرید وگرنه سی هیچ کدوم از اینایی که گفتم رو نداره تازه codevision بدترین نوع کامپابلر سی برای avr هستش که میتونید با مقایسه ورژن های مختلف به این نتیجه برسید
    این کامپایلر ورژن قدیمیش یه چیزایی داره که جدیدها یا باگ دارن یا اصلا بیخیال شدن امکان رو ورداشتن
    با همه این تفاصیر اگه این مشکل ما رو کنار بذاریم این دو کامپایلر هیچ فرقی باهم ندارن

    برای اطلاع یشتر از طرز کار با uart توی بیسکام به باود ریت هوشمند که تو سایت گذاشتم مراجعه کنید
    مطالبی توش ذکر شده که همه ابهام هم رد از بین میبره
    باز هم سوال داشتید در خدمتم

  8. #6
    کاربر علاقه مند
    تاریخ عضویت
    Oct 2007
    نوشته ها
    24
    تشکر
    0
    تشکر شده 3 بار در 3 پست

    پیش فرض

    به نام خدا
    خدا خیرت بده شما که اینقدر توضیح دادی لطف کن و نمنه برنامه عملی اون رو هم قرار بده چون برنامه ای که من نوشتم همه چیزش چک شده این هم برنامه های مربوط به فرستنده وگیرنده خودت چکشون کن
    این برنامه گیرنده:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Config Serialin = Buffered , Size = 20
    Cls
    Lcd "in the name of god"
    Wait 1
    Cls
    Enable Interrupts
    Dim A As Byte
    Do
    A = Waitkey()
    Cls
    Lcd A
    Loop
    End
    این هم برنامه فرستنده:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Config Pind.1 = Output
    Dim A As Byte
    A = 48
    Declare Sub Frs
    Config Serialout = Buffered , Size = 20
    Enable Interrupts
    Do
    Debounce Pinb.0 , 0 , Frs
    Loop
    End
    Sub Frs:
    Waitms 500
    Print A
    End Sub Frs

  9. #7
    مدیر باز نشسته
    تاریخ عضویت
    Aug 2007
    نام
    تهران
    نوشته ها
    384
    تشکر
    2
    تشکر شده 57 بار در 31 پست

    پیش فرض سلام

    اقا دمت گرم
    اين برنامه كه نوشتيد درسته

    نميدونم چرا همه تو uart گير دارن

    شما هر داده اي رو به print بديد ارسال و هر داده اي رو خواستيد از input بگيريد.

    اگر ميخواهيد مثل سي كاركتر به كاركتر بگيريد مثل دستور getchar تو سي از دستور waitkey تو بيسيك استفاده كنيد

    اگه ميخواهيد از اينتراپت تو دريافت استفاده كنيد urxc رو enable كنيد و واسش زير برنامه بذاريد

    تازه اگه خواستيد تو برنامه باود ريت رو تنظيم كنيد $baud هستش فرمولش هم تو ديتاشيت همه ميكرو ها هست(بايد ubrr رو دستكاري كنيد و ucsra)
    راستي خطاي باود نبايد از 1% بيشتر بشه واسه همين از فركانس هايي استفاده ميشه كه تو فورمول بالا عدد صحيح ايجاد كنه مثله 11.0592MHZ يا 14.7456MHZ

    اگه خواستيد ميكرو هاي خفن كه چند تا uart دارن كار كنيد تمام دستورات بالا بهش # اضافه ميشه مثل print#1 داده رو رو پورت 1 ميفرسته

    تازه uart نرم افزاري هم هست كه با open انجام ميشه كه تو help كامل توضيح داده

  10. تشکرها از این نوشته :


  11. #8
    عضو جدید
    تاریخ عضویت
    Apr 2008
    نوشته ها
    5
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    دوستاي عزيز اگه قبلا كسي مدار فرستنده و گيرنده با ميكرو درست كرده و كار ميكنه لطف كنيد برنامه به زبان بيسيك و مدارشو بزارين
    تشكر..... :D

  12. #9
    تازه وارد
    تاریخ عضویت
    Jun 2009
    نوشته ها
    3
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام به همه دوستان
    من يه مشكل كوچيك با uart دارم چند تا ميكرو رو به هم وصل كردم هر ميكرو 6-8 تا uart نرم افزاري به عنوان ورودي داره و 1 uart نرم افزاري به عنوان خروجي. تمامي ميكرو ها mega8 هستند و با فركانس 8MH و Boad=9600 يه داده وارد ميكرو اول ميشه اين داده بعداز پردازش وارد ميكرو دوم مي شه و الا آخر تا اينجا مشكلي وجود نداره مشكل وقتي بوجود مياد كه مي خوام يه ورودي ديگه از ميكرو آخر به ميكرو اول بدم يعني در واقع خروجي ميكرو آخر رو به عنوان ورودي به ميكرو اول وصل كنم يه مقدار اوليه هم بايد در حركتاول به ميكرو اول داده بشه كه اونم انجام ميشه حالا وقتي اين ورودي رو توي ميكرو اول فعال مي كنم تمامي ميكرو ها هنگ مي كنند يه جورايي همه توي دستور input مي مونند ميكرو اول دنبال ورودي از ميكرو آخر هست در حالي كه ميكرو آخر خودش در انتظار ميكرو هاي قبلي هست هر كاري هم كردم كه از لحاظ زماني اين دوتا با هم تداخل پيدا نكنند باز هم بعد از چند تا حركت توي حلقه ميكرو ها هنگ مي كنند
    از دوستان كسي راه حلي به ذهنش ميرسه تورو خدا كمك كنيد؟؟؟؟

  13. #10
    تازه وارد
    تاریخ عضویت
    May 2009
    نام
    Tehran
    نوشته ها
    1
    تشکر
    0
    تشکر شده 2 بار در 1 پست

    پیش فرض

    UART
    A Universal Asynchronous Receiver and Transmitter (UART) can be used to send and receive data between two devices. More specific these devices can be PC-to-PC, PC-to-micro controller and micro controller-to-micro controller. The UART communicates using TTL voltages +5V and 0V or LVTTL depending on your micro controllers VCC voltage.

    If you wish to connect to a PC you need to use RS232 protocol specifications. This means that the hardware communication is done with specific voltage levels. (+15V and -15V) This can be achieved by using a MAX232 level shifter.

    The hardware is explained in this schematic:



    The DB-9 connector has 9 pins but you only need to use 3 of them. Notice that the drawing above shows the FRONT VIEW thus remember that you are soldering on the other side. On most connectors the pin outs can also be found on the connector itself.

    If your controller has no UART you can use a software UART see below. If your controller has one UART you connect controller pins TxD and RxD to TxD and RxD in the schematic above. If your controller has more than one UART you connect controller pins TxD0 and RxD0 to TxD and RxD in the schematic above.
    You now need to initialize the program in your micro controller, open a new .bas file and add the following code in the beginning of your program.

    $regfile="your micro here def.dat"
    $crystal= 8000000
    $baud= 19200

    Make sure to define your micro controller after $regfile for example if you use the ATMega32
    $regfile="m32def.dat"

    Some new chips can use an internal oscillator, also some chips are configured to use the internal oscillator by default. Using an internal oscillator means you do not need an external crystal.

    Perform this step only if you have an internal oscillator.
    Open the BASCOM-AVR programmer like this:


    Select the “Lock and Fuse Bits” tab and maximize the programmer window.
    Check if you see the following in the “Fusebit” section:
    "1:Divide Clock by 8 Disabled"
    and
    "Int. RC Osc. 8 MHz; Start-up time: X CK + X ms; [CKSEL=XXXX SUT=XX]"



    These options are not available for all AVR’s, if you don’t have the option do not change any fuse bits.

    If these options are available, but in a wrong setting. Change the setting in the drop down box and click another Fuse section. Finally click the "Program FS" button. Click "Refresh" to see the actual setting.

    Now connect a straight cable between the DB-9 connector, micro controller side and the PC side.
    Program a test program into your micro controller, it should look like this:

    $regfile="m32def.dat"'Define your own
    $crystal= 8000000
    $baud= 19200

    Do
    Print"Hello World"
    Waitms 25
    Loop

    End

    Now open the BASCOM-AVR Terminal and set your connection settings by clicking “Terminal” -> “Settings” Select your computers COM port and select baud 19200, Parity none, Data bits 8, Stop bits 1, Handshake none, emulation none.



    If you see the Hello World displayed in the BASCOM-AVR Terminal emulator window, your configuration is OK. Congratulations.

    Example
    You can also try this example with the BASCOM Terminal emulator, it shows you how to send and receive with various commands.

    $regfile="m88def.dat"
    $crystal= 8000000
    $baud= 19200

    Dim Akey AsByte'Here we declare a byte variable

    Print
    Print"Hello, hit any alphanumerical key..."
    Akey =Waitkey()'Waitkey waits untill a char is received from the UART
    Print Akey

    Wait 1
    Print
    Print"Thanks!, as you could see the controller prints a number"
    Print"but not the key you pressed."

    Wait 1
    Print
    Print"Now try the enter key..."
    Akey =Waitkey()
    Akey =Waitkey()
    Print Akey

    Print
    Print"The number you see is the ASCII value of the key you pressed."
    Print"We need to convert the number back to the key..."
    Print'Notice what this line does
    Print"Please try an alphanumerical key again..."
    Akey =Waitkey()
    PrintChr(akey)'Notice what this does
    Print"That's fine!"

    Wait 1
    Print
    Print"For a lot of functions, just one key is not enough..."
    Print"Now type your name and hit enter to confirm"

    Dim Inputstring AsString* 12 'Declare a string variable here


    Do
    Akey =Waitkey()
    If Akey = 13 ThenGoto Thanks 'On enter key goto thanks
    Inputstring = Inputstring +Chr(akey)'Assign the string
    Loop

    Thanks:
    Print"Thank you "; Inputstring ;" !"'Notice what ; does

    Wait 1
    Print
    Print"Take a look at the program code and try to understand"
    Print"how this program works. Also press F1 at the statements"
    Print
    Print"If you understand everything continue to the next experiment"

    End

    ASCII
    As you could have seen in the previous example we use the PRINT statement to send something to the UART. Actually we do not send just text. We send ASCII characters. ASCII means American Standard Code for Information Interchange. Basically ASCII is a list of 127 characters.

    ASCII Table (Incomplete)

    Decimal Hex Binary Value
    ------- --- ------ -----
    000 000 00000000 NUL (Null char.)
    008 008 00001000 BS (Backspace)
    009 009 00001001 HT (Horizontal Tab)
    010 00A 00001010 LF (Line Feed)
    012 00C 00001100 FF (Form Feed)
    013 00D 00001101 CR (Carriage Return)
    048 030 00110000 0
    049 031 00110001 1
    052 034 00110100 4
    065 041 01000001 A
    066 042 01000010 B
    067 043 01000011 C

    You can find a complete ASCII table here

    CARRIAGE RETURN (CR) AND LINE FEED (LF)
    In the previous example you can also see that a second print statement always prints the printed text to the following line. This is caused by the fact that the print statement always adds the CR and LF characters.

    Basically if we state:
    Print“ABC”
    We send 65 66 67 13 10 to the UART. (In binary format)

    The carriage return character (13) returns the cursor back to column position 0 of the current line. The line feed (10) moves the cursor to the next line.

    Print“ABC”;
    When we type a semicolon ( ; ) at the end of the line...
    Bascom does not send a carriage return/line feed, so you can print another text after the ABC on the same line.

    Print“ABC”;Chr(13) ;
    This would send only ABC CR. The next print would overwrite the ABC.

    OVERVIEW
    Here are some other commands that you can use for UART communications:

    Waitkey()
    Waitkey will until a character is received in the serial buffer.

    Ischarwaiting()
    Returns 1 when a character is waiting in the hardware UART buffer.

    Inkey()
    Inkey returns the ASCII value of the first character in the serial input buffer.

    Print
    Sends a variable or non-variable string to the UART



    ANOTHER EXAMPLE
    This example shows how to use Ischarwaiting to test if there is a key pressed. And if there is, read to a variable.

    'Print "Press B key to start"
    Dim Serialcharwaiting AsByte, Serialchar AsByte

    Serialcharwaiting =Ischarwaiting()'Check if B or b pressed then goto
    If Serialcharwaiting = 1 Then
    Serialchar =Inkey()
    If Serialchar = 66 Or Serialchar = 98 Then
    Goto MyRoutine
    EndIf
    EndIf

    Goto Main

    Myroutine:
    'Statements

    Main:
    'Statements
    End


    BUFFERING SERIAL DATA
    If you wish to send and receive data at high speed, you need to use serial input and serial output buffers. This buffering is implemented in BASCOM-AVR and can only be used for hardware UART’s.

    To configure a UART to use buffers, you need to use the Config statement.

    Config Serialout = Buffered , Size = 20
    and/or
    Config Serialin = Buffered , Size = 20

    More information can be found in BASCOM-Help. Search topic = "config serialin". There is also a sample program “RS232BUFFER.BAS” in the samples folder if you wish a demonstration of the buffering.


    SOFTWARE UART
    The previous examples used the hardware UART. That means the compiler uses the internal UART registers and internal hardware (RxD(0) and TxD(0)) of the AVR. If you don’t have a hardware UART you can also use a software UART.

    The Bascom compiler makes it easy to “create” additional UART’s. Bascom creates software UART’s on virtually every port pin.

    Remember that a software UART is not as robust as a hardware UART, thus you can get timing problems if you have lots of interrupts in your program.

    For this example we use micro controller pins portc.1 and portc.2.
    Connect portc.1 to TxD and portc.2 to RxD see the schematic above.

    Change the $regfile and program this example:

    $regfile="m88def.dat"
    $crystal= 8000000
    $baud= 19200

    Dim B AsByte
    Waitms 100

    'Open a TRANSMIT channel for output
    Open"comc.1:19200,8,n,1"ForOutputAs#1
    Print#1 ,"serial output"

    'Now open a RECEIVE channel for input
    Open"comc.2:19200,8,n,1"ForInputAs#2
    'Since there is no relation between the input and output pin
    'there is NO ECHO while keys are typed

    Print#1 ,"Press any alpha numerical key"

    'With INKEY() we can check if there is data available
    'To use it with the software UART you must provide the channel
    Do
    'Store in byte
    B =Inkey(#2)
    'When the value > 0 we got something
    If B > 0 Then
    Print#1 ,Chr(b)'Print the character
    EndIf
    Loop
    Close#2 'Close the channels
    Close#1

    End

    After you have programmed the controller and you connected the serial cable, open the terminal emulator by clicking on in Bascom.
    You should see the program asking for an alphanumerical input, and it should print the input ba
    ck to the terminal.

  14. کاربران : 2 تشکر کرده اند از شما acidburn1418 برای ارسال این پست سودمند:


  15. #11
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    پیش فرض

    دوستان عزیز جهت دریافت اطلاعات وارسال اطلاعات بهترین دستورات print و input میباشد فقط کافیه نکات زیر رو در نظر داشته باشیم:

    1-چون در دستور input میکرو منتظر دریافت اطلاعات میمونه باید قبل از رسیدن اطلاعات این دستور فعال شده باشه.
    2-ارسال و دریافت اطلاعات بصورت رشته باشه.
    3-برای راحتی کار حتما تو پروتئوس برنامه چک بشه.

  16. #12
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    Gadid سوال در مورد روش خارج شدن از دستور input

    دوستان من با میکروهای atmega32 یه شبکه ایجاد کردم ولی با یه مشکل مواجهم به این صورت که اگر یکی از میکروهای اسلیو جواب نده میکروی مستر همچنان منتظر میمونه تا اون اسلیوی که گفتم جواب بده و این موجب هنگ کردن کل شبکه میشه البته لازم به توضیحه که از watchdog نمیخوام استفاده کنم اگر کسی اطلاعاتی داشته باشه خیلی ممنون میشم

  17. #13
    ناظم سایت KHM آواتار ها
    تاریخ عضویت
    Jul 2010
    نوشته ها
    1,047
    تشکر
    2,895
    تشکر شده 2,131 بار در 905 پست

    پیش فرض

    میتونی تایمر راه بندازی و این کار رو بکنی که قبل اینکه بخوای اطلاعاتی بفرستی،تایمر رو فعال کنی و اگه مدت زمان خاصی سپری شد و جوابی گرفته نشد،به فلان قسمت برنامه بره...
    و اگه جوابی از slave گرفته شد، تایمر رو صفر کنی..یا دوباره غیر فعال...

  18. تشکرها از این نوشته :


  19. #14
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    پیش فرض

    از اینتراپت تایمر استفاده کردم ولی مشکل اینجاست که حتما اینتراپت باید منتهی بشه به یک زیر برنامه و من هنوز راهی پیدا نکردم که توی اون زیر برنامه این دستور input رو کنسل کنم یا کاری کنم که میکرو ازش رد بشه و هر دستوری که نوشتم میکرو بعد از انجام اون دستور در ادامه دوباره میاد روی همون دستور input
    ویرایش توسط habib_sadeghi : 03-08-2012 در ساعت 22:38

  20. #15
    ناظم سایت KHM آواتار ها
    تاریخ عضویت
    Jul 2010
    نوشته ها
    1,047
    تشکر
    2,895
    تشکر شده 2,131 بار در 905 پست

    پیش فرض

    خوب رفیق برنامت رو به چند زیر برنامه تقسیم میکنی...وقتی جوابی نیومد،میپره به برنامه ی بعد input...یعنی بعد input رو 1زیر برنامه میکنی

  21. تشکرها از این نوشته :


  22. #16
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    پیش فرض

    خب مشکل همینجاست بعد input رو انجام میده دوباره برمیگرده سر همون دستور input .

    تمام مشکل اینجاست که وقتی از اینتراپت تایمر استفاده میکنیم باید زیر برنامه تموم بشه و با دستور return دوباره برگرده به همونجا که اینتراپت برنامه رو قطع کرده بود
    ویرایش توسط habib_sadeghi : 04-08-2012 در ساعت 02:39

  23. #17
    ناظم سایت KHM آواتار ها
    تاریخ عضویت
    Jul 2010
    نوشته ها
    1,047
    تشکر
    2,895
    تشکر شده 2,131 بار در 905 پست

    پیش فرض

    رفیق درست حسابی منظورتو نفهمیدم...ولی اگه قرار نیست بره رو input شرط بذار براش خو...
    مثلآ بعد اینکه چیزی ارسال کردی برو تو قسمت input...اگه چیزی ارسال نکردی،نرو...
    خوب به جای اینکه با دستور return برگردی اول..میتونی بذاری برگرده اول برنامه ی بعد از input دیگه..ولی اینجوری 1حلقه بینهایت درست میشه..باید شرطی هم بذاری که از این حلقه خارج بشه

  24. #18
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    پیش فرض

    فکر میکنم راه حل رو پیدا کردم . برای سنجش آمادگی اسلیوها ابتدا اسلیو مربوطه رو فراخوانی کردم بعد برای دریافت پاسخ فراخوانی از دستور inkey استفاده کردم در ادامه اگر پاسخ وجود داشت به اسلیو مورد نظر دستور ارسال اطلاعات داده میشه و رشته اطلاعات با دستور input دریافت میشه.

  25. #19
    کاربر فعال mehdi29665 آواتار ها
    تاریخ عضویت
    Mar 2010
    نام
    مهدي ديواندري
    نوشته ها
    166
    تشکر
    187
    تشکر شده 121 بار در 68 پست

    پیش فرض

    سلام
    این برنامه فرستنده

    $regfile = "m8def.dat"
    $crystal = 11059200
    $baud = 9600
    $hwstack = 50
    $swstack = 50
    $framesize = 50
    Config Serialout = Buffered , Size = 254

    Dim A As Byte
    A = 110
    '**************************
    Do
    Printbin A
    Waitms 10
    Loop
    End
    '**************************


    اینم برنامه گیرنده که باید ال سی دی رو حتما کانفیگ کنید (تنظیم پورت برای ال سی دیبا خودتون)

    $regfile = "m8def.dat"
    $crystal = 11059200
    $baud = 9600
    $hwstack = 50
    $swstack = 50
    $framesize = 50
    Config Serialin = Buffered , Size = 254

    Dim A As Byte

    '**************************
    Do
    A = Waitkey()

    Lcd A

    Loop
    End
    '**************************

    برای دقت کار سعی بشه حتما از کریستال مخصوص که دوستمون گفتند استفاده بشه
    ضمنا این برای تست صحت عملکرد برنامه میباشد و در صورتی که جواب درست گرفتید مواردی رو که لازم دارید رو جایگزین میکنید
    (در مواردی برای من پیش اومده که بخاطر بعضی عوامل کنار دریافت کننده بجای استفاده از پورت سخت افزاری بصورت نرم افزار از usrt استفاده کردم)

  26. #20
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2012
    نام
    حبیب اله صادقی
    نوشته ها
    47
    تشکر
    7
    تشکر شده 23 بار در 21 پست

    پیش فرض

    با تشکر از آقای دیواندری من معمولا در میکروی master برای دریافت اطلاعات از بافر استفاده میکنم( علتش هم این هست که با از استفاده از بافر شما میتونید اطلاعات با حجم بیشتر رو بصورت رشته دریافت کنید ) وبرای خواندن اطلاعات از بافر ورودی از دستور input استفاده میکنم حالا مشکل اینجاست که اگر slave اطلاعاتی ارسال نکرده باشه دستور input همچنان منتظر دریافت اطلاعات میمونه و این موجب هنگ کردن میکروی مستر و در نتیجه کل شبکه میشه .

    من با جستجویی که توی help بسکام کردم روش حل این مشکل رو پیدا کردم به این صورت که خود بسکام برای حل این مشکل دستور () ischarwaiting رو پیشنهاد میکنه این دستور نگاه میکنه که آیا اطلاعاتی به بافر ورودی رسیده و اگر رسیده باشه حالا میتونیم از دستور input برای دریافت اطلاعات استفاده کنیم .

    مثال:
    () A=ISCHARWAITING
    IF A=1 THEN
    INPUT S
    END IF

صفحه 1 از 2 12 آخرینآخرین

موضوعات مشابه

  1. کمک در مورد واحد usart
    توسط amiray در انجمن AVR
    پاسخ: 15
    آخرين نوشته: 06-01-2014, 14:26
  2. Usart
    توسط meh1011 در انجمن AT91 series (ATMEL)
    پاسخ: 9
    آخرين نوشته: 09-09-2013, 20:07
  3. Usart
    توسط Caspian1361 در انجمن AT91 series (ATMEL)
    پاسخ: 3
    آخرين نوشته: 21-12-2010, 17:21
  4. Usart |ثبات هاي usart |نحوه كار
    توسط SAHA21 در انجمن AVR
    پاسخ: 2
    آخرين نوشته: 16-08-2010, 00:05

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •