PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 04-08-2006, 08:29 PM   #46
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
chắc chắn là cần lưu giữ giá trị các thanh ghi W, STATUS và PCLATH nếu bạn muốn chương trình chạy đúng sau khi trở về từ ngắt. Cách khai báo hình như không đúng...mình thường viết như thế này:
W_TEMP EQU 0X20
STATUS_TEMP EQU 0X21
PCLATH_TEMP EQU 0X22

riêng FSR có cần lưu trữ nó không nhỉ?

thay đổi nội dung bởi: newuser, 04-08-2006 lúc 09:04 PM.
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-08-2006, 08:46 PM   #47
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 newuser
chắc chắn là cần lưu giữ giá trị các thanh ghi W, STATUS và PCLATH nếu bạn muốn chương trình chạy đúng sau khi trở về từ ngắt. Cách khai báo hình như không đúng...mình thường viết như thế này:
W_TEMP EQU 0X20
STATUS_TEMP EQU 0X21
PCLATH EQU 0X22

riêng FSR có cần lưu trữ nó không nhỉ?
Cách khai báo địa chỉ biến của bạn friends vẫn dịch ra đúng, mặc dù cách dùng không hay lắm, nên dùng cblock ... endc thì tốt hơn.

Còn cách định nghĩa hằng của em:
Code:
PCLATH EQU 0X22
liệu có hợp lệ hay không?

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 04-08-2006, 09:03 PM   #48
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
ủa, thôi chết, em viết thiếu, đại loại phải như vầy (đúng là nhanh nhảu đoảng... hic)
PCLATH_TEMP EQU 0X22

cách khai báo như bạn friend vẫn đúng? anh có thể giải thích rõ hơn không?
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-08-2006, 09:45 PM   #49
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
À, anh xem lướt qua nên không phát hiện lỗi ở lần đầu.

Phần khai báo của bạn friends dịch không có lỗi, nhưng chạy chương trình sẽ bị sai (vì các địa chỉ biến được đặt không đúng). Toàn bộ 4 biến đó đều sẽ có địa chi 0x20. Bạn friends cần phải chỉnh lại như sau thì mới có chương trình đúng:
Code:
Org 0x20
W_SAVE res 1
STAT_SV res 1
PCH_SV res 1
FSR_SV res 1
ORG 0X0000
Giải thích thêm về phần này. Directive org chỉ làm thay đổi bộ đếm địa chỉ của trình hợp dịch. Với đoạn code như trên, chúng ta sẽ có W_SAVE là nhãn ở địa chỉ 0x20, STAT_SV là nhãn ở địa chỉ 0x21, và cứ thế. Từ khóa res và giá trị 1 sẽ làm bộ đếm địa chỉ tăng 1 đơn vị. Cách này không hay vì các địa chỉ biến thực chất là địa chỉ của các nhãn được hiểu là sẽ được dùng làm đích của các lệnh chuyển điều khiển (hay nói cách khác chúng là các địa chỉ của các từ lệnh), nếu dùng chúng trong các PIC18 chẳng hạn thì sẽ bị sai (vì các từ lệnh cách nhau 2 byte, và PIC18 dùng địa chỉ byte).

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 10-08-2006, 03:54 PM   #50
vudinhlieu
Nhập môn đệ tử
 
