Thông báo

Collapse
No announcement yet.

Thư viện hàm delay cho mọi người

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

  • Thư viện hàm delay cho mọi người

    Chào các bạn. Mình mới tập tành lập trình cho vi điều khiển được mấy hôm nay, nói chung là mới học được chút chút, thấy trên mạng cũng khá nhiều bài nói về hàm delay, nhưng mỗi người một kiểu và quan trọng là không có 1 thư viện nhất quán và đáng tin cậy. đây là hàm delay mà mình kết hợp từ những tài liệu trên mạng và mình viết theo văn phong của mình, tuy có thể rườm rà hơn cách của mọi người nhưng mình dám chắc là CPU sẽ đỡ hiện tượng bị treo hơn.
    Mình đính kèm lên đây tệp delay.h trong này gồm có 3 hàm:

    delay(x) -> đơn vị thời gian tính bằng 1/10 ms ->delay(10.000)=1s
    sleep(x) -> đơn vị thời gian tính bằng mini giây ->sleep(1000)=1s
    sleepi(x) -> đơn vị thời gian cũng tính bằng mini giây nhưng viết theo lối ngắt kết hợp với idle mode để tiết kiệm điện và chống hiện tượng treo cpu vì quá tải. -> sleepi(1000)=1s

    Nếu có gì chưa ổn thì mọi người góp ý giúp mình nhé.
    Dưới đây mình trích hàm sleepi để mọi người tham khảo luôn.
    khi gọi hàm này cpu sẽ ngủ trong 1ms sau đó ngắt sẽ đánh thức cpu dậy, quá trình ngủ và đánh thức sẽ thực hiện cho đến khi đạt được thời gian làm trễ mong muốn thì cpu mới thực sự tỉnh dậy và quay về với caller

    Code:
    void sleepi(unsigned n)
    {
    	unsigned c=0,z=~0-1000;//1ms
    	TR1 = 0;           /* Stop Timer 1 */
    	
    	TMOD &= ~0x0F;     /* 16-bit, no prescale mode */
    	TMOD |=  0x10;
    	
    	PT1 = 1;           /* High Priority Interrupt */
    	ET1 = 1;           /* Enable Timer1 Interrupt */
    	
    	TR1 = 1;           /* Start Timer 1 */
    	EA = 1;            /* Enable Global Interrupts */
    	while(1)
    	{
    		TH1=((z>>8)&0xff);//High
    		TL1=(z&0xff);//Low
    		if(c>=n)
    		{
    			TR1=0;
    			TF1=0;
    			return; // Return caller
    		}
    		c+=1;
    		PCON=0x1;// Go idle mode for power saver
    	}
    }
    void timer_ISR (void) interrupt 3
    {
    	//Do nothing - use for weakup cpu from idle mode
    }
    Attached Files

Về tác giả

Collapse

myth-coder Tìm hiểu thêm về myth-coder

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

Collapse

Đang tải...
X