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

  • nguyendinhvan
    Trả lời cho Vấn đề về tốc độ quay
    bởi nguyendinhvan
    Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
    Hôm qua, 19:50
  • Andrea14
    Vấn đề về tốc độ quay
    bởi Andrea14
    Chào mọi người,

    Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
    12-12-2025, 12:42
  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
Đang tải...
X