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 27-09-2005, 07:45 PM   #1
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Mpasm cho nguoi moi bat dau

Em moi hoc VDK pic, va dang dung mplab de lap trinh, Truoc co hoc qua 8051, nay chuyen sang Pic thay bo ngo qua, va co nhieu cai khac so voi 8051. Nay em lap topic nay rat mong moi nguoi hay chia se nhung kinh nghiem va thuat toan cua minh cho nhung nguoi moi bat dau, nhung cai ma chi co thoi gian moi tich luy duoc

Do co rat nhieu nguoi da hoc 8051 roi sau moi chuyen sang Pic, em la mot VD cho nen em muon co su so sanh ( tuong duong) giua ASM cua 8051, va Pic, nhu the se giup duoc nhieu cho nhung nguoi chuyen tu 8051 sang Pic

( Topic nay chi noi den thuat toan dung trong Mpasm sao cho don gian ngan gon chu ko di sau vao giai mot bai toan cu the)

Rat mong duoc su giup do cua moi nguoi

thay đổi nội dung bởi: mafd_47a, 27-09-2005 lúc 07:49 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-09-2005, 07:53 PM   #2
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Van de 1 em muon hoi

Trong 8051 co cau lenh: CJNE A,#number, diachi

Cau lenh nay dung de so sanh mot thanh ghi voi mot so va rat hay duoc dung trong ASM(8051) vay cac bac hay cho biet su tuong duong trong MPASM

Huong cua em dang dinh giai quyet : tru W cho so can so sanh, xet bit Z neu = 1 thi nhay

Nhung cach nay cung kha dai, va cung ko tien loi lam

Rat mong su chi giao cua cac bac di truoc

thay đổi nội dung bởi: mafd_47a, 27-09-2005 lúc 10:52 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-09-2005, 10:02 PM   #3
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Vấn đề thứ hai em muốn hỏi là kỹ thuật bảng:

để dung KTB thì có mẫu chung

PHP Code:
mydata   addwf  pcl,1
                    retlw      ‘h’
                    retlw      ‘e’
                    retlw      ‘l’
                    retlw      ‘l’
                    retlw      ‘o’
                    retlw      0x00 
Ở vd trên em muốn hiện thì dữ liệu “hello”, nhưng với cách trên thì dài quá lại ko thuận tiện nữa khi thay đổi phông hiển thị thì có mà sửa mệt. Vậy ko biết có cách nào gọn nhẹ hơn ko VD : DB “hello” trong 8051

mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-10-2005, 02:29 AM   #4
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Khong co bac nao giup em ah

Ko co ai tra loi thi minh tu tra loi vay

Trong Mpasm ko ho tro hien thi du lieu mot cach lien tuc nhu lenh DB cua 8051, tum lai la van phai viet mot cach tuan tu tung ky hieu ra mot

Met wa:
http://www.diendandientu.com/diendan...ead=1767#11086
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-10-2005, 08:49 PM   #5
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
cac phep nhan chia trong mpasm

Trong Pic ( 16x ) không có hỗ trợ phép nhân chia, do đó ta phải tự xây dựng bằng phần mềm.

Các chương trình này tự thiết lập cũng được nhưng có lẽ sẽ mất nhiều thời gian mà những cái mình làm đôi khi không hoản hảo lắm

Anh Falleaf + các cao thu ve MPASM có thể copy và Paste cho em module của chức năng này ko. Phép chia 8bit, 16 bit, phép nhân 8 bit

Em xin cám ơn nhìu
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2005, 10:51 AM   #6
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
chương trình thực hiện phép nhân PIC 16

Chương trình nhân 16 bit với 16 bit, kết quả lưu vào thanh ghi 16 bit

Code:
        org     0x020

;Cac thanh ghi của biến nhân và hệ số nhân

mulcH   Res      d'1'       ; MSB of multiplicand. 
mulcL   Res      d'1'       ; LSB of multiplicand. 
mulpH   Res      d'1'       ; MSB of multiplier.
mulpL   Res      d'1'       ; LSB of multiplier.

;Các thanh ghi lưu kết quả nhân

prodH   Res      d'1'       ; MSB of product. 
prodL   Res      d'1'       ; LSB of product. 

index   Res      d'1'       ; temporary counter

;Chuong trinh chinh

