Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Thông báo
Collapse
No announcement yet.
Đố vui về PIC, các câu đố cực vui và cực hay... hehe..
Vậy thì vẫn chưa đap ứng đưoc sự ham hiểu biết của mỗ. Mỗ muốn đáp án đúng.. khà khà...
Không nghĩ thêm được Bác ơi...Nhưng bác phán hộ em một câu...Chương trình đấy có chạy không????
theo em nghĩ...nếu mà set được GIE trong chương trình ngắt thì ...chương trình của em có chạy.
chết em xin lỗi ...em copy paste loạn cả lên...em có sửa lại ngắt 1 2 3 ở trên roài.
Có chạy, nhưng:
+Bất kể thế nào cũng nhảy vào ngắt sau. CŨng là ưu tiên nhưng là kiểu ưu tiên: hậu sinh khả úy.
+Coi chừng tràn stack.
Mà cứ hỏi bài thế này thì lộ hết cả đáp án... khà.. khà.. sau lần này thì tại hạ sẽ mai danh ẩn tích cho tới khi có đáp án đúng.
Bác gợi ý để anh em suy nghĩ...đây cũng là bác giúp anh em tư duy ...Chứ bác chuồn bây giờ thì là bác đánh đố anh em rồi.
Còn em nghĩ chương trình của em sợ là bị tràn nếu như là ngắt ngoài...ví dụ như dùng ngắt bằng cách ấn nút. Nhưng nếu em chỉnh phần cứng chỉ nhận một xung vào ngắt...hoặc như dùng nhiều ngắt như ngắt timer thì đố nó tràn được.
Trời đất ...em nghĩ mãi ko biết có đúng không...các bác góp ý cái nhé:
Chạy Main()
đầu chương trình ngắt có lệnh GIE=0;
Có ngắt thì đẩy lên stack0 và vào ngắt IN1 bật GIE (không có ngắt nữa thì như thường)
Có ngắt nữa thì dừng IN1, đẩy địa chỉ lên stack1 và vào IN2
Giả sử IN2 là một nút bấm có xung dài(bình thương GIE =0 thì không sao nhưng ở đây phải xử lý khi GIE=1 để stack khỏi tràn).
A```(học anh BinhAnh cai hu'hu') GIE=1 lại Ngắt IN2 đẩy vào ngăn xếp stack2 và chạy lại chương trình ngắt từ đầu. Lúc này có thể dùng lệnh điều kiện để không chương trình ngắt nào được thực hiện. Buộc nó phải rút địa chỉ tại stack 2 ra và chạy từ đó...nhưng ngay ở lệnh này trong điều kiên thứ 2 GIE=1...xung Ngắt 2 vẫn đang tồn tại thì lại đẩy lên stack2 cứ như vậy stack2 sẽ được đẩy lên và rút ra cho đến khi kết thúc xung ... nghĩa là lần ngắt cuối cùng...khi không còn ngắt nữa thì sẽ rút stack2 thực hiện lệnh tại điều kiện 2 ...rồi rút stack1 thực hiện lệnh dang dở ở điều kiện 1...rôi rút stack0 để trở về main
Khà khà, bác CB dạo này làm các fan PIC đau cái đầu nhỉ, em vừa gửi đáp án về câu này cho bác để thõa tính tò mò của bác. Bác đọc rồi phán xét hộ em nhé. Em gửi lên hộp thư trên diễn đàn ấy. Mấy câu thì em thấy câu này của bác là khó nhất vì đơn giản là nó ko có trong datasheet thôi....
Khà khà, bác CB dạo này làm các fan PIC đau cái đầu nhỉ, em vừa gửi đáp án về câu này cho bác để thõa tính tò mò của bác. Bác đọc rồi phán xét hộ em nhé. Em gửi lên hộp thư trên diễn đàn ấy. Mấy câu thì em thấy câu này của bác là khó nhất vì đơn giản là nó ko có trong datasheet thôi....
Đúng là ko qua mặt được bác PPIICC, em vừa xem hộp thư trên diễn đàn, và he he... bác đáp án của bác hoàn toàn đúng. He he...bội phục, bội phục...
Em xin đính chính:câu trên ko dành cho các bác BinhAnh,Falleaf,PPIICC
Thời gian thì ít mà bỏ thì không cam tâm, theo ngu ý của em thì code có thể như sau, viết cho 3 ngắt là timer0, int, onchange, với quyền ưu tiên lần lượt như trên. Việc kiểm tra
bit timer0=1;
bit int0=1;
bit rb=1;
void interrupt my_isr(void)
{
GIE=1;
if (TMR0IF & timer0)
{
timer0=0;
\\ goi chuong trình xử lý ngắt TMR0
timer0=1;
}
if (INTIF & int0 & !(TMR0IF))
{
int0=0;
\\ gọi chương trình xử lý ngắt INT
int0=1;
}
if (RBIF & rb & !(TMR0IF) & !(INTIF))
{
rb=0;
\\ goi chuon trinhg onchange
rb=1;
}
\\ gie tự động được set là 1
}
Anh CHIBANG cho đáp an đi, em nghĩ là em sai, mà ông anh học lên đai gì và tại bang nào nhỉ ?
Vẫn chưa đúng... khà khà.. tràn stack ngay lập tức khi gặp bất cứ 1 ngắt bất kỳ nào.
Tại hạ là kẻ vô danh tiểu tốt, đâu dám xưng tên họ để các đại hiệp cười chế. Trong khi lưu lạc giang hồ, thấy Giang Nam cảnh đẹp, xem phong thủy thấy dientuviet.net là nơi đất lành chim đậu, sơn thủy hữu tình nên lưu lại và nhã hứng uốn 3 tấc lưỡi, họa đôi vần thơ.
Thời gian thì ít mà bỏ thì không cam tâm, theo ngu ý của em thì code có thể như sau, viết cho 3 ngắt là timer0, int, onchange, với quyền ưu tiên lần lượt như trên. Việc kiểm tra
bit timer0=1;
bit int0=1;
bit rb=1;
void interrupt my_isr(void)
{
GIE=1;
if (TMR0IF & timer0)
{
timer0=0;
\\ goi chuong trình xử lý ngắt TMR0
timer0=1;
}
if (INTIF & int0 & !(TMR0IF))
{
int0=0;
\\ gọi chương trình xử lý ngắt INT
int0=1;
}
if (RBIF & rb & !(TMR0IF) & !(INTIF))
{
rb=0;
\\ goi chuon trinhg onchange
rb=1;
}
\\ gie tự động được set là 1
}
Anh CHIBANG cho đáp an đi, em nghĩ là em sai, mà ông anh học lên đai gì và tại bang nào nhỉ ?
Không xóa cờ ngắt thì làm sao được
To ChiBang: Bác chỉ giáo em điều này: đẩy vô stack và rút ra rồi lại đẩy vô...làm như thế có tràn ko???
Em kô nhìn thấy lỗi sai của em mới chết ạ.
Vẫn chưa đúng... khà khà.. tràn stack ngay lập tức khi gặp bất cứ 1 ngắt bất kỳ nào.
Tại hạ là kẻ vô danh tiểu tốt, đâu dám xưng tên họ để các đại hiệp cười chế. Trong khi lưu lạc giang hồ, thấy Giang Nam cảnh đẹp, xem phong thủy thấy dientuviet.net là nơi đất lành chim đậu, sơn thủy hữu tình nên lưu lại và nhã hứng uốn 3 tấc lưỡi, họa đôi vần thơ.
Bảo trọng
Hà hà ... Độc cô cầu bại
Thôi ông anh cho đáp án đi, để đàn em mở rộng tầm mắt.
Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....
Mọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
Nhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
Cảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
Comment