قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية SAMI-ALG
SAMI-ALG
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 199
نشاط [ SAMI-ALG ]
قوة السمعة:
قديم 10-10-2009, 08:18 PM المشاركة 9   
افتراضي



العفو اخي الكريم وانا بانتظار النتيجة

اعلانات

walid el masry
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 42
نشاط [ walid el masry ]
قوة السمعة:
قديم 10-10-2009, 11:04 PM المشاركة 10   
افتراضي


بجد مشكور جدا اخ سامي علي مجهودك و علي وقتك و البرنامج يعمل 100%
و اليك الكود النهائي بعد التعديل و اضافة تعليقات عليه و لكن اثقل عليك اولا ببعض الاستفسارات الفنيه في الكود

جملة
كود:
ERRORLEVEL -302
ما هو معناها و ما الجدوي منها مع ان البرنامج سوف يعمل من دونها

ما الجدوي من بدء حجز المتغيرات من عنوان 0X0C
حيث انه عنوان ريجيستر ال
PIR1
مع العلم انه من البديهي البدء من عنوان
0x20

lما معني
كود:
:1
بجانب اسماء المتغيرات حيث ان البرنامج سوف يعمل من دونها ايضا

و هذا هو الكود النهائي و هو برنام يقوم بعمل فلاشر علي
PORTB
يضيئه و يطفيه كل ثانيه
كود:
    list    p=16F84A
    #include p16F84a.inc
    ERRORLEVEL -302
    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
;************declare variables************
    CBLOCK 0X0C
status_temp:1
w_temp:1
;-------------------------------------------
cpt:1
    ENDC
;************Reset vector************
    ORG 0X00
    GOTO INIT     
;*****************Interrupt vector**************************
    ORG 0X04 
;******************Interrup subrutine*****************
    movwf   w_temp; save W register value
    swapf    STATUS,w    
    movwf    status_temp; save STATUS register value
    BTFSS   INTCON,T0IF; is the interrupt accured is for TIMER0 or not ?
    GOTO    ENDI;NO
    BCF     INTCON,T0IF;YES
    DECF    cpt,f; decrement the counter
    btfss   STATUS,Z; test if  counter reaches the end - 1 second have just passed
    GOTO    ENDI;NO
    MOVLW   D'61';YES
    MOVWF   cpt; re-intiate counter value
;***********************Code Executed every second*************************
ONE
    MOVLW 0X00
    XORWF PORTB,W
    BTFSS STATUS,Z
    GOTO ZERO;NO
    MOVLW 0XFF;YES
    MOVWF PORTB
    GOTO ENDI
ZERO
    MOVLW 0X00
    MOVWF PORTB
;***********************every time when leaving interrupt do this*************************
ENDI
    swapf    status_temp,w; get the old value of the STATUS register    
    movwf   STATUS
    swapf       w_temp,f
    swapf       w_temp,w; get the old value of the W register    
    RETFIE; end of interrupt subrutine
;*****************Chip initialize**************************
INIT 
; initialize ports
    BSF     STATUS,RP0; goto bank1
    MOVLW   B'00000000' 
    MOVWF   TRISB      ; portb is output
;-------------------------------------------
; initialize special function registers
    movlw    0x85  ; interruption sur timer0  
    movwf    OPTION_REG
;RBPU        =1=     PORTB pull-ups are disabled
;INTEDG    =0=     Interrupt on falling edge of RB0/INT pin
;T0CS        =0=     Internal instruction cycle clock (CLKOUT)
;T0SE        =0=     Increment on low-to-high transition on RA4/T0CKI pin
;PSA        =0=     Prescaler is assigned to the Timer0 module
;PS2:PS0    =101=    1 : 64 for TMR0 Rate
;-------------------------------------------
    movlw    0xA0
    movwf    INTCON
;GIE    =1=     Enables all unmasked interrupts
;PEIE    =0=     Disables all peripheral interrupts
;TMR0IE    =1=     Enables the TMR0 interrupt
;INTE    =0=     Disables the RB0/INT external interrupt
;RBIE    =0=     Disables the RB port change interrupt
;TMR0IF    =1=     TMR0 register has overflowed (must be cleared in software)
;INTF    =0=     The RB0/INT external interrupt did not occur
;RBIF    =0=     None of the RB7:RB4 pins have changed state
;-------------------------------------------
;give ports and vaiables initiale values
    BCF     STATUS,RP0; return to bank0
    CLRF    PORTB
;-------------------------------------------
    MOVLW   D'61'
    MOVWF   cpt 
;************************main program********************           
START   
    goto START
    END

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية SAMI-ALG
SAMI-ALG
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 199
نشاط [ SAMI-ALG ]
قوة السمعة:
قديم 11-10-2009, 01:44 AM المشاركة 11   
افتراضي


السلام عليكم ورحمة الله وبركاته

