Thông báo

Collapse
No announcement yet.

lỗi ngắt trong 8501

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

  • lỗi ngắt trong 8501

    void main(void)
    {
    TMOD=0X01;//TIMER0 che do 1
    IE=0X85; //ngat ngoai 0 va 1
    IP=0;//uu tien ngat bang nhau
    dem=t1=0;
    TH0=-1000/256; //timer 1ms
    TL0=-1000%256;
    contac1=contac2=contac3=1;
    a=contac1;
    b=contac2;
    c=contac3;
    if (a==0)
    TR0=1;
    dem =0;
    while(dem<10000);
    dem=t1;
    y=TH0;
    x=TL0;
    t1=256*y+z;
    while(1)
    if(b==0)
    TF0=1;
    void ngatT0(void) interrupt 1//loi do cho nay
    {
    dem++;
    vantoc=20/t1;//mac dinh s=20
    TF0=0;
    dem=t2;
    }
    em muốn ngắt timer 0.để lấy giả trị t1.nhưng sao lại lỗi ở chương trình ngắt nhỉ.ai biết.chỉ giùm cái.
    Last edited by Thái Tuế_vy; 16-05-2011, 20:31.

  • #2
    Cấu trúc chương trình ngắt không đúng. Nên sửa lại là:

    PHP Code:
    void ngatT0 (voidinterrupt 1{
    ..
    code...

    Comment


    • #3
      bạn ơi.vẫn lỗi.vẫn lỗi vậy.

      Comment


      • #4
        ý định đang làm j vậy ta ?!!

        Comment


        • #5
          _ Lỗi gì vậy bạn,lỗi biên dịch hay là lỗi khi mô phỏng, hay là lỗi khi chạy thực???

          Comment


          • #6
            Trình biên dịch báo lỗi ở đấy là đúng rồi.
            Bỏ chương trình ngắt ra khỏi hàm main đi.

            Comment


            • #7
              #include<reg52.h>
              #include<math.h>
              #include<stdio.h>
              sbit contac1=P3^4;
              sbit contac2=P3^2;
              bit a,b;
              unsigned long int dem,t1,y,z;
              char x;
              //phân hien thi len PC//
              void delay()
              {
              unsigned long int i;
              for(i=1; i<=2000; i++) ;
              }

              void truyenmotkitu( char x)
              {

              while(!TI) ;
              SBUF=x;
              TI=0;

              }
              void truyenchuoi(char *s)

              {
              while(*s)

              {
              truyenmotkitu(*s);
              s++;
              }
              }

              void main(void)
              {
              //THIET LAP TOC BO BAUD 9600
              SCON=0x52; // khoi tao thanh ghi SCON
              TMOD=0x20; // Timer 1 MODE 2
              TH1=TL1=-3; // Toc do baud la 9600
              TR1=1; // Cho Timer 1 chay
              truyenchuoi("t1=");
              // chuong trinh tinh thoi gian t1//
              while(1)
              TMOD=0x01;//timer 0 che do 1//
              IE=0x8a;//ngat ngoai timer1//
              IP=0; //ngat bang nhau
              TH0=TL0=-100;//nap gia tri cho timer
              dem=0;
              contac1=contac2=1;//trang thai ban dau cua nut bam
              a=contac1;
              b=contac2;
              if(a==0) //nhan nut bam
              TR0=1;//cho phep timer 0 hoat dong
              if(b==0);
              }
              void ngatT0(void) interrupt 1
              {
              TF0=1;
              dem=t1=y*256+z;//doi t1 ra so thap phan
              TR0=1;
              }
              ai chỉ giùm em code sai ở đâu với.em muốn tinh thời gian t1. dùng proteous thì chẳng tính được t1???
              a chỉ giùm cái.

              Comment


              • #8
                bạn này gặp phải lỗi tuơng tự mình, ai giải quyết giùm cái, đây là code mình viết đo tốc độ động cơ dùng encoder 32 lỗ, vấn đề ko phải là ở cái hàm ngắt có thêm chữ void vì mình làm nhiều cái rồi chả cần void cũng chạy ầm ầm
                lỗi của mình là mô phỏng chạy rất rất là luột, nhưng khi mình làm mạch thực tế thì cái biến vòng hiển thị lên led 7 thanh ko được cập nhật sau mỗi giây, bình thường cái biến vòng ban đầu=0 nhưng ở đây mình thử đặt =1234 thì nó cứ hiển thị 1234 lên màn hình mà ko hề thay đổi, vì nếu ko cho động cơ quay thì ko có xung tác động vào T0 thì vòng sẽ =0 nhưng 4 con led 7thanh cứ hiện 1234 mà chả có hiện tượng j khác, ai biết khắc phục lỗi này chỉ mình cái
                #include<regx52.h>
                #include<stdio.h>
                #include<math.h>
                sbit L1 = P2^0;
                sbit L2 = P2^1;
                sbit L3 = P2^2;
                sbit L4 = P2^3;
                //////////////////////////////////////////
                unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                unsigned int vong,dem;
                unsigned int nghin,tram,chuc,dvi;
                //////////////////////////////////////////
                void delay_ms(unsigned int time)
                {
                unsigned int i;
                unsigned int j;
                for(i = time;i>0;i--)
                for(j=0;j<125;j++);
                }
                //////////////////////////////////////////
                void clear_led(void)
                {
                P0=0xff;
                P2=0;
                }
                //////////////////////////////////////////
                void hien_thi()
                {
                nghin = vong/1000;
                tram = (vong%1000)/100;
                chuc = ((vong%1000)%100)/10;
                dvi = ((vong%1000)%100)%10;

                L1 = 1; L2=L3=L4=0;
                P0=M[nghin];
                delay_ms(2);
                clear_led();


                L2 = 1; L1=L3=L4=0;
                P0=M[tram];
                delay_ms(2);
                clear_led();


                L3 = 1; L1=L2=L4=0;
                P0=M[chuc];
                delay_ms(2);
                clear_led();

                L4 = 1; L1=L2=L3=0;
                P0=M[dvi];
                delay_ms(2);
                clear_led();
                }


                ///////////////////////////////////
                void main()
                {
                TMOD=0x25;
                IE=0x88;
                IP=0x08;
                dem =0; vong=0;
                TH1 = TL1 = -250;
                TH0 = TL0 = 0;
                TR0 = TR1 = 1;
                while(1)
                {
                hien_thi();
                }
                }
                void ngatT1() interrupt 3
                {
                dem++;
                if(dem==4000)
                {
                EA=0;
                dem=0;
                TR0=TR1=0;
                vongTH0*256+TL0)/32)*60;
                TH0=TL0=0;
                TR0=TR1=1;
                EA=1;
                }
                }

                đây là toàn bộ mạch mô phỏng của mình đề chạy ngon(mô phỏng mình dùng 1 xung DCclock tác động vào T0)
                http://www.mediafire.com/?fv89mfulp66b738
                Website chính thức đổi địa chỉ website thành
                Mời các bạn ghé thăm !!!

                Comment


                • #9
                  buồn nhỉ.không có cao thủ nào chỉ giúp.kiểu này bán hết đồ đi.chuyển sang học kinh tế thui

                  Comment


                  • #10
                    Nguyên văn bởi Thái Tuế_vy Xem bài viết
                    buồn nhỉ.không có cao thủ nào chỉ giúp.kiểu này bán hết đồ đi.chuyển sang học kinh tế thui
                    khổ nỗi ở chỗ này mấy cái biến của cậu muốn sử dụng được trong hàm ngắt thì nhớ khai báo toàn cục nhá, ngoài hàm main ấy, còn nữa, khi vào hàm ngắt, cậu nên chắc chắn rằng timer0 đã đc stop và nạp lại giá trị các thanh ghi đếm, xử lý lệnh xong, xóa cờ ngắt ở đây là TF0, sau đó khởi động lại timer0 ! Còn nữa cậu nêu ra cái lỗi mà trình biên dịch báo đi mình sẽ cố gắng sửa xem thế nào !

                    Comment


                    • #11
                      Nguyên văn bởi mast090 Xem bài viết
                      bạn này gặp phải lỗi tuơng tự mình, ai giải quyết giùm cái, đây là code mình viết đo tốc độ động cơ dùng encoder 32 lỗ, vấn đề ko phải là ở cái hàm ngắt có thêm chữ void vì mình làm nhiều cái rồi chả cần void cũng chạy ầm ầm
                      lỗi của mình là mô phỏng chạy rất rất là luột, nhưng khi mình làm mạch thực tế thì cái biến vòng hiển thị lên led 7 thanh ko được cập nhật sau mỗi giây, bình thường cái biến vòng ban đầu=0 nhưng ở đây mình thử đặt =1234 thì nó cứ hiển thị 1234 lên màn hình mà ko hề thay đổi, vì nếu ko cho động cơ quay thì ko có xung tác động vào T0 thì vòng sẽ =0 nhưng 4 con led 7thanh cứ hiện 1234 mà chả có hiện tượng j khác, ai biết khắc phục lỗi này chỉ mình cái
                      Fix
                      PHP Code:
                      #include<regx52.h>
                      #include<stdio.h>
                      #include<math.h>
                      sbit L1 P2^0;
                      sbit L2 P2^1;
                      sbit L3 P2^2;
                      sbit L4 P2^3;
                      //////////////////////////////////////////
                      unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                      unsigned int vong,dem;
                      unsigned int nghin,tram,chuc,dvi;
                      //////////////////////////////////////////
                      void delay_ms(unsigned int time)
                      {
                      unsigned int i;
                      unsigned int j;
                      for(
                      time;i>0;i--)
                      for(
                      j=0;j<125;j++);
                      }
                      //////////////////////////////////////////
                      void clear_led(void)
                      {
                      P0=0xff;
                      P2=0;
                      }
                      //////////////////////////////////////////
                      void hien_thi()
                      {
                      nghin vong/1000;
                      tram = (vong%1000)/100;
                      chuc = ((vong%1000)%100)/10;
                      dvi = ((vong%1000)%100)%10;

                      L1 1L2=L3=L4=0;
                      P0=M[nghin];
                      delay_ms(2);
                      clear_led();


                      L2 1L1=L3=L4=0;
                      P0=M[tram];
                      delay_ms(2);
                      clear_led();


                      L3 1L1=L2=L4=0;
                      P0=M[chuc];
                      delay_ms(2);
                      clear_led();

                      L4 1L1=L2=L3=0;
                      P0=M[dvi];
                      delay_ms(2);
                      clear_led();
                      }


                      ///////////////////////////////////
                      void main()
                      {
                      TMOD=0x25;
                      IE=0x88;
                      IP=0x08;
                      dem =0vong=0;
                      TH1 TL1 = -250;
                      TH0 TL0 0;
                      TR0 TR1 1;
                      while(
                      1)
                      {
                      hien_thi();
                      }
                      }
                      void ngatT1() interrupt 3
                      {
                      dem++;
                      if(
                      dem==4000)
                      {
                      EA=0;
                      dem=0;
                      TR0=TR1=0;
                      vong=((TH0*256+TL0)/32)*60;
                      TH0=TL0=0;
                      TR0=TR1=1;
                      EA=1;
                      }

                      Lỗi này là do viết code cẩu thả !

                      Comment


                      • #12
                        Nguyên văn bởi Thái Tuế_vy Xem bài viết
                        #include<reg52.h>
                        #include<math.h>
                        #include<stdio.h>
                        sbit contac1=P3^4;
                        ....
                        TF0=1;
                        dem=t1=y*256+z;//doi t1 ra so thap phan
                        TR0=1;
                        }
                        ai chỉ giùm em code sai ở đâu với.em muốn tinh thời gian t1. dùng proteous thì chẳng tính được t1???
                        a chỉ giùm cái.
                        Code này viết ok rồi biên dịch không sai, còn chạy thì mình chưa có thử ! Cậu tự ktra nhé

                        Comment


                        • #13
                          Nguyên văn bởi chumanh Xem bài viết
                          Lỗi này là do viết code cẩu thả !
                          em ko biết bác bảo em viết cẩu thả chỗ nào, em xem cái bác fix lại vẫn vậy chả khác j code của em, với lại mạch này chạy phỏng thì ngon rồi, vấn đề ở mạch thực tế nó ko chịu cập nhật cái biến vong để hiển thị, bác xem lại giùm
                          Website chính thức đổi địa chỉ website thành
                          Mời các bạn ghé thăm !!!

                          Comment


                          • #14
                            Nguyên văn bởi mast090 Xem bài viết
                            em ko biết bác bảo em viết cẩu thả chỗ nào, em xem cái bác fix lại vẫn vậy chả khác j code của em, với lại mạch này chạy phỏng thì ngon rồi, vấn đề ở mạch thực tế nó ko chịu cập nhật cái biến vong để hiển thị, bác xem lại giùm

                            PHP Code:
                            Error 1//////////////////////////////////////////
                            unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0}; 

                            Error 2
                            vongTH0*256+TL0)/32)*60
                            Sorry! error 2 là lỗi của 4room, do mình copy !

                            Comment


                            • #15
                              hjc, cái lỗi 0x9 0 là chắc là do cái lỗi lúc post bài lên đây chạm vào space, code thật ko có cái lỗi đấy, bác xem lại giùm
                              giờ chả biết sai ở đâu
                              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

                              Thái Tuế_vy Tìm hiểu thêm về Thái Tuế_vy

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

                              Collapse

                              Đang tải...
                              X