start       MOVLW d'0'                 ; Problem: multiply
             MOVWF mulcH
             MOVLW 0x0B                 ; 0Bh by 1016h
             MOVWF mulcL
             MOVLW 0x10                 
             MOVWF mulpH
             MOVLW 0x16                 
             MOVWF mulpL
             CALL multiply              
             GOTO $                     ; Endless loop

Multiply
             CLRF prodH                 ; Clear product to make
             CLRF prodL                 ; way for new calculation.
             MOVLW d'16'                ; Number of bits to calc. 
             MOVWF index

Multiply_loop
             BCF status,c               
             RLF prodL                  ; Shift product left.
             RLF prodH                  
             BCF status,c               
             RLF mulcL                  ; Shift multiplicand left.
             RLF mulcH                  
             BTFSS status,c             ; If carry, add multiplier
             GOTO Multiply_skip
             MOVF mulpL,w               ; to the product. Else skip.
             ADDWF prodL
             BTFSC status,c             ; 16-bit addition: prod+mulp
             INCF prodH                 
             MOVF mulpH,w               
             ADDWF prodH

Multiply_skip
             DECFSZ index               
             GOTO Multiply_loop
             RETLW 0h                   
             
             
             end
Nếu bạn nào làm VHDL hoặc PLC, muốn thực hiện phép cộng thì dùng phép toán nào? Vậy nguyên tắc của phép nhân chính là cộng rồi cộng mãi, nếu như hệ số nhân tại điểm đó là 1.

Chỉ vậy thôi
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-11-2005, 02:22 AM   #7
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Trích:

Trong 8051 co cau lenh: CJNE A,#number, diachi

Cau lenh nay dung de so sanh mot thanh ghi voi mot so va rat hay duoc dung trong ASM(8051) vay cac bac hay cho biet su tuong duong trong MPASM

Huong cua em dang dinh giai quyet : tru W cho so can so sanh, xet bit Z neu = 1 thi nhay

Nhung cach nay cung kha dai, va cung ko tien loi lam
Khi lập trình cho VĐK, ta rất hay gặp những câu lệnh so sánh, Và trong PIC ko có hỗ trợ so sách giữa thanh ghi với một số, thanh ghi với thanh ghi. Để làm được điều này ta sẽ phải gây dựng bằng phần mêm.

Để so sánh một thanh ghi với một số, nếu ko bằng thì nhảy tới vị trí con trỏ địa chỉ nào đó ta có thể làm như sau:

(VD cho việc so sánh thanh ghi ACC ( địa chỉ 0x20 trong ram ) với số 0x05 , nếu ko bằng thì nhẩy tới NEXT_INS )

PHP Code:
ACC  EQU  0x20

MAIN
.........
        
MOVLW   0x05
        SUBWF   ACC
,W
        BTFSS   STATUS
,Z
        
GOTO    NEXT_INS
.....................
NEXT_INS 


Và mỗi lần so sánh ta lại phải tương nguyên cái bộ khung ấy vào. Sẽ rất mệt.

Trong Mplab có hỗ trợ chế độ Macro, tức là có sự thay thế tương ứng nhờ trình dịch. Như vậy ta chỉ cần khai báo như sau

PHP Code:
CJNEMACRO THANHGHI,SO,CONTRO
        MOVLW   SO
        SUBWF   THANHGHI
,W
        BTFSS   STATUS
,Z
        
GOTO    CONTRO
        ENDM 

Voi VD khi dùng ta chỉ việc gọi ra:

PHP Code:
CJNE  ACC,0x05NEXT_INS
......
NEXT_INS 
Với việc thay thế này các bạn sẽ thấy nhàn hơn rất nhiều trong việc lập trình. Băng một vài phép biến đổi ta có thể thêm vài chương trình nữa . Chắc chắn sau này sẽ được sử dụng rất linh hoạt

PHP Code:
CJNEMACRO 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 
CJNE là so sánh một số với thanh ghi, nếu ko băng thì nhảy tới vị trí con trỏ
NCJNE ngược lại với câu lệnh trên , nếu bằng thì nhảy tới vị trí con trỏ
FJNE là so sánh thanh ghi với thanh ghi , nếu ko bằng nhau thì nhảy tới vị trí con trỏ
FJE ngược lại nếu bằng thỉ nhảy tới vị trí con trỏ

