PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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 ...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 07-07-2007, 11:04 AM   #1
phamthanhkhuyen
Đệ 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.
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2007, 11:26 AM   #2
phamthanhkhuyen
Đệ 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.
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2007, 04:42 PM   #3
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
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.
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2007, 09:51 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2007, 01:57 AM   #5
phamthanhkhuyen
Đệ 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
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:39 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam