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

أدوات الموضوع

dzkabyle
:: مهندس ::
تاريخ التسجيل: Oct 2014
المشاركات: 2
نشاط [ dzkabyle ]
قوة السمعة:0
قديم 21-03-2016, 10:34 PM المشاركة 1   
افتراضي مساعدة في برمجة télérupteur بواسطة pic16f84a Twitter FaceBook Google+



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

اولا اشكر جميع المهندسين في هذا السرح العظيم على كل الجهود التي يقدمونها لخدمة الاعضاء

كما هو موضح في العنوان اريد عمل télérupteur اي اني اريد التحكم في مصباح واحد عن طريق عدة ازرار بحيث كلما اضغط زر ينطفيئ اذا كان مشتعل و يشتعل اذا كان منطفيئ

الادوات المستعملة

pic16f84a
mikroc




ارجو ان تكون الصورة واضحة

كما اني اتمنى ان تكون مساعدة حتى لو كانت تلميحا او تمهيد لاكمال البرنامج


للعلم لديا سورس بالاسمبلي لكيني لم افهمه جيدا

ملف

protues+HEX

http://www.mediafire.com/download/r3...3e/Desktop.rar

وشكرا مسبقا

كود:
; "Télérupteur"
; Fabrice Sincère (C) novembre 2006
; version 1.03
; microcontrôleur PIC 16F84A
; développé avec Microchip MPLAB IDE

    List p=16F84A    ; processeur utilisé 
    #include <p16F84A.inc>

    __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
        ;bits de configuration :
        ;code protect OFF
        ;watchdog timer OFF
        ;power up timer ON
        ;oscillateur HS (quartz à grande fréquence : 20 MHz)

;xxxxxx
; macro
;xxxxxx

bank1    macro        ; passage en banque 1
        bsf STATUS,RP0 
        endm

bank0    macro        ; passage en banque 0
        bcf STATUS,RP0
        endm

;xxxxxxxxxxxxxxxxxxxxxxxxx
; déclaration de variables
;xxxxxxxxxxxxxxxxxxxxxxxxx

    CBLOCK H'00C'    ; début de la zone des registres d'usage général
    mem0 : 1        ; mémorisation de l'état du port B (état antérieur)            
    mem1 : 1        ; mémorisation de l'état du port B (état actuel)
    detection : 1   ; détection d'un front descendant (bouton poussoir appuyé)
    compteur1 : 1    ; variable de le boucle de temporisation
    compteur2 : 1    ; variable de le boucle de temporisation
    compteur3 : 1    ; variable de le boucle de temporisation 

    ENDC

;xxxxxxxxxxxxxxxxxxxx
; demarrage sur reset
;xxxxxxxxxxxxxxxxxxxx

    org H'0000'
    goto initialisation

;xxxxxxxxxxxxxxx
; initialisation
;xxxxxxxxxxxxxxx