Đây là công cụ tôi rất hay dùng trong các chương trình ứng dụng gần đây, với nó tôi thấy thoải mái và linh hoạt lên rất nhiều. Mong giúp ích được gì đó cho các bạn

thay đổi nội dung bởi: mafd_47a, 26-11-2005 lúc 11:40 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-11-2005, 12:00 PM   #8
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
Bài này em viết rất tốt đó, nhưng nên bổ sung thêm một phần nữa, đó là hướng dẫn người dùng cách đặt các macro này ở đâu, tổ chức file như thế nào để thuận tiện nhất khi sử dụng.

Phần này cũng là một phần trong việc xây dựng và chuẩn hoá chương trình bằng MPASM.

Mời các bạn có kinh nghiệm lập trình thêm vào các macro mà các bạn thường hay sử dụng.

À, M, em nên viết thêm một phần nữa về các directive luôn, nếu cần tài liệu tham khảo thì báo anh. Phần này nên viết thêm chi tiết một chút sẽ rất hay.

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 05-12-2005, 12:21 PM   #9
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Hỏi chút.

Cái macro đính kèm đó mình phải đính kèm như thế nào? Tức là mình sẽ viết mấy cái mcro đó trưc tiếp lên chương trình hay viết ở mợt file riêng rồi "include" nó vào chương trình chính. Tui thử dùng macro mấy lần rồi mà chưa được.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-12-2005, 01:13 PM   #10
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 có thể viết trực tiếp nó vào trong file em đang soạn thảo, hoặc là đưa vào một file khác rồi #include cũng được.

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 05-12-2005, 08:37 PM   #11
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Có một số tại liệu về giải thuật cho các phép toán phát triển trên tập lệnh PIC, madt 47a coi đọc có được không.
File Kèm Theo
File Type: pdf PIC16C5x_PIC16Cxxx Math Utility Routines1.pdf (97.9 KB, 427 lần tải)
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-12-2005, 08:50 PM   #12
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Thêm một số file về các giải thuật cho các phép toán dùng cho vi điều khiển PIC.

Em còn một thắc mắc này nữa. Hình như đối với việc dùng macro, thì tác dùng của nó là chép đoạn chương trình trong macro vào vị trí mà macro được gọi, như vậy thì sẽ không có lợi cho bộ nhớ của vi điều khiển, có nên cân nhắc đến vấn đền này khi sử dụng macro không?
File Kèm Theo
File Type: zip Floating Points Routines1..zip (343.0 KB, 258 lần tải)
File Type: zip Fixed Point Routines1..zip (63.4 KB, 211 lần tải)
File Type: zip IEEE 754 Compliant Ploating Point Routines.zip (220.4 KB, 240 lần tải)
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-02-2007, 09:08 AM   #13
navy
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 34
:
Thanks !

A falleaf hoac cac cao thu ve PIC thanh lap dien dan nay thuc su la mot dien dan co ich cho nhung nguoi yeu thich lap trinh VDK. Cam on cac ban rat nhieu, da tu lau minh am tham hoc mot minh theo cac ban va cung lam duoc mot so viec nho khi su dung PIC. Minh la nguoi moi hoc PIC va dang dung PIC de lap trinh cho robot tu dong . Nhung trong qua trinh vua lam vua hoc den gio moi tich luy duoc chut "von lieng " de co the tham gia cung dien dan voi muc dich hoc hoi anh em.
Minh dang lap trinh voi 16F877A, ban dau robot cua minh chay bam duong thi rat tot va on dinh, tuy nhien nhung doan dem vach cua minh no van chua nhan duoc, co luc thi chi 1 vach dau no da cua roi. Mong anh em tren dien dan kiem tra giup.
Phan cung cua minh su dung 6 led thu noi toi cong portA, (nam tren vach trang ='1')
RB0 - noi dong co phai
RB1 - dao chieu dong co phai
RB2 - dong co trai
RB3 - dao chieu dong co trai
Bam duong su dung hai bit RA2,RA3 nam tren vach trang.
Dem vach su dung hai bit RA0 va RA5
Do dong co cua minh toc do thap nen ko can dieu xung van bam duong tot
So vach can dem =4;
Day la chuong trinh cua minh:
Code:
///////////////////////////////////////////////////////////////////////////////////////
 TITLE "test bam duong cua phai01.asm"
   processor 16f877a          ;identify processor 16F877A
   include <p16f877a.inc>     ;header file
   ;thuc hien: navy
   ;configuration  Intialize 
   
   __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF&_DEBUG_OFF
   
  
	count1			equ	0x20
	count2			equ	0x21
	count3			equ	0x22
	vach_ngang_1		equ	0x23

	;here start program

             org 0x0000
	goto start

