Thông báo
Collapse
No announcement yet.
điều khiển chương trình con dùng ngắt ngoài
Collapse
X
-
bạn tham khảo nhé
Code:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 char mode; void init(); void EX1_ISR(); void proc1(); void proc2(); void main() { init(); while(1); } void init() { mode=0; EA=1;//cho phep ngat EX1=1;//ngat ngoai 1 IT1=1;//ngat theo suon } void EX1_ISR() interrupt IE1_VECTOR { if(!mode) { mode=1; proc1(); } else { mode=0; proc2(); } } void proc1() { led2=1; led1=0; } void proc2() { led1=1; led2=0; }
Comment
-
đó là hàm ngắt đó bạnNguyên văn bởi chjpchjp1991Bạn Kidteam viết hàm này mình thấy khó hiểu void EX1_ISR() interrupt IE1_VECTOR { hic hic
@chip: mình mới hoàn thành cái compiler asm đó
bạn tham khảo test giúp mình
có lỗi gì mình fix luôn

Comment
-
cậu xem cái này nhá.#include "reg52.h"
#define led1 P1_0
#define led2 P1_1
int k=0;
main()
{
IE=0x81;
while(1)
{
if(k%2) {led1=1; led2=0;}
else {led1=0; led2=1;}
}
}
void ngat0() interrupt 0
{
//if(k=100) k=0; ///cai nay viet them cho khoi bi tran bien k
while(P3==0xfb);
k++;
}
mình viết luôn chưa test đâu..
nhưng chắc k sai
Last edited by tan0710; 08-10-2012, 09:34.
Comment
-
ko khó hiểu đâu bạn. cái này chỉ là biến đã được định nghĩa giá trị thôi. bạn open file.h của 8051 lên tìm tới mục các vecto ngắt sẽ tìm thấy giá trị của ie_vectorNguyên văn bởi chjpchjp1991Bạn Kidteam viết hàm này mình thấy khó hiểu void EX1_ISR() interrupt IE1_VECTOR { hic hic
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */ //được định nghĩa sẵn
@kidteam: void EX1_ISR(); đoạn khai báo chương trình con này k cần thiết, các hàm ngắt ko cần khai báo trước main.Website chính thức đổi địa chỉ website thành
Mời các bạn ghé thăm !!!
Comment
-
cảm ơn bạnNguyên văn bởi mast090 Xem bài viếtko khó hiểu đâu bạn. cái này chỉ là biến đã được định nghĩa giá trị thôi. bạn open file.h của 8051 lên tìm tới mục các vecto ngắt sẽ tìm thấy giá trị của ie_vector
#define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */ //được định nghĩa sẵn
@kidteam: void EX1_ISR(); đoạn khai báo chương trình con này k cần thiết, các hàm ngắt ko cần khai báo trước main.
chỉ là do thói quen thôi bạn à (mình quen trước khi sử dụng cái gì thì khai báo cái đó mặc dù biết là trường hợp này là không cần khai báo)
Comment
-
bạn cho mình hỏi, với cái code của bạn thì mình thấy khi proc1 chạy xong, nhấn nút thì mới chuyển qua proc2.Nguyên văn bởi kidteam Xem bài viếtbạn tham khảo nhé
Code:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 char mode; void init(); void EX1_ISR(); void proc1(); void proc2(); void main() { init(); while(1); } void init() { mode=0; EA=1;//cho phep ngat EX1=1;//ngat ngoai 1 IT1=1;//ngat theo suon } void EX1_ISR() interrupt IE1_VECTOR { if(!mode) { mode=1; proc1(); } else { mode=0; proc2(); } } void proc1() { led2=1; led1=0; } void proc2() { led1=1; led2=0; }
Ở đây mình đặt 1 vòng lặp cho proc1 lặp vô hạn, nếu khi nào nhấn nút thfi chuyển qua proc2 cũng lặp vô hạn...cứ như thế proc2-->proc1-->proc2...
bạn sửa lại code giúp mình đc k.?
ví dụ ở đây proc1 là 2 led nháy xem kẽ, proc2 là 2 led nháy tắt đồng thời.!
Comment
-
Code:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 unsigned char mode; void proc1(); void proc2(); void init(); void EX1_ISR(); void Delay_Ms(unsigned char uMs); void main() { init(); while(1) { if(!mode) proc1(); else proc2(); } } void init() { mode=0; EA=1; EX1=1; IT1=1; } void EX1_ISR() interrupt IE1_VECTOR { if(mode) mode=0; else mode=1; } void proc1() { led1=1; led2=0; Delay_Ms(100); led1=0; led2=1; Delay_Ms(100); } void proc2() { led1=led2=0; Delay_Ms(100); led1=led2=1; Delay_Ms(100); } void Delay_Ms(unsigned char uMs) { //lam gi do }
Comment
-
bạn có thể mở rộng cho mình lên 3 hoặc 4 chương trình con k.?Nguyên văn bởi kidteam Xem bài viếtCode:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 unsigned char mode; void proc1(); void proc2(); void init(); void EX1_ISR(); void Delay_Ms(unsigned char uMs); void main() { init(); while(1) { if(!mode) proc1(); else proc2(); } } void init() { mode=0; EA=1; EX1=1; IT1=1; } void EX1_ISR() interrupt IE1_VECTOR { if(mode) mode=0; else mode=1; } void proc1() { led1=1; led2=0; Delay_Ms(100); led1=0; led2=1; Delay_Ms(100); } void proc2() { led1=led2=0; Delay_Ms(100); led1=led2=1; Delay_Ms(100); } void Delay_Ms(unsigned char uMs) { //lam gi do }
Comment
-
Code:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 unsigned char mode; void proc1(); void proc2(); void proc3(); void proc4(); //================================ //co the dat nhieu hon nua v.v. void init(); void EX1_ISR(); void Delay_Ms(unsigned char uMs); void main() { init(); while(1) { switch(mode) { case 0: proc1(); break; case 1: proc2(); break; case 2: proc3(); break; case 3: proc4(); break; } } } void init() { mode=0; EA=1; EX1=1; IT1=1; } void EX1_ISR() interrupt IE1_VECTOR { ++mode; if(mode==4) mode=0; } void proc1() { led1=1; led2=0; Delay_Ms(100); led1=0; led2=1; Delay_Ms(100); } void proc2() { led1=led2=0; Delay_Ms(100); led1=led2=1; Delay_Ms(100); } void proc3() { //lam gi do tuy ban } void proc4() { //lam gi la tuy o ban } void Delay_Ms(unsigned char uMs) { //lam gi do do ban nhe }
Comment
-
sao mình viết chương trình con dài thì khi bấm không quay lại liền được bạn,,,bạn có thể giúp mình đựuoc khôngNguyên văn bởi kidteam Xem bài viếtCode:#include <regx51.h> #define led1 P1_0 #define led2 P1_1 unsigned char mode; void proc1(); void proc2(); void proc3(); void proc4(); //================================ //co the dat nhieu hon nua v.v. void init(); void EX1_ISR(); void Delay_Ms(unsigned char uMs); void main() { init(); while(1) { switch(mode) { case 0: proc1(); break; case 1: proc2(); break; case 2: proc3(); break; case 3: proc4(); break; } } } void init() { mode=0; EA=1; EX1=1; IT1=1; } void EX1_ISR() interrupt IE1_VECTOR { ++mode; if(mode==4) mode=0; } void proc1() { led1=1; led2=0; Delay_Ms(100); led1=0; led2=1; Delay_Ms(100); } void proc2() { led1=led2=0; Delay_Ms(100); led1=led2=1; Delay_Ms(100); } void proc3() { //lam gi do tuy ban } void proc4() { //lam gi la tuy o ban } void Delay_Ms(unsigned char uMs) { //lam gi do do ban nhe }
Comment
Bài viết mới nhất
Collapse
-
bởi songchodep76Cảm ơn bác đã nhiệt thành chia sẻ kinh nghiệm bản thân mình cho mọi người.
Tuy nhiên, theo tiếp xúc hạn hẹp của em với mosfet thì vấn đề bác đo vôn ở cực D và thấy đỉnh nó 70V/55V Vds max, như thí nghiệm và trong hình của bác...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 09:46 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cho tới thời điểm này, quả thật Đình Thường đây quá thất vọng, không hào hứng với Suno-AI lắm bởi ra lệnh Creat mấy chục lần với các thay đổi thì mới chọn được 2 bản hát đúng giai điệu tầm 80% để cắt ghép tạo thành bài hát...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:01 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Kính chào cả nhà, nhân dịp Tết đang về, sắp 23 tháng chạp rồi, xin gởi lời chúc xuân qua bài hát sau ạ:
Bao nhiêu hân hoan
Chúc Mừng Năm Mới, xuân sang!
Nơi nơi hát vang
nâng chén vui chúc câu An Lành.
Vạn Sự đều Hanh Thông,
Rạng...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 16:46 -
-
bởi ittcChán quá các bác, em nhạt nhẽo quá nên tán em nào cũng tạch, tuyệt vọng vô cùng, nay lại được mấy anh đồng nghiệp cty đối tác mách cho em gái kia sinh năm 2K đầu, em chả biết nhóm đối tượng này phải tán ra sao bây giờ ?
Tính ra em...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 00:18 -
-
bởi bqvietCó thể, ví dụ phần phản hồi gồm vi mạch cách ly quang, zener thứ cấp, transistor và điện trở phản hồi dòng ... Bất kỳ linh kiện nào nhóm đó hỏng dẫn tới mất đường phản hồi. TNY chính hãng phát hiện được chuyện đó nhưng linh kiện...
-
Channel: Điện tử công suất
05-02-2026, 18:36 -
-
bởi Nexus 6Pcho e hỏi, khi mạch có linh kiện nào đó hư thì có làm hỏng led đắt tiền (osram) không?
-
Channel: Điện tử công suất
05-02-2026, 10:42 -
-
bởi chinhnguyen9· Thí nghiệm 1 (Mạch boost, Vcc=12V, kích bằng dao động PƯM, duty 10%):
* Không có snubber + không tải: Xuất hiện hiện tượng dao động tắt dần tại cực D Mosfet (ringing). Hình 1 cho thấy trong chu kỳ đầu, điện áp spike lên tới hàng trăm V, điện...-
Channel: Hướng dẫn sử dụng diễn đàn
04-02-2026, 09:16 -
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
03-02-2026, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
03-02-2026, 14:57 -
-
bởi Nexus 6Pe cài KiCAD 2012 khi mở ra nó chỉ hiện ntn...
-
Channel: Điện tử công suất
03-02-2026, 11:20 -

Comment