RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

NHẬN SỬA CHỮA - Học Pic16f877A???

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • tranbahung80
    Đệ tử 1 túi
    • Jan 2007
    • 22

    #1

    NHẬN SỬA CHỮA - Học Pic16f877A???

    Đã lâu không tham gia diễn đàn
    Không biết bây giờ boot bài hưỡng dẫn có OK không.
    Các bạn đã biết cài trình duyệt PIC? Mplap, HTpic..
    Nếu nhiều người không biết mình sẽ poot
    Bài số 1:

    + Chú ý viết ở đây ko có dấu.
    + Các ví dụ sau đay chỉ là mẫu cho ban học hỏi, vì nó đúng theo sơ đồ mạch tôi cung cấp. Còn các bạn có thể làm mạch đơn giản để học khi không điều kiện làm mạch đầy đủ…
    + Điều quan trong là bạn cần phải lắm chắc cơ bản để làm được ví dụ độc lập.

    1) BAI 0-CAU TRUC CHUNG
    #include<pic.h>
    __CONFIG(HS&PWRTEN&BOREN&LVPDIS&WDTEN);
    //======= CAC DINH NGHI VA HAM ===============
    void init(void); //su bat dau
    //===========HAM NGAT===========
    void interrupt MyInt(void) //chuong trinh ngat
    {
    if(TMR0IF)
    {
    //SU LY CONG VIEC CAN LAM
    TMR0IF = 0;
    }
    if(TMR2IF)
    {
    //SU LY CONG VIEC CAN LAM
    TMR2IF = 0;
    }
    //CAC NGAT NAO CAN VIET THI VIET RA.
    }
    //==========CHUONG TRINH CHINH=========
    void main()
    {
    init();
    while(1)
    {
    //SU LY CONG VIEC TRONG MAIN CANG CANG CANG TOT
    CLRWDT();
    }
    CLRWDT();
    }
    //=====CAC DINH NGHI CAC HAM DUOC SU DUNG=========
    //======KHOI TAO CAC CONG VA CAC HAM==============
    void init (void)
    {
    TRISB = 0b11111111; //cong IN,dinh nghia cong ra hay vao
    TRISD = 0b00000000; //cong OUT
    PORTD = 0b11111111;
    //cong ra tat ca la 1 là muc 5V; con =0 la muc 0V; ru lieu ra hay vao
    //KHOI TAO CAC THANG GHI LIEN QUAN
    //Quy uoc viet bit la TRISX=0bx7x6x5x4x3x2x1x0;
    }
    /* thoi gian thuc hien mot lenh la,
    TAN SO THACH ANH =FOSC, VI NO QUA BO CHIA 4--> TAN SO CON LAI=FOSC/4
    CHU KY LENH CUA PIC = 4/FOSC=Tpic
    (HOAC THOI GIAN THUC HIEN MOT LENH = (TAN SO THACH ANH / 4) BOI CON 16F877A) */
    //==========THE END=====================
    Chuyên sửa các thiết bị công nghiệp-Phân loại Sacmi-Lò nung-máy ép... Sách hướng dãn PIC 16F877A -DĐ 0972.404.298
  • tranbahung80
    Đệ tử 1 túi
    • Jan 2007
    • 22

    #2
    BÀI SỐ 2

    2) BAI1-cổng- nháy led
    //VAO RA CONG VA NHAY LED CONG D BANG TRE THOI GIAN
    #include<pic.h>
    __CONFIG(HS & PWRTEN & BOREN & LVPDIS);
    //---------Cac dinh nghia va Ngat----------
    void init(void);
    void delay(void);
    //---------Chuong trinh chinh------------------
    void main()
    {
    CLRWDT();
    init();
    while(1)
    {
    PORTD = 0b11111111;
    delay();
    PORTD = 0b00000000;//0x00;
    delay();
    }
    CLRWDT();
    }
    //------DINH NGHIA CONG VAF CAC NGAT-------------------
    void init(void)
    {
    TRISD = 0b00000000; //=1 laf IN, =0 la OUT
    PORTD = 0b00000000;
    TRISB = 0b11111111;
    TRISC = 0b11111111;
    TRISA = 0b11111111; //CONG ALAGOC
    TRISE = 0b00000111; // SO
    ADCON1 = 0b00000010; // ANi là c?ng s?
    }
    //---------LAM TRE THOI GIAN------------
    void delay (void)
    {
    unsigned int i;
    for(i=0;i<65535;i++)
    {
    NOP(); // khoang 30 lenh,
    CLRWDT();
    }
    }
    //=========THE END=========

    3) Bai 2-Nhay led-TMTO
    #include<pic.h>
    __CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
    //========Cac dinh nghia dung moi loi=========
    void init(void); // su bat dau
    bit bNewTMR0; // bit la dieu kien tat mo .....
    //===========HAM NGAT================
    #define T0 100
    unsigned int uiClk0; //la ki tu dem den bao nhieu thi chan
    void interrupt MyInt(void)
    {
    //--------ngat TMRO--------------------
    if(TMR0IF)
    {
    TMR0 = 256-T0;
    //Thoi gian co mot ngat= (0.2µs)*(128)*((256-TMR0)=T0) (µs)=2560 µs =2.56ms
    if((uiClk0++)==390) //tao thoi gian tre TMR0=1s
    {
    uiClk0 = 0;
    bNewTMR0 = 1; //dieu kien bat tat?,
    }
    TMR0IF = 0; //xao co ngat,
    }
    }
    //==========Chuong trinh chinh'=================
    void main() //chuong trinh trinh
    {
    init(); //bat dau chuong trinh
    while(1)
    {
    if(bNewTMR0 == 1) //khi =1 thi dung thuc hien
    {
    RD0 = !(RD0); //dung dao
    RD2 = !(RD2); //de dao thi viet tung bit
    RD4 = !(RD4);
    RD6 = !(RD6);
    bNewTMR0 = 0; //soa = 0
    }
    NOP();
    CLRWDT();
    }
    CLRWDT();
    }
    //==========THE END MAIN====================
    void init(void)
    {
    //---------Dinh nghi cac cong------------------
    TRISD = 0b00000000; //cong X la ra
    PORTD = 0b11111111; //CONG RA MUC 0 HAY 1
    //----------Khoi tao TMRO--------------
    OPTION = 0b00000110; //bA bit cuoi ty le chia 128
    TMR0IE = 1; //cho phep ngat TMRO
    //-----------Co ngat toan cuc--------------
    //PEIE = 1; //cho phép các ng?t ngoài làm vi?c
    GIE = 1; //choi phep ngat toan cuc
    }
    //====THE END==================
    Chuyên sửa các thiết bị công nghiệp-Phân loại Sacmi-Lò nung-máy ép... Sách hướng dãn PIC 16F877A -DĐ 0972.404.298

    Comment

    • tranbahung80
      Đệ tử 1 túi
      • Jan 2007
      • 22

      #3
      BÀI 3
      4) Bài 3 Nháy Led TMR1
      #include<pic.h>
      __CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
      //=========Cac dinh nghia======================
      void init(void); //su bat dau
      //==========HAM NGAT==================
      #define T1 10000
      void interrupt MyInt(void) //chuong trinh ngat
      {
      static unsigned int suiClk1; //Mang tinh nguyen ,
      if(TMR1IF)
      {
      TMR1ON = 0; //Tat ko cho TMR1 khi chua khoi tao
      TMR1H = ((65535-T1)>>8); //nhap bai
      TMR1L = ((65535-T1) & 0x00ff);//nhap bai thap
      TMR1ON = 1;
      if( suiClk1++==62) // lap 62.5 la 1s
      {
      suiClk1= 0;
      RD0 = !(RD0);
      RD2 = !(RD2); //de dao thi viet tung bit
      RD4 = !(RD4);
      RD6 = !(RD6);
      }
      TMR1IF = 0; //xoá co tràn
      }
      }
      //==========Chuong trinh chinh'===============
      void main() //chuong trinh trinh
      {
      init(); //bat dau chuong trinh
      while(1)
      {
      NOP(); //ko lam gi ca
      CLRWDT();
      }
      CLRWDT();
      }
      //=======E END MAIN=========
      void init (void)
      {
      TRISB = 0b11111110;
      TRISD = 0b00000000;
      PORTD = 0b10101010;
      //--------- khoi tao cho TMR1-------------
      T1CON = 0b00111101;
      //bit 7&6 =0, bit 5&4 ty le chia, bít1 là ty la chia Fosc/4 phai co;
      //bit0=1 la bat,bit0=0 la tat; ty le chia 8
      TMR1IE = 1; //cho phep ngat TMR1
      //---------ngat toan cuc -----------
      PEIE = 1; //cho phép các ngat ngoài làm viec
      GIE = 1;
      }
      //==========THE END===============

      5) Bai 4- Nhay led TMR2

      #include<pic.h>
      __CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS);
      //===========Cac dinh nghia=============
      void init(void); //su bat dau
      //========M NGAT==============
      #define T2 78
      static int siClk2;
      void interrupt MyInt(void) //chuong trinh ngat
      {
      if(TMR2IF) //ngat TMR2 chia sau dúng ,chia chuoc thì chú ý
      {
      TMR2 = 256 - T2;
      TMR2IF = 0; //TGMNT2 = 0.2*256*78.125=4000µs=4ms
      if(siClk2++==1000) //tao 1s
      {
      siClk2= 0;
      RD0 = !(RD0); //dung dao
      RD2 = !(RD2); //de dao thi viet tung bit
      RD4 = !(RD4);
      RD6 = !(RD6);
      }
      }
      }
      //==========Chuong trinh chinh'===========
      void main() //chuong trinh trinh
      {
      init(); //bat dau chuong trinh
      while(1)
      {
      NOP(); //ko lam gi ca
      CLRWDT();
      }
      CLRWDT();
      }
      //=========THE END MAIN=======
      void init (void)
      {
      TRISB = 0b11111110;
      TRISD = 0b00000000;
      PORTD = 0b10101010;
      //--------Khoi tao cho TMR2-----------------
      T2CON = 0b01000100;
      //Bít7=0;Bit(6-3) là ti le chia chuoc,Bít(1-0) ti le chia sau,
      //ti le chia chuac 16 chia sau là 16 tich là 256; CHÚ Ý
      TMR2IE=1; //cho phép ngat
      PEIE=1;
      GIE=1;
      }
      //=========THE END===========
      Chuyên sửa các thiết bị công nghiệp-Phân loại Sacmi-Lò nung-máy ép... Sách hướng dãn PIC 16F877A -DĐ 0972.404.298

      Comment

      • duongvietin
        Nhập môn đệ tử
        • Mar 2011
        • 4

        #4
        cái này gọi là chỉ người ta cách ,lập trình pic co bản
        mà sao a k post thêm nữa vậy.chẳng hạn như về led ma trận ấy
        hjjhjj.
        thú thiệt la e cũng dang cần

        Comment

        • sieutosy
          Nhập môn đệ tử
          • Mar 2012
          • 8

          #5
          a cho em hỏi chương trình viết bằng ccs thì cấu trúc lệnh có giống như vậy không ạ ?

          Comment

          • sieutosy
            Nhập môn đệ tử
            • Mar 2012
            • 8

            #6
            a post code mẫu cho e với ! thank

            Comment

            • takado
              Nhập môn đệ tử
              • Jul 2011
              • 5

              #7
              mình đang làm quen với 89 và AVR tự nhiên bây giờ bị sếp giao cho đọc và hiểu code PIC. nhìn vào mặt mũi xám ngắt lại chẳng hiểu gì. lệnh và thanh ghi của PIC khác quá. cảm ơn bạn đã post bài ví dụ để mình làm quen nhanh hơn. ai cần giúp đỡ về AVR và 8051 thì qua dientuvietnam.net mình hay viết bài ở đó lắm

              Comment

              Working...