ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 8 از 8
  1. #1
    2015/09/06
    67
    10

    دریافت رشته از وقفه یوزارت

    سلام :applause:
    قبلا با همین عنوان سوالی نوشته بودم که مشکل هم حل شد
    اما این بار یک ایراد کوچولو دارم ولی دوباره با همین عنوان مطرح میکنم
    من کدی نوشتم که میکرو ی مگا32 از یوزارت رشته دریافت کنه
    دریافت میکنه ولی فقط مرتبه ی اول رو
    فکر کنم اون چیزی که باید بیاد از پایه ی میکرو رشته رو بگیره ببره بریزه تو یک آرایه ، خسته میشه و بر نمیگرده
    ولی نمیدونم چیه
    لطفا اگه کسی بلده کمک کنه
    ممنون
    .
    این هم این بخش از برنامه :
    .
    [code=cpp]
    #include <mega32.h>
    #include <delay.h>
    #include <string.h>
    #include <stdio.h>
    #include <lcd.h>
    #include <string.h>
    #asm
    .equ __lcd_port = 0x1b ;
    #endasm



    char l2lcd[17] ;
    unsigned char buffer ;
    int pos2 = 0 ;



    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    buffer = UDR ;
    if(pos2 < 16)
    {
    l2lcd[pos2] = buffer ;
    pos2++ ;
    }
    }
    [/code]
  2. #2
    2012/10/09
    ریوش
    206
    10

    پاسخ : دریافت رشته از وقفه یوزارت


    1- شمارنده pos2 رو بعد از 16 بار دریافت صفر کن.
    2- دیتای UDR رو باید اول چک میکردی که درسته یا غلط .
    3- شما می تونی مقدار UDR رو داخل شرطت هم بخونی.
    4- کستینگ بین char و unsigned char : متغیرهای l2lcd و buffer رو یک شکل کن.
    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"
  3. #3
    2015/09/06
    67
    10

    پاسخ : دریافت رشته از وقفه یوزارت

    ممنون
    ولی همیشه معلوم نیست 16 تا باشه ممکنه یکی باشه یا ده تا
    در مورد ، مورد دوم هم مشکلی نیست
    داخل شرط هم جواب نداد
    مورد چهارم هم همه رو گذاشتم u char
    ولی جواب نداد
  4. #4
    2012/10/09
    ریوش
    206
    10

    پاسخ : دریافت رشته از وقفه یوزارت

    برنامه و شماتیک پروتئوست رو اگه به زبان سی نوشتی بذار تا بهتر بتونیم کمکت کنیم
    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"
  5. #5
    2012/12/23
    19
    3

    پاسخ : دریافت رشته از وقفه یوزارت

    هر وقت وقفه ای رخ میده وقفه سراسری بطور اتوماتیک غیر فعال میشه
    در انتهای دستورات داخل تابع وقفه USART باید وقفه سراسری رو دوباره فعال کنی
    [code=c]#asm("sei&quot[/code]
  6. #6
    2012/10/09
    ریوش
    206
    10

    پاسخ : دریافت رشته از وقفه یوزارت

    نقل قول نوشته اصلی توسط nabi-j
    هر وقت وقفه ای رخ میده وقفه سراسری بطور اتوماتیک غیر فعال میشه
    در انتهای دستورات داخل تابع وقفه USART باید وقفه سراسری رو دوباره فعال کنی
    [code=c]#asm("sei&quot[/code]
    این چیه ؟
    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"
  7. #7
    2012/12/23
    19
    3

    پاسخ : دریافت رشته از وقفه یوزارت

    نقل قول نوشته اصلی توسط m52r65
    این چیه ؟
    دستور فعال سازی وقفه سراسری
  8. #8
    2015/09/06
    67
    10

    پاسخ : دریافت رشته از وقفه یوزارت

    ممنونم از دوستان بابت پاسخ هاتون
    مشکل م تقریبااااااااااااااااا حل شد
    من در سمت ارسال همیشه 16 کاراکتر ارسال میکنم
    در سمت دریافت هم 16 تا ذریافت میکنم
    انتهای دریافت هم pos2=0 میشه
    این هم کد نهایی :

    روتین وقفه دریافت :
    [code=cpp]
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    buffer = UDR ;
    if(pos2 < 16)
    {
    l2lcd[pos2] = buffer ;
    pos2++ ;
    if(pos2 == 16) pos2 = 0 ;
    }
    }
    [/code]
    سمت ارسال :
    [code=cpp]
    if(enter == 1)
    {
    for(m=0 ; m<16 ; m++)
    {
    putchar(l1lcd[m]) ;
    delay_ms(1) ;
    }
    for(m=0 ; m<16 ; m++)
    {
    l1lcd[m] = 0x20 ;
    }
    pos1 = 0 ;
    enter = 0 ;
    }
    [/code]
    این هم از متغیر ها :
    [code=cpp]
    bit print_key = 0 , other_key = 0 ;
    bit enter=0 , delete=0 , bspace=0 , shift=0 ;
    char l1lcd[17] = {
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20 } ;
    char l2lcd[17] = {
    0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20 } ;
    char nt[1] , st[1] , n , m=0 ;
    unsigned char buffer , pressed_key ;
    int pos1=0 , pos2=0 ;
    [/code]
    این هم از روتین spi که l1lcd رو پر میکنه
    [code=cpp]

    interrupt [SPI_STC] void spi_stc_isr(void)
    {
    pressed_key = SPDR ;
    switch(pressed_key)
    {
    /// control keys
    case 0x0d : enter = 1 ; break ; // enter
    case 0x7f : delete = 1 ; break ; // delete
    case 0x08 : bspace = 1 ; break ; // bspace
    case 0x99 : shift = 0 ; PORTD.7 = 1 ; break ; // normal
    case 0x0f : shift = 1 ; PORTD.7 = 0 ; break ; // shift
    /// undefined keys
    case 0x90 : other_key = 1 ; break ; // others define 0x90 in mega8
    /// print keys
    case 0xf0 : print_key = 1 ; n = 49 ; nt[n] = '*' ; st[n] = '*' ; break ; // f0
    case 0xe0 : print_key = 1 ; n = 50 ; nt[n] = '?' ; st[n] = '?' ; break ; // e0
    case 0x60 : print_key = 1 ; n = 1 ; nt[n] = '`' ; st[n] = '~' ; break ; // `~
    case 0x31 : print_key = 1 ; n = 2 ; nt[n] = '1' ; st[n] = '!' ; break ; // 1!
    case 0x32 : print_key = 1 ; n = 3 ; nt[n] = '2' ; st[n] = '@' ; break ; // 2@
    case 0x33 : print_key = 1 ; n = 4 ; nt[n] = '3' ; st[n] = '#' ; break ; // 3#
    case 0x34 : print_key = 1 ; n = 5 ; nt[n] = '4' ; st[n] = '$' ; break ; // 4$
    case 0x35 : print_key = 1 ; n = 6 ; nt[n] = '5' ; st[n] = '%' ; break ; // 5%
    case 0x36 : print_key = 1 ; n = 7 ; nt[n] = '6' ; st[n] = '^' ; break ; // 6^
    case 0x37 : print_key = 1 ; n = 8 ; nt[n] = '7' ; st[n] = '&' ; break ; // 7&
    case 0x38 : print_key = 1 ; n = 9 ; nt[n] = '8' ; st[n] = '*' ; break ; // 8*
    case 0x39 : print_key = 1 ; n = 10 ; nt[n] = '9' ; st[n] = '(' ; break ; // 9(
    case 0x30 : print_key = 1 ; n = 11 ; nt[n] = '0' ; st[n] = &#039' ; break ; // 0)
    case 0x2d : print_key = 1 ; n = 12 ; nt[n] = '-' ; st[n] = '_' ; break ; // -_
    case 0x3d : print_key = 1 ; n = 13 ; nt[n] = '=' ; st[n] = '+' ; break ; // =+
    case 0x2f : print_key = 1 ; n = 14 ; nt[n] = '/' ; st[n] = '|' ; break ; // /|

    case 0x71 : print_key = 1 ; n = 15 ; nt[n] = 'q' ; st[n] = 'Q' ; break ; // qQ
    case 0x77 : print_key = 1 ; n = 16 ; nt[n] = 'w' ; st[n] = 'W' ; break ; // wW
    case 0x65 : print_key = 1 ; n = 17 ; nt[n] = 'e' ; st[n] = 'E' ; break ; // eE
    case 0x72 : print_key = 1 ; n = 18 ; nt[n] = 'r' ; st[n] = 'R' ; break ; // rR
    case 0x74 : print_key = 1 ; n = 19 ; nt[n] = 't' ; st[n] = 'T' ; break ; // tT
    case 0x79 : print_key = 1 ; n = 20 ; nt[n] = 'y' ; st[n] = 'Y' ; break ; // yY
    case 0x75 : print_key = 1 ; n = 21 ; nt[n] = 'u' ; st[n] = 'U' ; break ; // uU
    case 0x69 : print_key = 1 ; n = 22 ; nt[n] = 'i' ; st[n] = 'I' ; break ; // iI
    case 0x6f : print_key = 1 ; n = 23 ; nt[n] = 'o' ; st[n] = 'O' ; break ; // oO
    case 0x70 : print_key = 1 ; n = 24 ; nt[n] = 'p' ; st[n] = 'P' ; break ; // pP
    case 0x5b : print_key = 1 ; n = 25 ; nt[n] = '[' ; st[n] = '{' ; break ; // [[
    case 0x5d : print_key = 1 ; n = 26 ; nt[n] = ']' ; st[n] = '}' ; break ; // ]]

    case 0x61 : print_key = 1 ; n = 27 ; nt[n] = 'a' ; st[n] = 'A' ; break ; // aA
    case 0x73 : print_key = 1 ; n = 28 ; nt[n] = 's' ; st[n] = 'S' ; break ; // sS
    case 0x64 : print_key = 1 ; n = 29 ; nt[n] = 'd' ; st[n] = 'D' ; break ; // dD
    case 0x66 : print_key = 1 ; n = 30 ; nt[n] = 'f' ; st[n] = 'F' ; break ; // fF
    case 0x67 : print_key = 1 ; n = 31 ; nt[n] = 'g' ; st[n] = 'G' ; break ; // gG
    case 0x68 : print_key = 1 ; n = 32 ; nt[n] = 'h' ; st[n] = 'H' ; break ; // hH
    case 0x6a : print_key = 1 ; n = 33 ; nt[n] = 'j' ; st[n] = 'J' ; break ; // jJ
    case 0x6b : print_key = 1 ; n = 34 ; nt[n] = 'k' ; st[n] = 'K' ; break ; // kK
    case 0x6c : print_key = 1 ; n = 35 ; nt[n] = 'l' ; st[n] = 'L' ; break ; // lL
    case 0x3b : print_key = 1 ; n = 36 ; nt[n] = ';' ; st[n] = ':' ; break ; // ;:
    case 0x27 : print_key = 1 ; n = 37 ; nt[n] = '`' ; st[n] = '"' ; break ; // '"

    case 0x7a : print_key = 1 ; n = 38 ; nt[n] = 'z' ; st[n] = 'Z' ; break ; // zZ
    case 0x78 : print_key = 1 ; n = 39 ; nt[n] = 'x' ; st[n] = 'X' ; break ; // xX
    case 0x63 : print_key = 1 ; n = 40 ; nt[n] = 'c' ; st[n] = 'C' ; break ; // cC
    case 0x76 : print_key = 1 ; n = 41 ; nt[n] = 'v' ; st[n] = 'V' ; break ; // vV
    case 0x62 : print_key = 1 ; n = 42 ; nt[n] = 'b' ; st[n] = 'B' ; break ; // bB
    case 0x6e : print_key = 1 ; n = 43 ; nt[n] = 'n' ; st[n] = 'N' ; break ; // nN
    case 0x6d : print_key = 1 ; n = 44 ; nt[n] = 'm' ; st[n] = 'M' ; break ; // mM
    case 0x2c : print_key = 1 ; n = 45 ; nt[n] = ',' ; st[n] = '<' ; break ; // ,<
    case 0x2e : print_key = 1 ; n = 46 ; nt[n] = '.' ; st[n] = '>' ; break ; // .>
    case 0x3f : print_key = 1 ; n = 47 ; nt[n] = '/' ; st[n] = '?' ; break ; // /?
    case 0x20 : print_key = 1 ; n = 48 ; nt[n] = ' ' ; st[n] = ' ' ; break ; // space
    }
    if(print_key==1 && shift==0 && pos1<16)
    {
    l1lcd[pos1] = nt[n] ;
    pos1++ ;
    print_key = 0 ;
    }
    else if(print_key==1 && shift==1 && pos1<16)
    {
    l1lcd[pos1] = st[n] ;
    pos1++ ;
    print_key = 0 ;
    }
    else if(pos1>=16) print_key=0 ;[/code]
    :biggrin:
نمایش نتایج: از 1 به 8 از 8

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

  1. دریافت رشته از وقفه ی یوزارت
    توسط davoud.arabee در انجمن برنامه نويسي و اينترفيس
    پاسخ: 27
    آخرين نوشته: 2017/07/21, 05:00
  2. دریافت یک رشته از UART
    توسط jaafary1 در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2017/07/16, 10:12
  3. دریافت کاراکتر از وقفه usart و ارسال ش با وقفه spi
    توسط davoud.arabee در انجمن برنامه نويسي و اينترفيس
    پاسخ: 5
    آخرين نوشته: 2016/04/01, 21:42
  4. مشکل در دریافت از یوزارت
    توسط caspian_man در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2014/02/08, 10:36
  5. مشکل در تبدیل کردن به رشته و فرستادن آن با یوزارت .
    توسط hesam_elc در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2012/05/14, 13:09

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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