Thông báo

Collapse
No announcement yet.

Giứp sửa lỗi code

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

  • Giứp sửa lỗi code

    Chương trình minh viết hình như không sai mà sao không chạy được vậy. mong các ban giúp đỡ và sửa hộ mình với. hichic
    #include <REGX52.H>
    code unsigned char table[]=
    {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };

    unsigned char posit=0;
    unsigned int count=0;


    sbit int1 = P3^3;
    sbit SMG_q = P1^0;
    sbit SMG_b = P1^1;
    sbit SMG_s = P1^2;
    sbit SMG_g = P1^3;


    void display(unsigned int da);
    void delay(unsigned int timer);


    void main(void)
    {
    IE=0x84;
    EA=1; // tat ca moi ngat dc hoat dong.
    EX1=1; // cho phep ngat ngoai 1
    IT1=1; // thiet lap ngat theo suon am.
    TL1=0;
    TH1=0;
    TMOD=0X10;
    while(1){
    display(count);
    delay(100);
    }
    }
    void hongwai(void) interrupt 1
    {
    TR1=1; // khoi dong timer 1
    while(!int1);
    TR1=0;
    count=(int)(TH1<<8)+TL1;
    count/=10;
    EX1=0;
    TF1=0;
    }


    void display(unsigned int da)
    {
    P0=0XFF;
    da=da%10000;
    switch(posit){
    case 0:
    SMG_q=0;
    SMG_b=1;
    SMG_s=1;
    SMG_g=1;
    P0=table[da/1000];
    break;
    case 1:
    SMG_q=1;
    SMG_b=0;
    SMG_s=1;
    SMG_g=1;
    P0=table[da%1000/100]&0x7f;
    break;
    case 2:
    SMG_q=1;
    SMG_b=1;
    SMG_s=0;
    SMG_g=1;
    P0=table[da%100/10];
    break;
    case 3:
    SMG_q=1;
    SMG_b=1;
    SMG_s=1;
    SMG_g=0;
    P0=table[da%10];
    break;
    }
    posit++;
    if(posit>3)
    posit=0;
    }

    void delay(unsigned int timer){
    while(timer--);
    }

  • #2
    Bác dùng cái gì biên dịch, lỗi nó báo ra sao, phải ghi ra chứ.
    QTCP

    Comment


    • #3
      Sơ đồ nguyên lý bác vẽ ra sao, khộng có thông tin gì lam sao mà giúp
      QTCP

      Comment


      • #4
        Click image for larger version

Name:	1380601_1387257268237646_6949634327537266127_n.jpg
Views:	1
Size:	123.7 KB
ID:	1400387 sờ đồ đây bạn ạ. có cả kit thực tập sẵn rồi. nên mình k dùng phần mềm mô phỏng bạn ạ

        Comment


        • #5
          Nguyên tắc khi sử dụng UART (ở đây là giao tiếp máy tính) là dùng timer 1 để tạo tốc độ baund, nên bác chỉ còn timer 0 để dùng thôi. Đây là chỗ sai thứ nhất của bác. Thứ 2 bác cho phép ngắt ngoài nhưng chương trình con phục vụ ngắt của bác lại nhảy đến ngắt timer 0, trong khi timer không chưa được cho phép đếm (TR0=0). Đây là điểm sai thứ 2.
          QTCP

          Comment


          • #6
            c trình của mình mới chỉ hiển thị lên led7seg cho nên cái lỗi 1 chắc k cần sửa bác nhỉ. khi nào giao tiếp máy tính thì sửa sau đúng k bác. bác có thể sửa luôn giúp e được không

            Comment


            • #7
              giao tiếp máy tính thì mình là tương đối nhiềi bài rồi. và hiển thị lên led7seg nữa. ctrinh của mình sai chắc chỉ trong hàm chính thôi.

              Comment


              • #8
                Đúng rồi, khi giao tiếp máy tính thì bác không được dùng timer1 nữa. Còn với yêu cầu bài náy bác không cần ngắt làm gì cho mệt, cứ đặt timer0 đếm xung ngoại mode 1, xung hồng ngoại bác cấp vào P3_4, giá trị trong TH0 và TL0 chính là số lượng xung đếm được, quăng nó lên máy tính đồng thời giải mã hiển thị đưa ra led 7 đoạn. Đấy là cách đơn giản nhất.
                QTCP

                Comment


                • #9
                  bác sửa luôn giúp em vào cái ctrinh của em được k ạ. e làm tư hôm qua mà k được hichic

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X