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 12-02-2009, 02:49 PM   #1
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Talking Các bạn xem giúp mình làm sai chỗ nào

Mình thấy cai proteus hay hay. Lên làm một chương trình chạy thử . Mình delay lâu(mắt thường có thể thấy được hiện tượng quét) thì thấy nó chạy đúng. Nhưng delay nhanh thì lại sai bét nhè . Nhức đầu quá nên nhờ các bạn tư vấn (
Code:
TITLE		"P16F877A_REG1"
PROCESSOR	P16F877A
INCLUDE		<P16F877A.INC>
__CONFIG	_CP_OFF & _CPD_OFF & _WRT_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
delay_reg1		equ		0x20
delay_reg2  	             equ	            0x21
delay_reg3		equ		0x22
constant	buflength = 8
variable	j = 0
cblock		0x23			; bo dem du lieu hien thi ra man hinh
			bodem : buflength
endc
#define			clock		   PORTB,0 ; xung kick hoat
#define			dieukhien_quetcot	   PORTB,1 ; dieu khien xung quet cot


org 0x0000
goto Main
;org 0x0005
Main
	banksel	             TRISB
	bcf		TRISB,0
	bcf		TRISB,1
	banksel PORTB
	bcf		clock
	bcf		dieukhien_quetcot
	banksel TRISD 
	clrf	TRISD
	banksel   PORTD
	clrf         PORTD
; Dam bao an toan truoc khi di ^_^		
	j		= 0 
	while	             j < 8
	bcf		dieukhien_quetcot
	bsf		clock
	bcf		clock
	j		+= 1
	endw
; Xoabodem
	j		= 0 
	while		j<buflength
	clrf	             bodem+j
	j		+= 1
	endw
;Load du lieu vao bo dem	
	j		= 0
	while		j < buflength
	movlw	j
	call	Table0
	movwf	bodem+j
	j		+= 1
	endw


Hienthi
	clrw
	bsf		dieukhien_quetcot
	j		= buflength-1
	while	             j>=0
	movf	             bodem+j,W		
	movwf	             PORTD
	call	             Delay_10ms
	bsf		clock
	call	             Delay_10ms
	bcf		dieukhien_quetcot	
	bcf		clock
	j		-= 1
	endw
	goto	Hienthi
Delay_10ms						
	movlw	d'1'
	movwf	delay_reg1
Loop1
	movlw	0xc7
	movwf	delay_reg2
	movlw	0x01
	movwf	delay_reg3
Loop2
	decfsz	delay_reg2,1
	goto	Loop2
	decfsz	delay_reg3,1
	goto	Loop2
	decfsz	delay_reg1,1	
	goto	Loop1
	return
;org 0xc0
;Table1
;	addwf	PCL,1
;	retlw	b'11100111'
;	retlw	b'11110011'
;	retlw	b'11111001'
;	retlw	b'00000000'
;	retlw	b'00000000'
;	retlw	b'00000000'
;	retlw	b'00000000'
;	retlw	b'00000000'
org	0xe0
Table0
	addwf	PCL,1
	retlw	b'11111111'
	retlw	b'10000001'
	retlw	b'00000000'
	retlw	b'00111100'
	retlw	b'00000000'
	retlw	b'10000001'
	retlw	b'11111111'
	retlw	b'11111111'
end
File Kèm Theo
File Type: rar DISPLAY_MATRIX.rar (102.9 KB, 32 lần tải)

thay đổi nội dung bởi: namqn, 12-02-2009 lúc 07:11 PM.
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 05:28 PM   #2
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Tư vấn cho bạn là: LÀM MẠCH THẬT.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 07:00 PM   #3
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Bạn xem luồn này nè:
http://www.picvietnam.com/forum/showthread.php?t=3111
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 07:09 PM   #4
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
mình đã bảo là thử delay chậm lại thì thấy nó quét đúng. Nhưng giảm thời gian delay đến một lúc nào đó mà không nhìn thấy hiện tượng quét nữa thì lại thấy thiếu nét :F. Nếu giúp đc thì chạy thử rồi cho ý kiến giùm
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 07:14 PM   #5
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
hình đây nè X_X
Hình Kèm Theo
File Type: jpg hinhdayne.JPG (237.6 KB, 5 lần tải)
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2009, 07:16 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi OHayNhi View Post
mình đã bảo là thử delay chậm lại thì thấy nó quét đúng. Nhưng giảm thời gian delay đến một lúc nào đó mà không nhìn thấy hiện tượng quét nữa thì lại thấy thiếu nét :F. Nếu giúp đc thì chạy thử rồi cho ý kiến giùm
Ở luồng kia tôi đã có ý kiến rằng Proteus không được thiết kế cho mục đích này. Màn hình của máy tính cũng phải quét nhiều lần trong mỗi giây để hiển thị hình ảnh. Nếu bạn giảm thời gian delay khi quét LED ma trận thì sẽ có nhiều cơ hội để Proteus chụp cùng trạng thái LED ma trận khi đang cập nhật hàng/cột nhiều lần, dẫn đến thấy thiếu nét.

LED ma trận của bạn dùng phương pháp quét để hiển thị, và màn hình máy tính cũng vậy, dẫn đến nếu tần số quét của LED là bội số của tần số quét của màn hình (khả năng này xảy ra càng cao khi thời gian delay giữa những lần quét là càng nhỏ) thì bạn sẽ gặp hiệu ứng trên, tương tự như dùng máy quay phim để quay hình ảnh các màn hình máy tính (bạn sẽ thấy màn hình máy tính thường bị rung).

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-02-2009, 10:50 AM   #7
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Nhân tiện các bác cho hỏi là với tập lệnh mở rộng của MPASM thì với các lệnh khai báo biến nó có ngốn thêm bộ nhở của PIC không, nếu có thì nó quy định bộ nhớ theo kiểu j . và các lệnh điều khiển vòng lặp. trong vòng lặp...
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-02-2009, 05:59 PM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi OHayNhi View Post
Nhân tiện các bác cho hỏi là với tập lệnh mở rộng của MPASM thì với các lệnh khai báo biến nó có ngốn thêm bộ nhở của PIC không, nếu có thì nó quy định bộ nhớ theo kiểu j . và các lệnh điều khiển vòng lặp. trong vòng lặp...
Còn tùy vào việc bạn dùng khai báo nào, và đang quan tâm đến bộ nhớ nào. Bạn nêu cụ thể các lệnh/directive mà bạn quan tâm, nếu như bạn vẫn chưa nắm rõ sau khi đọc tài liệu sau (nên đọc nó trước):
http://ww1.microchip.com/downloads/e...Doc/33014J.pdf

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-02-2009, 01:28 PM   #9
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
cảm ơn bác , tìm hiểu rồi, chỉ băn khoăn cái lệnh variable i và while i, ++i ; xem MPASM có dùng thanh ghi nào của pic không; Hóa ra không. mà nó bê nguyên đoạn code đó xuống dưới i lần .
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-02-2009, 04:37 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi OHayNhi View Post
cảm ơn bác , tìm hiểu rồi, chỉ băn khoăn cái lệnh variable i và while i, ++i ; xem MPASM có dùng thanh ghi nào của pic không; Hóa ra không. mà nó bê nguyên đoạn code đó xuống dưới i lần .
Có lẽ bạn đang nói đến những chỉ dẫn được dùng trong các macro. Các macro khi được khai triển bởi trình hợp dịch sẽ lặp lại khối lệnh trong thân macro nếu bạn dùng cấu trúc while. Chú ý phân biệt các cấu trúc lặp của macro với việc hiện thực các cấu trúc lặp thực sự trong chương trình.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-02-2009, 09:36 AM   #11
OHayNhi
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
cái macro thì mình không nói. Cái chính la mình lúc đầu còn băn khoăn là khai báo variable , do có thể thay đổi đc gia trị của biến lên băn khoăn MPASM có dùng thanh ghi nào của VDK để cất giá trị này không. Sau khi xem lại thì hóa ra MPASM chỉ dùng 1 bảng lưu các khai báo directive, ví dụ như mình khai báo variable i = 0. ++i thì nó thay bằng 0 và 1. nói chung là mình không có năng khiếu diễn đạt nên nói nôm na như thế . Dù sao thì xài asemble vẫn khoái hơn cái macro while(i)
OHayNhi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
help me !!!


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à 07:34 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