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

Nhờ mọi người xem hộ tại sao mạch ko chạy.

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thancam
    Thành viên mới
    • Oct 2008
    • 19

    #1

    Nhờ mọi người xem hộ tại sao mạch ko chạy.

    #include<regx51.h>

    void kiemtrachan(unsigned char *x,unsigned char *u)
    {
    if ((P1_0 = 1) != 0)
    {
    *u=1;
    }
    else
    {
    if ((*u=1) != 0)
    {
    *x= *x+1;
    *u=0;
    }
    }
    }
    void hienthi(unsigned char k)//hien thi so ra man hinh
    {
    switch(k)
    {
    case 0:
    P2=0x40;
    break;
    case 1:
    P2=0x79;
    break;
    case 2:
    P2=0x24;
    break;
    case 3:
    P2=0x30;
    break;
    case 4:
    P2=0x19;
    break;
    case 5:
    P2=0x12;
    break;
    case 6:
    P2=0x02;
    break;
    case 7:
    P2=0x78;
    break;
    case 8:
    P2=0x00;
    break;
    case 9:
    P2=0x10;
    break;
    }
    }

    main()//Chu+o+ng trình chính
    { unsigned char l,t,k1;
    l=k1=t= 0;
    while(1)//ta.o vòng la(.p vô ha.n
    {
    kiemtrachan(&l,&t);
    if (l>0x09) l=0;
    hienthi(l);
    }
    }
    Mục đích của chương trình là: nối trực tiếp 89c51 vào màn hình led 7 thanh để hiện thị số lần nảy xung ở chân P1_0. Kiểm tra bằng keil C thì ok rồi: ko có lỗi gì. Nhưng nạp vào mạch rồi chạy thử thì màn hình chỉ mỗi số 0 thôi. Em đã đem quân P1_0 quẹt vào đầu dương rồi đến đầu âm của nguồn nhưng ko thấy nhảy số - ko biết sai ở đâu cả
    Last edited by thancam; 16-03-2009, 08:03.
  • hai_abc
    Thành viên tích cực
    • Jan 2008
    • 170

    #2
    void kiemtrachan(unsigned char *x,unsigned char *u)
    {
    if ((P1_0 = 1) != 0)
    {
    *u=1;
    }
    else
    {
    if ((*u=1) != 0)
    {
    *x= *x+1;
    *u=0;
    }
    }
    }
    Bác sửa chỗ đó thành if ((P1_0 == 1) != 0)
    ----------------------
    Bể học là mênh mông!

    Comment

    • thancam
      Thành viên mới
      • Oct 2008
      • 19

      #3
      Nguyên văn bởi hai_abc Xem bài viết
      Bác sửa chỗ đó thành if ((P1_0 == 1) != 0)
      Vẫn không được bác ah. Không hiểu là sai ở đâu nữa. Để thử cách dùng bộ đếm có sẵn vậy.

      Comment

      • hai_abc
        Thành viên tích cực
        • Jan 2008
        • 170

        #4
        Bác thử post sơ đồ mạch của bác lên! Tôi chạy thử được trên proteus!
        ----------------------
        Bể học là mênh mông!

        Comment

        • thancam
          Thành viên mới
          • Oct 2008
          • 19

          #5

          mạch thì rất đơn giản. Các chân của P2 nối với màn hình led. P1_0 lấy tín hiệu. Đơn giản thế thôi mà.

          Comment

          • hai_abc
            Thành viên tích cực
            • Jan 2008
            • 170

            #6
            Các chân P2 nên nối với trở đệm rồi nối với Led để tránh chêt chân IC.

            Chân P1.0 bác nối với trở 10K lên 5V

            Khi lấy tín hiệu thì bác đưa chân P1.0 xuống (Nối đất) và sửa code if ((P1_0 == 1) != 0) thành if ((P1_0 == 0) != 0) hay if (P1_0 == 0)
            ----------------------
            Bể học là mênh mông!

            Comment

            • thancam
              Thành viên mới
              • Oct 2008
              • 19

              #7
              Nguyên văn bởi hai_abc Xem bài viết
              Các chân P2 nên nối với trở đệm rồi nối với Led để tránh chêt chân IC.

              Chân P1.0 bác nối với trở 10K lên 5V

              Khi lấy tín hiệu thì bác đưa chân P1.0 xuống (Nối đất) và sửa code if ((P1_0 == 1) != 0) thành if ((P1_0 == 0) != 0) hay if (P1_0 == 0)
              Thuật toán kiểm tra chân của mình là: nếu P1_0 bằng 1 thì biến u tăng lên 1. Còn nếu P1_0 bằng 0 thì xảy ra hai trường hợp: nếu u = 1 thì bộ đếm x tăng thêm 1 đồng thời u sẽ gán bằng 0. Nếu P1_0 bằng 0 mà u = 0 thì giữ nguyên giá trị x và u. Tiếp tục một chu kỳ mới từ đầu.
              Chân P1_0 mình đọc thấy trong datasheet nói trạng thái logic hight của P1_0 có điện áp max là Vcc + 0.2v nên mình ko gắn thêm trở vào. Còn P2 thì lúc đầu có gắn trở, về sau chả gắn nữa: ic ko sao cả

              Comment

              • thancam
                Thành viên mới
                • Oct 2008
                • 19

                #8
                #include<regx51.h>
                void hienthi(unsigned char k)//hien thi so ra man hinh
                {
                switch(k)
                {
                case 0:
                P2=0x40;
                break;
                case 1:
                P2=0x79;
                break;
                case 2:
                P2=0x24;
                break;
                case 3:
                P2=0x30;
                break;
                case 4:
                P2=0x19;
                break;
                case 5:
                P2=0x12;
                break;
                case 6:
                P2=0x02;
                break;
                case 7:
                P2=0x78;
                break;
                case 8:
                P2=0x00;
                break;
                case 9:
                P2=0x10;
                break;
                }
                }

                main()//Chu+o+ng trình chính
                { TMOD = 0x05;//lap bo dem 16 bit 0;
                while(1)
                {
                TH0 = 0x00;
                TL0 = 0x00;
                TR0 = 0x01;
                while (TL0 < 0x0A)
                {
                hienthi(TL0);
                }
                TR0 = 0x00;
                }
                }
                vẫn ko chạy được. Mọi người xem dùng cái.
                Last edited by thancam; 18-03-2009, 09:51.

                Comment

                • vmt.dttt
                  Thành viên chính thức
                  • Nov 2007
                  • 65

                  #9
                  while(1)//ta.o vòng la(.p vô ha.n
                  {
                  kiemtrachan(&l,&t);
                  if (l>0x09) l=0;
                  hienthi(k); // bạn thay l = k ở chỗ nay`
                  }
                  }
                  ---------------------------------
                  Ai dám nói:
                  1 +1 =2 ^^

                  Comment

                  • thancam
                    Thành viên mới
                    • Oct 2008
                    • 19

                    #10
                    Nguyên văn bởi vmt.dttt Xem bài viết
                    while(1)//ta.o vòng la(.p vô ha.n
                    {
                    kiemtrachan(&l,&t);
                    if (l>0x09) l=0;
                    hienthi(k); // bạn thay l = k ở chỗ nay`
                    }
                    }
                    mình thay k thì keil c báo lỗi:
                    biến k: underfiled identifilier.

                    Nản quá đi mất.

                    Comment

                    • thancam
                      Thành viên mới
                      • Oct 2008
                      • 19

                      #11
                      Mạch 2 đã chạy rồi. Hóa ra là do nhiễu.
                      Với cách 1 thì sau khi khử nhiễu. Mạch vẫn ko nhảy. Với cách 2 dùng timer để đếm thì mạch nhảy số không liên tục mà giống như random.
                      Last edited by thancam; 18-03-2009, 10:59.

                      Comment

                      • thancam
                        Thành viên mới
                        • Oct 2008
                        • 19

                        #12
                        #include<regx51.h>
                        #define leddonvi P1_2
                        #define ledchuc P1_3
                        #define ledtram P1_4
                        #define lednghin P1_5
                        void delay(unsigned int ms)//hàm này ta.o ?o^. tre^~ tho+`i gian, do+n vi. là ms
                        {
                        unsigned int i;
                        unsigned char j;//khai báo kie^?u "char"mo^~i bie^'n chi? chie^'m 1 byte
                        for(i=0;i<ms;i++)
                        for(j=0;j<120;j++)
                        {}//không làm gì ca?
                        }
                        void hienthi(unsigned char k)//hien thi so ra man hinh
                        {
                        switch(k)
                        {
                        case 0:
                        P2=0x40;
                        break;
                        case 1:
                        P2=0x79;
                        break;
                        case 2:
                        P2=0x24;
                        break;
                        case 3:
                        P2=0x30;
                        break;
                        case 4:
                        P2=0x19;
                        break;
                        case 5:
                        P2=0x12;
                        break;
                        case 6:
                        P2=0x02;
                        break;
                        case 7:
                        P2=0x78;
                        break;
                        case 8:
                        P2=0x00;
                        break;
                        case 9:
                        P2=0x10;
                        break;
                        }
                        }

                        main()//Chu+o+ng trình chính
                        {
                        unsigned char k1,k2,k3,k4;
                        bit t;
                        t=0;k1=0;k2=0;k3=0;k4=0;
                        while(1)//ta.o vòng la(.p vô ha.n
                        {
                        if (P1_0 == 0)
                        {delay(40);
                        leddonvi =1;ledchuc =0; ledtram =0;lednghin=0;
                        hienthi(k1);
                        delay(40);
                        leddonvi =0;ledchuc =1; ledtram =0;lednghin=0;
                        hienthi(k2);
                        delay(40);
                        leddonvi =0;ledchuc =0; ledtram =1;lednghin=0;
                        hienthi(k3);
                        delay(40);
                        leddonvi =0;ledchuc =0; ledtram =0;lednghin=1;
                        hienthi(k4);
                        t=1;
                        }
                        else
                        {
                        if (t==1)
                        {
                        if (k1<0x09) k1=k1+1; else
                        {k1 =0;if (k2<0x09) k2 =k2 +1; else
                        {k2=0;if (k3<0x09) k3 = k3 +1; else
                        {k3=0;if (k4<0x09) k4 = k3 +1; else
                        {k1=0;k2=0;k3=0;k4=0;
                        };
                        };
                        };
                        };
                        delay(40);
                        leddonvi =1;ledchuc =0; ledtram =0;lednghin=0;
                        hienthi(k1);
                        delay(40);
                        leddonvi =0;ledchuc =1; ledtram =0;lednghin=0;
                        hienthi(k2);
                        delay(40);
                        leddonvi =0;ledchuc =0; ledtram =1;lednghin=0;
                        hienthi(k3);
                        delay(40);
                        leddonvi =0;ledchuc =0; ledtram =0;lednghin=1;
                        hienthi(k4);
                        t=0;
                        }
                        }
                        }
                        }

                        Comment

                        • thinhbk50
                          Thành viên chính thức
                          • Mar 2009
                          • 54

                          #13
                          nhờ moịnguwowif xem hộ cái mình có 1 đoạn code này để điều khiển led đơn dùng 8051
                          -Cổng p0 các đèn sáng đần từ phải sang trái
                          -Cổng p1 có một đèn tắt chạy từ trái sang phải
                          -Cổng p2 tắt một đèn chạy từ phải sang trái
                          -Cổng p3 các đèn tắt dần chạy từ trái sang phải
                          nhưng mà mình không hiểu cái lệnh gộp Macro nó sai chỗ nào mà không chạy được , mong các bạn xem dùm với


                          macro@WriteP < 1 >
                          mov P|1,a
                          end mac
                          macro@WritePS <1,2 >
                          mov a,#/1
                          mov P|2,a
                          end mac
                          org 00h
                          lap0:mov r7,#8
                          mov a,#01h
                          mov r5,a
                          lap1:nop
                          @write P0
                          call delay
                          mov b,a
                          mov a,r5
                          r1a
                          mov r5,a
                          add a,b
                          djnz r7,lap1
                          mov r7,#8
                          mov a,#00h
                          setb acc.7
                          mov r5,a
                          lap2:nop
                          @write P1
                          call delay
                          mov b,a
                          mov a,r5
                          rr a
                          mov r5,a
                          add a,b
                          djnz r7,lap2
                          mov r7,#8
                          @write P2
                          call delay
                          mov r5,a
                          mov a,b
                          r1a
                          mov b,a
                          mov a,r5
                          subb a,b
                          djnz r7,lap3
                          mov r7,#8
                          mov a,#0ffh
                          lap4:nop
                          @write p3
                          call delay
                          mov r5,a
                          mov a,b
                          rr a
                          mov b,a
                          mov a,r5
                          subb a,b
                          djnz r7,lap4
                          @write ps 00h,3
                          call delay
                          sjmp lap0
                          delay:mov r0,#2
                          del1:mov r1,#250
                          del2:mov r2,#250
                          del3:djnz r2,del3
                          djnz r1,del2
                          djnz r0,del1
                          ret
                          end

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...