PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > RTOS và Thuật toán với PIC

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

RTOS và Thuật toán với PIC RTOS và Các thuật toán dùng cho PIC/dsPIC/PIC32
Mod: phamminhtuan

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 30-07-2007, 10:46 AM   #1
phamthanhkhuyen
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 25
:
Các module MPASM cần giúp đở

nhờ các bạn xem module sau : xem nó sai ở chổ nào cho ý kiến để nó trở thành module đúng :
đây là chương trình trừ 2 con số BCD nén 16 bit với nhau :
Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;MODULE			:						BCD16_SUB

;CHU THICH		:				TRU 2 SO BCDnen16bit
;NGUOI THUC HIEN:				PHAM THANH KHUYEN

;KHAI BAO BIEN	:	NUM_H1   NUM_L1   NUM_H2    NUM_L2

;con so tru		: 	(NUM_H1 NUM_L1) co tri so tu 00 00 : 99 99
;con so bi tru	:	(NUM_H2 NUM_L2) co tri so tu 00 00 : 99 99
;HOAT DONG		:	REULT_L 	= (NUM_L2 - NUM_L1)
				;	RESULT_H	= (NUM_H2 - NUM_H1)	
				
;KET QUA 		:	RESULT_L	luu vao	NUM_L2
				;	RESULT_H	luu vao	NUM_H2
;co nho C 		:	duoc ngam qui dinh = NUM_H1
;co nho phu DC	:	duoc ngam qui dinh = NUM_L1

		;RESULT_H	>=0	AND		RESULT_L > 0			; 	NUM_H1 = 1	;  NUM_L1 = 1
		;RESULT_H	>0	AND		RESULT_L < 0			; 	NUM_H1 = 1	;  NUM_L1 = 0

;PHEP TOAN KHONG THUC HIEN TRONG CAC TRUONG HOP SAU:
		;NUM_H2 	=0	AND		RESULT_L < 0			; KET QUA	:	NUM_H2 = NUM_L2 = 0XFF
														;	NUM_H1 = 0	;  NUM_L1 = 0

		;RESULT_H	<0	AND		RESULT_L < 0			; KET QUA 	: 	NUM_H2 = NUM_L2 = 0XFF
														;	NUM_H1 = 0	;  NUM_L1 = 0

		;RESULT_H	<0	AND		RESULT_L > 0			; KET QUA 	: 	NUM_H2 = NUM_L2 = 0XFF
														;	NUM_H1 = 0	;  NUM_L1 = 1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BCD16_SUB

					;XET RESULT_L= NUM_L2 - NUM_L1
					movf	NUM_L1, W
					subwf	NUM_L2, F
					movlw	B'00000010'
					movwf	NUM_L1
					andwf	STATUS, W
					movwf	NUM_L1			;LUU DC OF BYTE_L
					
					btfsc	STATUS, C
					goto	SUB_H0			;C(l)=1 NUM_L2 >= NUM_L1 ; RESULT_L >=0
;KHI RESUL_L <0
CHECK_NUM_H2				
					movf	NUM_H2, W		;NUM_H2=0 ?
					btfsc	STATUS, Z
					goto	NO_SUB			;Z=1 -->NUM_H2=0 RESULT<0
					decf	NUM_H2, F
					movf	NUM_H1, W
					subwf	NUM_H2, F
					btfsc	STATUS, C
					goto	SUB_H1			;C(h)=1	--> NUM_H2=NUM_H2 - 1 >= NUM_H1 & RESULT_L<0
NO_SUB
									;NEU KET QUA LA CON SO AM THI NUM_L1=NUM_H1=2
					clrf	NUM_L1
					clrf	NUM_H1	
					movlw	0XFF
					movwf	NUM_H2
					movlw	NUM_L2
							
EXIT_BCDSUB			return

;RESULT_H0 = NUM_H2 - NUM_H1 (VOI: RESUL_L >= 0)					
SUB_H0
					movf	NUM_H1, W
					subwf	NUM_H2, F

					btfss	sTATUS, C
					goto	NO_SUB1			;C=0 NUM_H2 < NUM_H1
					btfsc	STATUS, DC		;C=1 NUM_H2 >= NUM_H1 ; DC?
					goto	SUB_L0			;DC=1	RESULT_H = CON SO BCD
					movlw	0X06			;DC=0	RESULT_H KHONG PHAI LA BCD
					subwf	NUM_H2, F		;DOI SANG CON SO BCD
;RESULT_L = NUM_L2 - NUM_L1 >0 (VOI: C=1 DC NAM TRONG NUM_L1)
SUB_L0
					;XET CO DC
					btfsc	NUM_L1, 1
					goto	FINISH_1		;DAT NUM_L1 = 1 ROI THOAT
					movlw	0X06
					subwf	NUM_L2, F
FINISH_1			movlw	.1
					movwf	NUM_L1
					movwf	NUM_H1
					goto	EXIT_BCDSUB

;RESULT_H1= NUM_H2 - NUM_H1>0 (VOI: RESULT_L<0 ; C(h)=1)
SUB_H1					
					;XET CO DC(h)
					btfsc	STATUS, DC
					goto	SUB_L1			;DC=1 RESULT_H1 LA CON SO BCD
					movlw	0X06
					subwf	NUM_H2, F		;DC=0 DOI RESULT_H1 THANH CO SO BCD
;RESULT_L <0 ; C(l)=0 ; DC?
SUB_L1
					;XET DC(l)
					btfsc	NUM_L1, 1
					goto	FINISH_2		;DC(l)=1  DAT NUM_L1 = 1 ROI THOAT										
					movlw	0X66			;DC(L)=0	DOI RESUL_L SANG BCD
					subwf	NUM_L2, F
FINISH_2			clrf	NUM_L1
					movlw	.1
					movwf	NUM_H1


NO_SUB1				movlw	.1
					movwf	NUM_L1
					clrf	NUM_H1
					movlw	0XFF
					movwf	NUM_H2
					movwf	NUM_L2
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 10:29 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