Em có ý thế này( không biết là có ai làm chưa)
Dùng ngắt ngoài để đo tốc độ, cụ tỉ là:
trong hàm main:
sau đó dùng ngắt
em không thể nào đưa được biến a (biến đo thời gian) về 0 được, mong các cao thủ có thể chỉ giúp mình. Còn đây là đoạn code bị lỗi mình dùng để test thử trong đó mình đang test với 1 led 7 đoạn dùng để đếm khoảng thời gian từ lúc khởi động cho đến khi ấn nút là bao nhiêu giây( hoặc từ lần ấn nút trước tới lần ấn nút sau cùng ) Mong mọi người giúp mình xem tại sao led 7 đoạn luôn hiển thị 0 s
Dùng ngắt ngoài để đo tốc độ, cụ tỉ là:
trong hàm main:
Code:
a++ delay( 100)// dùng biến a để đếm 1/10 s
Code:
void ngatngoai0(void) interrupt 0 //Ngat ngoai 0
{
EX0=0;
IE0=0;
tocdo=1/(a*10); // giả sử ta do số vòng quay trong 1s của động cơ, 1 vòng sẽ tạo ra 1 ngắt ngoài
a=0; // <-- lỗi ở đây
EX0=1;
}
Code:
# include "regx51.h"
//bien toan cuc
unsigned int a;
char b[]={ 192, 249, 164, 176, 153, 146, 130, 248, 128, 144};// hien thi so tu 1 den 9
void ngatngoai0(void) interrupt 0 //Ngat ngoài 0
{
EX0=0;
IE0=0;
P1=b[a];
a=0; //<-- mình muốn reset a về 0 để bắt đầu đếm thời gian lại từ đầu, nhưng lại gặp lỗi luôn hiển thị led 7 đoạn bằng 0 - mọi người giúp mình đưa a về 0 với để nó bắt đầu đếm lại từ đâu :-*
EX0=1;
}
// ham gay tre
void delay(int time){
while(time--){
unsigned char j = 122;
while(j--);
};
}
void khoitaongatngoai0(void)// Ham khoi tao
{
EA=1;
EX0=1;
}
main()
{
khoitaongatngoai0();
while( 1)
{
a++;
delay(1000);
}
}
Comment