Thông báo

Collapse
No announcement yet.

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

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

  • 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.

  • #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


    • #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


      • #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


        • #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


          • #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


            • #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


              • #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


                • #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


                  • #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


                    • #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


                      • #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


                        • #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...
                          X