Thông báo

Collapse
No announcement yet.

Đồng hồ 89C52 - Sai số 5s giúp em với

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

  • Đồng hồ 89C52 - Sai số 5s giúp em với

    Em làm bảng đồng hồ số cỡ lớn, khi chạy thì mỗi phút nó sai số 5s. Cái đồng hồ của em, một phút của nó chỉ có 55 s. Chán ghê, bác nào có kinh nghiệm xin hãy hướng dẫn dùm em. Em xin đội ơn các bác, Em ko bit sử dụng IC real Time, đã lỡ làm theo cách này rùi. cac bac hãy hướng dẫn em cách khắc phục, sai số cũng dc nhưng it thôi.

    Code : <<>>
    Code:
    ORG 0000H
    		JMP BEGIN
    	ORG 0003H
    		JMP NGAT_NGOAI0_VECTOR
    	ORG 000BH
    		JMP TIMER0_VECTOR	
    			
    	ORG 0030H
    	
    	BEGIN:	
    		;THIET LAP CHE DO CHO TIMER 0 VA NGAT NGOAI
    		GIATRITIMER0 EQU 25903
           		MOV IE,#83H	;CHO PHEP NGAT TIMER 0 VA NGAT NGOAI0
         		SETB TCON.0	;CHON NGAT NGOAI KICH SUON XUONG
         		MOV TMOD,#01H	;CHO CHE DO 1 CHO TIMER O
         		MOV TH0,# HIGH (GIATRITIMER0)
         		MOV TL0,# LOW (GIATRITIMER0)
         			;NAP BIT CAO BAN DAU CHO TIMER 0;
         		
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       		
    		;LUU MA CUA CAC SO TU 0->9 VAO CAC O NHO
    		MOV 70H,#7FH 	;LUU MA SO 0
    		MOV 71H,#0EH 	;----------1
    		MOV 72H,#0B7H	;----------2
    		MOV 73H,#9FH 	;LUU MA SO 3
    		MOV 74H,#0CEH 	;LUU MA SO 4
    		MOV 75H,#0DDH 	;LUU MA SO 5
    		MOV 76H,#0FDH 	;LUU MA SO 6
    		MOV 77H,#0FH 	;LUU MA SO 7
    		MOV 78H,#0FFH 	;LUU MA SO 8
    		MOV 79H,#0DFH 	;LUU MA SO 9
    		
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    	 ;LUU GIA TRI THOI GIAN BAN DAU
    		MOV 40H,#0	;CHUC GIO BANG 0
    		MOV 41H,#0	;GIO BANG 0		
    		MOV 42H,#0	;CHUC PHUT BANG 0		
    		MOV 43H,#0	;PHUT BANG 0		
    		MOV 44H,#0	;CHUC GIAY VA GIAY BANG 0
    		
    	
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     	     	
         	     	SETB TR0	;BAT TIMER 0
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    LAPLAI:	CALL HIENTHI
    	CALL XULY_THOIGIAN
    	JMP LAPLAI
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX	
    	HIENTHI:	
    		MOV A,40H	;HIEN THI CHUC GIO
    		MOV R0,#70H	;
    		ADD A,R0	;
    		MOV R0,A	;
    		MOV P3,@R0	;
    		
    		MOV A,41H	;HIEN THI GIO
    		MOV R0,#70H	;
    		ADD A,R0	;
    		MOV R0,A	;
    		MOV P1,@R0	;
    		
    		MOV A,42H	;HIEN THI CHUC PHUT
    		MOV R0,#70H	;
    		ADD A,R0	;
    		MOV R0,A	;
    		MOV P0,@R0	;
    		
    		MOV A,43H	;HIEN THI PHUT
    		MOV R0,#70H	;
    		ADD A,R0	;
    		MOV R0,A	;
    		MOV P2,@R0	;
    	RET
    		
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX	
    	XULY_THOIGIAN:
    		MOV A,44H
    		CJNE A,#60,THOAT_XULY
    		MOV 44H,#0	;GIAY = 0
    		INC 43H		;TANG PHUT
    		
    		MOV A,43H
    		CJNE A,#10,THOAT_XULY
    		MOV 43H,#0	;PHUT BANG 0
    		INC 42H		;TANG CHUC PHUT
    		
    		MOV A,42H
    		CJNE A,#6,THOAT_XULY
    		MOV 42H,#0	; CHUC PHUT BANG 0
    		
    		MOV A,40H
    		CJNE A,#2,TTG	; SO SANH CHUC GIO
    		INC 41H		;TANG GIO
    		MOV A,41H	
    		CJNE A,#4,THOAT_XULY; SO SANH GIO VOI 4
    		MOV 40H,#0	;CHUC GIO BANG 0
    		MOV 41H,#0	;GIO BANG 0		
    		MOV 42H,#0	;CHUC PHUT BANG 0		
    		MOV 43H,#0	;PHUT BANG 0		
    		MOV 44H,#0	;CHUC GIAY VA GIAY BANG 0
    		JMP THOAT_XULY
    		
    		TTG:		
    		
    		INC 41H
    		MOV A,41H
    		CJNE A,#10,THOAT_XULY
    		MOV 41H,#0	; EP GIO BANG 0
    		INC 40H		; TANG CHUC GIO
    			
    		THOAT_XULY:	
    	RET	
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX	
    	
    	NGAT_NGOAI0_VECTOR:	;CHUONG TRINH CON XU LI PHIM VA TNAG THOI GIAN THEO PHIM
    		;CLR IE.0	; XOA DIEU KIEN NGAT NGOAI DE XU LY PHIM MENU
    		SETB P1.2	; BAO TRANG THAI CHINH GIO 
    		MOV R4,#50
    		DOCPHIM:
    		
    		
    		CALL HIENTHI	
    		CALL DELAY_PHIM_200MS
    		
    		MOV A,P0	; DOC P0
    		ANL A,#04H	; CHI LAY RA P0.2
    		MOV R1,A	; LUU P0 VAO R1
    		
    		MOV A,P2	
    		ANL A,#04H
    		MOV R2,A
    		
    		;MOV A,P3
    		;ANL A,#04H
    		;MOV R3,A
    		
    		CJNE R1,#0,DEN_PHIM_GIO; XEM P0.2 CO DUOC NHAN ?(BANG 0)
    		INC 43H		;TANG PHUT		
    		MOV A,43H
    		CJNE A,#10,DOCPHIM
    		MOV 43H,#0	;PHUT BANG 0
    		INC 42H		;TANG CHUC PHUT
    		MOV A,42H
    		CJNE A,#6,DOCPHIM
    		MOV 42H,#0	; CHUC PHUT BANG 0
    		JMP DOCPHIM
    		
    		DEN_PHIM_GIO:		
    		CJNE R2,#0,DEN_PHIM_MENU; XEM PHIM GIO CO DUOC NHAN?
    		MOV A,40H
    		CJNE A,#2,TTG1	; SO SANH CHUC GIO
    		INC 41H		;TANG GIO
    		MOV A,41H	
    		CJNE A,#4,DOCPHIM; SO SANH GIO VOI 4
    		MOV 40H,#0	;CHUC GIO BANG 0
    		MOV 41H,#0	;GIO BANG 0		
    		JMP DOCPHIM
    		
    		TTG1:		
    		
    		INC 41H
    		MOV A,41H
    		CJNE A,#10,DOCPHIM
    		MOV 41H,#0	; EP GIO BANG 0
    		INC 40H		; TANG CHUC GIO
    		JMP DOCPHIM
    		
    		DEN_PHIM_MENU:
    		DJNZ R4,DOCPHIM
    		;CJNE R3,#0,DOCPHIM
    		
    		;MOV R3,#10
    	;HERE:	CALL DELAY_PHIM_200MS
    		;DJNZ R3,HERE
    		
    		;SETB IE.0
    
    	RETI		
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX		
    	
    	TIMER0_VECTOR:	
    		CLR TR0
    		clr p1.2
    		
    		MOV 60H,#7
    	BACK1:	MOV 61H,#250
    	BACK2:	MOV 62H,#250
    	BACK3:	DJNZ 62H,BACK3
    		DJNZ 61H,BACK2
    		DJNZ 60H,BACK1
    		
    				
    		INC 44H		;TANG GIAY 
    		MOV TH0,# HIGH (GIATRITIMER0)
    		MOV TL0,# LOW (GIATRITIMER0)
    	
    		SETB TR0
    		
    
    	RETI
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    	DELAY_PHIM_200MS:
    	MOV R7,#10
    	D3:MOV R6,#100
    	D2:MOV R5,#100
    	D1:DJNZ R5, D1
    	DJNZ R6, D2
    	DJNZ R7, D3
    	RET
    ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX			
    END

  • #2
    thiếu 5s là do ở đoạn này:
    TIMER0_VECTOR:
    CLR TR0
    clr p1.2

    MOV 60H,#7
    BACK1: MOV 61H,#250
    BACK2: MOV 62H,#250
    BACK3: DJNZ 62H,BACK3
    DJNZ 61H,BACK2
    DJNZ 60H,BACK1


    INC 44H ;TANG GIAY
    MOV TH0,# HIGH (GIATRITIMER0)
    MOV TL0,# LOW (GIATRITIMER0)

    SETB TR0
    bạn tính đoạn ct trên mất bao nhiêu chu kỳ máy lấy GIATRITIMER0 trừ đi số chu kì đó là nó sẻ đúng ngay .

    Comment


    • #3
      cho tôi hỏi đồng hồ của bạn mất điện thì sao ta

      Comment


      • #4
        Bạn thấy đó code này mình copy nên mong bạn chỉ cặn kẽ dùm mình. mình ko phải dân điện tử, mình cám ơn bạn rất nhiều

        Comment


        • #5
          Nguyên văn bởi minhcpl Xem bài viết
          cho tôi hỏi đồng hồ của bạn mất điện thì sao ta
          mình dùng pin nuôi VDK, đơn giản mà

          Comment


          • #6
            đoạn timeo của bạncos thể viết lại như thế này nó chạy chính xác hơn và dể tính chu kì mấy hơn: GIATRITIMER0 EQU 50000
            sau đó nhân cho 20 lần bạn có được 1 giây, rồi bạn inc 44h
            lúc đó bạn có thêm 1 cái đèn chớp tắc 1 giây .chúc vui

            Comment


            • #7
              Dùng ngắt định thời là ổn ngay mà.
              Trước kia mình cũng dùng ngắt định thời mỗi ngày chỉ sai số 1s thôi (1 ngày = 86400s)
              GTH sản xuất mạch in PCB 1 mặt:
              -phủ xanh: 40.000 đ/dm2
              -không phủ xanh: 30.000 đ/dm2
              -Cung cấp mực cảm quang để làm mạch in
              email:

              Comment


              • #8
                Nguyên văn bởi minhcpl Xem bài viết
                đoạn timeo của bạncos thể viết lại như thế này nó chạy chính xác hơn và dể tính chu kì mấy hơn: GIATRITIMER0 EQU 50000
                sau đó nhân cho 20 lần bạn có được 1 giây, rồi bạn inc 44h
                lúc đó bạn có thêm 1 cái đèn chớp tắc 1 giây .chúc vui
                bạn làm ơn chèn vô code dùm mình luôn đi, mình biết gắn nó vô chỗ nào bi h. Mình ko biết j về điện tử hết. hii...i, mình đội ơn bạn nhiều nhiều...

                Comment


                • #9
                  vậy thì chờ chút xíu hi hi

                  Comment


                  • #10
                    Sai số của mạch của bạn có từ 2 nguồn sau:

                    1> Sai số của dao động. Ở trên schematic mình thấy bạn dùng thạch anh 11.0592 MHz thi mỗi chu kỳ lệnh sẽ không phải là 1us. Bạn nên đổi lại loại thạch anh 12 MHz thì sẽ chính xác hơn. Tuy nhiên nếu bạn muốn có độ chính xác cao hơn thì bạn phải điều chỉnh giá trị 2 tụ gắn với 2 chân của thạch anh. Giá trị này thường từ 10~33pF. Nếu được bạn nên dùng dao động ký để đo lại. Tuy nhiên với kinh nghiệm của mình thì chỉ có thiết bị đo chuyên dùng trong các hãng sản xuất đồng hồ mới cho bạn giá trị chính xác được.

                    2> Sai số do chương trình: do các giá trị khởi tạo timer bạn tính toán không chính xác. Bạn nên tính toán chính xác các giá trị cho timer và nên dùng chức năng auto-reload của timer để tránh sai số tich tũy (do tốn một số thao tác trên timer và cập nhật dữ liệu của bạn)

                    Tốt nhất là bạn nên sử dụng 1 real-time IC để lấy dữ liệu ra, cái này bán nhiều ngoài thị trường và cũng rất dễ dùng.

                    Comment


                    • #11
                      Nguyên văn bởi minhcpl Xem bài viết
                      vậy thì chờ chút xíu hi hi
                      Code của em đâu? hog chịu đâu đó !! ghét anh

                      Comment


                      • #12
                        1/ -Bạn nên thay thạch anh = 12MHZ cho dể tính
                        2/ - BẠN SỬA ĐOẠN SAU:
                        BEGIN:
                        ;THIET LAP CHE DO CHO TIMER 0 VA NGAT NGOAI
                        GIATRITIMER0 EQU 50000
                        mov 60h,#20
                        MOV IE,#83H ;CHO PHEP NGAT TIMER 0 VA NGAT NGOAI0
                        ........................

                        ......................................
                        TIMER0_VECTOR:
                        CLR TR0
                        clr p1.2
                        MOV TH0,# HIGH (GIATRITIMER0)
                        MOV TL0,# LOW (GIATRITIMER0)
                        DJNZ 60H,EXIT
                        MOV 60H,#20
                        INC 44H ;TANG GIAY
                        ;
                        EXIT: SETB TR0


                        RETI
                        bạn cho chạy thử 10 phút sau đó hiệu chỉnh lại GIATRITIMER0
                        - nếu chạy nhanh cộng thêm vào 50000
                        - nếu chạy chậm trừ bớt vào 50000
                        chúc làm được

                        Comment


                        • #13
                          Cho em hỏi cái mấy bác pro ơi.
                          Em làm bài tập VĐK về đồng hồ đo thời gian thực ở 2 chế độ giờ phút giây và chế độ ngày tháng năm với AT89S52 nhưng phần lập trình khó quá...chưa có bài
                          tham khảo ( viết bằng C ).
                          Có bác nào giúp em cái
                          Nếu được gửi cho em qua gmail :Nguyenvanvinhcdt2k3@gmail.com hoặc gobeforeastep@gmail.com
                          Thank before !

                          Comment


                          • #14
                            http://my.opera.com/Phankeyelectronic/blog/d9 giúp pác 1 tay nhá ko sai 1 giây
                            mở 12h chưa sai 1 phút nào
                            rất vui khi dc giúp các pác
                            8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
                            liên lạc với em qua địa chi email: Mob: 01882.076.989

                            Comment


                            • #15
                              Đang cần chương trình = C mà chẳng ai viết cả ?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X