|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
07-07-2007, 11:04 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 25
: |
Làm sao để viết chương trình MPASM đúng
to namqn
tôi có một vài điều không hiểu xin nhờ bạn chỉ giúp giả sử tôi có một doạn chương trình: Code:
;1. CAU HINH THIET BI : LIST P=16F877A INCLUDE <P16F877A.INC> __CONFIG _HS_OSC &_WDT_OFF&_LVP_OFF start ;khai báo ban đầu call INI_1 call INI_2 main call chtr_call1 call chtr_call2 call chtr_call3 goto main ;các chươn trình con INI_1 ... return INI_2 ... return chtr_call1 ... ;nếu thỏa điều kiện 1 goto chtr_goto1 ;nếu thỏa điều kiện 2 goto chtr_goto2 ;nếu thỏa điều kiện 3 goto chtr_goto3 ;nếu thỏa điều kiện 4 goto chtr_goto4 ... exit_chtr_call1 return chtr_goto1 call of_goto ... call table1 ... goto exit_chtr_call1 chtr_goto2 call of_goto ... call table2 ... goto exit_chtr_call1 chtr_goto3 ... goto exit_chtr_call1 chtr_goto4 ... goto exit_chtr_call1 chtr_call2 ... return chtr_call3 ... return of_goto ... return table1 retlw ... retlw ... table2 retlw ... retlw ... end thay đổi nội dung bởi: phamthanhkhuyen, 07-07-2007 lúc 11:48 AM. |
07-07-2007, 11:26 AM | #2 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 25
: |
câu hỏi 1
khi tôi viết xong đến chương trình con chtr_goto2
lúc đó các chương trình of_goto , table1 , table2 đã viết xong Khi kiểm tra thực hành thì nó chạy chtr_goto2 call of_goto ... call table2 ... goto exit_chtr_call1 chtr_goto3 goto exit_chtr_call1 chtr_goto4 goto exit_chtr_call1 nhưng khi viết xong đến chtr_goto3 khi kiểm tra thì nó chỉ chạy tới chtr_goto2 nhưng khi tôi xóa nội dung của chtr_goto2 thì khi kiểm tra thì nó chỉ chạy tới chtr_goto3 xem trong File *.list thì thấy toàn bộ chương trình chưa hết PAGE0 thay đổi nội dung bởi: phamthanhkhuyen, 07-07-2007 lúc 11:47 AM. |
07-07-2007, 04:42 PM | #3 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Thử phân tích hàm main của bạn thì sẽ rõ:
Main->chtr_call1 Giả sử điều kiện 1 thoả mãn thì sẽ chạy tiếp: Main->chtr_call1->chtr_goto1->[gọi hàm of_goto,table1 rồi trở lại ] -> exit_chtr_call1 Cái exit_chtr_call1 sẽ làm cho chương trình chạy tiếp lệnh call chtr_call2 (dòng thứ 2 của hàm main) Do vậy đương nhiên nó sẽ không chạy đến chtr_goto2 hay chtr_goto3. Cũng theo logic phân tích như vậy nếu như chương trình chạy xong chtr_goto2 thì sẽ không nhảy tới chtr_goto3, trừ khi bạn xoá nội dung của chtr_goto2 đi thì nó mới chạy chtr_goto3. Cuối cùng thì mình không hiểu ý bạn muốn chương trình phải chạy như thế nào mới đúng vì bạn hỏi không rõ ràng. |
07-07-2007, 09:51 PM | #4 |
Trưởng lão PIC bang
|
Gửi bạn phamthanhkhuyen:
Câu hỏi 1 của bạn chưa rõ ràng lắm. Với chương trình loại này, trước hết bạn cho biết bạn muốn làm gì, và vẽ lưu đồ giải thuật ra. Dựa vào lưu đồ giải thuật đó, bạn hiện thực các cấu trúc điều khiển đó. Như vậy bạn sẽ ít gặp sai sót hơn. Với một chương trình tương đối phức tạp như bạn đang viết, rất khó cho người đọc chỉ nhìn vào code mà hiểu được thuật toán. Điểm quan trọng là thuật toán của bạn rõ ràng. Nếu bạn gặp khó khăn trong việc chuyển thuật toán thành các lệnh thì chúng tôi có thể giúp, còn nếu bạn không cho biết thuật toán thì quả thực rất khó giúp bạn. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
08-07-2007, 01:57 AM | #5 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 25
: |
to namqn
đúng là thiếu sót, thuật toán sẽ đưa lên sau to Jerry đúng ra tôi hơi sơ ý vì muốn cô động vấn đề nên thành ra khó hiểu đúng ra còn 1 chương trình con Chtr_call0 đây là chương trình đưa ra điều kiện để Chtr_call1 so sánh và nó chỉ chạy cho 1 điều kiện được thỏa Cái tôi muốn các bạn giải thích là vị trí của các đoạn chương trình khi ở vị trí khác nhau thì chương trình lạl không chạy đúng ví dụ Bây giờ giả sử chương trình đang chạy tốt khi tôi hoán đổi vị trí 2 chương trình con thì nó lạl chạy sai đây là doạn chương trình đã bị hoán đổi chtr_goto3 goto exit_chtr_call1 chtr_goto2 call of_goto ... call table2 ... goto exit_chtr_call1 chtr_goto4 goto exit_chtr_call1 |
|
|