ما هو معناها و ما الجدوي منها مع ان البرنامج سوف يعمل من دونها
هذا امر خاص بالكوبيلر ولا يضر البرنامج نزعها

ما الجدوي من بدء حجز المتغيرات من عنوان 0X0C
حيث انه عنوان ريجيستر ال
PIR1
مع العلم انه من البديهي البدء من عنوان
0x20
المتغيرات تبدا من 0x0c في البيك 16f84 اما العنوان 0x20 فهو يخص البيك 16f628

اما فيما يخص كتابت المتغيرات فيكون عن طريقتين اما عن طريق ال EQU او عن طريق الكود المعمول في البرنامج اقصد CBLOCK الى ENDC وفيما يخص الرمز 1: فالمقصود به ان المتغير هو يحتوي على 8 bits فمثلا اذا اردنا ان نحجز 16 bits نضع 2: و 3: بالنسبة لريجيستر من حجم 32 bits ..........الخ


جربت الكود الخاص بك وماشاء الله يعمل بشكل جيد طبعا ولدي اضافة وهي اني عملت فلاشر لكن فقط باستعمال تعليمة واحدة اليك الكود

كود:
list    p=16F84A
    #include p16F84a.inc
    ERRORLEVEL -302
    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
;************declare variables************
    CBLOCK 0X0C
status_temp:1
w_temp:1
;-------------------------------------------
cpt:1
    ENDC
;************Reset vector************
    ORG 0X00
    GOTO INIT     
;*****************Interrupt vector**************************
    ORG 0X04 
;******************Interrup subrutine*****************
    movwf   w_temp; save W register value
    swapf    STATUS,w    
    movwf    status_temp; save STATUS register value
    BTFSS   INTCON,T0IF; is the interrupt accured is for TIMER0 or not ?
    GOTO    ENDI;NO
    BCF     INTCON,T0IF;YES
    DECF    cpt,f; decrement the counter
    btfss   STATUS,Z; test if  counter reaches the end - 1 second have just passed
    GOTO    ENDI;NO
    MOVLW   D'61';YES
    MOVWF   cpt; re-intiate counter value
;***********************Code Executed every second*************************
    COMF    PORTB
;***********************every time when leaving interrupt do this*************************
ENDI
    swapf    status_temp,w; get the old value of the STATUS register    
    movwf   STATUS
    swapf       w_temp,f
    swapf       w_temp,w; get the old value of the W register    
    RETFIE; end of interrupt subrutine
;*****************Chip initialize**************************
INIT 
; initialize ports
    BSF     STATUS,RP0; goto bank1
    MOVLW   B'00000000' 
    MOVWF   TRISB      ; portb is output
;-------------------------------------------
; initialize special function registers
    movlw    0x85  ; interruption sur timer0  
    movwf    OPTION_REG
;RBPU        =1=     PORTB pull-ups are disabled
;INTEDG    =0=     Interrupt on falling edge of RB0/INT pin
;T0CS        =0=     Internal instruction cycle clock (CLKOUT)
;T0SE        =0=     Increment on low-to-high transition on RA4/T0CKI pin
;PSA        =0=     Prescaler is assigned to the Timer0 module
;PS2:PS0    =101=    1 : 64 for TMR0 Rate
;-------------------------------------------
    movlw    0xA0
    movwf    INTCON
;GIE    =1=     Enables all unmasked interrupts
;PEIE    =0=     Disables all peripheral interrupts
;TMR0IE    =1=     Enables the TMR0 interrupt
;INTE    =0=     Disables the RB0/INT external interrupt
;RBIE    =0=     Disables the RB port change interrupt
;TMR0IF    =1=     TMR0 register has overflowed (must be cleared in software)
;INTF    =0=     The RB0/INT external interrupt did not occur
;RBIF    =0=     None of the RB7:RB4 pins have changed state
;-------------------------------------------
;give ports and vaiables initiale values
    BCF     STATUS,RP0; return to bank0
    CLRF    PORTB
;-------------------------------------------
    MOVLW   D'61'
    MOVWF   cpt 
;************************main program********************           
START   
    goto START
    END
هذا ودمت في رعاية الله وحفظه


walid el masry
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 42
نشاط [ walid el masry ]
قوة السمعة:
قديم 11-10-2009, 01:52 AM المشاركة 12   
افتراضي


تصور اني كنت طول هذه الفتره كنت بتفقد داتا شيد ال
PIC16f876
و ليس ال
84A

فعلا تبدا اعلنواين فيه عند
0x20
بينما في ال
84A
عند
0x0C

و بالنسبه لكود الفلاشر بتاعك فهو بجد تفكير رائع و باقصر الطرق بارك الله فيك

و اسمحلي ان استفسر منك علي معلومه و هي ان سوق البرمجه بالاسمبلي قد اضمحل و احلت محلة لغة السي فهل هذا صحيح انه من يبرمج بالاسمبلي لن يجد مكانا له بين مبرمجين السي خاصة في شغل ال
embedded systems like microcontroller




الصورة الرمزية SAMI-ALG
SAMI-ALG
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 199
نشاط [ SAMI-ALG ]
قوة السمعة:
قديم 11-10-2009, 09:07 AM المشاركة 13   
افتراضي


السلام عليكم ورحمة الله وبركاته

البرمجة سواء بلغة السي او الاسمبلر او اي لغة اخرى ما هي الا خطوة نحو تنفيذ المشروع يعني في مثل هذه الحالات تحاسب على المنتوج النهائي اقصد التطبيقي

وفي الجانب التطبيقي توزن الامور من جهة اخرى وبالخصوص التكلفة والنوعية
او ما يعرف ب system reliability


ودمت في رعاية الله وحفظه


walid el masry
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 42
نشاط [ walid el masry ]
قوة السمعة:
قديم 11-10-2009, 09:28 PM المشاركة 14   
افتراضي


لقد حاولت استخدام نفس الفكره علي
TMR2 for chip pic16f876
و لكن بلا جدوي فما رايك في ذلك

كود:
    LIST P=16F876
    #INCLUDE<P16F876.INC>
    __CONFIG _CP_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
    CBLOCK 0X20
status_temp:1
w_temp:1
cpt:1
    ENDC    
    ORG 0X00
    GOTO INIT     
    ORG 0X04 
    movwf   w_temp; save W register value
    swapf    STATUS,w    
    movwf    status_temp; save STATUS register value
    BTFSS   PIR1,TMR2IF; 
    GOTO    ENDI;NO
    BCF     PIR1,TMR2IF;YES
    DECF    cpt,f; decrement the counter
    btfss   STATUS,Z; test if  counter reaches the end - 1 second have just passed
    GOTO    ENDI;NO
    MOVLW   D'244';YES
    MOVWF   cpt; re-intiate counter value
ONE
    MOVLW 0X00
    XORWF PORTB,W
    BTFSS STATUS,Z
    GOTO ZERO;NO
    MOVLW 0XFF;YES
    MOVWF PORTB
    GOTO ENDI
ZERO
    MOVLW 0X00
    MOVWF PORTB
ENDI
    swapf    status_temp,w; get the old value of the STATUS register    
    movwf   STATUS
    swapf       w_temp,f
    swapf       w_temp,w; get the old value of the W register    
    RETFIE; end of interrupt subrutine
INIT
;*************************
    ;BSF STATUS,RP0
    ;MOVLW 0XFF
    ;MOVWF PR2
    ;BCF STATUS,RP0
;*************************
    MOVLW B'10000000'
    MOVWF INTCON
;*************************
    ;MOVLW B'00000010'
    ;MOVWF PIE1
;*************************
    ;MOVLW 0X00
    ;MOVWF PIR1
;*************************
    MOVLW 0X00
    MOVWF TRISB
    MOVWF PORTB
;*************************
    MOVLW   D'244'
    MOVWF   cpt 
;*************************
    MOVLW B'00000110'
    MOVWF T2CON
;*************************
START   
    GOTO START
    END



الصورة الرمزية SAMI-ALG
SAMI-ALG
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 199
نشاط [ SAMI-ALG ]
قوة السمعة:
قديم 12-10-2009, 01:28 AM المشاركة 15   
افتراضي


السلام عليكم ورحمة الله وبركاته

احببت فقط ان اقدم لك نصيحة ابدا خطوة خطوة لما تتقن البرمجة على 16f84 جيدا انتقل الى 16f628 و تاكد انك لو تعلمت على هذان النوعان لا يبقى لك في الانواع الاخرى الا نظرة سطحية

شخصيا صارلي عام مع البيك 16f84 و صارلي اقل من شهر انتقلت الى 16f628 ومازلت مبتدئ في هذا المجال

ان شاء الله تكون وصلتك الفكرة ودمت في رعاية الله وحفظه


walid el masry
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 42
نشاط [ walid el masry ]
قوة السمعة:
قديم 12-10-2009, 01:36 AM المشاركة 16   
افتراضي


اكيد اخ سامي و احب اشكرك علي طول البال و سعت صدرك و عموما راح ابحث فيها اكتر و ان شاء الله اوصل للحل علما اني درست اول مره علي ال 876 و لكن للاسف ما درسته كامل لانه كان كورس خارجي مش مقرر عندي بالجامعه

عامة اشكرك مره اخري و احب اباركلك للجزائر ادوا ماتش رائع و استحقوا الفوز بجداره حتي بعد الفرص الكتيره الضائعه و ان شاء الله يكون اللقاء القادم لقاء ودي و اخوي و مهما كانت نتيجته فهو فخر للعرب ان نشارك نحن - العرب - في المونديال بجميع الحالات



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:53 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)