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
-
Em có đọc một bài viết về kỹ thuật này của anh BinhAnh viết về ngắt trong ngắt đối với PSoC và PIC16 bên diendandientu.com . Thấy rất khả thi.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:
Đơn cử ví dụ: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
-
Nó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?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
-
Có chứ, cách của mình nói ở các bài hướng dẫn trước là nói về ưu tiên ngắt và lồng các ngắt mức ưu tiên cao hơn. Còn ngắt trong ngắt cùng tên vẫn có thể làm được, ko khó đâuNguyê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 LÀM BOARD Cho ARDUINObởi NannaMấy ông tín đồ Adruino có kit có thể làm thử xem thế nào !
————————————————————————
skysmotor.co.uk bán các sản phẩm sau trực tuyến: động cơ bước, động cơ servo, trình điều khiển động cơ bước, hộp số hành tinh và có thể mua trực tuyến nếu cần.-
Channel: Kiến thức chung về chip khả trình
hôm nay, 15:12 -
-
bởi opthaianTrong quy trình sản xuất rượu, việc lựa chọn thiết bị chưng cất phù hợp không chỉ ảnh hưởng đến chất lượng thành phẩm mà còn quyết định hiệu quả kinh doanh lâu dài của mỗi xưởng sản xuất. Đặc biệt với các xưởng nhỏ, thách...
-
Channel: Góp ý cho diễn đàn
hôm nay, 12:00 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
Hôm qua, 19:59 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi afrendlyCó vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
-
Channel: Thiết bị điện tử cá nhân
04-12-2025, 01:27 -
-
Trả lời cho Máy điện châm ?bởi nick22Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
-
Channel: Điện tử y sinh
01-12-2025, 13:23 -
-
Trả lời cho Làm thế nào để check IC LM358bởi thetungĐể check IC sống hay chết thì đơn giản : bạn lắp cái mạch ( khuếch đại hoặc dao động ) chạy bằng con IC đó ,nhưng vị trí IC thì lắp cái đế .... thế là cứ cắm rút thì biết . Còn không thì kiếm cái này : https://shopee.vn/Xu-M%C3%A1y-ki%E1%...di-%C4%91%E1%B...
-
Channel: Hướng dẫn tìm thông tin linh kiện
28-11-2025, 14:34 -
-
bởi ngochung90Tình hình là em có mua mạch 3s về để hàn vào khối pin 12v, hàn xong em đo tại các chân từ B-, B1, B2, B+ thì điện áp pin vẫn đủ 12,6v, nhưng tại 2 chân ra P- P+ thì đo chỉ được 6,3v là bị sao các bác, và chân P- P + này đồng thời là chân sạc xả thì mình cắm sạc xả cùng lúc được ko ạ
...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2025, 10:32 -
-
Trả lời cho Làm thế nào để check IC LM358bởi nguyendinhvanViệc đó tùy thuộc trình độ khoa học kỹ thuật công nghệ ứng dụng hiện tại thôi.
Trong datasheet,họ đưa ra nhiều thông số. Tùy theo khả năng , và những thông số họ cần, họ sẽ kiểm tra casc số đo có khớp với số liệu trong datasheet...-
Channel: Hướng dẫn tìm thông tin linh kiện
27-11-2025, 18:00 -
-
bởi kqbn9091Em có mạch AT89s8253 đang cần sửa số serial no của CHIP mà giờ lâu quá rồi không dùng keil nên không biết phải làm sao, trong khi chỉ còn file hex. Mạch nạp thì progris khi viết không sửa được số serial của IC. Rất cần bác nào còn làm về 89...
-
Channel: Vi điều khiển họ 8051
27-11-2025, 11:13 -

Comment