Tham gia ngày: Jul 2006
Bài gửi: 6
:
Chào bang chủ ,đệ tử nhập môn thật vất vả để viết chương trình đầu tiên !
thứ 1 : vì chưa biết gì về MPLAB thế nên sau khi cài đặt đọc mãi hướng dẫn sử dụng mới có thể làm được mong bang chủ thêm phần hướng dẫn cơ bản sử dụng MPLAB trong 1 ngày học PIC
thứ 2 : Ngay trong bài tập đầu tiên Bang chủ đã gài pan thêm dấu . kế lệnh END làm trình dịch báo lổi mà ko biết mò đâu mà sửa ! dù sao thì đệ cũng đã làm được bài tập đầu tiên !
vudinhlieu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-08-2006, 06:38 PM   #51
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 vudinhlieu
Chào bang chủ ,đệ tử nhập môn thật vất vả để viết chương trình đầu tiên !
thứ 1 : vì chưa biết gì về MPLAB thế nên sau khi cài đặt đọc mãi hướng dẫn sử dụng mới có thể làm được mong bang chủ thêm phần hướng dẫn cơ bản sử dụng MPLAB trong 1 ngày học PIC
thứ 2 : Ngay trong bài tập đầu tiên Bang chủ đã gài pan thêm dấu . kế lệnh END làm trình dịch báo lổi mà ko biết mò đâu mà sửa ! dù sao thì đệ cũng đã làm được bài tập đầu tiên !
Về thứ 1: Cá nhân tôi không nghĩ rằng mình có thể sử dụng ngay một phần mềm mới ngay sau khi cài đặt, ít nhất tôi cũng phải đọc qua các tutorial của phần mềm (nếu có), và sau đó là hướng dẫn sử dụng. Ngoài ra, ít nhất là đâu đó trong diễn đàn này đã có các hướng dẫn về MPLAB, chẳng hạn như luồng này:
http://www.picvietnam.com/forum/showthread.php?t=354

