Thông báo

Collapse
No announcement yet.

sửa code giúp cho em với ngắt ngoài với

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

  • sửa code giúp cho em với ngắt ngoài với

    Click image for larger version

Name:	Untitled.png
Views:	1
Size:	21.2 KB
ID:	1413128[PHP]
    đây là sơ đồ nguyên lí của mạch. các anh xem cho code ở bên dưới. chương trình của em là nếu co xung ở chân int0 thi mo to ơ p1.0 quay p1.1 tat
    nếu ở int1 thì ngược lại. led do sáng khi dem do ngat o int0 =30.led xanh sang khi 0<=dem<30 ở into và int1. dem hiện thị trên led 7 đoạn. mong các bác giúp cho em với.

  • #2
    [QUOTE]#include<AT89X51.h>

    unsigned int dem,i;
    unsigned char ma[10]={192,249,164,176,153,146,130,248,128,144};
    void delay (void)
    {
    for(i=0;i<=30;++i);
    }

    void hienthi(long int n)
    {
    unsigned char chuc,donvi;
    donvi=n%10;
    chuc=n/10;
    P2=ma[donvi];
    P0_0=1;
    delay();
    P2=ma[chuc];
    P0_1 =1;
    delay();
    }
    void ngatngoai_1(void) interrupt 0
    {
    dem++ ;
    P1_0=1;

    }
    void ngatngoai_2(void) interrupt 2
    {
    dem--;
    P1_1=1;
    }
    void main()
    {
    IE=0x85;
    IT1=1;
    dem=0;
    P1=0x00;
    while(1)
    {
    hienthi(dem);
    if(0<=dem<30)
    {
    P1_2=1;
    delay();
    P1_3=0;
    }
    if(dem=30)
    P1_3=1;
    delay();
    P1_2=0;
    }
    }[QUOTE]

    Comment


    • #3
      TR0,TR2 không có, EX0,EX2 cũng không nốt EA cung không thì chạy bằng răng ah. bạn xem lại khởi tạo ngắt ngoài đi

      Comment


      • #4
        bác tham khảo nhé ! em bùn ngủ quá có gì sai sót bac comment lại em nhá

        //#include <REGX51.H> Thach anh 12MHZ T_MC=1uS
        #include <at89x52.h>
        unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0}; //ma led bac tu dien vo cho chinh xac
        unsigned char dem=0;
        #define A1 P0_0; // hang chuc
        #define A2 P0_1; // hang don vi
        #define m1 P1_0; // motor 1
        #define m2 P1_1;
        #define leddo P1_2;
        #define ledxanh P1_3;
        void delay(unsigned long time) //ham tre phuc vu quet led
        {
        while(--time);
        }
        void khoitaongatngoai()
        {
        EA=0; // CAM NGAT
        EX0=1; // TICH CUC NGAT NGOAI 0
        EX1=1; //---------------------1
        IT0=1; // NGAT NGOAI KICH KHOI CANH XUONG
        IT1=1;
        EA=1;
        }

        void ngatngoai0()interrupt 0
        {
        m1=1;
        m2=0;
        dem++;
        if(dem<30&&dem>=0)
        {
        ledxanh=1; // xanh sang
        leddo=0; // do tat
        } // do tat
        if(dem==30)
        {
        leddo=1;
        ledxanh=0;
        }
        if(dem==99)
        dem=0;
        }
        void ngatngoai1()interrupt 2
        {
        m1=0;
        m2=1;
        dem++;
        if(dem<30&&dem>=0)
        {
        ledxanh=1; // xanh sang
        leddo=0; // do tat
        }
        if(dem==30)
        {
        leddo=1;
        ledxanh=0;
        }
        if(dem==99)
        dem=0;
        }
        void main()
        {
        P1=0x00;
        P0=0x00;
        P3=0x00;
        P2=0x00;
        khoitaongatngoai();
        while(1)
        {
        A1=1;
        P2=M[dem/10];
        delay(200);
        A1=0;
        P2=0;

        A2=1;
        P2=M[dem%10];
        delay(200);
        A2=0;
        P2=0;
        }
        }
        Email :
        Phone : 0902 5777 39
        Branch: LẬP TRÌNH CÁC DÒNG CHIP NXP, ST, ATMEL

        Comment


        • #5
          Nguyên văn bởi daily84 Xem bài viết
          bác tham khảo nhé ! em bùn ngủ quá có gì sai sót bac comment lại em nhá

          //#include <REGX51.H> Thach anh 12MHZ T_MC=1uS
          #include <at89x52.h>
          unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0}; //ma led bac tu dien vo cho chinh xac
          unsigned char dem=0;
          #define A1 P0_0; // hang chuc
          #define A2 P0_1; // hang don vi
          #define m1 P1_0; // motor 1
          #define m2 P1_1;
          #define leddo P1_2;
          #define ledxanh P1_3;
          void delay(unsigned long time) //ham tre phuc vu quet led
          {
          while(--time);
          }
          void khoitaongatngoai()
          {
          EA=0; // CAM NGAT
          EX0=1; // TICH CUC NGAT NGOAI 0
          EX1=1; //---------------------1
          IT0=1; // NGAT NGOAI KICH KHOI CANH XUONG
          IT1=1;
          EA=1;
          }

          void ngatngoai0()interrupt 0
          {
          m1=1;
          m2=0;
          dem++;
          if(dem<30&&dem>=0)
          {
          ledxanh=1; // xanh sang
          leddo=0; // do tat
          } // do tat
          if(dem==30)
          {
          leddo=1;
          ledxanh=0;
          }
          if(dem==99)
          dem=0;
          }
          void ngatngoai1()interrupt 2
          {
          m1=0;
          m2=1;
          dem++;
          if(dem<30&&dem>=0)
          {
          ledxanh=1; // xanh sang
          leddo=0; // do tat
          }
          if(dem==30)
          {
          leddo=1;
          ledxanh=0;
          }
          if(dem==99)
          dem=0;
          }
          void main()
          {
          P1=0x00;
          P0=0x00;
          P3=0x00;
          P2=0x00;
          khoitaongatngoai();
          while(1)
          {
          A1=1;
          P2=M[dem/10];
          delay(200);
          A1=0;
          P2=0;

          A2=1;
          P2=M[dem%10];
          delay(200);
          A2=0;
          P2=0;
          }
          }
          hàm khởi tạo ngắt chưa hoạt động bác à

          Comment


          • #6
            Nguyên văn bởi ledsieusang Xem bài viết
            TR0,TR2 không có, EX0,EX2 cũng không nốt EA cung không thì chạy bằng răng ah. bạn xem lại khởi tạo ngắt ngoài đi
            bạn ấy có khởi tạo thanh ghi IE rồi kìa. cái này là ngắt ngoài sao lại phải có TR0 và TR2 hả bạn? bạn đang nhầm lẫn gì chăng?
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              [QUOTE=thuhaui;537198][QUOTE]#include<AT89X51.h>

              unsigned int dem,i;
              unsigned char ma[10]={192,249,164,176,153,146,130,248,128,144};
              void delay (void)
              {
              for(i=0;i<=30;++i);
              }

              void hienthi(long int n)
              {
              unsigned char chuc,donvi;
              donvi=n%10;
              chuc=n/10;
              P2=ma[donvi];
              P0_0=1;
              delay();
              P2=ma[chuc];
              P0_1 =1;
              delay();
              }
              void ngatngoai_1(void) interrupt 0
              {
              dem++ ;
              P1_0=1;

              }
              void ngatngoai_2(void) interrupt 2
              {
              dem--;
              P1_1=1;
              }
              void main()
              {
              IE=0x85;
              IT1=1;
              dem=0;
              P1=0x00;
              while(1)
              {
              hienthi(dem);
              if(0<=dem<30)
              {
              P1_2=1;
              delay();
              P1_3=0;
              }
              if(dem=30)
              P1_3=1;
              delay();
              P1_2=0;
              }
              }hàm delay của bạn sau hàm for lại có dấu ; là sao bạn? cái này sai nhé.
              hàm hiển thi (long int n) để làm gì bạn? cái này thừa. hàm hiển thị bạn lên tắt led sau mỗi lần quét để tránh hiện tương lem led nhé.
              lệnh if của bạn sai luôn. viết thế máy nói ko hiểu đâu. if(x<0&&x=<30) nhé
              thời gian delay của bạn để thế kia sẽ ko nhìn thấy led sáng tắt đâu mà bạn sẽ thấy nó sáng liên tục đó.
              trên đây là 1 số đóng góp của mình. chúc bạn học tốt
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #8
                em đã sửa lại rồi mà phần hiện thị trên led vấn ko chạy đúng chỉ hiện giá trị 0 thui. các bác xem em vẫn còn sai đoạn nào vậy
                #include <at89x52.h>
                unsigned int dem=0;
                unsigned char ma[10]={192,249,164,176,153,146,130,248,128,144};
                void delay(unsigned char time)
                { //ham tao tre 1 ms
                unsigned char x,y;
                for(x=0;x<time;x++)
                {
                for(y=0;y<125;y++);

                }
                }
                void hienthi(long int n)
                {
                unsigned char chuc,donvi;
                donvi=n%10;
                chuc=n/10;
                P2=ma[donvi];
                P0_0=0;
                delay(1);
                P0_0=1;
                delay(1);
                P2=ma[chuc];
                P0_1 =0;
                delay(1);
                P0_1=1;
                delay(1);
                }
                void ngatngoai_1(void) interrupt 0
                {
                dem++;
                P1_0=1;
                P1_1=0;
                if(0<= dem&& dem<30)
                {
                P1_2=1;
                P1_3=0;
                }
                if(dem=30)
                {
                P1_2=0;
                P1_3=1;
                }
                if(dem=31)
                dem=0;
                }
                void ngatngoai_2(void) interrupt 2
                {
                dem--;
                P1_1=1;
                P1_0=0;
                if(0<dem&&dem<30)
                {
                P1_2=1;
                P1_3=0;
                }
                if(dem=0)
                {
                P1_2=1;
                P1_3=0;
                }
                }
                void main()
                {
                dem=0;
                P1=0x00;
                IE=0x85;
                IT1=1;
                IT0=1;
                EA=1;

                while(1)
                {
                hienthi(dem);
                }
                }

                Comment


                • #9
                  Code:
                  #include <REGX51.H>
                  unsigned int dem=0;
                  unsigned char ma[10]={192,249,164,176,153,146,130,248,128,144};
                  void delay(unsigned char time)
                  {	 //ham tao tre 1 ms
                  unsigned char x,y; 
                  for(x=0;x<time;x++) 
                  { 
                  for(y=0;y<125;y++)
                  {
                  ; 
                  }
                  }
                  }
                  void hienthi(long int n)
                  {
                  unsigned char chuc,donvi;
                  donvi=n%10;
                  chuc=n/10;
                  P2=ma[donvi];
                  P0_0=1;
                  delay(50);
                  P0_0=0;
                  P2=ma[chuc];
                  P0_1 =1;
                  delay(50);
                  P0_1=0;
                  }
                  void ngatngoai_1(void) interrupt 0
                  {
                  dem++;
                  P1_0=1;
                  P1_1=0;
                  if(0<= dem&& dem<30)
                  {
                  P1_2=1;
                  P1_3=0;
                  }
                  if(dem==30)
                  {
                  P1_2=0;
                  P1_3=1;
                  }
                  if(dem==31)
                  dem=0;
                  }
                  void ngatngoai_2(void) interrupt 2
                  {
                  dem--;
                  P1_1=1;
                  P1_0=0;
                  if(0<dem&&dem<30)
                  {
                  P1_2=1;
                  P1_3=0;
                  }
                  if(dem==0)
                  {
                  P1_2=1;
                  P1_3=0;
                  }
                  }
                  void main()
                  {
                  dem=0;
                  P1=0x00;
                  IE=0x85;
                  IT1=1;
                  IT0=1;
                  EA=1;
                  
                  while(1)
                  {
                  hienthi(dem);
                  } 
                  }
                  bạn sai nguyên tắc quét led nhé. code này ok rồi đó bạn
                  Nguyễn Huy Biên - 01649 802 694
                  gmail :

                  Comment


                  • #10
                    cam on anh nha. nhưng ở trên cổng P0 chi xuất giá trị 0 rồi qua cổng đảo lay gia tri 1. chứ xuất giá trị 1 luôn là không chạy ạ.

                    Comment


                    • #11
                      bạn dùng trở thanh kéo cảng 0 nhé. cám ơn thì ấn nút đi bạn
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment


                      • #12
                        Bạn nào biết dùng ngắt ngoài để quét keypad4x4 như thế nào không chỉ giúp với ! thanks!

                        Comment


                        • #13
                          8051 có 2 chân ngắt mà dùng quét keypad đc thì hơi bá dao @@
                          Website chính thức đổi địa chỉ website thành
                          Mời các bạn ghé thăm !!!

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X