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 02-11-2005, 10:58 PM   #1
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Library cho MPASM, các module cơ bản

HIện nay để lập tình cho PIC đa phần mọi người chọn C ( HTPIC, CCS .... ) làm công cụ cho mình. Còn MPASM thì nói chung đuợc ít ngưòi dùng đến: vì lý do sau

+ Lập tình dai hơn ( kiến trúc Risc có dung lượng code hơn khoảng 30% so vơi CISC so với một bài toàn ) ( nguyên nhân tổng quan )
+ Lúc nào cũng phải kè kè cái ông thanh ghi W bên cạnh trong mọi phép toán hay chuyển dổi
+ Phải liên tục chọn bank thanh ghi khi ta muốn truy cập
+ KHó khăn trong việc thực hiện phép toán, Điển hình như phép so sánh. phép nhân chia......
...............

Lập trình cho MPASM là rất dài và phải luôn đỏi hỏi mỗi chúng ta phải thật kiên nhẫn. Và theo tôi để lập trình tốt MPASM chúng ta cũng phải gây dựng các thư viện sẵn của riêng mình. Thư viện đó bao gồm những gì : đó là bao gồm những module mà chúng ta tự gây dựng nên, hay là các Code có sẵn , và phải lưu ý các module phải dùng đuợc cho nhiều bài toán khác nhau

Tôi có một VD: module về LCD tôi chỉ mất có một lần đê thiết lập ( cũng mất khá nhiều thới gian vì đó là cái tôi làm đầu tiên cho PIC nên hồi đó chưa có kinh nghiệm ) sau khi làm xong những lần sau chỉ việc copy và paste lên để sử dụng

Tất nhiên là cái VD LCD là rất tổng quát, nhưng cũng có rất nhiều chuơng trình con ta cũng phải nên làm vậy . Hãy luôn tối ưu nó để cho lần sử dụng sau

Việc tự thiết lập các module cũng có nhiều cái lợi : ta sẽ hiểu rõ hơn về cái ta dang làm, Nhưng có một điểm dở là nhiều khi module đó thường dài , và không tối ưu, và đôi khi mắc những lỗi mà chúng ta ko biết, và sẽ mất nhiều thời gian . Và hướng thứ hai theo tôi dùng các code chuẩn trên mạng như ở trên microchip, piclist...... hoặc từ nhà sản xuất họ luôn đưa ra các Tutorial ( những cái này ko cẩn bản quyền thì phải ) : hãy chỉnh sửa và chuyển nó thành của mình, hãy biến nó thành công cụ cho mình

Do đó tôi mở topic này là để tập hợp tất cả những code, module về MPASM, KHông nhất thiết phải là của mình mà có thể tư bất cứ nguồn nào cũng đuợc. Mỗi ngưòi góp một tý ắt chúng ta sẽ có một thư viện đồ sộ, ==>> đỡ phải nhọc công đi đâu xa,

Mọi người lưu ý khi đưa lên các bạn đinh kèm theo cả file nhé ( đẻ copy cho dễ mà ) và nõi rõ nó có ý nghĩa gì nhé
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-11-2005, 11:09 PM   #2
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Module 1. ve I2C trong 16F877

Module thứ nhất tôi muốn gửi cho các bạn là về I2C trong 16F87x

Các bạn biết rồi đó I2C là một chuẩn giao tiếp rât phổ biến hiện nay, và trong 16F87x có tich hợp I2C cả chế độ Master và Slave. Dưới đây là code về sử dụng Master I2C Mode. Đây là một VD rất căn bản mà tôi lấy từ tập " I2C master mode"

Nếu bạn nào chưa dùng I2C Master mode trong 16F87x bao giờ tôi nghĩ rằng chưong trình này sẽ rất có ích

( Hix mất một buổi tôi để đánh máy đấy )

PHP Code:




I2C ket noi voi 24C01C EEPROM
Ghi tai dia chi 0x12du lieu 0x34 va doc lai
MSSP module duoc su che de I2C master mode

#define  LC01CTRLIN  H'A0'        ; Gia tri cua I2C cho Control byte khi dua du lieu vao EEPROM
#define  LC01CTRLOUT H'A1'        ;  ................................... doc du lieu tu  EEPROM
#define  LC01ADDR    H'12'        ; Dia chi can luu du lieu
#define  LC01DATA    H'34'        ; Du lieu
#define  BAUD        D'100'       ; Gia tri BAUD RATE
#define  FOSC        D'4000'      ; Gia tri thach anh 4Mhz

#include  <p16F877.inc>
       
      
__CONFIG _CP_OFF _DEBUG_OFF _WRT_ENABLE_OFF _CPD_OFF _LVP_OFF _BODEN_OFF _PWRTE_ON _WDT_OFF _XT_OSC

      ORG  0x00
