Thông báo

Collapse
No announcement yet.

nhờ anh em trong diễn đàn giúp mình cái timer0

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

  • #16
    Nguyên văn bởi doituquan Xem bài viết
    Anh Dương, trong chương trình em viết về timer0 chế độ bộ đếm, khi ko co xung tác động ở chân ra4 thì led sáng còn khi có tác động chân ra4 thì led tắt, vì timer0 co chưc năng chế độ bộ đếm nên ko cần fai khai báo chân ra4 nữa đúng ko anh, đây là đoạn chương trình em viết ko hiểu sao nó chỉ thực hiện trong hàm while còn trong hàm ngắt lại ko dc,hic, giúp em với, em cảm ơn ạ
    }
    Bạn đang mô phỏng ?
    Khi mô phỏng thì máy tính sẽ đáp ứng chậm hơn thực tế. Bạn dùng while(true) để đưa PORTB = 0xFF và dùng ngắt timer0 để xóa PORTB, để nhận rõ PORTB bị xóa bạn nên cho thêm delay vào while(true) để nó chậm lại và bạn nhìn thấy được hiệu ứng. Nếu bạn để while(true) thế kia nó sẽ chạy cực nhanh (tầm vài us một lần) nên khi ngắt timer0 xóa PORTB thì nó gần như ngay lập tức được while(true) set trở lại nên bạn không thấy được cả khi nó chạy đúng.
    Về phía timer :
    Timer thực chất là 1 bộ đếm (nên bạn mới thấy nó thường viết "timer/counter"). Nó sẽ đếm xung tại nguồn mà ta set cho nó. Bạn đã set cho RTCC là "RTCC_EXT_L_TO_H | RTCC_DIV_1" thì cứ sau 1 xung tác động vào RA4 thì bộ đếm của timer 0 tăng lên 1. Đến khi nó đếm được 255 và về 0 thì một ngắt timer0 được xảy ra (với loại timer 8 bit, timer 16 bit thì đếm đến 65535). Nếu bạn set cho timer0 là 0 thì sau 256 lần xung tác động vào RA4 thì nó mới xảy ra ngắt và xóa PORTB 1 lần. Để nó xóa PORTB sau mỗi xung vào RA4 thì bạn phải set cho nó là 255 để sau mỗi xung là 1 ngắt timer0 sẽ xảy ra.

    Comment


    • #17
      Nguyên văn bởi duong_act Xem bài viết
      Bạn đang mô phỏng ?
      Khi mô phỏng thì máy tính sẽ đáp ứng chậm hơn thực tế. Bạn dùng while(true) để đưa PORTB = 0xFF và dùng ngắt timer0 để xóa PORTB, để nhận rõ PORTB bị xóa bạn nên cho thêm delay vào while(true) để nó chậm lại và bạn nhìn thấy được hiệu ứng. Nếu bạn để while(true) thế kia nó sẽ chạy cực nhanh (tầm vài us một lần) nên khi ngắt timer0 xóa PORTB thì nó gần như ngay lập tức được while(true) set trở lại nên bạn không thấy được cả khi nó chạy đúng.
      Về phía timer :
      Timer thực chất là 1 bộ đếm (nên bạn mới thấy nó thường viết "timer/counter"). Nó sẽ đếm xung tại nguồn mà ta set cho nó. Bạn đã set cho RTCC là "RTCC_EXT_L_TO_H | RTCC_DIV_1" thì cứ sau 1 xung tác động vào RA4 thì bộ đếm của timer 0 tăng lên 1. Đến khi nó đếm được 255 và về 0 thì một ngắt timer0 được xảy ra (với loại timer 8 bit, timer 16 bit thì đếm đến 65535). Nếu bạn set cho timer0 là 0 thì sau 256 lần xung tác động vào RA4 thì nó mới xảy ra ngắt và xóa PORTB 1 lần. Để nó xóa PORTB sau mỗi xung vào RA4 thì bạn phải set cho nó là 255 để sau mỗi xung là 1 ngắt timer0 sẽ xảy ra.
      heheheheh, em làm được rồi , cảm ơn A Dương nhiều lắm, ôi cả ngày loay hoay cái này ma ko ra, dạ em mô phỏng trên proteus ạ, chỉnh sữa lại delay và set timer0(255) như lời anh nói là được,hihihi

      Comment


      • #18
        A duơng ơi, đề bài của em như thế này Sử dụng ngắt timer 0 để quét led 7 đoạn hiển thị số lần bấm phím (được đo bởi ngắt ngoài) trong khoảng thời gian 1 phút (được định thời bởi ngắt timer 1) em viết chuơng trình mà mô phỏng không hiểu sao chưa tới 1 phút led 7 đoạn da set vê 00 rồi ạ, đáng lẽ ra theo bài toán thì 60s sau nó mới set lại lần đếm đúng ko anh, anh xem thử em sai đoạn nào, cảm ơn anh nha!!
        #include<16f877a.h>
        #FUSES NOWDT,PUT,XT,NOPROTECT
        #use delay(clock=4000000)

        int maled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
        int16 dem,sln;
        int slb=0,sll,so,hc,hdv;
        #INT_EXT
        EXT_ISR() {

        slb++;
        if (slb>99) slb = 0;
        }
        #int_timer1
        void ngat_timer1()
        {
        set_timer1(3036);//0,5s//
        {
        sln++;
        if(sln==360) sln=0;
        slb=0;
        //hc=slb/10,hdv=slb%10;

        }}

        #int_timer0
        void ngat_timer0()

        {
        set_timer0(6);// 0,5ms//
        dem++;
        if(dem==5)//5*0,5=2ms
        {
        dem=0;
        // output_d(0x00); // T?t các LED
        hc=slb/10,hdv=slb%10;
        if(sll==0)
        {
        output_high(pin_d1);
        output_low(pin_d0);
        output_c(maled[hc]);

        }
        else
        {
        output_high(pin_d0);
        output_low(pin_d1);
        output_c(maled[hdv]);

        }
        sll++;
        if(sll>1) sll=0;

        }
        }

        void main()
        {
        set_tris_b(0xFF);
        set_tris_d(0x00);
        set_tris_c(0x00);
        enable_interrupts(int_timer0);
        enable_interrupts(int_EXT);
        enable_interrupts(int_timer1);
        ext_int_edge(H_TO_L); // Chon ngat theo suon am//
        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
        setup_timer_1(T1_internal|T1_div_by_8);//1:4//
        enable_interrupts(global);
        set_timer0(6);
        set_timer1(3036);
        while(1)
        {

        }
        }

        Comment


        • #19
          Cụ thể là thực tế thì sau bao nhiêu s nó set về 0 ?

          Comment


          • #20
            Nguyên văn bởi duong_act Xem bài viết
            Cụ thể là thực tế thì sau bao nhiêu s nó set về 0 ?
            chuơng trình trong khoảng thời gian 1 phút dùng timer1 là sao anh nhỉ, hình như em hiểu sai vấn đê rồi, chắc là sau 1 phút nó mới hiển thị số lần phím bấm fai không anh

            Comment


            • #21
              Nguyên văn bởi doituquan Xem bài viết
              chuơng trình trong khoảng thời gian 1 phút dùng timer1 là sao anh nhỉ, hình như em hiểu sai vấn đê rồi, chắc là sau 1 phút nó mới hiển thị số lần phím bấm fai không anh
              Thế nào cũng được nhưng code trên thấy hàm ngắt timer1 chỉ đếm mà không làm gì thì cũng vô tác dụng. Vấn đề thời gian bị sai như mình đã nói ở bài trước là khi dùng nhiều ngắt cùng lúc nếu không kiểm soát được thì không biết đâu mà lần vì bạn mới học. Cứ từ từ thôi Bạn nên đưa ra 1 đề bài và cố gắng nghĩ giải thuật để giải quyết 1 cách đơn giản nhất.
              Như bài trên thì mình nghĩ bạn nên dùng timer0 để quét và tính thời gian 1 phút. Còn số lần ấn nút thì dùng timer1 chế độ counter. Như vậy sẽ chỉ có 1 ngắt thôi và chắc chắn vấn đề sai thời gian sẽ giảm và bạn dễ kiểm soát code hơn.
              ______
              Khi up code lên bạn nên đặt trong thẻ code nhé. Cấu trúc "[c o d e]" để mở đầu đoạn code và "[/ code]" để kết thúc (viết liền không cách).
              Code:
              Up code như thế này ....

              Comment


              • #22
                dạ, để em thử xem,hì, cảm ơn anh đã chỉ bảo !!!

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                • mèomướp
                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                  bởi mèomướp
                  Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                  Hôm qua, 13:11
                • tuyennhan
                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                  bởi tuyennhan
                  Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                  Hôm qua, 09:25
                • tuyennhan
                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                  bởi tuyennhan
                  Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                  Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                  Hôm qua, 09:10
                • Ng.Phuong.5
                  Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                  bởi Ng.Phuong.5
                  Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                  Mấy con...
                  09-01-2025, 19:44
                • viettinh
                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                  bởi viettinh
                  Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                  Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                  09-01-2025, 18:12
                • nguyendinhvan
                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                  bởi nguyendinhvan
                  Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                  Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                  Cách đơn giản...
                  09-01-2025, 00:04
                • mèomướp
                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                  bởi mèomướp
                  Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                  08-01-2025, 19:02
                • tuyennhan
                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                  bởi tuyennhan
                  Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                  08-01-2025, 15:43
                • tuyennhan
                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                  bởi tuyennhan
                  Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                  08-01-2025, 15:28
                • mèomướp
                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                  bởi mèomướp
                  Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                  08-01-2025, 11:44
                Đang tải...
                X