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

                            • bqviet
                              Trả lời cho Đấu tắt điện cho máy tính bảng
                              bởi bqviet
                              Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                              06-12-2025, 17:17
                            • nguyendinhvan
                              Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                              bởi nguyendinhvan
                              Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                              05-12-2025, 19:59
                            • afrendly
                              Trả lời cho Đấu tắt điện cho máy tính bảng
                              bởi afrendly
                              Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                              04-12-2025, 01:27
                            • nick22
                              Trả lời cho Máy điện châm ?
                              bởi nick22
                              Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                              01-12-2025, 13:23
                            Đang tải...
                            X