;  *** Thiet lap I/***
        
CLRF    PORTB             PORTB pins duoc dua ve 0 
        BANKSEL TRISB             
BANH1
        MOVLW   
B'00011000'       RC3,RC4 la input 
        MOVWF   TRISC             
Nhung chan con lai la outputs
        CLRF    TRISB             
cho  moi chan cua portB la outputs

; *** THIET LAP CAC THANH GI CHO I2C ***
chon MSSP che do MASTER MODE
        BANKSEL SSPCON
        MOVLW   
B'00101000'       Thiet lap MSSP cho chan PORTC o che do I2C
                                  
SSPENSSPM BITS
        MOVLW   SSPCON
Thiet lap muc cap do cho I2C I2C standard level )
        
BANKSEL SSPSTAT         
        MOVLW   
B'10000000'
        
MOVWF   SSPSTAT   
Thiet lap toc do duong truyen
        BANKSEL SSPADD
        MOVLW   
(FOSC/(4*BAUD)) - 1Tinh toan gia tri cho thiet lap toc do
        
MOVWF   SSPADD

; *** Begin I2C Data Transfer Sequences ***
I2CWrite
Gui bit START va doi cho cho den khi gui xong
        BANKSEL SSPCON2     
        BSF     SSPCON2
,SEN       Gui bit Start
        CALL    WaitMSSP          
Doi cho den khi bit START duoc gui xong

Nhan va kiem tra CONTROL BYTEdoi cho den khi hoan thanh
        MOVLW   LC01CTRLIN        
Load CONTROL BYTE (input mode)
        
CALL    Send_I2C_Byte     Gui byte di 
        CALL    WaitMSSP          
Doi cho den khi ket thuc cong viec
 
        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT   Kime tra bit ACK tu I2C
        
goto    I2CFail          

Gui va kiem tra bit Stopdoi cho den khi hoan thanh xong
        MOVLW   LC01ADDR          
load addressByte
        CALL    Send_I2C_Byte     
Gui dia chi di
        CALL    WaitMSSP

        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT   Kiem tra ACK
        
GOTO    I2CFail           

Gui va kiem tra DATA byte doi cho den khi ket thuc
        MOVLW   LC01DATA          
Load Data Byte
        CALL    Send_I2C_Byte     
Gui byte di
        CALL    WaitMSSP
       
        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT
        
GOTO    I2CFail           Kiem tra trang thai cua co ACK
Gui va kiem tra bit STOPdoi cho den khi ket thuc
        BANKSEL SSPCON2        
        BSF     SSPCON2
,PEN       gui bit Stop
        CALL    WaitMSSP
Ket thuc qua trinh viet du lieu len EEPROM


I2CRead
Gui bit RESTART va doi den khi gui xong
        BANKSEL SSPCON2
        BSF     SSPCON2
,RSEN      Gui bit Restart 
        CALL    WaitMSSP      

Gui va kiem tra CONTROL BYTEdoi cho den khi hoan thanh
        MOVLW   LC01CTRLIN        
Load CONTROL BYTE  cho viec xuat du lieu )
        
CALL    Send_I2C_Byte     Bat dau gui 
        CALL    WaitMSSP          


Kiem tra trang thai san sang cua thiet bi
        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT   Kiem tra ACK Status bit 
        
GOTO    I2CRead           Neu chua san sang thi nhay

Gui va check Diachi Bytedoi cho den khi hoan thanh
        MOVLW   LC01ADDR          
Load ADDRESS Byte vao W
        CALL    WaitMSSP          
Gui du lieu
        CALL    WaitMSSP          
Doi cho den khi gui xong 
 
        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT   Kiem tra ACK Status bit 
        
GOTO    I2CFail           FAILEDNHAY NEU NHU THANH CONG
 
Gui REPEATED START bit va doi cho den khi thuc hien xong
        BSF     SSPCON2
,RSEN      phat ra REPEATE START bit
        CALL    WaitMSSP          
;
Gui va kiem tra CONTROL BYTE (outva doi cho den khi hoan  thanh
        MOVLW   LC01CTRLOUT       
Load CONTROL BYTE 
        CALL    Send_I2C_Byte     
Gui
        CALL    WaitMSSP          
Doi den khi ket thuc

        BANKSEL SSPCON2
        BTFSC   SSPCON2
,ACKSTAT   Kiem tra ACK BIT
        
GOTO    I2CFail           FAILEDnhay neu nhu thanh cong

Chuyen trang thai MSSP sang I2C Receive mode
        BSF     SSPCON2
,RCEN      cho phep RECEIVE Mode (I2C )
       
Nhan da ta tu Slave va doi cho den khi ket thuc
Luu y Receive MODE se tu dong Disable boi MSSP module
        CALL    WaitMSSP          
Doi cho den khi I2C thuc hien xong

Gui bit NACK cho Acknowledge Sequence
        BANKSEL SSPCON2
        BSF     SSPCON2
,ACKDT     Chon gui NACK
        BSF     SSPCON2
,ACKEN     Gui di

Gui va va kiem tra STOP bitva doi cho den khi ket thuc   
        BSF     SSPCON2
,PEN
        CALL    WaitMSSP

I2C Write va Read ket thucgia tri se duoc dua ra LEDs
        BANKSEL SSPBUF            

        
MOVF    SSPBUF,W          Luu gia tri doc duoc tu EEPROM vao thanh ghi W
        MOVWF   PORTB

Ket thuc qua trinh doc ghi
        
GOTO    $                 ; Vong lap vo han
         
;*** CAC chuong trinh con va cac loi cua chuong trinh ***
I2CFail
        BANKSEL SSPCON2
        BSF     SSPCON2
,PEN       Send STOP condition
        CALL    WaitMSSP          
Doi
       
        BANKSEL PORTB
        MOVLW   0xFF
        MOVWF   PORTB             
Loi dua RA PORTB 
        
GOTO    $ 

Day la chuong tirnh con cho viec gui BYTE len SlaveINputW
Send_I2C_Byte
        BANKSEL SSPBUF            
Chon bank0
        movf    SSPBUF            

        
RETLW   0


WaitMSSP
        BANKSEL PIR1
        BTFSS   PIR1
,SSPIF        Kiem tra trang thai co
        
GOTO    $-1               Chua hoan thanh
        BCF     PIR1
,SSPIF        Da hoan thanh cong viecva bat dau thu don chien truong
        RETLW   0

        END 
File Kèm Theo
File Type: pdf i2c_tutorial.pdf (658.2 KB, 1027 lần tải)
File Type: txt module1_i2c.txt (6.1 KB, 209 lần tải)

thay đổi nội dung bởi: mafd_47a, 05-11-2005 lúc 11:55 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2005, 12:20 AM   #3
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Em không cần làm cái này, trong tài liệu hướng dẫn của Nigel có đầy đủ và khá chi tiết.

Em nên làm là phân tích đoạn code, có nghĩa là em trích từng đoạn ra, viết, và giải thích từng đoạn một, đừng đưa vào trong chương trình như thế này.

Em nên vẽ thêm sơ đồ mạch, để người đọc dễ hình dung.

Nếu là một chương trình, thì chú thích quá nhiều, người ta sẽ loạn lên, nếu là một chỉ dẫn phân tích, thì chưa đủ.

Vì vậy, em chỉ cần rút kinh nghiệm trình bày, và sửa chữa đôi chút, bài viết của em sẽ rất tốt.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-12-2005, 08:37 AM   #4
chuabietgi
Đệ tử 1 túi
 
chuabietgi's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 17
:
Xin hỏi bác tài liệu hướng dẫn của Nigel có thể load ở đâu?
Cảm ơn!
chuabietgi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-12-2005, 10:16 AM   #5
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Trích:
Nguyên văn bởi chuabietgi
Xin hỏi bác tài liệu hướng dẫn của Nigel có thể load ở đâu?
Cảm ơn!
Chac la day

http://www.winpicprog.co.uk/pic_tutorial.htm
http://www.picvietnam.com/download/Nigel%20tutorial.pdf
http://picvietnam.sytes.net/MHz/Pic%20Tutorial.pdf
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-01-2006, 06:38 PM   #6
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Thanks mafd_47a!
Tôi cũng đang cần những tài liệu này!
Tài liệu PIC6F84 và PIC8x:
http://www.freewebtown.com/bantoi/PI...inh%20nang.doc
http://www.freewebtown.com/bantoi/Pic84.doc
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-06-2006, 10:27 AM   #7
namdinhno1
Nhập môn đệ tử
 
namdinhno1's Avatar
 
Tham gia ngày: Jun 2006
Bài gửi: 10
:
Talking yêu cầu nhỏ

anh Mạnh ơi sao anh không làm một tut về LCD
Em đang tự học nên thấy khó quá
namdinhno1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-06-2006, 02:41 PM   #8
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Trích:
Nguyên văn bởi namdinhno1
anh Mạnh ơi sao anh không làm một tut về LCD
Em đang tự học nên thấy khó quá
Lap trinh LCD khong kho nhu ban nghi dau. Duoi day la mot so link ban co the doc va lam theo no.

http://www.winpicprog.co.uk/pic_tutorial3.htm
http://dientuvietnam.net/forums/showthread.php?t=281
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2007, 08:54 PM   #9
friends
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 19
:
ban madf_47a ơi ,bạn có chương trình hiển thị lcd giao tiếp 8 đường dùng pic mà ráp mạch thực tế đã chạy rồi không , nếu có cho mình xin được không ,mình dang rất cần gấp.
friends vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-08-2007, 04:58 PM   #10
tiendungkct
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 69
:
trong mpasm làm sao để tận dụng lại các code mình đã viết rùi hở các anh vd như hiện thị lcd hay 7seg chẳng hạn chừ mối lằn làm lại hơi mất công
nếu có chỉ cho em cách làm luôn nha ,thaks
tiendungkct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-08-2007, 06:42 PM   #11
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Em hoàn toàn có thể viết thành từng file riêng, sau đó include nó vào các đoạn em cần. Hoặc là em có thể sửa chữa một tí, viết thành một cái MACRO. Khi em dùng lại em chỉ cần gắn các tham số (thanh ghi phù hợp) vào các đoạn MACRO đó. Đây là cách mà CCS C phát triển trình dịch của mình.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-09-2007, 03:10 PM   #12
tiendungkct
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 69
:
anh co thể hướng dẫn cho em cách viết MACRo được không em cũng mới tìm hiểu về nó nên chưa biết ,em cảm ơn anh
tiendungkct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-09-2009, 03:51 PM   #13
khangspkt
Đệ tử 1 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 14
:
Trích:
Nguyên văn bởi tiendungkct View Post
anh co thể hướng dẫn cho em cách viết MACRo được không em cũng mới tìm hiểu về nó nên chưa biết ,em cảm ơn anh
Sử dụng macro sẽ giúp bạn sử dụng lại các chương trình viết sẵn, gọi lại và sử dụng nhanh chóng.

VD đơn giản nhất là sử dụng macro delayxs. Bạn theo các bước sau nhé.
B1: Bạn tạo 1 file mới tên delayxs.asm. Lưu lại ở c:\
B2: bạn soạn nội dung file delayxs.asm bằng nodepad cũng được, như sau,
Trích:
delayxs macro ; day la chuong trinh delay 1s
MOVLW D’4’ ; Count 4 of 250 millisecond delays
MOVWF TIME2
LOOP_x_SEC:
MOVLW D’250’ ; Count 250 of one millisecond delays
MOVWF TIME1
LOOP_250_MS:
MOVLW D’250’ ; Count of 250 Loops of four cycles
MOVWF TIME
LOOP_ONE_MS:
NOP
DECFSZ TIME,F
GOTO LOOP_ONE_MS

DECFSZ TIME1,F
GOTO LOOP_250_MS

DECFSZ TIME2,F
GOTO LOOP_x_SEC
endm
b3: bạn mở và tạo 1 project trong mpasm
viet chương trình bật tăt portb delayxs
Trích:
#include "c:\delayxs.asm"
cblock
TIME
TIME1
TIME2
org
<khởi tao trisb=0>
loop
delayxs; goi macro
clrf PORTB
delayxs; goi macro
movlw h'ff'
movwf PORTB
goto loop
end
Ban thấy đấy khi cần sử dụng bạn chỉ cần đánh tên marcro thôi, không cần lệnh call.
Chương trình chính sẽ đơn giản hơn nhiều, nhất là với ứng dụng sử dụng nhiều chức năng.
Chương trình macro bạn có thể viết các chương trình con, debug cho hoạt động chính xác. Đóng gói lại và sử dụng khi cần.

Hiện thời, mình viét chương trình đọc bàn phím ps2, hiển thị lcd và gửi serial.
Khi cần mình cũng viết các marco doc_banphim, khoi_tao_lcd, khoi_tao_serialcom, LCD_out(xuat du lieu ra lcd). Chương trình chính rất gọn và dễ kiểm tra khi có sai sót.
Tùy ứng dụng , bạn có thể phát triển theo ý bạn, nhất là viết bằng asm thì hơi dài và khó kiểm soát. sử dụng macro làm gọn chương trình cũng là 1 ưu điểm macro.
Thân

thay đổi nội dung bởi: khangspkt, 06-09-2009 lúc 03:59 PM.
khangspkt 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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
dsPIC Tutorial 5-Module ADC và MCPWM namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 83 12-09-2013 10:33 PM
I2C Slave Library? tuanva Cơ bản về vi điều khiển và PIC 6 06-03-2009 09:02 AM
RF module khanh_pic Tìm mua sản phẩm 22 20-08-2007 11:25 AM
Module Compararter Voltage Refencen leduy173 Cơ bản về vi điều khiển và PIC 0 30-09-2006 02:05 AM
Free Orcad library for PICs and dsPIC falleaf English forum on PICs 0 05-07-2006 01:47 AM


Múi giờ GMT. Hiện tại là 12:29 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