01/10/2018, 08:14

Chương trình chạy không ổn định (Nhúng cơ bản)

Như tiêu đề viết em có 1 chương trình nhỏ như sau khi cho chạy thì led(P2) sẽ chớp tắt khi nhấn nút(P1^0) thì led sẽ tắt.Nhưng em cho chạy trên chương trình mô phỏng thì nó không đc kết quả mong muốn lắm xin anh/chị chỉ giáo gỡ rối giúp em!

sbit BTN = P1^0;

void main()
{  
	unsigned char i;
	
	while(1)
	{
		P2 = ~P2;
        i = 0;	
		while(i < 100)
		{ 	
			delay_ms(10);
			if(BTN == 0)
			{
				delay_ms(20);//chong doi phim
				if(BTN == 0)
				{
					P2 = 0x00;
				 	break;
				}
			}
			i++;
		}

		if(i != 100)
			break;
	}
}
Thành Phạm viết 10:26 ngày 01/10/2018

Bạn thay cái dòng có comment “Chong doi phim” thành BTN = 0 xem thế nó mới chống đối phím chứ cái delay nó chưa chống được đâu, nhả tay khỏi phím là BTN = 1 ngay Mà bạn bỏ 1 cái if đi cũng được

Văn Dương viết 10:18 ngày 01/10/2018

Dội phím/ Chống dội phím là cái rất vớ vẩn mà SV sợ và dùng mấy cái delay, vòng lặp để xử lý.
Chuyển ngay sang xử lý bắt sườn xung để đảm bảo tốc độ xử lý cao, ổn định.
Còn chương trình của thớt thì chỉ cần viết nó đơn giản thế này:

while(1){
    if(!BTN){P2=0; continue;}
    P2=~P2;
    delay_ms(100);
}
nghia viết 10:30 ngày 01/10/2018

sườn xung là gì vậy anh em không hiểu anh có thể nói sâu hơn không ạ!(Lập trình này em đang tự tìm hiểu nếu anh có tài liệu có thể giới thiệu cho em không?) Cảm ơn anh rất nhiều!

nghia viết 10:17 ngày 01/10/2018

cảm ơn anh rất nhiều vì đã giúp em!

Văn Dương viết 10:25 ngày 01/10/2018

Khi bạn nhấn nút, chân input sẽ có sự thay đổi điện áp 1-> 0. Khi nhả nút sẽ có điện áp 0->1.
Người ta sẽ phát hiện nút thay đổi trạng thái dựa vào sự thay đổi điện áp. Việc kiểm tra sẽ rất nhanh mà không cần delay để chống việc giữ nút quá lâu.

nghia viết 10:16 ngày 01/10/2018

em cảm ơn anh nhiều!

Bài liên quan
0