Thông báo

Collapse
No announcement yet.

tạo chương trình trễ 1 giây cho 89c51

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

  • tạo chương trình trễ 1 giây cho 89c51

    các bác giúp em tạo chương trình trể 1s cho ic 89c51 với

  • #2
    Bạn tham khảo:
    void delay_10ms (unsigned int time)
    {
    unsigned int x;
    for(x=1;x<=time;x++)
    {
    TMOD=0x11;
    TH0=55536/256;
    TL0=55536%256;
    TR0=1;
    while(!TF0);
    TF0=TR0=0;
    }
    }
    Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc.
    http://diencongnghiep360.com/
    http://tudienhathe.vn/

    Comment


    • #3
      Nếu bạn dùng thạch anh 12Mhz có thể xử dụng chương trình con như sau:

      void Delay_ms(unsigned int t) // t là thời gian Delay, tính bằng đơn vi ms
      {
      unsigned int x,y;
      for(x=0;x<t;x++)
      {
      for(y=0;y<=120;y++);
      }
      }

      Sau đó bạn có thể gọi như sau:
      Delay_ms(1000); // Delay 1s

      Comment


      • #4
        Dùng timer là chính xác nhất ! Kể thằng KeilC hỗ trợ hàm delay có phải nhàn hơn bao nhiêu k.

        Comment


        • #5
          Nguyên văn bởi nhihuynhbmt Xem bài viết
          các bác giúp em tạo chương trình trể 1s cho ic 89c51 với
          Delay viết bằng assembly với thạch anh là 24Mhz:
          Đây là code delay chuẩn theo ms và tối đa là 255ms
          Code:
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          ;#######################################################################################
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          delay_ms:	
          	push	7
          	push	6
          	push	5
          	mov	r5,num_ms
          	mov 	r6,#4
          	mov 	r7,#249
          	djnz 	r7,$		;2*249=498
                 	djnz 	r6,$-4		;(489+2)*4=2000	;
          	djnz	r5,$-8		;(2000+2)*num_ms= clk_delay
          	pop	5		;T_dl= clk_delay*chu_ki_may=clk_delay*1/(24000000/12)
          	pop	6		;	=clk_delay*1/2000000 ~= num_ms/1000 (s)
          	pop	7		;				=num_ms (ms)	
                  ret
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          ;#######################################################################################
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          Còn đây là code chuẩn delay s và tối đa delay là 255s
          Code:
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          ;#######################################################################################
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          delay_s:	
          	push	7
          	push	6
          	push	5
          	push	4
          	mov	r4,num_s
          	mov	r5,#20
          	mov 	r6,#200
          	mov 	r7,#249
          	djnz 	r7,$		;2*249=498
                 	djnz 	r6,$-4		;(498+2)*200=100000	
          	djnz	r5,$-8		;(100000+2)*20=2000000 
          	djnz	r4,$-12		;2000000*num_s = clk_delay
          	pop	4		;
          	pop	5		;T_dl= clk_delay*chu_ki_may=clk_delay*1/(24000000/12)
          	pop	6		;	=clk_delay*1/2000000 ~= num_s(s)
          	pop	7		;				
                  ret
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          ;#######################################################################################
          ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          Chú ý: num_ms và num_s là biến
          ví dụ delay:
          delay 10s và 50ms:
          Code:
          num_ms	equ	30h
          num_s	equ	31h
          mov	num_ms,#50
          mov	num_s,#10
          call	delay_ms
          call	delay_s

          Email:
          Tel: 0983.497.310

          Comment


          • #6
            dùng timer như bác ViệtThanh đó, chính xác hơn cả
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              Nguyên văn bởi tienhuypro Xem bài viết
              Delay viết bằng assembly với thạch anh là 24Mhz:
              Đây là code delay chuẩn theo ms và tối đa là 255ms
              Code:
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              ;#######################################################################################
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              delay_ms:	
              	push	7
              	push	6
              	push	5
              	mov	r5,num_ms
              	mov 	r6,#4
              	mov 	r7,#249
              	djnz 	r7,$		;2*249=498
                     	djnz 	r6,$-4		;(489+2)*4=2000	;
              	djnz	r5,$-8		;(2000+2)*num_ms= clk_delay
              	pop	5		;T_dl= clk_delay*chu_ki_may=clk_delay*1/(24000000/12)
              	pop	6		;	=clk_delay*1/2000000 ~= num_ms/1000 (s)
              	pop	7		;				=num_ms (ms)	
                      ret
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              ;#######################################################################################
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              Còn đây là code chuẩn delay s và tối đa delay là 255s
              Code:
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              ;#######################################################################################
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              delay_s:	
              	push	7
              	push	6
              	push	5
              	push	4
              	mov	r4,num_s
              	mov	r5,#20
              	mov 	r6,#200
              	mov 	r7,#249
              	djnz 	r7,$		;2*249=498
                     	djnz 	r6,$-4		;(498+2)*200=100000	
              	djnz	r5,$-8		;(100000+2)*20=2000000 
              	djnz	r4,$-12		;2000000*num_s = clk_delay
              	pop	4		;
              	pop	5		;T_dl= clk_delay*chu_ki_may=clk_delay*1/(24000000/12)
              	pop	6		;	=clk_delay*1/2000000 ~= num_s(s)
              	pop	7		;				
                      ret
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              ;#######################################################################################
              ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              Chú ý: num_ms và num_s là biến
              ví dụ delay:
              delay 10s và 50ms:
              Code:
              num_ms	equ	30h
              num_s	equ	31h
              mov	num_ms,#50
              mov	num_s,#10
              call	delay_ms
              call	delay_s

              Bác tính toán được bộ code này hay thật.
              Bác có biết về lập trình cho LCD không bác vào link này giúp em với: http://www.dientuvietnam.net/forums/...8-bits-114797/

              Comment


              • #8
                1 vài chuơng trình delay cho thạch anh 12mhz:

                Delay1ms:
                call t1s
                t1s:
                push 30h
                push 31h
                push 32h
                mov 30h,#242
                x2t1s:mov 31h,#8
                x1t1s:mov 32h,#0
                djnz 32h,$
                djnz 31h,x1t1s
                djnz 30h,x2t1s
                push 33h
                mov 33h,#16
                djnz 33h,$
                pop 33h
                pop 32h
                pop 31h
                pop 30h
                ret

                Delay50ms:

                t50ms:
                push 30h
                push 31h
                mov 30h,#97
                mov 31h,#255
                lap:
                djnz 31h,$
                djnz 30h,lap
                pop 31h
                pop 30h
                mov r0,#64
                djnz r0,$
                ret

                Comment


                • #9
                  Nguyên văn bởi Ck33spkt Xem bài viết

                  Bác tính toán được bộ code này hay thật.
                  Bác có biết về lập trình cho LCD không bác vào link này giúp em với: http://www.dientuvietnam.net/forums/...8-bits-114797/
                  Đã sửa code cho bạn xong rùi, test thế nào nhé. Nếu OK thì bấm thanks cái cho vui nha

                  Email:
                  Tel: 0983.497.310

                  Comment


                  • #10
                    em viết chương trình bằng ngôn ngữ asm.có bác nào biết viết delay 1s ko giúp em với.em dùng thạch anh 12mhz.em đx viết chương trình xong chỉ cần chương trình con dlay trể 1s nữa ghép vào là ok.thank you!
                    Last edited by nhihuynhbmt; 05-05-2012, 19:11.

                    Comment


                    • #11
                      cái này có rất nhiều bạn tìm đọc trong 4rum nếu mới bắt đầu thì tìm đọc tài liệu của thầy:Phạm Hùng Kim Khánh.

                      Comment


                      • #12
                        Nguyên văn bởi nhihuynhbmt Xem bài viết
                        em viết chương trình bằng ngôn ngữ asm.có bác nào biết viết delay 1s ko giúp em với.em dùng thạch anh 12mhz.em đx viết chương trình xong chỉ cần chương trình con dlay trể 1s nữa ghép vào là ok.thank you!
                        Đã có code ở trên rồi đó bạn. Vừa delay_s và delay_ms

                        Email:
                        Tel: 0983.497.310

                        Comment


                        • #13
                          Nguyên văn bởi nhihuynhbmt Xem bài viết
                          em viết chương trình bằng ngôn ngữ asm.có bác nào biết viết delay 1s ko giúp em với.em dùng thạch anh 12mhz.em đx viết chương trình xong chỉ cần chương trình con dlay trể 1s nữa ghép vào là ok.thank you!
                          Bạn này không chịu đọc mấy comment của bác tienhuypro ở trên hả. Bác ấy đã tính toán và giải thích code khá chi tiết rồi còn gì.
                          Nếu không thích code trên thì mình cho bạn 1 code này:

                          Code:
                          ; START: Wait loop, time: 1 s
                          ; Clock: 12000.0 kHz (12 / MC)
                          ; Used registers: R0, R1, R2, R3
                          delay_1ms:
                          	PUSH 3
                          	PUSH 2
                          	PUSH 1
                          	PUSH 0
                          	MOV	R3, #03h
                          	MOV	R2, #0D2h
                          	MOV	R1, #24h
                          	MOV	R0, #14h
                          	DJNZ	R0, $
                          	DJNZ	R1, $-5
                          	DJNZ	R2, $-9
                          	DJNZ	R3, $-13
                          	MOV	R0, #059h
                          	DJNZ	R0, $
                          	POP 0
                          	POP 1
                          	POP 2
                          	POP 3
                          	RET
                          ; END: Wait loop

                          Comment


                          • #14
                            Chuong trjnh &quot;TRE 1S&quot;

                            TRE 1S:
                            MOV R0,#20
                            NHAN:
                            MOV TMOD,#01H
                            MOV TL0,#0AFH
                            MOV TH0,#0C3H
                            SETB TR0
                            CLR TF0
                            JNB TF0,S
                            DJNZ R0,NHAN
                            RET
                            END
                            Chúc các bác thành công!!!

                            Comment


                            • #15
                              Nguyên văn bởi Ck33spkt Xem bài viết

                              Bác tính toán được bộ code này hay thật.
                              Bác có biết về lập trình cho LCD không bác vào link này giúp em với: http://www.dientuvietnam.net/forums/...8-bits-114797/
                              MÌNH CÓ ĐOẠN CODE NÀY, SAO NÓ KHÔNG CHẠY VẬY?
                              ORG 0000H
                              MAIN:
                              CALL CT1

                              JMP MAIN
                              CT1:
                              SETB P0.0
                              CALL delay_s
                              CLR P0.0

                              delay_s:
                              push 7
                              push 6
                              push 5
                              push 4
                              mov r4,num_s
                              mov r5,#20
                              mov r6,#200
                              mov r7,#249
                              djnz r7,$ ;2*249=498
                              djnz r6,$-4 ;(498+2)*200=100000
                              djnz r5,$-8 ;(100000+2)*20=2000000
                              djnz r4,$-12 ;2000000*num_s = clk_delay
                              pop 4 ;
                              pop 5 ;T_dl= clk_delay*chu_ki_may=clk_delay*1/(24000000/12)
                              pop 6 ; =clk_delay*1/2000000 ~= num_s(s)
                              pop
                              RET
                              END

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X