start
	movlw	d'4'			;vach_ngang_1 = 4
	movwf	vach_ngang_1
	bcf  	STATUS,RP1
    	bsf  	STATUS,RP0 		; select Bank1
    	clrf 	TRISB     	 	; initialize portB = output
    	bcf  	STATUS,RP0		; select Bank0
	movlw	b'00000101'
	movwf	PORTB 	  ; set PORTB<2,0> bits drive robot forward
	clrf	PORTA			; clear latch PORTA
	bsf	STATUS,RP0	 	; select Bank1
	movlw	b'00000110'
	movwf	ADCON1			; disable A/D converter
	movlw	b'00111111'		; initialize portA is input_pin
	movwf	TRISA
	call	di_thang_1
	call	cua_phai_1

di_thang_1
	bcf  	STATUS,RP1
	bcf  	STATUS,RP0	 	; select Bank0 
	btfss	PORTA,2
	call	lech_trai_1	
	btfss	PORTA,3
	call	lech_phai_1
	btfss	PORTA,0
	goto	thoat		 	;
	btfss	PORTA,5
	goto	thoat
	decfsz	vach_ngang_1,1	 ;default result in vach_ngang_1
	goto	thoat
	goto	di_thang_1
thoat
	return
	
lech_trai_1
	bcf  	STATUS,RP1		;select Bank0
	bcf  	STATUS,RP0
	bcf	PORTB,0
	call	delay_10ms
	btfss	PORTA,2		 	;Test bit sensor 02
	goto	lech_trai_1
	return
lech_phai_1
	bcf  	STATUS,RP1
	bcf  	STATUS,RP0		; select Bank0
	bcf	PORTB,2
	call	delay_10ms		
	btfss	PORTA,3		 	;Test bit sensor 03
	goto	lech_phai_1
	return	
cua_phai_1
	bcf  	STATUS,RP1
	bcf  	STATUS,RP0
	bsf	PORTB,1
	btfss	PORTA,0
	goto	cua_phai_1
	call	delay_phai1
	return
	
delay_10ms
	movlw	d'10'
	movwf	count1
d1
	movlw	d'199'
	movlw	count2
	movlw	d'1'
	movwf	count3
delay_0
	decfsz	count2,1
	goto	$+2
	decfsz	count3,1
goto	delay_0
	decfsz	count1,1
	goto	d1
	return
delay_phai1
	movlw	d'50'
	movwf	count1
d1
	movlw	d'199'
	movlw	count2
	movlw	d'1'
	movwf	count3
delay_0
	decfsz	count2,1
	goto	$+2
	decfsz	count3,1
	goto	delay_0
	decfsz	count1,1
	btfsc	PORTA,0
	goto	delay_phai1
	btfss	PORTA,2
	goto	delay_phai1
	goto	$+2
	goto	d1
	return
	
end
Bay gio minh muon su dung TIMER0 de dem vach nhung khoi tao va chuong trinh ngat phai viet nhu the nao ? Cac ban co the giup minh viet mot doan su dung Timer0 de dem vach duoc ko( Dem trong luc van chay thang)? Mong !

thay đổi nội dung bởi: namqn, 03-02-2007 lúc 09:05 PM.
navy 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
Library cho MPASM, các module cơ bản mafd_47a MPASM 12 06-09-2009 03:51 PM
cho tôi fan mềm MPASM hoặc đường line dowload lep Chương trình dịch & các công cụ mô phỏng 3 12-10-2008 03:00 AM
Trình dịch cho MPASM của Microchip. mafd_47a MPASM 8 20-03-2008 12:37 AM
Sườn chương trình cơ bản bằng MPASM falleaf MPASM 6 19-05-2006 03:28 PM
Xin moi nguoi giup do! anzuus Cảm biến 13 19-01-2006 02:49 PM


Múi giờ GMT. Hiện tại là 08:35 AM.


Đượ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