Thông báo

Collapse
No announcement yet.

các bác xem giúp e code này sai chỗ nào mà nó ko chạy với

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

  • các bác xem giúp e code này sai chỗ nào mà nó ko chạy với

    #include <REGX51.H>
    #define aled1 P1_0
    #define aled2 P1_1
    #define aled3 P1_2
    #define aled4 P1_3
    unsigned char i,k;
    unsigned char code maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

    void delay()
    {
    TMOD=0x01; //timer0 16 byt
    TH0=0x2710;
    TL0=0x2710;
    while(!TF0)
    TF0=0;
    TR0=0;
    }
    void ngatngoai0()interrupt 0
    {
    while(1)
    {
    for(k=0;k<9999;k++)
    {
    P2=maled[i/1000];
    aled1=0;
    delay();
    aled1=1;
    P2=maled[(i/100)%10];
    aled2=0;
    delay();
    aled2=1;
    P2=maled[(i/10)%10];
    aled3=0;
    delay();
    aled3=1;
    P2=maled[i%10];
    aled4=0;
    delay();
    aled4=1;
    }
    }
    }
    void khoitaongatngoai0()
    {EA=1;
    EX0=1;
    IT0=1;
    }
    void main()
    {khoitaongatngoai0();
    }
    Nguyễn Huy Biên - 01649 802 694
    gmail :

  • #2
    TH0=0x2710;
    TL0=0x2710;
    dòng này là sao nhỉ?? TH0,TL0 thanh ghi 8bit thôi mà
    phải ghi là TH0 = 0x27;
    TL0 = 0x10;

    mà "cho phép timer chay" chỗ nào, (TR0 = 1) chỗ nào?
    viết lại thành thế này xem
    void delay()
    {
    TMOD=0x01; //timer0 16 byt
    TH0=0x27;
    TL0=0x10;
    TR0 = 1; // cho phep timer chay
    while(!TF0)
    TF0=0;
    TR0=0;
    }

    Comment


    • #3
      TR0=0 thì chạy bằng niềm tin ah xem lại code đi code sai tùm lum rồi không chạy được đâu

      Comment


      • #4
        Nguyên văn bởi delta21 Xem bài viết
        dòng này là sao nhỉ?? TH0,TL0 thanh ghi 8bit thôi mà
        phải ghi là TH0 = 0x27;
        TL0 = 0x10;

        mà "cho phép timer chay" chỗ nào, (TR0 = 1) chỗ nào?
        viết lại thành thế này xem
        void delay()
        {
        TMOD=0x01; //timer0 16 byt
        TH0=0x27;
        TL0=0x10;
        TR0 = 1; // cho phep timer chay
        while(!TF0)
        TF0=0;
        TR0=0;
        }
        vâng, đúng là e thiếu TR0=1 còn TH0 và TL0 là do e chọn timer 16 bít mà bác. nên e nghĩ chỗ đó ko sai mà
        Nguyễn Huy Biên - 01649 802 694
        gmail :

        Comment


        • #5
          Nguyên văn bởi bienhou Xem bài viết
          vâng, đúng là e thiếu TR0=1 còn TH0 và TL0 là do e chọn timer 16 bít mà bác. nên e nghĩ chỗ đó ko sai mà
          sai bét tè re ra còn gì, 2710= 2byte=16bit, mỗi thanh ghi th và tl chỉ chứa 1 byte, thằng h lấy cao, l lấy thấp. gán thế kia nó thành 32 bit rồi
          ngoài ra ko biết có phải mắt lé nhìn k kĩ ko nhưng mà cái biến i chả thấy nó hoạt động ra sao cả
          Website chính thức đổi địa chỉ website thành
          Mời các bạn ghé thăm !!!

          Comment


          • #6
            thay biến i thành biến k chăng ??

            Comment


            • #7
              vâng. cám ơn các bác. e đọc về phần timer và ngắt cũng ko hiêu lắm. bác nào có tài liệu về cái này thì cho e xin với.e cám ơn
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #8
                tài liệu mạng thôi, mà cái dòng 8051 này giờ nó quá phổ biến và nhiều tài liệu, chịu khó tìm tí đầy, trên diễn đàn này cũng li mit
                Website chính thức đổi địa chỉ website thành
                Mời các bạn ghé thăm !!!

                Comment


                • #9
                  hì. mong các bác giúp e xóa đi cái sự ngu dốt này.
                  e có viết lại code như sau, nhưng nó vẫn ko chạy. các bác giúp em.

                  #include <REGX51.H>
                  unsigned char i;
                  unsigned char m[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                  void delay()
                  {
                  TMOD=0x01; //timer0 16 byt
                  TH0=0x27;
                  TL0=0x10;
                  TR0=1;
                  while(!TF0) // kiem tra co tran
                  TF0=0; // xoa co tran
                  TR0=0; //khong cho phep timer0 hoat dong.
                  }
                  void ngatngoai0()interrupt 0
                  {
                  for(i=0;i<9999;i++)
                  {
                  P1=0x01;
                  P2=m[i/1000];
                  delay();
                  P1=0x02;
                  P2=m[(i%1000)/100];
                  delay();
                  P1=0x04;
                  P2=m[((i%1000)%100)/10];
                  delay();
                  P1=0x08;
                  P2=m[((i%1000)%100)%10];
                  delay();
                  }
                  }
                  void khoitaongatngoai0()
                  {EA=1;
                  EX0=1;
                  IT0=1;
                  }
                  void main()
                  {khoitaongatngoai0();
                  }
                  Nguyễn Huy Biên - 01649 802 694
                  gmail :

                  Comment


                  • #10
                    1. TMOD khai báo 1 lần trong main được rồi
                    2. delay này dùng lệnh trễ của C đc rồi, mà cái bài chú send cho a qua yahoo, nói là tạo trễ 10ms là sai lòi pha đấy, timer đếm tiến chứ k đếm lùi tức 65535-10000=55355=55ms rồi. mà 1s=1000ms/55~18 lần đã ko đảm bảo quét led chưa kể 1 quá trình 4 lần gọi cái lặp đấy là mỗi con led chỉ đc cấp nguồn 4 lần trong 1s, thì chả có cái hiện tượng lưu ảnh j trong mắt cả. t2 nếu chú có giảm trễ đi đủ 24h/s thì cũng k sáng đc vì quét liên tục đảm bảo ra 4 con số 8 to lù, sai cơ bản từ phần quét led, học lại quét led đã
                    3.ko ai người ta cho quét led vào ngắt ngoài cả, ngắt ngoài do 1 sự tác động từ bên ngoài bất chợt, làm sao nó chạy dc, cái này có thể nhé vào vòng lặp vô tận trong main hoặc dùng ngắt timer vs tần số cố định
                    4.ngắt ngoài thường chỉ để kiểm tra sự kiện hoặc đếm 1 giá trị nào đó đơn giản kiểu m++ thôi, làm lại từ a-z nhé
                    Website chính thức đổi địa chỉ website thành
                    Mời các bạn ghé thăm !!!

                    Comment


                    • #11
                      Nguyên văn bởi mast090 Xem bài viết
                      1. TMOD khai báo 1 lần trong main được rồi
                      2. delay này dùng lệnh trễ của C đc rồi, mà cái bài chú send cho a qua yahoo, nói là tạo trễ 10ms là sai lòi pha đấy, timer đếm tiến chứ k đếm lùi tức 65535-10000=55355=55ms rồi. mà 1s=1000ms/55~18 lần đã ko đảm bảo quét led chưa kể 1 quá trình 4 lần gọi cái lặp đấy là mỗi con led chỉ đc cấp nguồn 4 lần trong 1s, thì chả có cái hiện tượng lưu ảnh j trong mắt cả. t2 nếu chú có giảm trễ đi đủ 24h/s thì cũng k sáng đc vì quét liên tục đảm bảo ra 4 con số 8 to lù, sai cơ bản từ phần quét led, học lại quét led đã
                      3.ko ai người ta cho quét led vào ngắt ngoài cả, ngắt ngoài do 1 sự tác động từ bên ngoài bất chợt, làm sao nó chạy dc, cái này có thể nhé vào vòng lặp vô tận trong main hoặc dùng ngắt timer vs tần số cố định
                      4.ngắt ngoài thường chỉ để kiểm tra sự kiện hoặc đếm 1 giá trị nào đó đơn giản kiểu m++ thôi, làm lại từ a-z nhé
                      vâng. thanks bác nhiều. e làm lại đây
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment


                      • #12
                        Nguyên văn bởi mast090 Xem bài viết
                        1. TMOD khai báo 1 lần trong main được rồi
                        2. delay này dùng lệnh trễ của C đc rồi, mà cái bài chú send cho a qua yahoo, nói là tạo trễ 10ms là sai lòi pha đấy, timer đếm tiến chứ k đếm lùi tức 65535-10000=55355=55ms rồi. mà 1s=1000ms/55~18 lần đã ko đảm bảo quét led chưa kể 1 quá trình 4 lần gọi cái lặp đấy là mỗi con led chỉ đc cấp nguồn 4 lần trong 1s, thì chả có cái hiện tượng lưu ảnh j trong mắt cả. t2 nếu chú có giảm trễ đi đủ 24h/s thì cũng k sáng đc vì quét liên tục đảm bảo ra 4 con số 8 to lù, sai cơ bản từ phần quét led, học lại quét led đã
                        3.ko ai người ta cho quét led vào ngắt ngoài cả, ngắt ngoài do 1 sự tác động từ bên ngoài bất chợt, làm sao nó chạy dc, cái này có thể nhé vào vòng lặp vô tận trong main hoặc dùng ngắt timer vs tần số cố định
                        4.ngắt ngoài thường chỉ để kiểm tra sự kiện hoặc đếm 1 giá trị nào đó đơn giản kiểu m++ thôi, làm lại từ a-z nhé
                        Anh có thể nói rõ hơn về phần quét LED được không anh?!

                        Comment


                        • #13
                          #include <REGX51.H>
                          sbit Led1 = P1^0;
                          sbit Led2 = P1^1;
                          sbit Led3 = P1^2;
                          sbit Led4 = P1^3;
                          //=================
                          unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                          int a,b,c,d,e,f,k;
                          //=================
                          void delay(long time)
                          {long n;
                          for(n=0;n<time;n++)
                          {;
                          }
                          }
                          void khoitaongatngoai0()
                          {EA=1;
                          EX0=1;
                          IT0=1;
                          }
                          void ngatngoai0() interrupt 0
                          {
                          {
                          for(k=0;k<=9999;k++)
                          {
                          a=k/1000;
                          b=(k/100)%10;
                          e=(k/10)%10;
                          f=k%10;
                          Led1=1; //led dau tien sang
                          P2=M[a];
                          delay(50);
                          Led1=0;
                          P2=0xff;//xoa du lieu
                          Led2=1; //led 2 sang
                          P2=M[b];
                          delay(50);
                          Led2=0;
                          P2=0xff;
                          Led3=1;
                          P2=M[e];
                          delay(50);
                          Led3=0;
                          P2=0xff;
                          Led4=1;
                          P2=M[f];
                          delay(50);
                          Led4=0;
                          P2=0xff;
                          }
                          }
                          }
                          void main()
                          {
                          khoitaongatngoai0();
                          }
                          mày mò từ sáng cuối cùng nó cũng chạy được 1 chút rồi. nhưng con led hàng đơn vị nó đứng yên ko àh. các bác chỉ e cách khắc phục.
                          thứ 2: bây h e muốn dùng thêm 1 nút ấn để khi có tác động từ nút ấn này vào vxl thì nó sẽ giữ nguyên giá trị, có nghĩa là led 7 đoạn ko chạy nữa ma giữ nguyên giá trị tại thời điểm ấn.
                          e còn tối dạ lắm. mong được các bác nhiệt tình chỉ bảo e thêm.
                          thanks
                          Nguyễn Huy Biên - 01649 802 694
                          gmail :

                          Comment


                          • #14
                            Đếm sự kiện hiển thị lên LED7 mà sao lại lấy ngắt ngoài tính toán hiển thị làm chi thế?

                            Comment


                            • #15
                              nhìn cái code đau hết cả mắt
                              muốn lòi con mắt luôn (đã cận nặng rồi mà gặp ca này đúng là bó tay)

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X