اطلاعیه

Collapse
No announcement yet.

ارتباط 2 سیمی متفاوت از نوع ایرانی(البته به ن

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط 2 سیمی متفاوت از نوع ایرانی(البته به ن

    درود بر همگی

    اینجا یه برنامه نوشتم که دوتا میکرو رو به هم وصل میکنه و داده ها به وسیله ی تایمر و پالس به میکروی دیگر فرستاده میشه!زبانش هم زبان اسمبلی هستش!وای پسر 2روزه روش کار می کنم!آخرش نتیجه داد!
    می تونید با تنظیم داده ها در متغیر datax چیزی را که می خواهید به میکروی دیگر بفرستید!این برنامه واسه میکرو
    p16f84a نوشته شده واسه میکروهای دیگه یه سری تغییرات جزی باید بدیم!

    چه حالی میده اسمبلیییییییییییییییییییییییییییییییییییی :wow: :wow: :wow: :wow:

    اینم کد فرستنده:

    [code=asm]
    //processor p16f84a
    include <p16f84a.inc>
    __config _XT_OSC & _PWRTE_OFF & _CP_OFF & _WDT_OFF
    datax equ 0x0c
    datay equ 0x0d

    org 0x00
    goto peykar


    org 0x04
    movf datax,0 ;copy datax to w
    movwf datay ;copy w to datay (datay=datax)
    call senddata ;send data
    bcf 0x0b,4 ;disable RB0/INT
    bsf 0x03,5 ;bank1
    bcf 0x86,0 ;RB0 as output
    bcf 0x03,5 ;bank0
    bsf 0x06,0 ;data has been send
    nop
    nop
    nop
    nop
    bcf 0x06,0
    bsf 0x03,5 ;bank1
    bsf 0x86,0 ;RB0 as input
    bcf 0x03,5 ;bank0
    incf datax ;increase datax
    bsf 0x0b,4 ;enable RB0/INT
    bcf 0x0b,1 ;clear INTE flag bit
    retfie ;enable GIE and return


    peykar
    bsf 0x03,5 ;bank1
    bsf 0x86,0 ;RB0 as input
    movlw b'11000000'
    movwf OPTION_REG ;enable RB0/INT
    bcf 0x03,5 ;bank0
    movlw b'10010000' ;enable GIE and INTIE
    movwf 0x0b
    movlw .20 ;copy deciaml 20 to w
    movwf datax ;copy w to datax
    clrf 0x06 ;clear portb

    main
    movlw 0x00 ;loop
    goto $-1

    senddata
    bsf 0x06,1 ;high RB1
    nop
    nop
    nop
    nop
    bcf 0x06,1
    decfsz datay ;decrease datay
    goto senddata ;if datay>0 goto senddata
    return ;else return
    end
    [/code]

    کد گیرنده:

    [code=asm]
    //processor p16f84a
    include <p16f84a.inc>
    __config _XT_OSC & _PWRTE_OFF & _CP_OFF & _WDT_OFF
    datax equ 0x0c
    org 0x00
    goto peykar
    org 0x04
    movf TMR0,0 ;copy tmr0 to w
    movwf datax ;copy w to datax
    call run ;do instruction
    bcf 0x0b,4 ;disable RB0/INT
    bsf 0x03,5 ;bank1
    bcf 0x86,0 ;RB0 as output
    bcf 0x03,5 ;bank0
    bsf 0x06,0 ;high RB0
    nop
    nop
    nop
    nop
    bcf 0x06,0 ;low RB0
    bsf 0x03,5 ;bank1
    bsf 0x86,0 ;RB0 as input
    bcf 0x03,5 ;bank0
    bsf 0x0b,4 ;enable RB0/INT
    bcf 0x0b,1 ;disable INTE
    clrf TMR0 ;clear TMR0
    retfie ;enable global interrupt and return
    peykar
    bsf 0x03,5 ;bank1
    clrf 0x86
    bsf 0x85,4 ;RA4 as input
    movlw b'11110000'
    movwf OPTION_REG ;Enable TMR0 and RB0/INT
    bcf 0x03,5 ;bank0
    movlw b'10000000' ;enable GIE
    movwf 0x0b
    clrf 0x06

    main
    bsf 0x06,0 ;send get instruction
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    bcf 0x06,0 ;""
    bcf 0x0b,1
    bsf 0x0b,4
    bsf 0x03,5
    bsf 0x86,0
    bcf 0x03,5
    movlw 0x00 ;loop
    goto $-1 ;loop

    run
    bsf 0x06,1 ;high RB1
    nop
    nop
    nop
    nop
    bcf 0x06,1 ;low RB1
    decfsz datax ;decrease datax
    goto run ;if datax>0 goto run
    return ;else return

    end
    [/code]

    اینم یه نتیجه از اسمبلی یاد گرفته دیگه!! البته دستورالعمل ها با توجه به اندازشون(اندازه ی داده ی ارسالی) زمان میبرند!همچینین می تونیم با حذف دستور nop سرعت بیشتری به کارمون بدیم!دستورات در اندازه ی کمتر از 1530 کلاک فرستده میشوند!و در همین اندازه هم اجرا میشن!یعنی اگه کریستال 4 مگاهرتز باشه میشه چیزی اندازه ی 1.5 میلی ثانیه واگه کریستال 8 مگا باشه میشه یه چیزی به وقدار 765 میلی ثانیه که بازم میگم میتونه کمتر باشه!


    دستوراتش رو کوتاه نوشتم جلوشون ولی اگه خواستین باز براتون توضیح میدم که چطور شد که اینطور شد!من که دارم بال در میارم! :nice: :wow:
    اسمبلییییییییییییییییییییییییییییییییییییییییییییی یییییییییییییییییییییییییییییییییییییییییییییییییی یییییییییی تنها راه چاره!
لطفا صبر کنید...
X