Thông báo

Collapse
No announcement yet.

Hỏi về mạch dùng ngắt ngoài, ngắt timer của 89c552

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hỏi về mạch dùng ngắt ngoài, ngắt timer của 89c552

    chào mọi người! mình có làm cái mạch dùng các ngắt để điều khiển cổng P2_0 của 89c52 để điều khiển bật tắt rơle 5vdc, cụ thể là dùng chân p2_0 xuất ra giá trị 0 đưa vào rơ le, chân còn lại của rơle đấu với + nguồn. mô phỏng thì chạy bình thường nhưng khi làm mạch thật thì thấy tất cả các cổng lại xuất ra giá trị 0, chân P2_0 chưa ấn công tắc mà đã xuất ra 0 rồi. đo điện áp giữa 2 chân rơle thi thấy nó chỉ bằng một nửa của điện áp đưa vào 89c52
    đây là mô phỏng:
    Click image for larger version

Name:	congtasc.PNG
Views:	1
Size:	15.4 KB
ID:	1419853

    vị trí con led ở chân P2_1 là rơle

    còn đây là code ạ:
    Code:
    #include <REGX51.H>
    int i;
    int j;
    
    void tre(unsigned int time)
    {
    while(time--);
    }
    void ngatngoai0(void) interrupt 0
    {
    tre(30000);
    i=i+1;
    if(i==2)
    i=0;
    
    }
    
    void ngatngoai1(void) interrupt 2
    {
    tre(30000);
     j=j+1;
     if(j==2)
     j=0;
    }
    
    void main()
    {
    IE=0x85;
    TMOD=0x60;
    TH1=0xfe;
    TL1=0xfe;
    TR1=1;
    while(1)
    {
    if(i==0)
    {
    P2_1=1;
    P2_4=0;
    }
    else
    {
    P2_1=0;
    P2_4=1;
    }
    if(j==0)
    {
    P2_2=1;
    P2_5=0;
    }
    else
    {
    P2_2=0;
    P2_5=1;
    }
    switch(TL1)
    {
    case 0xfe:
    P2_0=1;
    P2_3=0;
    break;
    
    case 0xff:
    P2_0=0;
    P2_3=1;
    break;
    }
    }
    }
    mọi người xem giúp mình với. cám ơn mọi người!!!
    Last edited by nghientoan; 05-12-2013, 20:11.

  • #2
    Bạn nhớ viết thêm chương trình chống nảy khi nhấn nút nữa. Nếu không khi bạn nhấn sẽ tạo ra nhiều ngắt ngoài liên tục.

    Bạn khởi tạo giá trị biến i và j = 0
    Code:
    int i = 0;
    int j = 0;
    Cần phải sửa lại
    Code:
    void ngatngoai0(void) interrupt 0
    {
    tre(30000);
    i=i+1;
    if(i==2)
    i=0;
    
    }
    
    void ngatngoai1(void) interrupt 2
    {
    tre(30000);
     j=j+1;
     if(j==2)
     j=0;
    }
    như thế này
    Code:
    void ngatngoai0(void) interrupt 0
    {
    tre(30000);
    i=i+1;
    if(i==2) i=0;
    
    }
    
    void ngatngoai1(void) interrupt 2
    {
    tre(30000);
     j=j+1;
     if(j==2) j=0;
    }

    Comment


    • #3
      Nguyên văn bởi tn88test Xem bài viết
      Bạn nhớ viết thêm chương trình chống nảy khi nhấn nút nữa. Nếu không khi bạn nhấn sẽ tạo ra nhiều ngắt ngoài liên tục.

      Bạn khởi tạo giá trị biến i và j = 0
      Code:
      int i = 0;
      int j = 0;
      Cần phải sửa lại
      Code:
      void ngatngoai0(void) interrupt 0
      {
      tre(30000);
      i=i+1;
      if(i==2)
      i=0;
      
      }
      
      void ngatngoai1(void) interrupt 2
      {
      tre(30000);
       j=j+1;
       if(j==2)
       j=0;
      }
      như thế này
      Code:
      void ngatngoai0(void) interrupt 0
      {
      tre(30000);
      i=i+1;
      if(i==2) i=0;
      
      }
      
      void ngatngoai1(void) interrupt 2
      {
      tre(30000);
       j=j+1;
       if(j==2) j=0;
      }
      cám ơn bạn! ngắt timer thì mình làm thì không thấy nó nhảy, còn ngắt ngoài thì nó bị nhảy nên mình cho hàm trễ trước khi đếm tăng. bạn có tìm ra vì sao cái mạch của mình chưa chạy gì mà nó đã xuất ra mức 0 không?

      Comment


      • #4
        hai cai nay cua ban thi khac nhau gi nhi?
        void ngatngoai0(void) interrupt 0
        {
        tre(30000);
        i=i+1;
        if(i==2)
        i=0;

        }

        void ngatngoai1(void) interrupt 2
        {
        tre(30000);
        j=j+1;
        if(j==2)
        j=0;
        }
        như thế này
        Code:
        void ngatngoai0(void) interrupt 0
        {
        tre(30000);
        i=i+1;
        if(i==2) i=0;

        }

        void ngatngoai1(void) interrupt 2
        {
        tre(30000);
        j=j+1;
        if(j==2) j=0;
        }

        Comment


        • #5
          Nguyên văn bởi caonhan_2004 Xem bài viết
          hai cai nay cua ban thi khac nhau gi nhi?
          void ngatngoai0(void) interrupt 0
          {
          tre(30000);
          i=i+1;
          if(i==2)
          i=0;

          }

          void ngatngoai1(void) interrupt 2
          {
          tre(30000);
          j=j+1;
          if(j==2)
          j=0;
          }
          như thế này
          Code:
          void ngatngoai0(void) interrupt 0
          {
          tre(30000);
          i=i+1;
          if(i==2) i=0;

          }

          void ngatngoai1(void) interrupt 2
          {
          tre(30000);
          j=j+1;
          if(j==2) j=0;
          }
          Uh. nó không khác nhau gì đâu! bạn ý muốn chỉ mình viết thế cho nó dễ nhìn thôi! bạn có biết vì sao mà nó đã xuất ra giá trị 0 ở các cổng khi bắt đầu chạy không? theo ý mình là đầu tiên xuất cổng 2_4,2_5,2_6=0; thôi.hix

          Comment


          • #6
            không đá động gì phải là mức 1 mới đúng chứ ta

            Comment


            • #7
              Nguyên văn bởi nghientoan Xem bài viết
              Uh. nó không khác nhau gì đâu! bạn ý muốn chỉ mình viết thế cho nó dễ nhìn thôi! bạn có biết vì sao mà nó đã xuất ra giá trị 0 ở các cổng khi bắt đầu chạy không? theo ý mình là đầu tiên xuất cổng 2_4,2_5,2_6=0; thôi.hix
              Bạn có thể đưa yêu cầu cụ thể bài toán, cả project và mạch rơ le bạn đã thiết kế như thế nào không? Như thế mọi người dễ dàng bắt bệnh hơn.

              Comment


              • #8
                Nguyên văn bởi caonhan_2004 Xem bài viết
                Bạn có thể đưa yêu cầu cụ thể bài toán, cả project và mạch rơ le bạn đã thiết kế như thế nào không? Như thế mọi người dễ dàng bắt bệnh hơn.
                Chẳng là định làm cái mạch công tắc cảm ứng. và dùng 4 ngắt: 2 ngắt ngoài và 2 ngắt timer ở chế độ đếm xung ngoài. khi mình bấm ngat ngoài 0 thì cổng p2_0 xuất ra giá tri 0 đưa vào chân rơ le, chân còn lại nối với + nguồn. tại không có mạch chuẩn mà mình chỉ bịa ra nên nó không được.hihi

                Comment


                • #9
                  Nguyên văn bởi nghientoan Xem bài viết
                  Chẳng là định làm cái mạch công tắc cảm ứng. và dùng 4 ngắt: 2 ngắt ngoài và 2 ngắt timer ở chế độ đếm xung ngoài. khi mình bấm ngat ngoài 0 thì cổng p2_0 xuất ra giá tri 0 đưa vào chân rơ le, chân còn lại nối với + nguồn. tại không có mạch chuẩn mà mình chỉ bịa ra nên nó không được.hihi
                  Chân VXL dòng ra rất nhỏ, do vậy muốn điều khiển rơle bạn phải khuyếch đại qua tran.

                  Comment


                  • #10
                    Nguyên văn bởi caonhan_2004 Xem bài viết
                    Chân VXL dòng ra rất nhỏ, do vậy muốn điều khiển rơle bạn phải khuyếch đại qua tran.
                    cám ơn bạn!!!cái này thì ok. mình chỉ phân vân cái chưa xuất ra 0 mà khi chạy các cổng đã xuất ra 0 rồi. có khi nào VDK hỏng không nhỉ?hihi

                    Comment


                    • #11
                      Nguyên văn bởi nghientoan Xem bài viết
                      cám ơn bạn!!!cái này thì ok. mình chỉ phân vân cái chưa xuất ra 0 mà khi chạy các cổng đã xuất ra 0 rồi. có khi nào VDK hỏng không nhỉ?hihi
                      Muốn biết sống hay chêt, bạn dùn lệnh gán cho nó thử xem. Gán 1 thì lúc chạy phải ra 1, gán 0 phải ra 0. Vẫn ra được thì tốt, mà không ra được là cổng bị hỏng bạn ah. Nhìn chung mô phỏng chạy thì 90% mạch thật chạy thui, chỉ sợ mạch thật của bạn vẫn có gì sai sót.

                      Comment


                      • #12
                        Nguyên văn bởi caonhan_2004 Xem bài viết
                        Muốn biết sống hay chêt, bạn dùn lệnh gán cho nó thử xem. Gán 1 thì lúc chạy phải ra 1, gán 0 phải ra 0. Vẫn ra được thì tốt, mà không ra được là cổng bị hỏng bạn ah. Nhìn chung mô phỏng chạy thì 90% mạch thật chạy thui, chỉ sợ mạch thật của bạn vẫn có gì sai sót.
                        cám ơn bạn nhiều nhé!!!

                        Comment


                        • #13
                          Nguyên văn bởi nghientoan Xem bài viết
                          chào mọi người! mình có làm cái mạch dùng các ngắt để điều khiển cổng P2_0 của 89c52 để điều khiển bật tắt rơle 5vdc, cụ thể là dùng chân p2_0 xuất ra giá trị 0 đưa vào rơ le, chân còn lại của rơle đấu với + nguồn. mô phỏng thì chạy bình thường nhưng khi làm mạch thật thì thấy tất cả các cổng lại xuất ra giá trị 0, chân P2_0 chưa ấn công tắc mà đã xuất ra 0 rồi. đo điện áp giữa 2 chân rơle thi thấy nó chỉ bằng một nửa của điện áp đưa vào 89c52
                          đây là mô phỏng:
                          [ATTACH=CONFIG]79490[/ATTACH]

                          vị trí con led ở chân P2_1 là rơle

                          còn đây là code ạ:
                          Code:
                          #include <REGX51.H>
                          int i;
                          int j;
                          
                          void tre(unsigned int time)
                          {
                          while(time--);
                          }
                          void ngatngoai0(void) interrupt 0
                          {
                          tre(30000);
                          i=i+1;
                          if(i==2)
                          i=0;
                          
                          }
                          
                          void ngatngoai1(void) interrupt 2
                          {
                          tre(30000);
                           j=j+1;
                           if(j==2)
                           j=0;
                          }
                          
                          void main()
                          {
                          IE=0x85;
                          TMOD=0x60;
                          TH1=0xfe;
                          TL1=0xfe;
                          TR1=1;
                          while(1)
                          {
                          if(i==0)
                          {
                          P2_1=1;
                          P2_4=0;
                          }
                          else
                          {
                          P2_1=0;
                          P2_4=1;
                          }
                          if(j==0)
                          {
                          P2_2=1;
                          P2_5=0;
                          }
                          else
                          {
                          P2_2=0;
                          P2_5=1;
                          }
                          switch(TL1)
                          {
                          case 0xfe:
                          P2_0=1;
                          P2_3=0;
                          break;
                          
                          case 0xff:
                          P2_0=0;
                          P2_3=1;
                          break;
                          }
                          }
                          }
                          mọi người xem giúp mình với. cám ơn mọi người!!!
                          Bạn xác định làm chơi 1 lần xong thôi hay làm vì đam mê? Nếu làm vì đam mê thực sự, có thể bất chấp khó khăn thì mình sẽ hướng dẫn bạn dùng 1 phuơng pháp khác khác cho độ chính xác cao hơn và chạy ổn định hơn rất nhiều.

                          Comment


                          • #14
                            Nguyên văn bởi myth-coder Xem bài viết
                            Bạn xác định làm chơi 1 lần xong thôi hay làm vì đam mê? Nếu làm vì đam mê thực sự, có thể bất chấp khó khăn thì mình sẽ hướng dẫn bạn dùng 1 phuơng pháp khác khác cho độ chính xác cao hơn và chạy ổn định hơn rất nhiều.
                            Vâng! xin bạn hướng dẫn cho mình ạ!

                            Comment


                            • #15
                              Nguyên văn bởi nghientoan Xem bài viết
                              Vâng! xin bạn hướng dẫn cho mình ạ!
                              Đừng khúm núm thế, đã biết ai hơn ai đâu? biết đâu tớ là "siêu nhân cuồng phong thì sao?". Bạn hệ thống lại yêu cầu và cách bạn đưa ra để giải quyết vấn đề đi. Vấn đề "công tắc cảm ứng" bạn định giải quyết như thế nào? Bạn cứ nêu ra, theo cách tự nhiên nhất ấy chứ đừng vội liên quan đến code. Phải có hướng để giải quyết vấn đề sau đó mới đi đến từng bước để giải thì mới không bị rối.

                              Comment

                              Về tác giả

                              Collapse

                              nghientoan Tìm hiểu thêm về nghientoan

                              Bài viết mới nhất

                              Collapse

                              • mèomướp
                                Trả lời cho Công thức điện tử
                                bởi mèomướp
                                Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                Hôm qua, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                Hôm qua, 20:31
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                Ok , thanks bác đã chỉ...
                                Hôm qua, 15:06
                              • nguyendinhvan
                                Công thức điện tử
                                bởi nguyendinhvan
                                Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                Chập thì thay. Cháy thì tháo
                                Làm thì láo. Báo thì hay
                                May thì khoe. Rủi thì bỏ
                                Thành tích nhỏ. Báo thành to
                                Làm cho có. Báo chi li
                                Sai cả li. Báo
                                ...
                                Hôm qua, 00:35
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                25-11-2024, 22:31
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                25-11-2024, 22:14
                              • bactho
                                Trả lời cho Tự làm máy đo Cuộn cảm
                                bởi bactho
                                Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                25-11-2024, 21:48
                              • yname11
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi yname11
                                màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                25-11-2024, 21:43
                              • bactho
                                Trả lời cho các bạn giúp mình về file HEX với!!!
                                bởi bactho
                                Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                25-11-2024, 21:21
                              • mèomướp
                                Trả lời cho Xin hỏi về màn hình laptop
                                bởi mèomướp
                                Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                25-11-2024, 20:43
                              Đang tải...
                              X