|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
30-08-2009, 08:37 PM | #1 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
lệnh MOVF và lệnh MOVLW
các bác cho em hỏi lệnh MOVF và lệnh MOVLW khác nhau ở chỗ nào vậy ạ????
trong đoạn code làm sáng led portb, nếu em viết: MOVLW b'11111111' MOVWF PORTB thì led ở portb sáng, tuy nhiên nếu em viết: MOVF b'11111111' MOVWF PORTB thì led ở portb lại chỉ sáng có một bóng mong các bác chỉ giúp em về sự khác biệt này |
30-08-2009, 09:37 PM | #2 | |
Trưởng lão PIC bang
|
Trích:
Ở đoạn code dùng MOVF của bạn, bạn không mô tả tham số thứ hai của lệnh MOVF. Do đó, nếu trình dịch mặc định nó là '0' thì giá trị của thanh ghi 0xFF sẽ được copy vào W, còn nếu trình dịch mặc định nó là '1' thì giá trị của thanh ghi 0xFF sẽ được copy vào chính nó, còn W không bị ảnh hưởng. Cả hai trường hợp đều không đảm bảo là W sẽ được đặt giá trị 0xFF như trong đoạn code đầu tiên của bạn. Do đó, kết quả chạy khác nhau là dễ hiểu. 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 |
|
30-08-2009, 11:46 PM | #3 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
tiện đường cho em hỏi lệnh SET và lệnh EQU khác nhau chỗ nào với ạ???
|
31-08-2009, 01:06 PM | #4 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
hình như đã bắt đầu hiểu lơ tơ mơ, thế cho hỏi cái đoạn code này
;--------------------------------------------------------------------------------------------------------------- ;Khai báo hằng ;--------------------------------------------------------------------------------------------------------------- SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 SW4 EQU 3 LED1 EQU 4 LED2 EQU 5 LED3 EQU 6 LED4 EQU 7 ;---------------------------------------------------------------------------------------------------------------- ;khai báo biến ;---------------------------------------------------------------------------------------------------------------- count EQU 0x20 count1 EQU 0x21 counta EQU 0x22 countb EQU 0x23 tại sao lại chỉ dùng một lệnh EQU, nếu đúng thì phần khai báo biến phải là SET chứ |
31-08-2009, 01:09 PM | #5 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
không lẽ nếu viết
SW1 EQU 0 thì SW1 là hằng nhưng nếu viết SW1 EQU 0x20 thì SW1 là biến à????? |
31-08-2009, 07:31 PM | #6 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
nghe đau đầu nhỉ, nội dung thí dụ như là SW có giá trị 0x20 còn địa chỉ thì SW có địa chỉ 0x20, sao mà na ná nhau quá trời. tuy nhieen cậu bảo "Khi đã dùng EQU thì SW1 không thể thay đổi được giá trị nữa, nó luôn là 0x20" vậy thì làm sao có thể đưa giá trị vào mấy biến count, count1, counta, countb
|
31-08-2009, 07:59 PM | #7 | |
Trưởng lão PIC bang
|
Tôi thấy hai bạn trao đổi từ luồng "kỹ thuật bảng pic" sang luồng này mà cảm thấy buồn vì các bạn đọc đi đọc lại mà vẫn không hiểu tài liệu viết cái gì. Tôi lược dịch hai phần liên quan trong tài liệu "MPASM Assembler; MPLINK Object Linker; MPLIB Object Librarian User's Guide" (DS33014J) để hai bạn đọc thêm:
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 |
|
31-08-2009, 08:36 PM | #8 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
hơ hơ, xin lỗi anh vì cứ chuyển luồng tùm lum, vấn đề kỹ thuật bảng cho pic thì em đã nắm được, tuy nhiên vấn đề về lệnh SET và EQU thì quả thực em rất rối, chắc tại em ngu lâu dốt bền khó đào tạo nên tự học khá khó khăn. anh có thể cho em một vài ví dụ để em nắm rõ hơn được không ạ???? cảm ơn anh nhiều lắm
|
31-08-2009, 08:58 PM | #9 | |
Trưởng lão PIC bang
|
Trích:
Tôi không hề có ý chê bai bạn hay bất kỳ ai. Tôi buồn vì một thực tế là sinh viên VN vẫn còn một rào cản ngoại ngữ khá lớn, dẫn đến nhiều khó khăn cho việc học tập. Nếu tôi không muốn giúp các bạn hiểu cặn kẽ thì tôi tốn thời gian và công sức giải thích để làm gì. Riêng bạn, tôi tôn trọng ý tốt của bạn, nhưng mong bạn nếu có giúp các thành viên khác thì hãy dành chút thời gian tìm hiểu kỹ những gì mình sẽ phát biểu, để việc giúp đỡ có hiệu quả hơ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 |
|
31-08-2009, 09:10 PM | #10 | |
Trưởng lão PIC bang
|
Trích:
SW1 EQU 0 dùng để gán giá trị 0 cho nhãn SW1, chẳng hạn như bạn đã nối công tắc có tên SW1 vào vị trí bit 0 của một port nào đó (PORTA chẳng hạn). Sau đó bạn sẽ có thể dùng SW1 như vị trí của bit trong các lệnh thao tác bit, để cho gợi nhớ hơn. Còn count EQU 0x20 dùng để gán giá trị 0x20 cho nhãn count, nhưng bạn có thể dùng count trong các lệnh thao tác byte, ở đó bạn dùng count như một địa chỉ của byte được thao tác. Chính xác thì cả SW1 lẫn count đều là các hằng số đối với trình hợp dịch, nhưng chúng được dùng hơi khác nhau nên người ta có thể chú thích chúng khác nhau. Nếu SW1 chỉ đến một vị trí bit thì vẫn có thể coi nó đại diện cho một biến 1-bit. Chẳng hạn như với LED1 EQU 4, bạn hoàn toàn có thể bật/tắt biến 1-bit LED1 trong chương trình của bạn. Khi nói LED1 hay count là biến, chúng ta đang nói đến các vị trí nhớ trong RAM của PIC, cho phép đọc/ghi một cách ngẫu nhiê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 |
|
03-09-2009, 02:15 PM | #11 |
Đệ tử 3 túi
Tham gia ngày: Jan 2009
Bài gửi: 59
: |
cuối cùng cũng hiểu được chút chút
|
10-06-2010, 11:50 PM | #12 |
Đệ tử 2 túi
Tham gia ngày: Mar 2009
Bài gửi: 36
: |
Luồng này đã lâu rồi nhưng mình xin góp chút ý kiến để các bạn sau này có tìm thì hy vọng sẽ có thêm thông tin hữu ích!
Sự khác nhau giữa 2 lệnh thì ko bàn cải nữa vì trên đó anh namqn đã dịch từ tài liệu tiếng anh sang tiếng việt rồi. Lý thuyết mình đọc thì cũng y như thế. Thực ra ở đây nó phụ thuộc vào cái lệnh mà bạn dùng: Giả sử bạn đặt thế này count EQU 0x20 hoặc count SET 0x20 nếu như bạn dùng lệnh MOVLW count thì ở đây nó sẽ làm công việc là đưa giá trị 0x20 vào trong thanh ghi WREG Còn nếu bạn dùng lệnh MOVF count,W thì nó sẽ nạp giá trị có được trong thanh ghi ở ô có địa chỉ là 0x20 trong RAM vào thanh ghi W (ở đây ô đó được đặt tên là count). theo ý hiểu của mình thì nó được dùng như hằng số hay được dùng như tên gợi nhớ cho 1 địa chỉ thanh ghi thì phụ thuộc vào câu lệnh và cách sử dụng của bạn. Thân. |
|
|