quả thực mình nghỉ đây là điều rất quan trọng, trước đây khi mình có làm một số công việc liên quan đến ngắt, và không hiểu tại sao chương trình của mình lúc sai lúc đúng và sau đó mình phát hiện ra điều mà bạn đã đề cập đến. Nói chung tối ưu chương trình là giải pháp lựa chọn chung, đối với các công việc khác nhau là rất khác nhau.
Thông báo
Collapse
No announcement yet.
tutorial cho HTPIC
Collapse
X
-
Bạn nói ngắt giải quyết được mọi vấn đề liên quan đến delay là hoàn toàn đúng, bạn cũng đã đúng khi phát hiện ra khi timer hoạt động không làm mất thời gian xử lý của vxl, nhưng điều quan trọng mà mình nghĩ là ứng dụng các lợi thế đó cho công việc của mình cho tối ưu, trước đây khi bắt đầu làm về vxl mình ít khi dùng đến ngắt nói chung, nhưng khi hiểu được một chút về ngắt, hình như trong công việc nào của mình cũng có đụng đến ngắt. mình lấy một công việc mọi người vẫn hay sử dụng:khi muốn phát hiện một phím nào đó của bàn phím tác động thay vì phương pháp quét vòng ta có thể sử dụng ngắt, còn đối với ngắt tràn timer chẳng hạn trong công việc mà mình đang làm mình lấy thời gian này để cập nhật các tham số và như vậy trong chương trình của mình mình không cần phải quan tâm đến thời gian ấy. có thể là ý kiến chủ quan của riêng mình nhưng nếu học về vxl nói chung nếu không hiểu về ngắt là một thiếu sót, còn đối với pic ngoài điều đó còn một điều thú vị nữa là PWM.|
Comment
-
Tại sao lại có ngắt trong ngắt nhỉ. Với MCU loại nhỏ còn không thể thực hiện ưu tiên được nữa cơ mà ( dừng ngắt A để chạy ngắt B chẳng hạn). Bạn nào cho ví dụ về nó đi. Phải là tài liệu của nhà SX chip nhé.
Làm sao mà trong INT0 lại chạy INT0 được. Bạn có biết khi đang thực hiện INT0 thì bộ điều khiển ngắt của MCU hoạt động như thế nào không? Xem lại chỗ này nhé.Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.
Biến tần
Máy giặt
Lò vi sóng
Bếp từ.
Tủ lạnh.
Điều hòa
Comment
-
Nguyên văn bởi MinhHaTại sao lại có ngắt trong ngắt nhỉ. Với MCU loại nhỏ còn không thể thực hiện ưu tiên được nữa cơ mà ( dừng ngắt A để chạy ngắt B chẳng hạn). Bạn nào cho ví dụ về nó đi. Phải là tài liệu của nhà SX chip nhé.
Làm sao mà trong INT0 lại chạy INT0 được. Bạn có biết khi đang thực hiện INT0 thì bộ điều khiển ngắt của MCU hoạt động như thế nào không? Xem lại chỗ này nhé.
Nhưng em nghi ngờ anh MinhPIC áp dụng kỹ thuật này, nếu ko tuân thủ đúng quy tắc bắt buộc nào đó thì ko thể làm được.
Chờ bài viết về kỹ thuật ngăt trong ngắt áp dụng họ PIC16 mới này của anh Minhpic.
Comment
-
QUY TRÌNH SỬ DỤNG NGẮT
LÝ THUẾT
Khi có một ngắt yêu cầu thì vi điều khiển phải phục vụ thì VDK sẽ tạm ngưng công việc hiện tại, hoàn thành lệnh thời ngay tức khắc để nhày vào chương trình phục vụ ngắt ISR. Khi đó bộ đếm chương trình PC sẽ được đẩy vào ngăn xếp STACK và đồng bit cho phép ngắt toàn cục GIE sẽ bị xóa về 0. chương trình rẽ nhánh đến địa chỉ vectow ngắt, tại đây VDK sẽ thực hiện các yêu cầu mà ngắt đòi hỏi.
Sau khi thực hiện xong thì VDK sẽ tự set bit GIE=1 trở lại, và ngăn xếp sẽ trả lại địa chỉ lệnh cho bộ đếm chương trình PC, để VDK quya lại thực hiện tiếp công việc đã bỏ dở, tức là nó sẽ thực tiếp địa chỉ lệnh kế tiếp.
Tuy nhiên chúng ta cũng cần lưu ý rằng "Cờ ngắt" sẽ không được tự động xỏa bởi phần cứng mà nếu muốn xóa thì phải xóa bằng phần mềm.
NHẬN XÉT
Như vậy bit GIE sẽ tự xóa và set bởi phần cứng nhưng cờ ngắt sẽ không tự xóa được và vấn đề theo tôi cần quan tâm là: Có thể thực hiện nghắt lồng trong ngắt với điều kiện "Cờ ngắt" phải được xóa trước trước khi bit GIE được xóa bởi phần mềm. Nếu không sau khi chúng ta xóa bit GIE trong khi cờ ngắt chưa xóa thì đó có thể là một nguyên nhân sinh ra ngắt--> việc làm này cũng trở nên vô nghĩa và có thể VDK sẽ bị treo vì một chuỗi ngắt vô tận sẽ được thực hiện mãi.Last edited by MicroDuyphi; 15-03-2006, 16:33.
Comment
-
To anh MinhHa:
Em ko cần phải xem lại đâu, mà kỹ thuật đó rất khả thi, trong hàm ngắt, bật cờ GIE theo một luật logic nhất định.
To anh DuyPhi:
Lý thuyết chung như anh nói về ngắt thì ko sai về đoạn đầu(datasheet của PIC có nói rõ, đấy là vấn đề cơ bản thôi), nhưng ...hihi... đi xa hơn một tý thì kỹ thuật về ngắt trong ngắt anh đưa ra ở trên là sai:
Trích nguyên văn MicroDuyPhi
ISR
1-Kiểm tra ngắt ngoài
2-Kiểm tra ngắt TIMER
3-Thực thi trình phục vụ ngắt ngoài nếu có
- xóa cờ & set GIE
4-Thực thi trình phục vụ ngắt TIMER nếu có
- xóa cờ & set GIE
5-Thoát ngắt
1-Ngắt ngoài xảy ra liên tục--->kết quả sẽ treo PIC.
2-Ngắt ngoài và ngắt TIMER liên tiếp thay phiên xảy ra--->cũng treo PIC luôn.
Hihi....
Comment
-
3T xem lại nhé vấn đề là nếu 2 ngắt giống nhau thì không thể. Còn khác nhau thì các MPU đã hỗ trợ rồi. Ví dụ như 8088 chẳng hạn đang chạy ngắt 13 để ghi đĩa nhưng nếu gặp phép chía cho 0 lập tức nó thực hiện ngắt ưu tiên này trước sau đó mới quay lại int13.
hungtbinh: Ngắt trong ngắt
minh5sao: OK
phungtbinh: Có thể làm được bằng phần mềm đó anh ạ
minh5sao: Nhung neu chua ket thuc ngat
phungtbinh: http://dientuvietnam.net/forums/show...0&page=3&pp=10
phungtbinh: được chứ
phungtbinh: Anh xem cái bài 29 em viết đó
phungtbinh: ưu tiên ngắt
phungtbinh: và ngắt trong ngắt
phungtbinh: Em định viết appnote cho Microchip và Cypress về ý tưởng này
phungtbinh: Nhưng nó ko trả tiền
phungtbinh: Nên em ko viết
phungtbinh: He he
minh5sao: khong phai y minh nhu vay. Nhu vay thi kiem soat no se rat phien phuc. Boi minh tu ket thuc ngat
minh5sao: Se co luc trung nhau thanh vong lap lai
phungtbinh: Nhưng với thuật toán em đưa ra
phungtbinh: thì ko sao
phungtbinh: Nhưng
phungtbinh: Tất nhiên nó giới hạn
phungtbinh: ưu tiên
minh5sao: goi de qui nhu vay thi phai kiem soat no rat met
phungtbinh: Ko
phungtbinh: đơn giản mà anh
phungtbinh: Ngắt_1()
{
//Chèn mã lệnh: disable ngắt 1,2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 1
}
Ngắt_2()
{
//Chèn mã lệnh: disable ngắt 2,3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 2
}
Ngắt_3()
{
//Chèn mã lệnh: disable ngắt 3 tại đây
GIE=1;
//Chèn mã lệnh trình phục vụ ngắt 3
}
phungtbinh: Áp dụng đc cho PIC16
phungtbinh: Ngắt 1,2,3 theo thứ tự ưu tiên
phungtbinh: 1 cao nhất
phungtbinh: 3 thấp nhất
phungtbinh: Khi vào ngắt thấp hơn, nó sẽ có thể nhảy vào ngắt mức cao hơn
phungtbinh: Ví dụ: ngắt 3 đang chạy, thì nó sẽ nhảy vào ngắt 1 hoặc 2
phungtbinh: Khi ngắt 2 chạy thì nếu ngắt 1 xuất hiện nó sẽ nhảy vào ngắt 1
minh5sao: nhuwng minh phai biet chac thoi gian thuc hien ngat do
phungtbinh: Đây là kỹ thuật chung
phungtbinh: thôi
phungtbinh: Chứ bài toán cụ thể thì tuỳ
phungtbinh: Ví dụ: ngắt 2 đang làm thực hiện giang giở
phungtbinh: Thì nếu co ngắt 1, nó sẽ lại nhay vảo ngắt 1 ngay
phungtbinh: gần như tức thì
minh5sao: nhung co van de la dang thuc hien ngat 1. lai nhay vao ngat 1 tiep thi khi ket thuc no quay ra nhu the nao
phungtbinh: À
phungtbinh: Nếu ngắt 1 đang thực thi, ngắt 1 lại xuất hiện
minh5sao: trong khi do no push 2 lan PC vao stack
phungtbinh: thì nó phải làm hết ngắt 1 hiện tại đã
phungtbinh: rồi mới nhảy ra
phungtbinh: làm tiếp ngắt 1 lần 2
phungtbinh: Vì quan điểm
minh5sao: nhu vay thi khong phai long nhau
phungtbinh: Lồng nhau
minh5sao: OK
phungtbinh: Nhưng khác nguồn ngắt
phungtbinh: 3 có thể lồng vào 2, 2 có thể lồng vào 1
minh5sao: nhung chi co 1 lenh reti thoát ngắt. Nhưng có 2 PC trong stack
minh5sao: Nếu các ngắt lồng nhau nhưng khác nhau thì OK. Các vi xử lý như 8088 đều hợt động được. theo mức ưu tiên có thể có 256 ngắt lồng nhau từ thấp lên cao
minh5sao: nhưng cùng 1 ngăt thì không lồng nhau được
phungtbinh: Vâng
phungtbinh: nếu cùng thì ko đc
minh5sao: Vấn đề mình hỏi là có 1 bạn cho 2 ngắt INT1 lồng nhau cơ
phungtbinh: Vậy thì em chưa nghĩ ra
phungtbinh: Lúc nào rỗi thì nghĩ thêm
phungtbinh: Vì PIC
minh5sao: nó sẽ thành đệ qui ngay kể cả mỗi ngắt chỉ vào xong quay ra ngay không làm gì vì còn 1 thanh ghi chưa POP ra. Tất nhiên nếu POP ra thì có thể được nhưng rất khó kiểm soát
phungtbinh: Phần cứng nó ko support ngắt trong ngắt
phungtbinh: PIC16
phungtbinh: VângNhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.
Biến tần
Máy giặt
Lò vi sóng
Bếp từ.
Tủ lạnh.
Điều hòa
Comment
-
Các bạn thử làm ngắt INT0 trong ngắt INT0 xem. Vẫn có cách nhưng không bài bản cho lắm. Cần kiểm soát được chương trình ngắt thì có thể được nhưng không an toàn khi thời gian thực hiện CODE của ngắt thay đổi. Thực tế thì chẳng khi nào dùng kiểu này, nhưng đây là 1 câu hỏi về PIC.Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.
Biến tần
Máy giặt
Lò vi sóng
Bếp từ.
Tủ lạnh.
Điều hòa
Comment
-
Đúng vậy, giải thuật của anh đưa ra chỉ thực hiện ở các ngắt khác số hiệu lồng nhau(theo mức ưu tiên) chứ ko thưc hiện các ngắt cùng tên.
Ví dụ: giả sử có 3 ngắt:
Ngắt 1: ưu tiên nhất
Ngắt 2: bình thường
Ngắt 3: kém ưu tiên nhất.
Vậy với giải thuật trên, đang thực hiện ngắt i, nếu thì nếu ngắt j ưu tiên hơn(j<i) xuất hiện, nó sẽ nhảy vào ngắt j . Vậy là có thể ngắt lồng nhau.
Nhưng j=i hoặc j>i thì nó sẽ thực hiện ngắt i hiện tại đã.
3T kéo được anh MH vào đây tranh luận với anh cả buổi chiều đấy!!!
Comment
-
Nguyên văn bởi BinhAnhĐúng vậy, giải thuật của anh đưa ra chỉ thực hiện ở các ngắt khác số hiệu lồng nhau(theo mức ưu tiên) chứ ko thưc hiện các ngắt cùng tên.
Chẳn hạn có thể dùng thêm 1 bỉ cờ!
Nếu có ngắt xảy ra ta set bit cờ =1, nếu trong lúc đang xử lý ngắt đó chưa xong mà cũng chính ngắt đó lại xãy ra thì chúng ta sẽ dựa vào bỉt này mà biết được rằng trước đó có một ngắt cùng tên đang thực thi.
Comment
-
Nguyên văn bởi MicroDuyphiNói vậy không có cách nào để có thể thực hiện ngắt cùng tên lồng nhau được sao anh?
Chẳn hạn có thể dùng thêm 1 bỉ cờ!
Nếu có ngắt xảy ra ta set bit cờ =1, nếu trong lúc đang xử lý ngắt đó chưa xong mà cũng chính ngắt đó lại xãy ra thì chúng ta sẽ dựa vào bỉt này mà biết được rằng trước đó có một ngắt cùng tên đang thực thi.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi về bơm màng bldcbởi vi van phamPhải xem cơ cấu bơm, chứ xem cơ cấu rotor, thì chỉ làm thầy bói xem voi.
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 08:19 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
28-11-2024, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2024, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
27-11-2024, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
27-11-2024, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
27-11-2024, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 00:35 -
Comment