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 IemanjaTôi có một câu hỏi kỹ thuật muốn hỏi.
Động cơ bước vòng kín của tôi được sử dụng trong một cơ cấu dao động đảo chiều thường xuyên. Sau khi hoạt động vài ngày, vị trí điểm 0 của bộ mã hóa được thiết lập ban đầu bị trôi dần, và...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 14:12 -
-
bởi theidiotcatGiải pháp cấu hình tối ưu chi phí và hiệu năng cho phòng net hiện đại với AMD Ryzen 7 5700G, 5700X và Radeon RX 6500XT, 7600 8GB
Giải pháp toàn diện cho bài toán đầu tư phòng net
Mô hình phòng net hiện đại ngày nay đòi hỏi...-
Channel: Đánh giá sản phẩm DTVN
hôm nay, 13:55 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
hôm nay, 09:12 -
-
bởi LantheChào bạn.
Trục đầu ra của hộp số hành tinh xoắn ốc được kết nối với mặt bích của khách hàng thông qua một trục răng trong. Sau chưa đầy sáu tháng hoạt động, nó phát ra tiếng kêu lách cách và độ rơ lớn đáng báo động.
Việc...-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 13:05 -
-
bởi ittcChào các anh em nhé, mình dự định sắp tới sẽ đi học lái xe Ôtô, thi lấy bằng lái. Cụ thể mình sẽ học và thi lấy giấy phép lái xe hạng B. Thật sự mình là người chưa có kiến thức hiểu biết gì về Ôtô cả ? tất nhiên mình sẽ phải...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 06:22 -
-
Trả lời cho Amply bị rò DC 22 voltbởi trung30000Theo sự hướng dẫn của bác, sau khi em kiểm tra tầng Vi sai sử dụng cặp c1815, tiếp đến là 1 con a1013, và cặp thúc sử dụng mje304g và mje305g, em đã tiến hành thay cặp Vi sai c1815 sau đó mở máy lên đo ngõ công suất DC 0,2V hai giây sau máy đo...
-
Channel: Điện thanh
05-08-2026, 20:09 -
-
bởi theidiotcatBộ máy đa năng toàn diện cho học tập và làm việc hàng ngày
Đối với học sinh, sinh viên và người làm việc văn phòng, việc sở hữu một bộ PC cân bằng giữa học tập, công việc và giải trí là nhu cầu vô cùng thực tế. Combo Ryzen...-
Channel: Đánh giá sản phẩm DTVN
05-08-2026, 10:28 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
31-07-2026, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:49 -

Comment