Chào các bạn. Mình đang tự tìm hiểu về VĐK để viết chương trình điều khiển cho 1 chiếc máy giặt. Trong quá trình làm việc mình nhận thấy cách giải quyết của mình chưa được tối ưu nên mong mọi người giúp đỡ để mình hoàn thiện chương trình này. Trong quá trình giặt mình muốn để động cơ quay thuận 30 giây sau đó lại quay ngược 30 giây, ở giữa 2 chu kỳ mình muốn để thời gian trễ là 10 giây.Do sử dụng biến đếm để tạo trễ nên chương trình của mình rất dài và không chuẩn về mặt thời gian.
Ở chương trình chính mình sử dụng ngắt ngoài để dùng máy khi cần thiết thông qua phím Stop. Nhưng theo như mình biết, sau khi chạy chương trình phục vụ ngắt 8051 chạy quay về chương trình chính làm tiếp công việc còn dang dở. Vì vậy mình đành phải gán biến c=0 khi có ngắt nhằm đưa các biến đếm ở hàm tạo trễ về 0. Mình thấy cách này không được ổn lắm và chương trình cũng không tối ưu.
void main()
Do mới tiếp cận với ngôn ngữ C và 8051 nên cách giải quyết bài toán của mình còn nhiều vấn đề chưa ổn. Mong được mọi người giúp đỡ.
void delay(unsigned int t)
{
unsigned int a,b,d,e,i,j,k,l,m,n,o;
for(a=0;a<=t;a++);
for(b=0;b<=t;b++);
for(d=0;d<=t;d++);
for(e=0;e<=t;e++);
for(i=0;i<=t;i++);
for(j=0;j<=t;j++);
for(k=0;k<=t;k++);
for(l=0;l<=t;l++);
for(m=0;m<=t;m++);
for(n=0;n<=t;n++);
for(o=0;o<=t;o++);
}
{
unsigned int a,b,d,e,i,j,k,l,m,n,o;
for(a=0;a<=t;a++);
for(b=0;b<=t;b++);
for(d=0;d<=t;d++);
for(e=0;e<=t;e++);
for(i=0;i<=t;i++);
for(j=0;j<=t;j++);
for(k=0;k<=t;k++);
for(l=0;l<=t;l++);
for(m=0;m<=t;m++);
for(n=0;n<=t;n++);
for(o=0;o<=t;o++);
}
void main()
{
IE=0x81;
IT0=1;
while(1)
{
val=pro_key(val);\\chương trình chọn chế độ giặt
val=pro_vat(val);\\chương trình vắt riêng rẽ
mode=pro_start(mode);\\ chương trình start-stop
pro_motor(val); \\ giặt hoặc vắt
}
}
//================================================== ===================
void ngat0(void) interrupt 0
{
EA=0;
{
c=0;
val=0;
mode=0;
};
EA=1;
}
IE=0x81;
IT0=1;
while(1)
{
val=pro_key(val);\\chương trình chọn chế độ giặt
val=pro_vat(val);\\chương trình vắt riêng rẽ
mode=pro_start(mode);\\ chương trình start-stop
pro_motor(val); \\ giặt hoặc vắt
}
}
//================================================== ===================
void ngat0(void) interrupt 0
{
EA=0;
{
c=0;
val=0;
mode=0;
};
EA=1;
}
Comment