Thông báo

Collapse
No announcement yet.

Tạo độ rộng xung.

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

  • Tạo độ rộng xung.

    Mấy anh giúp em với bài tập này với.
    Tạo xung vuông 10khz cố định. Nhấn nút s1(p2.0) thì độ rộng xung là 25%, nhấn s2(p2.1) thì độ rộng xung là 50%, nhấn s3(p2.2) thì độ rộng xung là 75%. Ngõ ra lần lượt là p1.0,p1.1,p1.2
    em mới đc học vđk 8051 nên kt còn nông cạn. Mong các anh giúp cho.

  • #2
    Bạn đã có thuật toán giải quyết bài này chưa?
    Theo mình để cho bài toán sáng sủa nên tổ chức thành các chương trình con. Cụ thể là có 3 chương trình con: Chương trình con thứ nhất có nhiệm vụ tạo xung có độ rộng 50%; chương trình còn thứ 2 tạo xung có độ rộng 25%; chương trình con thứ 3 tạo xung có độ rộng 75%.
    Ban đầu chương trình chính (CTC) gọi chương trình con thứ nhất rồi sau đó kiểm tra phím bấm. Ứng với phím bấm nào thì gọi chương trình con cho nó!

    Comment


    • #3
      Chương trình chính thì viết đc rồi. Còn chương trình con thì chưa đc. Mình vẫn ko hiểu lắm về thay đổi độ rộng xung, bạn có thể nói rõ hơn và cho 1 vd chẳg hạn. Tks

      Comment


      • #4
        Nguyên văn bởi anhhaisu Xem bài viết
        Chương trình chính thì viết đc rồi. Còn chương trình con thì chưa đc. Mình vẫn ko hiểu lắm về thay đổi độ rộng xung, bạn có thể nói rõ hơn và cho 1 vd chẳg hạn. Tks
        thay đổi độ rộng xung là thay đổi 2 nửa chu kì của tần số.
        1 chu kì bạn có nửa đầu là xung mức cao nửa sau là xung mức thấp.
        xung bạn là 10kHz tức là 1 chu kì 100uS
        độ rộng xung 25% là nói tới xung mức cao. Vậy 25% của 100uS là 25uS. Bạn tạo delay 25uS cho xung mức 1 và 75uS cho xung mức 0.

        Comment


        • #5
          Anh chung1608 có thể cho em 1 vd cụ thể đc ko.

          Comment


          • #6
            Code:
            setb p1.0
            call delay25us
            clr  p1.0
            call delay75us

            Comment


            • #7
              Anh chung xem dùm em. Đây là ct tạo xung vuôg 10khz
              Org 0000h
              mov tmod,#02h
              mov th0,-50
              setb tr0
              loop: jnb tf0, loop
              clr tf0
              cpl p1.0
              sjmp loop
              end
              mình có thể thay đổi giá trị của th0 và tl0 để thay đổi độ rộng xung ko anh.

              Comment


              • #8
                Nguyên văn bởi anhhaisu Xem bài viết
                Anh chung xem dùm em. Đây là ct tạo xung vuôg 10khz
                Org 0000h
                mov tmod,#02h
                mov th0,-50
                setb tr0
                loop: jnb tf0, loop
                clr tf0
                cpl p1.0
                sjmp loop
                end
                mình có thể thay đổi giá trị của th0 và tl0 để thay đổi độ rộng xung ko anh.
                như nói ở trên bạn phải tạo ra 2 khoảng thời gian khác nhau cho mức cao và mức thấp, với tổng 2 khoảng thời gian phải cố định ở 100uS.
                Code bạn viết là 2 khoảng thời gian bằng nhau vì thế độ rộng xung là 50%. Với code bạn viết cần phải viết thêm và bỏ lệnh cpl p1.0 đi và thay bằng setb và clr vì bạn chưa thể viết code ngắn gọn đâu, mới học thì viết cho dễ hiểu rồi từ từ rút gọn lại

                Comment


                • #9
                  Ý của anh em hiểu rồi.
                  Nhưng ở đây ôg thầy nói là phải thay đổi th và tl anh à.

                  Comment


                  • #10
                    Nguyên văn bởi anhhaisu Xem bài viết
                    Ý của anh em hiểu rồi.
                    Nhưng ở đây ôg thầy nói là phải thay đổi th và tl anh à.
                    thì tạo delay bằng timer chế độ 2
                    Code:
                    .....
                    MOV TMOD,#02H
                    SETB TR0
                    MOV TL0,#-25
                    SETB P1.0
                    JNB TF0,$
                    CLR TF0
                    MOV TL0,#-75
                    CLR P1.0
                    JNB TF0,$
                    .......

                    Comment


                    • #11
                      Em cảm ơn nhìu. Ct chạy rồi

                      Comment


                      • #12
                        void timer0(void) interrupt 1
                        {
                        TR0 = 0;
                        TF0 = 0;
                        dem++;
                        if(dem > 100)
                        dem = 0;
                        if(dem<tocdo)
                        PWM = 1;
                        else
                        PWM = 0;
                        TR0 = 1;
                        }
                        chỉ cần thay đổi biến đếm sẽ thay đổi độ rụng xung.
                        Nguyễn Huy Biên - 01649 802 694
                        gmail :

                        Comment


                        • #13
                          Nguyên văn bởi bienhou Xem bài viết
                          void timer0(void) interrupt 1
                          {
                          TR0 = 0;
                          TF0 = 0;
                          dem++;
                          if(dem > 100)
                          dem = 0;
                          if(dem<tocdo)
                          PWM = 1;
                          else
                          PWM = 0;
                          TR0 = 1;
                          }
                          chỉ cần thay đổi biến đếm sẽ thay đổi độ rụng xung.
                          thế này tần số của chú đâu có cố định

                          Comment


                          • #14
                            sao ko cố định anh? đây chỉ là hàm ngắt thôi mà giá trị TH0 và TL0 e đặt trong hàm khởi tạo. quên ko post
                            Nguyễn Huy Biên - 01649 802 694
                            gmail :

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X