|
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 |
17-11-2006, 09:07 AM | #1 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Help! Sử dụng Macro
Em viết 1 macro như sau:
move MACRO variable,value movlw value movwf variable ENDM Trong chương trình chính em gọi macro như sau: move Delay1,0x20 biến Delay1 em đã khai báo trong vùng RAM của PIC6F877. Vậy mà khi dịch chương trình lại báo lỗi : Illegal opcode (Delay1) bây giờ em phải giải quyết thế nào hả các bác? Khi em không dùng Macro nữa mà dùng luôn thế này ở chương trình chính: movlw 0x20 movwf Delay1 thì chẳng báo lỗi gì cả. Nhưng em muốn học cách sử dụng Macro. Do vậy rất mong được các đại sư huynh chỉ giáo. |
17-11-2006, 09:52 AM | #2 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Code tớ viết như vậy nè, quickbuild = MPL 7.5 bình thường.
Có lẽ bạn nên post code của bạn lên thì hay hơn. Code:
#include <p16f877a.inc> org 0x05 move macro variable,value movlw value movwf variable endm cblock 0x0c delay1 endc main move delay1, 0x20 end |
17-11-2006, 11:00 AM | #3 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Chương trình chính em viết dài lắm, post hết lên đây em sợ loãng mất cái em cần hỏi nên em không post, chứ không phải em giấu giếm gì đâu. Hic, em viết đúng như bác hướng dẫn mà vẫn ko được. Em đang dùng MPLAB bản 7.41.
|
17-11-2006, 06:14 PM | #4 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
18-11-2006, 08:53 AM | #5 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Bác ơi em viết có thò có thụt đàng hoàng đấy chứ, nhưng vì khi post lên đây em không biết cách post code nên nó cứ dính liền vào nhau như vậy. Hồi trước có 1 bác dạy em cách post code lên diễn đàn, dùng ký tự # gì đó nhưng em tìm không thấy.
namqn: Khi bạn soạn thảo post, ở những phần code bạn chỉ cần chọn chúng và nhấn vào nút có hình # ở thanh công cụ phía trên khung soạn thảo (nếu không thấy thanh công cụ đầy đủ thì bạn chọn nút "Chuyển sang khung lớn" phía dưới khung soạn thảo). Thực tế thì việc nhấn nút đó sau khi chọn một đoạn text để hiển thị dạng code chỉ thêm các tag [ code] và [ /code] ở đầu và cuối của đoạn text cần định dạng (các tag thực không có khoảng trắng bên trong, tôi viết như vậy thì mới hiển thị bình thường). thay đổi nội dung bởi: namqn, 18-11-2006 lúc 09:08 PM. |
18-11-2006, 09:05 AM | #6 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Túm lại thì em vẫn chứ biết tại sao chương trình vẫn báo lỗi như vậy. Không biết có phải em viết chương trình có khai báo Directive kiểu CODE không. Nghĩa là em cố định địa chỉ PROGRAM MEMORY cho mỗi hàm và mỗi đoạn trong chương trình ấy (nói nôm na là như vậy). Ví dụ như là :
Start: CODE 0x0E Begin: (thực hiện công việc nào đó ở đây) đoạn khai báo trên làm cho chương trình hiểu là đoạn mã lệnh thực hiện công việc khai báo sau nhãn Begin sẽ được đặt ở địa chỉ bắt đầu là 0x000E ở trong bộ nhớ Program Memory của PIC. Toàn bộ chương trình của em đều khai báo Directive kiểu như trên. Do vậy em không biết có phải điều đó ảnh hưởng đến việc sử dụng các MACRO trong chương trình không. Mong các cao nhân chỉ giáo!!! |
18-11-2006, 09:12 PM | #7 | |
Trưởng lão PIC bang
|
Trích:
Việc khai báo vị trí tuyệt đối của các đoạn mã lệnh thực ra không cần thiết, trừ khi bạn có lý do đặc biệt để làm điều đó. Chúng ta thường chỉ cần khai báo vị trí tuyệt đối khi viết code cho reset vector và các ngắt. 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 |
|
20-11-2006, 11:38 PM | #8 |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
ông bạn jerry không post code lên đây thì có đoán mò cả tháng cũng chẳng ra.
|
21-11-2006, 04:23 PM | #9 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Cảm ơn các bác đã quan tâm giúp đỡ em ạ. Em cũng muốn post code của em lên đây cho các bác dễ quan sát lắm nhưng nhìn lại thì thấy nó những vài MB nên cũng ngại (vì chương trình của em giải quyết rất nhiều việc, em chia thành rất nhiều file nhỏ để dễ quản lý như các file *.asm, *.inc, *.lkr...), hic hic.
|
22-11-2006, 05:39 PM | #10 | |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Trích:
|
|
09-07-2007, 11:38 PM | #11 |
Đệ tử 1 túi
Tham gia ngày: Oct 2006
Bài gửi: 17
: |
các bác cao thủ về viết các macro thi xin vui lòng hướng dẫn cụ thể hơn, vì mình dọc hoài mà chẳng hiểu gì cả,
ko biết các macro đặt ở đâu và cách gọi ra để sử dụng? Code:
CJNE: MACRO THANHGHI,SO,CONTRO MOVLW SO SUBWF THANHGHI,W BTFSS STATUS,Z GOTO CONTRO ENDM NCJNE: MACRO THANHGHI,SO,CONTRO1 MOVLW SO SUBWF THANHGHI,W BTFSC STATUS,Z GOTO CONTRO1 ENDM FJNE: MACRO THANHGHI1,THANHGHI2,CONTRO MOVF THANHGHI2,W SUBWF THANHGHI1,W BTFSS STATUS,Z GOTO CONTRO ENDM FJE: MACRO THANHGHI1,THANHGHI2,CONTRO MOVF THANHGHI2,W SUBWF THANHGHI1,W BTFSC STATUS,Z GOTO CONTRO ENDM thay đổi nội dung bởi: namqn, 10-07-2007 lúc 12:11 AM. |
10-07-2007, 12:19 AM | #12 |
Trưởng lão PIC bang
|
Macro có thể đặt trong tập tin nguồn chính, trong tập tin include. Điều quan trọng là macro phải được định nghĩa khi trình biên dịch gặp một lệnh gọi (khai triển) macro. Ví dụ, nếu chương trình của bạn dùng một macro được định nghĩa trong một tập tin include, bạn chỉ dẫn (directive) để include tập tin đó phải xuất hiện trước khi bạn dùng macro lần đầu tiên trong code chương trình.
Lấy ví dụ macro CJNE mà bạn đã post lên, cú pháp của nó là: Code:
CJNE thanh_ghi_được_so_sánh, số_được_so_sánh, nhãn_nhảy đến Code:
... CJNE R1, 0x21, Label_1 ... Label_1: ... 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 |
|
|