initialisation 

    bank0    
    clrf PORTA      ; mise à 0 des sorties du port A
    clrf PORTB         ; mise à 0 des sorties du port B
    
    bank1
    movlw B'00000000'
    movwf OPTION_REG
    ; bit 7 = 0 : activation des résistances de pull-up du port B
    ; (cela permet de faire l'économie de 8 résistances externes)
    ; bits 0 à 6 : ici, options non utilisées (on les met à 0, par exemple)

    movlw B'00011110'
    movwf TRISA
    ; bit 0 du port A (RA0) = 0 : configuration en sortie (commande du relais).
    ; bits 1 à 4 du port A (RA1 à RA4) = 1 : non utilisées
    ; (configuration en entrées, par exemple)

    movlw B'11111111'
    movwf TRISB
    ; bit 0 du port B (RB0) = 1 : configuration en entrée (bouton poussoir 0)
    ; bit 1 du port B (RB1) = 1 : configuration en entrée (bouton poussoir 1)
    ; bit 2 du port B (RB2) = 1 : configuration en entrée (bouton poussoir 2)
    ; bit 3 du port B (RB3) = 1 : configuration en entrée (bouton poussoir 3)
    ; bit 4 du port B (RB4) = 1 : configuration en entrée (bouton poussoir 4)
    ; bit 5 du port B (RB5) = 1 : configuration en entrée (bouton poussoir 5)
    ; bit 6 du port B (RB6) = 1 : configuration en entrée (bouton poussoir 6)
    ; bit 7 du port B (RB7) = 1 : configuration en entrée (bouton poussoir 7)

    bank0
    movlw B'00000000'
    movwf PORTA            ; sortie RA0 au niveau bas

    movlw B'11111111'
    movwf mem1            ; initialisation mem1 

;xxxxxxxxxxxxxxxxxxxxx
; programme principal
;xxxxxxxxxxxxxxxxxxxxx

debut_programme

    movf mem1, W
    movwf mem0            ; copie de (mem1) dans (mem0)

    movf PORTB, W          ; lecture du port B
    movwf mem1           ; mémorisation


    ; test de l'état du port B :
    movf mem1, W 
    subwf mem0, W        ; comparaison de (mem0) et (mem1)
    btfsc STATUS,Z        ; test du bit Z
    goto debut_programme; Z=1 : (mem1) est égale à (mem0) : l'état des boutons poussoirs est inchangé             
    
    ; Z=0 : (mem1) est différent de (mem0):
    comf mem1 , W       ; complément logique de (mem1)
    andwf mem0, W        ; et logique
    movwf detection       ; (detection) = (mem0) et (non(mem1))
    ; (detection) égal à H'00' : aucun bouton poussoir n'a été appuyé
    ; (detection) différent de H'00' : au moins un bouton poussoir a été appuyé
    
    movf detection, f   ; on test si (detection) est nul
    btfsc STATUS, Z      ; test du bit Z
    goto temporisation  ; Z=1 : (detection) est nul

    ; Z=0 : (detection) différent de H'00' :
    comf PORTA, f        ; inversion de l'état de la sortie RA0
    goto temporisation

; xxx temporisation d'environ 400 ms
;(2 millions de cycles avec un quartz de 20 MHz)
; résout le problème des rebonds des boutons poussoirs
temporisation    
                
    
    movlw H'00'            ; initialisation des compteurs
    movwf compteur1
    movwf compteur2    
    movlw H'0A'            ; pour un quartz 20 MHz 
                        ; movlw H'02' pour un quartz 4 MHz            
    movwf compteur3

debut1                    ; 3 boucles imbriquées (256*256*10 boucles *3 cycles)
    decfsz compteur1, f    ; décrémente (compteur1) et compare avec 0
    goto debut1          ; (compteur1) différent de 0
    ;(compteur1) égal à 0 :        
    decfsz compteur2, f    ; décrémente (compteur2) et compare avec 0
    goto debut1
    decfsz compteur3, f    ; décrémente (compteur3) et compare avec 0    
    goto debut1    
; xxx fin de le temporisation

    goto debut_programme

    END

اعلانات

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 22-03-2016, 06:07 AM المشاركة 2   
sun


بسم الله الرحمن الرحيم

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

اخى الحبيب بفضل الله , اليك البرنامج و تم تجربته على البروتيوس :

كود:
void main(){ unsigned char old_state ;
trisb = 0xff ;   trisa = 0;   porta=0;

  old_state = portb;
  while(1){
           if (portb < old_state){delay_ms(300);PORTA.B0 = ~ PORTA.B0 ;  }
                      
            }
}
ملاحظة : يجب توصيل المفاتيح بمقاومات 10 ك اوم كالتالى :


و ما توفيقى الا بالله

اللهم اجعله لقلوبنا ربيعا

و لنا دليلا و قائدا


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

keidk
:: مهندس متواجد ::
تاريخ التسجيل: Jun 2012
المشاركات: 184
نشاط [ keidk ]
قوة السمعة:0
قديم 26-03-2016, 08:00 PM المشاركة 3   
win


بسم الله الرحمن الرحيم
مشروع بس بزين وانت كمل الباقي
http://www.4shared.com/rar/2V5yTyPUce/led_on_of.html
والله الموفق


dzkabyle
:: مهندس ::
تاريخ التسجيل: Oct 2014
المشاركات: 2
نشاط [ dzkabyle ]
قوة السمعة:0
قديم 29-03-2016, 11:03 PM المشاركة 4   
افتراضي


بارك الله فيكم على المشاركة و المساعدة

لكن اظن لم تفهمو عمل المشروع جيدا

على كل حال اتممت الكود و هاهو للافادة

كود:


    int old;
    int old1;
  signed int a;
     bit b;
     bit re;
      int on;
void main() {
 OPTION_REG.NOT_RBPU=0;
  TRISA=0;
  //TRISB=1;
  portA.b0=0;

       old=portB;
         delay_ms(200);
  while(1){
                old1=portB;

            for(on=0;on<7;on++){
               a =(old1 >> on);
                 b =(old >> on);
                re=dz1-dz2;
 if(dz<0){
                   portA.b0=~portA.b0;

             }}
                  
                old=portB;
                       delay_ms(200);
}}
اما بالنسبة الى موضوع المقاومة فالبيك 16f84a يملك مقاومة داخلية
يكفي وضع
OPTION_REG.NOT_RBPU=0;
في البداية
للمزيد من المعلومات
http://fabrice.sincere.pagesperso-or...pic/pullup.htm



[/code]

ملاحظة : يجب توصيل المفاتيح بمقاومات 10 ك اوم كالتالى :



و شكرا لكم ثانية

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025