HELP !! Tạo xung trên AT89c51

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • danghien719
    Thành viên mới
    • Oct 2009
    • 17

    #1

    HELP !! Tạo xung trên AT89c51

    Chào các bạn, mình mới bít vè VĐK>
    Mong các bạn giúp đỡ cho bài này, lập trình sử dụng Timer số 1 ở chế độ 2, tạo ra xung chu kỳ 1s, có độ rộng = 650ms ở chân cổng P0.0
    Và bài của mình đây, nhưng chạy ko đc
    PHP Code:
    ORG 0000H
        MOV TMOD,#20H
        MOV TH1,#HIGH(-250)
        MOV TL1,#LOW(-250)
        SETB TR1
    AGAIN:    CLR P0.0
        MOV R1,#14
    BACK2:    MOV R2,#100
    BACK1:    JNB TF1,$
        CLR TF1
        DJNZ R2,BACK1
        DJNZ R1,BACK2
        SETB P0.0
        MOV R3,#26
    BACK4:    MOV R4,#100
    BACK3:    JNB TF1,$
        CLR TF1
        DJNZ R4,BACK1
        DJNZ R3,BACK2
        SJMP AGAIN
    END 
    
    Nếu có thể các bác giúp mình mô phỏng cái này trên Protel
    Cảm ơn nhiều
    |
  • danghien719
    Thành viên mới
    • Oct 2009
    • 17

    #2
    Hjc, ko ai giúp mình .....?
    |

    Comment

    • dangdung
      Thành viên tích cực
      • Apr 2007
      • 164

      #3
      có phải bạn nhầm lẫn ở chỗ
      BACK4: MOV R4,#100
      BACK3: JNB TF1,$
      CLR TF1
      DJNZ R4,BACK3
      DJNZ R3,BACK4
      SJMP AGAIN
      là

      BACK4: MOV R4,#100
      BACK3: JNB TF1,$
      CLR TF1
      DJNZ R4,BACK1
      DJNZ R3,BACK2
      SJMP AGAIN
      Điện thoại:
      email:

      Comment

      • danghien719
        Thành viên mới
        • Oct 2009
        • 17

        #4
        KO phải bạn ơi, đây ko phải là xung đối xứng, nên chu kỳ xung ko bằng 2 lần độ rộng xung....
        Mình làm như thế để tính thời gian của đoạn xung sau mà....
        |

        Comment

        • danghien719
          Thành viên mới
          • Oct 2009
          • 17

          #5
          Oh, hình như là thế rùi, tại sao lại BACK về BACK1 chứ....?
          Cảm ơn bạn, để mình tét lại xem
          |

          Comment

          • BabyKid
            Thành viên tích cực
            • Mar 2007
            • 255

            #6
            Sao bạn không viết chương trình con là Delay dùng timer, sau đó gọi chương trình con đó ra sẽ dễ thao tác hơn. Với lại khi bạn sử dụng giảm giá trị thanh ghi trong Delay dùng timer thì bạn nên xóa cờ TR khi cờ TF lên 1, sau đó kiểm tra thanh ghi, nếu chưa bằng 0 thì cho quay lại từ đầu và tiếp tục set cờ TR cho timer chạy tiếp.

            Ví dụ đây là Delay dùng Timer 1 ở chế độ 1 cho thời gian trễ 1s

            DELAY1S:
            PUSH R0
            MOV TMOD,#00010000B
            MOV R0,#100
            AAA:
            MOV TH1,#HIGH(-10000)
            MOV TL1,#LOW(-10000)
            SETB TR1
            JNB TF1,$
            CLR TF1
            CLR TR1
            DJNZ R0,AAA
            POP R0
            RET

            Từ giờ bạn có chương trình con là delay 1s, khi bạn muốn cho chỗ nào trì hoãn 1s thì bạn cứ gọi chương trình con ra bằng lệnh LCALL DELAY1S bình thường.

            Thân!
            "Cái quý nhất của con người ta là sự sống. Đời người chỉ sống có một lần.Phải sống sao cho khỏi xót xa ân hận..."
            Lê lết, lay lất sống qua ngày! >:)

            Comment

            • danghien719
              Thành viên mới
              • Oct 2009
              • 17

              #7
              Hic, chào các Bro, dùng ở Mode 1, thì ko nói rùi, em muốn dùng Mode 2 cơ. Vì bài tập đưa ra như vậy:
              lập trình dùng bộ định thời số 1, hoạt động ở mode 2, tạo chuỗi điện áp hình vuông có chu kỳ 1 giây ở chân cổng P0.0
              Và CODE của em sau khi đã sửa, nhưng chu kỳ xung vẫn ko đảm bảo là 1 giây, Các Bro giúp em nha
              PHP Code:
              ;***********************************
              ;TIMER 0, MODE 2, XUNG: 1HZ, P0.0  *
              ;***********************************
              ORG 0000H
                  MOV TMOD,#02H
                  MOV TH0,#HIGH(-250)
                  MOV TL0,#LOW(-250)
                  SETB TR0
                  CLR P0.0
              AGAIN:    MOV R2,#20
              BACK1:    MOV R3,#100
              BACK2:    JNB TF0,$
                  CLR TF0
                  DJNZ R3,BACK2
                  DJNZ R2,BACK1
                  CPL P0.0
                  JMP AGAIN
              END 
              
              |

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              There are no results that meet this criteria.

              Đang tải...