Hiện tại e đang làm bài tập về vấn đề này. Qua thời gian tìm hiểu thì e cũng đã xây dựng được mạch (lắp trên bảng đục lỗ) và viết được code.
Vấn đề là không hiểu sao nó chạy sai. (không chịu vào ngắt). ACE chỉ giúp chỗ sai với nhé.
Sơ qua về code: Chân TRIGGER nối vào P1.7, ECHO nối vào P3.2.
2 LED nối vào P2.0 và P2.1.
Nếu khoảng cách <50cm thì 2 led sẽ sáng. Kc <200cm thì led 1 sáng. KC <300cm thì led 2 sáng.
Khi e chạy thi 2 led tối om. Thử mấy cái code dùng 8051 điều khiển led thì chạy ngon.
Xin cảm ơn trước nhé. :x:x:X
Vấn đề là không hiểu sao nó chạy sai. (không chịu vào ngắt). ACE chỉ giúp chỗ sai với nhé.
Code:
#include <REGX52.H> #define TRIGGER P1_7 #define ECHO P3_2 #define LED1 P2_0 #define LED2 P2_1 unsigned char kichhoat; float khoangcach, tg; unsigned int thoigian; // CTC tao tre void taotre_us(unsigned int time) { unsigned int i; for (i=0; i<time; i++); } void taotre_ms(unsigned int time) { unsigned int i,j; for (i=0; i<time; i++) for (j=0; j<125; j++); } void ngatngoai0() interrupt 0 { thoigian = TH0; thoigian <<= 8; thoigian |= TL0; khoangcach = (float)thoigian * 12; tg = (58*11.0592); khoangcach = khoangcach/(tg); TH0 = TL0 = 0; //Xoa du lieu trong thanh ghi timer 0 kichhoat = 1; if (khoangcach<50) { LED1=1; LED2=1; taotre_ms(3000); LED1=0; LED2=0; taotre_ms(2000); } else if (khoangcach<200) { LED1=1; taotre_ms(3000); LED1=0; taotre_ms(2000); } else if (khoangcach<300) { LED2=1; taotre_ms(3000); LED2=0; taotre_ms(2000); } } void khoitao() { TRIGGER = 0; ECHO = 0; TMOD = 0x09; //Timer 0 hoat dong o mode 1; GATE=1 -> Timer 0 chi hoat dong khi INTx o muc cao TH0 = TL0 = 0; TR0 = IT0 = EX0 = EA = 1; //Khoi dong Timer 0 //TR0 = 1; //Khoi dong Timer/Counter //IT0 = 1; //Ngat ngoai che do suon xuong //EX0 = 1; //Cho phep ngat ngoai 0 //EA = 1; //Cho phep ngat cuc bo P2=0x00; //Tat LED taotre_ms(1000); } void xungkichhoat() { TRIGGER=1; taotre_us(20); TRIGGER=0; } void main() { khoitao(); kichhoat=1; while (1) { if (kichhoat == 1) { xungkichhoat(); kichhoat=0; } } }
2 LED nối vào P2.0 và P2.1.
Nếu khoảng cách <50cm thì 2 led sẽ sáng. Kc <200cm thì led 1 sáng. KC <300cm thì led 2 sáng.
Khi e chạy thi 2 led tối om. Thử mấy cái code dùng 8051 điều khiển led thì chạy ngon.
Xin cảm ơn trước nhé. :x:x:X
Comment