Về thứ 2: đó chưa hẳn là một pan được gài, MPLAB đã trải qua nhiều lần nâng cấp kể từ khi chú F viết bài tập đó, đến nay thì directive END được dùng cho các chương trình hợp ngữ dành cho các vi điều khiển 8-bit (PIC10, PIC12, PIC16 và PIC18, nhưng directive .END vẫn được dùng cho các chương trình hợp ngữ dành cho các vi điều khiển và DSC 16-bit (PIC24, dsPIC30, dsPIC33).

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 12-08-2006, 07:06 PM   #52
vudinhlieu
Nhập môn đệ tử
 
Tham gia ngày: Jul 2006
Bài gửi: 6
:
Vì quá kém cỏi đành xin trưởng lão thọ giáo thêm chút nữa !
vì sao chương trình này em viết dịch bị lỗi !

Code:
;====================================
; bai tap 2
; mach den chop 8 led tu trai qua phai
;ngay bat dau :12/08/2006
;nguoi thuc hien : vu dinh lieu 
;mo ta phan cung : Dung PIC16F628A - thach anh 4MHz
;		: LED giao tiep voi PORTB
;		: Cuc am cua LED noi voi GND
;		: RB0 - RB7 la cac chan output 
; Chu thich	:
; dùng thanh ghi W ghi vào giá tri 00000001
; xuat ra PORTB
; delay
; dùng lenh dich trai portB  
; xuat ra PORTB                                                      15
;====================================================================
		TITLE 		"Mach chop 8 LED_1"
		PROCESSOR	P16F628A
		INCLUDE 	<P16F628A.inc>
		__CONFIG   	_CP_OFF	& _PWRTE_ON & _WDT_OFF &_HS_OSC

;=======================================================
count1 EQU 0x20 ; cac bien dung cho doan chuong trinh delay
counta EQU 0x21
countb EQU 0x22
;===============================================================================
		ORG	0x0000
		GOTO	MAIN
		ORG	0x0005
MAIN		                                              
		BANKSEL	TRISB		; bank select
		CLRF	TRISB		; trisb = 00000000
; portb = output
LOOP
		BANKSEL	PORTB
		MOVLW 	0x01
		MOVWF	PORTB		; rb = 00000001
		CALL	delay_100ms
		RLF		PORTB,f
		GOTO	LOOP
		GOTO		$		; dung chuong trinh tai day
						; vong lap tai cho^~
						; khong bao gio ket thuc
delay_100ms ; label bat dau chuong trinh con
		MOVLW d'100' ; doan code cho chuong trinh con delay 100 ms
		MOVWF count1
d1
		MOVLW d'199'
		MOVWF counta
		MOVLW d'1'                              
		MOVWF countb
delay_0 
		DECFSZ	counta,f
		GOTO	$+2 
		DECFSZ	countb,f
		GOTO	delay_0 
		DECFSZ	count1,f 
		GOTO	d1   
		RETURN	
		END
và các lỗi nhận cược nhu sau
Make: The target "E:\pic1\baitap2.o" is out of date.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "baitap2.asm" /l"baitap2.lst" /e"baitap2.err" /o"baitap2.o"
Warning[215] E:\PIC1\BAITAP2.ASM 18 : Processor superseded by command line. Verify processor symbol.
Message[302] E:\PIC1\BAITAP2.ASM 32 : Register in operand not in bank 0. Ensure that bank bits are correct.
Error[113] E:\PIC1\BAITAP2.ASM 54 : Symbol not previously defined ( )
Error[112] E:\PIC1\BAITAP2.ASM 54 : Missing operator
Error[113] E:\PIC1\BAITAP2.ASM 57 : Symbol not previously defined (f )
Error[113] E:\PIC1\BAITAP2.ASM 58 : Symbol not previously defined (d1 )
Halting build on first failure as requested.
BUILD FAILED: Sat Aug 12 18:02:25 2006

thay đổi nội dung bởi: falleaf, 18-12-2006 lúc 12:01 AM.
vudinhlieu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-08-2006, 09:41 PM   #53
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
Chương trình này không có lỗi cú pháp, tất nhiên cái warning về bộ xử lý do MPLAB chọn tại dòng lệnh và cái message về thanh ghi không nằm trong bank 0 là hợp lý. Tôi cho là bạn đang gặp khó khăn trong việc biên dịch chương trình. Nhân tiện bạn cho biết bạn đang dùng MPLAB phiên bản nào.

Với các bản MPLAB IDE mới, cách đơn giản để bạn biên dịch chương trình chỉ gồm 1 tập tin .asm là chọn loại bộ xử lý cho đúng trong mênu "Configure", lệnh "Select Device ...", sau đó bạn chọn trong mênu "Project" lệnh "Quickbuild <tentaptin.asm>", với <tentaptin.asm> là tập tin .asm mà bạn đang soạn thảo (nó đã được mở ra và đang active).

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

thay đổi nội dung bởi: namqn, 14-08-2006 lúc 07:23 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2006, 03:28 PM   #54
BVT_BK
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 6
:
O Day Cac Bac Noi Ve Cach Dung Pic Co Ban Nhat
Nhung Nhung Ung Dung Khac Thi Chua Thay Cac Bac De Cap Nhieu
Hi Vong Cac Bac Post Them Nhieu De Anh Em Ta Cung Hoc Nhanh Hon
Vi Du Nhu Timer0, 1, 2
Truyen Thong Du Lieu
Pwm...
Thank You
BVT_BK vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2006, 03:31 PM   #55
BVT_BK
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 6
:
Cac Bac Toan Viet Delay Nho Decfsz A
Cai Lay Dung Cung Duoc
Nhung Ma Thoi Gian De Lay Khong Chinh Xac Lam
Em Thu Dung Timer0 Cua 16f877a De Tao Tre
Nhung Ma Tim Mai Khong Thay Lenh Khoi Dong Timer0 Dau
Bac Nao Viet Chuong Trinh Tao Tre Nho Timer0 Thi Chi Cho Em Voi
Hinh Nhu Voi Con Pic877a No Tu Khoi Dong Timer0 Hay Sao Day
Bac Nao Ro Thi Giup Em Voi
Thank You!
BVT_BK vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-08-2006, 04:47 PM   #56
vudinhlieu
Nhập môn đệ tử
 
Tham gia ngày: Jul 2006
Bài gửi: 6
:
rất cám ơn trưởng lão !
vudinhlieu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2006, 11:29 AM   #57
tinhthanthep
Đệ tử 6 túi
 
tinhthanthep's Avatar
 
Tham gia ngày: Jun 2005
Bài gửi: 141
:
Nếu mẫu khai báo biến như faleaf trình bày bên trên không tối ưu thì mong bác namp viết lại cho chuẩn. Đây là mẫu khai báo biến của faleaf:
;================================================= ========
; KHAI BAO BIEN
;--------------
; Bien nam o bank 0
;----------------------------------------------------------------------
ORG 0x020
COUNT_L RES 1
COUNT_H RES 3
;----------------------------------------------------------------------
; BiEn NAM O bank 1
;----------------------------------------------------------------------
ORG 0x0A0
COUNT1_L RES 1
;----------------------------------------------------------------------
; Bien nam o bank 2
;----------------------------------------------------------------------
ORG 0x120
;================================================= =======
2. Trong chuong trình ngắt theo tôi chỉ cần lưu giá trị của thanh ghi W và STATUS vì thanh ghi PC đã được lưu trong stack. Đồng thời trong quá trình xử lý 1 ngắt thì bit toàn cục GIE đã bị clear nên sẽ không có ngắt nào khác hoạt động được nữa lên không sợ tràn stack.
3. Ở cuối chuong trình ngắt không cần phải set bit GIE vì khi ra khỏi chương trình ngắt thì bit GIE tự động được set lên. Chỉ phải clear flag trước khi ra khỏi chương trình ngắt.
tinhthanthep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2006, 11:52 AM   #58
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
Trích:
Nguyên văn bởi tinhthanthep
2. Trong chuong trình ngắt theo tôi chỉ cần lưu giá trị của thanh ghi W và STATUS vì thanh ghi PC đã được lưu trong stack. Đồng thời trong quá trình xử lý 1 ngắt thì bit toàn cục GIE đã bị clear nên sẽ không có ngắt nào khác hoạt động được nữa lên không sợ tràn stack.
Đồng ý với tinhthanthep ở những điểm còn lại trừ điểm trên, theo tôi thì phải lưu giữ cả thanh ghi PCLATH, theo datasheet của P16F877A nói là PCLATH sẽ không bị thay đổi giá trị ngay sau lệnh RETFIE, giả sử chương trình ngắt của bạn đặt tại Page2, vậy thì khi trở về từ ngắt, liệu có đảm bảo chương trình của bạn sẽ chạy đúng???
vì thế không cần lưu trữ giá trị thanh ghi PCLATH chỉ chính xác với những dòng PIC có bộ nhớ chương trình <=2K (2^11=2048 địa chỉ).
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2006, 02:59 PM   #59
tinhthanthep
Đệ tử 6 túi
 
tinhthanthep's Avatar
 
Tham gia ngày: Jun 2005
Bài gửi: 141
:
Các bác cho hỏi trong khi thực hiện chương trình ngắt ta thường lưu giá trị các thanh ghi W và status vào địa chỉ 0x70, 0x71.... Mấy cái địa chỉ này nằm ở bank 0. Nhưng nếu khi vào chương trình ngắt mà ta đang ở bank 1 thì sao nhỉ? Theo tôi hiểu là trước khi lưu giá trị thanh ghi W và STATUS ta phải chuyển về bank 0 trước đúng không? nhưng tôi thấy các chương trình ngắt viết mẫu đều không thấy làm điều này? Hình như nó tự động hiểu được à? Các bác có thể giải thích cái địa chỉ ghi tạm giá trị thanh ghi W, status được không?
tinhthanthep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2006, 04:27 PM   #60
tinhthanthep
Đệ tử 6 túi
 
tinhthanthep's Avatar
 
Tham gia ngày: Jun 2005
Bài gửi: 141
:
Tiện thể hỏi thêm một câu nữa: để chuyển giá trị các thanh ghi đặc biệt vào các thanh ghi lưu trữ thì chỉ cần dùng các lệnh mov là được sao thấy trong tài liệu hướng dẫn và cũng thấy một số bạn trên này hay dùng lệnh swapf?
tinhthanthep 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


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