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ề test hipot cao ápbởi nguyendinhvanCách nghĩ của bạn là theo duy tâm thôi. Còn trong công việc thì phải theo duy lý.
Bạn vào goggle và gõ từ : tiêu chuẩn an toàn cách điện.
Bạn sẽ thấy vô vàn các quy định, VN cũng có , quốc tế cũng có. Mỗi vùng , mỗi khu vực,...-
Channel: Điện tử dành cho người mới bắt đầu
02-11-2024, 20:04 -
-
bởi lamvu0677Chào mọi người, ai làm về điện, đặc biệt biến áp xung, mâý con nho nhỏ gắn vào mạch nguồn, cho e hỏi tí ą, e cũng làm trong ty về biển áp thì đo kiểm thành phẩm sẽ kiểm cao áp, tức là kiểm xem có phóng điện giữa các cuộn dây với...
-
Channel: Điện tử dành cho người mới bắt đầu
01-11-2024, 21:05 -
-
bởi AaaabbbbbEm chào các anh chị ,cô chú . Em đang có 1 đề tài: Mô phỏng điều khiển động cơ 1 chiều và bộ điều khiển điện áp tự động (AVR) sử dụng MATLAB/Simulink và Arduino . Anh chị có thế giải thích hoặc định hướng giúp em với được không ạ . Em xin cảm ơn !!...
-
Channel: Vi điều khiển AVR
30-10-2024, 16:38 -
-
bởi 2embeyeuem mới nhập môn, bác nào có sơ đồ của mạch này và cách cắm mạch trên panel cho em xin với, em cảm ơn ạ
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 15:52 -
-
bởi dqt21091997Hi mọi người,
Team mình hiện là đối tác phân phối cho 1 dịch vụ Proxy US chuẩn bị mở mang tên Proxy Compass. Mọi người có thể trải nghiệm ở đây: https://proxycompass.com/vi/free-trial/
Điểm mạnh của Proxy Compass là:
- 50 địa chỉ IP proxy
...-
Channel: Tổng quan về ngành viễn thông
30-10-2024, 14:46 -
-
Trả lời cho Thắc mắc về kiến thức điện xoay chiềubởi SteinsKMình nhớ là do điện AC không có chia cực cố định như DC, thêm vào đó thì ổ điện loại mà 2 lỗ thì cũng không có phân biệt chiều cắm, thành ra mình cắm chiều nào cũng được. Đây là em hiểu như vậy, có bác nào có ý kiến khác không ạ....
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 09:57 -
-
bởi tivungvechào mọi người, em là sinh viên mới tìm hiểu về điện em có thắc mắc là tại sao điện AC ở nhà dùng có phích cắm khi cắm vào ổ điện thì cắm chiều nào cũng được, mà em đọc trên mạng thấy điện AC có dây trung tính và dây pha mà nhỉ...
-
Channel: Điện tử dành cho người mới bắt đầu
27-10-2024, 14:25 -
-
Trả lời cho ccs - 1 nút nhấn điều khiển 2 led - cần giúp ahbởi Truong2005Cám ơn nhiều! Code đẫ chạy
-
Channel: từ PIC tới dsPIC
26-10-2024, 21:21 -
Comment