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
-
bởi nguyendinhvanỞ đây thì cũng chỉ có mấy cái máy tập gym là cùng, vào Nhà máy thì không đủ tuổi, mà bài thực hành thì không đủ cơm trưa.
Mà mấy cái máy gym thì cần giải pháp đồng bộ tốt hơn là biện pháp chắp vá....-
Channel: Đặt hàng
26-12-2024, 23:12 -
-
Trả lời cho Mạch tự động bật nguồnbởi nguyendinhvanMấy cái hệ thống Minh Thông đó là tôi tránh xa.
Vì một ngày mình bấm nút La- bô mấy lần, bấm vào những giờ nào nó cũng lưu vào datalog.
Dễ lộ bảo mật.
...-
Channel: Điện tử gia dụng
26-12-2024, 23:00 -
-
Trả lời cho Mạch tự động bật nguồnbởi vi van phamĐinh Vặn và Nhà Thùng ngồi uống bia thì cúp điện. Đinh Vặn vào trạng thái stanby, cầm ly bia mà không uống được. Đến khi có điện, cảm biến của Đinh Vặn phát huy chức năng, cầm chai bia tu 1 hơi.
Nhà Thùng vào trạng thái stanby,...-
Channel: Điện tử gia dụng
26-12-2024, 07:47 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Lão hôm nay uốn mấy lọ? Làm tôi đọc bài của lão toát cả mồ hôi, mãi khi nhìn sơ đồ mới hiểu....
Aiza... Lão lại đi về thời 0.4 rồi! Giờ cảm biến và trợ lý và thiết bị có đầy...
Tôi về đến Pháp Vân, gọi...-
Channel: Điện tử gia dụng
25-12-2024, 23:30 -
-
bởi nguyendinhvanĐa số các đồ điện là cứ có điện là sẽ hoạt động.
Nhưng ngày nay, nhiều thiết bị điện có điều khiển không tự hoạt động khi có điện nguồn. Máy chỉ ở chế độ stanby, tới khi người sử dụng nhấn phím power.
Ví dụ...-
Channel: Điện tử gia dụng
25-12-2024, 21:02 -
-
bởi nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
22-12-2024, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
22-12-2024, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
22-12-2024, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
Comment