Thông báo

Collapse
No announcement yet.

Help Mạch tạo xung vuông bằng TIMER!

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

  • Help Mạch tạo xung vuông bằng TIMER!

    Hi Alls!
    Tình hình là em mới tìm hiểu về VDK 8051,nên còn non quá. hi`.
    em có cái yêu cầu, lập trình bằng assembly tạo xung vuông 2Hz, dùng timer 1 mode 2. Em làm như sau mà nó chạy hok có đúng, Pro nào biết
    chấn chỉnh em cái, xem nó bị lỗi gì?
    Code:
    #include <sfr51.inc>
    ORG 8100H
    START:
        MOV R7,#1000
    LOOP:
        MOV TMOD,#20H
        MOV TH1,#06H
        SETB TR1
    LAP:
        JNB TF1,LAP
        CLR TF1
        DJNZ R7,LOOP
        CPL P1.0
        SJMP START
    END
    và còn cái yều cầu tạo xung vuông mức cao 1s và mức thấp 2s nghĩ chưa được , mọi người cho em cái ý tưởng nhé thanks!

  • #2
    Nguyên văn bởi quangceuit Xem bài viết
    Hi Alls!
    Tình hình là em mới tìm hiểu về VDK 8051,nên còn non quá. hi`.
    em có cái yêu cầu, lập trình bằng assembly tạo xung vuông 2Hz, dùng timer 1 mode 2. Em làm như sau mà nó chạy hok có đúng, Pro nào biết
    chấn chỉnh em cái, xem nó bị lỗi gì?
    Code:
    #include <sfr51.inc>
    ORG 8100H
    START:
        MOV R7,#1000
    LOOP:
        MOV TMOD,#20H
        MOV TH1,#06H
        SETB TR1
    LAP:
        JNB TF1,LAP
        CLR TF1
        DJNZ R7,LOOP
        CPL P1.0
        SJMP START
    END
    và còn cái yều cầu tạo xung vuông mức cao 1s và mức thấp 2s nghĩ chưa được , mọi người cho em cái ý tưởng nhé thanks!
    tại sao điểm bắt đầu lại nằm ở 8100H.
    tất cả các thanh ghi của 8051 đều tối đa chỉ nạp đc 255, R7 nạp 1000 là sai.
    chế độ 2 tự động nạp lại ko cần phải nhảy lên LOOP, chỉ cần nhảy lên LAP thôi
    Code:
    ORG 0000H
    START:
        	MOV 	TMOD,#20H
        	MOV 	TH1,#(-250)
    	MOV	TL1,TH1
        	SETB 	TR1
    LAP1:	MOV	R7,#10
    LAP0:	MOV	R6,#100
    LAP:    JNB 	TF1,LAP
        	CLR 	TF1
        	DJNZ 	R6,LAP
    	DJNZ	R7,LAP0
        	CPL 	P1.0
        	SJMP 	LAP1
    END
    Last edited by chung1608; 27-10-2011, 16:22.

    Comment


    • #3
      Nguyên văn bởi chung1608 Xem bài viết
      tại sao điểm bắt đầu lại nằm ở 8100H.
      tất cả các thanh ghi của 8051 đều tối đa chỉ nạp đc 255, R7 nạp 1000 là sai.
      chế độ 2 tự động nạp lại ko cần phải nhảy lên LOOP, chỉ cần nhảy lên LAP thôi
      Code:
      ORG 0000H
      START:
          	MOV 	TMOD,#20H
          	MOV 	TH1,#(-250)
      	MOV	TL1,TH1
          	SETB 	TR1
      LAP1:	MOV	R7,#20
      LAP0:	MOV	R6,#100
      LAP:    JNB 	TF1,LAP
          	CLR 	TF1
          	DJNZ 	R6,LAP
      	DJNZ	R7,LAP0
          	CPL 	P1.0
          	SJMP 	LAP1
      END
      ủa a Chung cái này là tạo xung vuông chứ k phải tạo delay ,xung vuông thì phải là tạo delay mỗi mức 250000us chứ nhỉ @@

      Comment


      • #4
        mà tiện thể a chung cho e hỏi ,cái lệnh " MOV TL1,TH1 " có cần k sao e đọc trong sách thấy nếu chế độ 2 nó nạp mỗi TH1 ak ^^

        Comment


        • #5
          Nguyên văn bởi quangceuit Xem bài viết
          Hi Alls!
          Tình hình là em mới tìm hiểu về VDK 8051,nên còn non quá. hi`.
          em có cái yêu cầu, lập trình bằng assembly tạo xung vuông 2Hz, dùng timer 1 mode 2. Em làm như sau mà nó chạy hok có đúng, Pro nào biết
          chấn chỉnh em cái, xem nó bị lỗi gì?

          và còn cái yều cầu tạo xung vuông mức cao 1s và mức thấp 2s nghĩ chưa được , mọi người cho em cái ý tưởng nhé thanks!
          ak còn cái nài ,thế thì viết chương trình con delay 1s đi ,rồi sau khi chuyển mức logic thì gọi nó ra ,gọi 1 lần là 1 s ,gọi 2 lần là 2 s hihi

          Comment


          • #6
            Org 8100H ;bạn ấy thích số này quá.Con 8051 có tí flash rom.
            , , ,

            Comment


            • #7
              Nguyên văn bởi voiconvuive Xem bài viết
              mà tiện thể a chung cho e hỏi ,cái lệnh " MOV TL1,TH1 " có cần k sao e đọc trong sách thấy nếu chế độ 2 nó nạp mỗi TH1 ak ^^
              đã sử R7 về giá trị 10
              Timer chế độ 2 chỉ tự động nạp THx và TLx khi xảy ra tràn TLx, vì thế ở lần chạy đầu tiên ta phải nạp cho TLx một giá trị xác định nếu ko TLx sẽ chạy ở giá trị mặc định là 00H

              Comment


              • #8
                Nguyên văn bởi chung1608 Xem bài viết
                tại sao điểm bắt đầu lại nằm ở 8100H.
                tất cả các thanh ghi của 8051 đều tối đa chỉ nạp đc 255, R7 nạp 1000 là sai.
                chế độ 2 tự động nạp lại ko cần phải nhảy lên LOOP, chỉ cần nhảy lên LAP thôi
                Code:
                ORG 0000H
                START:
                    	MOV 	TMOD,#20H
                    	MOV 	TH1,#(-250)
                	MOV	TL1,TH1
                    	SETB 	TR1
                LAP1:	MOV	R7,#10
                LAP0:	MOV	R6,#100
                LAP:    JNB 	TF1,LAP
                    	CLR 	TF1
                    	DJNZ 	R6,LAP
                	DJNZ	R7,LAP0
                    	CPL 	P1.0
                    	SJMP 	LAP1
                END
                thanks anh!

                Comment


                • #9
                  đây là chương trình tạo xung vuông, mức cao 1s và mức thấp 2s. Em làm sao nó không chạy đúng, mọi người xem nó sai ở đâu em cái thanks!
                  Code:
                  #include <sfr51.inc>
                  ORG 0000H
                  SJMP MAIN
                  DELAY1:           ;Trê~ 1 s
                      MOV R7,#100
                  DELAY2:            ; Tre~ 2 s
                      MOV R7,#200
                  AGAIN:
                      MOV TH0,#D8H
                      MOV TL0,#F0H
                      SETB TR0
                  WAIT:
                      JNB TF0,WAIT
                      CLR TF0
                      CLR TR0
                      DJNZ R7,AGAIN
                  MAIN:
                      MOV TMOD,#01H
                      CPL P1.0
                      JB P1.0,DELAY1       ; p1.0 o muc cao goi delay 1
                      ACALL DELAY2         ;  goi delay2
                      SETB TR0
                      WAIT1: SJMP WAIT1
                  END

                  Comment


                  • #10
                    code bạn viết quá lằng nhằng. Bạn viết 1 delay 1s, sau đó mức cao thì gọi delay 1 lần, mức thấp thì gọi delay 2 lần rồi lập lại

                    Comment


                    • #11
                      tao xung voi kieu 20% ,50%,......etc, thi nhu the nao, ah ma con vi du đưa một tín hiệu xung vào một pót như p1.0 và lấy xung đó ra ở chân p2.0 thì làm thế nào???????????????????

                      Comment


                      • #12
                        ban viet ct delay 1s bằng cách dùng vong lap for, cho chay 20 lan (1s=1000000 us nen ban lay 50000*20) dung vong lap while de delay cài lai cờ tràn, co vay thui

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X