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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 27-03-2006, 09:26 AM   #1
dohoangnam
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 22
:
Bác port tiếp lên đi, chờ bác lâu quá. Giống như việc 1 bữa ăn ngon nhưng cứ vừa ăn vừa nghỉ vậy. Bác cố gắng vì anh em với!!!!
Trân thành,
Nam.
dohoangnam vẫn chưa có mặt trong diễn đàn  
Old 27-03-2006, 08:17 PM   #2
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Talking

Tớ cũng đang nóng lòng đọc những module tiếp theo của mod Chính !
Nhưng thông cảm,hình như Chính đang thi giữa kì thì phải !
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn  
Old 27-03-2006, 10:17 PM   #3
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ì hì. Không phải là bận thi giữa kì. Trường mình không thi giữa kì.

Mình đang bận phát triển một hai sản phẩm trên PICVIETNAM.

Nên mấy cái Tutorial, cho nợ lại vài bữa nghe!

Nợ hoài mang tiếng quá.

__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 30-03-2006, 01:59 PM   #4
anhviet
Nhập môn đệ tử
 
Tham gia ngày: Nov 2005
Bài gửi: 8
:
các bác giải thích dùm em
list p=16f873A,r=dec ; list directive to define processor ; constantes syst?e d?imal
#include <p16f873A.inc>
#include <Delay.inc>

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _CPD_OFF & _LVP_OFF


TRONG DOẠN #INCLUDE <DELAY.INC> CÓ NGHĨA LÀ GÌ
anhviet vẫn chưa có mặt trong diễn đàn  
Old 31-03-2006, 11:04 AM   #5
Khoa
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 15
:
chú nào có tài liệu đầy đủ về asm của pic thì cho anh xin
Khoa vẫn chưa có mặt trong diễn đàn  
Old 31-03-2006, 06:31 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 Khoa
chú nào có tài liệu đầy đủ về asm của pic thì cho anh xin
Trích:
Nguyên văn bởi Khoa
nhất là các khai báo directive,khai baó hàm module....
Bạn download tài liệu sau đây của Microchip nhé.
http://ww1.microchip.com/downloads/e...Doc/33014J.pdf
Và tài liệu sau nếu muốn dùng các chip PIC16:
http://ww1.microchip.com/downloads/e...Doc/33023A.pdf
Tài liệu sau dành cho các chip PIC18:
http://ww1.microchip.com/downloads/e...Doc/39500a.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  
Old 31-03-2006, 11:06 AM   #7
Khoa
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 15
:
nhất là các khai báo directive,khai baó hàm module....
Khoa vẫn chưa có mặt trong diễn đàn  
Old 31-03-2006, 12:21 PM   #8
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
#include <delay.inc> là một cái file đính kèm được tạo ra bởi người sử dụng. Thông thường các file này sẽ chứa các hàm asm được viết dưới dạng các macro để thuận tiện trong quá trình viết chương trình bằng asm.

Nguyên tắc hoạt động của nó đại khái giống như mấy cái header file vậy đó. Nó sử dụng chức năng thay thế của trình biên dịch để làm tăng thêm tính linh động và thân thiện cho một chương trình asm. Khác biệt ở chỗ mấy cái header file thì dùng để định nghĩa phần cứng cho một vi điều khiển, còn các file tạo bởi người lập trình thông thường là dùng để định nghĩa các hàm.

Ví dụ, trong cái header file "p16f877a.inc" của PIC6F877A nó có một lệnh define như sau:

#define PCLATH 0x0A

Lệnh này dùng để định nghĩa địa chỉ của thanh ghi PCLATH trong bộ nhớ chương trình của vi điều khiển.

Do đó trong chương trình chính, nếu ta có một lệnh nào đó liên quan tới thanh ghi PCLATH, ví dụ lệnh:

CLRF PCLATH (lệnh 1)

Thì trình biên dịch sẽ thay thế như sau:

CLRF 0x0A (lệnh 2)

Và trình biên dịch sẽ dựa vào lệnh này để tạo thành mã máy (file hex), chứ không phải là dựa vào lệnh 1.

Trong trường hợp ta không đính kèm file <p16f877a.inc> thì nếu viết chương trình như lệnh 1, thì trình biên dịch sẽ không hiểu, vì thực chất trình biên dịch sẽ không biết PCLATH là cái quái gì (do ta chưa định nghĩa). Việc định nghĩa các tham số phần cứng này có thể thông qua các file <... .inc> được tạo sẵn hoặc định nghĩa trực tiếp trong chương trình ứng dụng.

Tương tự như các file đính kèm khác, trong trường hợp này là file <delay.inc>. Thông thường nó bao gồm việc định nghĩa một số hàm asm được viết dưới dạng các macro. Khi macro đó được gọi trong chương trình ứng dụng, nó sẽ thay thế macro đó bằng đoạn code tương ứng với macro đó trong file đính kèm.

Thực ra ta vẫn có thể viết trực tiếp đoạn code đó trên chương trình ứng dụng mà không cần phải đính kèm hay gọi cho mất thời gian.

Tuy nhiên việc xây dựng các file đính kèm như vậy mang lại nhiều tác dụng:
- Thứ nhất, nó cho phép ta tạo các hàm bằng asm, giống như các module chương trình được viết sẵn, khi cần chỉ việc gọi nó ra.
- Thứ 2, chương trình asm viết bằng cách sử dụng các chức năng thay thế của trình biên dịch giúp cho ngôn ngữ asm trở nên thân thiện hơn, giống như một dạng ngôn ngữ lập trình cấp cao hơn.

Nếu để ý kĩ, thì các ngôn ngữ lập trình cấp cao khác, ví dụ như C cũng có cách xây dựng tương tự. Các hàm xử lí thuật toán được viết trong một file riêng, các hàm hiển thị được viết trong một file riêng, ... Khi cần sử dụng một hàm nào đó trong C, ta vẫn phải đính kèm cái file đó vào chương trình ứng dụng thông qua các lệnh "#include ...". Nếu không đính kèm thì trình biên dịch sẽ báo kỗi, vì nó sẽ không hiểu được hàm ta vừa viết.

Như vậy ta có thể hiểu chức năng thay thế của trình biên dịch là một trong những cơ sở để xây dựng các ngôn ngữ lập trình cấp cao .Thực chất các ngôn ngữ cấp cao khi biên dịch sẽ có giai đoạn nó thay thế các hàm của nó bằng các hàm của ngôn ngữ ...asm, rồi dựa trên đó để tạo ra mã máy (file hex). Mã máy là cái duy nhất mà vi điều khiển thực sự hiểu được để biết được nó cần phải làm gì.

Do việc lập trình bằng mã máy đối với con người là quá khó khăn, cho nên mới có chuyên ra đời các ngôn ngữ lập trình asm, cấp cao, cao hơn nữa, ..., Như vậy con người không phải thao tác trực tiếp với mã máy, mà công việc đó được chuyên giao cho các trình biên dịch.

Nói nhiều quá!

__________________


thay đổi nội dung bởi: ntc, 02-04-2006 lúc 03:52 PM.
ntc vẫn chưa có mặt trong diễn đàn  
Old 31-03-2006, 08:09 PM   #9
anhviet
Nhập môn đệ tử
 
Tham gia ngày: Nov 2005
Bài gửi: 8
:
cảm ơn các bác rất nhiều . các bác viết càng nhiều càng tốt vì rất rễ hiểu cho người mới học ltr pic
anhviet vẫn chưa có mặt trong diễn đàn  
Old 03-04-2006, 09:01 AM   #10
dohoangnam
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 22
:
cảm ơn các bạn đã share các đường link!
dohoangnam vẫn chưa có mặt trong diễn đàn  
Old 03-04-2006, 12:15 PM   #11
zero_OR_one
Nhập môn đệ tử
 
Tham gia ngày: Oct 2005
Bài gửi: 5
:
Lightbulb

các bác cho em hỏi tý:

Code:
 ; Bài toán yêu cầu :nhấn 2 lần nút button(nối tại RA0) led nối với RB0
 ; sẽ sáng(mạch dùng luôn của bác Chính vậy chỉ khác có cái button 
 ; nối với VCC qua RA0 xuống đất)
 ; chương trình sẵn:
 ; Project: Two pushes to turn on a LED

	Processor  16F84a
	include <p16F84a.inc>
	__CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC


	ORG 0		;This is the start of memory for the program.
SetUp	
             BSF 03,5	             ;Go to Bank 1
	CLRF 06		;Make all port B output
	MOVLW 01	;Load W with 0000 0001
	MOVWF 05	;Make RA0 input
	BCF 03,5	;Go to Bank 0 - the program memory area.
	CLRF 1F		;Clear the button file
	CLRF 06		;Blank the output
	GOTO Main
		
Delay	
             NOP		;Create approx 250mS delay
	DECFSZ 1A,1
	GOTO Delay
	DECFSZ 1B,1
	GOTO Delay
	RETURN	

Delay2	
             NOP		;Create 1mS debounce delay	
	DECFSZ 1A,1
	GOTO Delay2
	RETURN

Sw	
             BTFSS 05,0	;Test the push button
	GOTO Sw3	;Button not pressed	
	BTFSC 1F,2	;Test end-of-flash flag
	RETURN
	BTFSC 1F,0	;First pass?
	RETLW 00	;No
	BTFSS 1F,1	;Test first-press flag
	GOTO Sw2	;First press
	BSF 06,0	             ;Button has been pressed twice. Illuminate LED
	CALL Delay	;Keep LED on
	CALL Delay	;Keep LED on
	BCF 1F,1	             ;Clear second-push flag bit
	BSF 1F,2	             ;Set end-of-flash flag
	BCF 06,0	             ;Turn LED off
	RETURN
Sw2	
             BSF 1F,1	             ;Set the first-press flag
	BSF 1F,0	             ;Set button pass flag bit
	RETURN	
Sw3	
             BCF 1F,0	              ;Clear button pass flag bit
	BCF 1F,2	              ;Clear end-of-flash flag
	RETURN

Main	
             CALL Sw
	CALL Delay2	;Debounce switch	
	GOTO Main

	END		;Tells assembler end of program
Một số chỗ em chưa hiểu:
1.Các file 1A,1B mặc định bao nhiêu mà tạo được các thời gian trễ như trên
2.File 1F với các bit hoạt động ra sao
3.Chương trình này hoạt động thế nào :em chư hiểu giải thuật ,tại sao nhấn nút button lần 1 led chưa sáng,lần 2 led mới sáng
Chỗ này:
Code:
Sw	
             BTFSS 05,0	;Test the push button
	GOTO Sw3	;Button not pressed	
	BTFSC 1F,2	;Test end-of-flash flag
	RETURN
	BTFSC 1F,0	;First pass?
	RETLW 00	;No
	BTFSS 1F,1	;Test first-press flag
	GOTO Sw2	;First press
	BSF 06,0	;Button has been pressed twice. Illuminate LED
	CALL Delay	;Keep LED on
	CALL Delay	;Keep LED on
	BCF 1F,1	;Clear second-push flag bit
	BSF 1F,2	;Set end-of-flash flag
	BCF 06,0	;Turn LED off
	RETURN
Nhấn lần 1:->BTFSC 1F,2->BTFSC 1F,0->BTFSS 1F,1->GOTO Sw2
Sw2 BSF 1F,1 ;Set the first-press flag
BSF 1F,0 ;Set button pass flag bit
RETURN
Vậy thì sau khi nó trở về từ Sw2 sẽ BSF 06,0 ;Button has been pressed twice. Illuminate LED.
Em hiếu sai ở đâu ,mong anh Chính và mọi người trả lời hộ(Giait thích kĩ hộ em sử dụng các file 1A,1B,nhất là 1F)
Em cảm ơn nhiều

thay đổi nội dung bởi: ntc, 03-04-2006 lúc 12:55 PM. Lý do: SỬA LẠI CÁCH VIẾT CODE
zero_OR_one vẫn chưa có mặt trong diễn đàn  
Old 03-04-2006, 01:24 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
Mọi người khi post phần code nhớ post theo cách như trên nghe. Nhìn nó sáng sủa, dễ đọc, dễ hiểu, dễ trả lời.

Hic, viết code kiểu gì mà đọc muốn túi mắt túi mũi luôn.

Cái thời gian delay còn phụ thuộc vào tần số hoạt động của con PIC nữa, không biết làm sao tính được. Bạn coi lại coi tần số của thạch anh là bao nhiêu?

1A, 1B là 2 thanh ghi nằm trong RAM sử dụng cho chương trình delay. Nó không được khởi tạo nên có thể xem giá trị ban đầu bằng 0. Khi giảm lần đầu tiên thì 0 sẽ giảm về 255.

Cách tính thời gian delay cho đoạn chương trình delay này nhh đã giải thích rất cụ thể ở các bài trước. Bạn xem lại các bài trước trong luồng này sẽ thấy (cái chương trình điều khiển LED chớp tắt trong 1 giây á).

Còn cái thanh ghi 1F. Hic, chóng mặt quá, để từ từ xem sau vậy. Đại khái nó dùng 3 bit LSB để chỉ thị trạng thái cái nút bấm nó như thế nào mà xử lí. Chưa bấm thì giá trị trong thanh ghi 1F nó như thế nào đó, bấm 1 lần thì như thế nào đó, 2 lần thì như thế nào đó.
__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 03-04-2006, 02:50 PM   #13
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
Anh đề nghị em quản lý luồng như sau:

1) Nếu post bài hướng dẫn, thì việc post source code là rất tốt, vì người dùng có thể thử nghiệm ngay

2) Nếu post bài câu hỏi, nếu không phải code người đó viết, sẽ không trả lời, vì không có đủ thời gian để đọc code và xem code. Trước đây anh đọc code rất nhanh, nhưng trả lời một thời gian sau, quá nhiều người nhờ, lại viết email nhờ về code. Chúng ta không có thời gian để làm việc đó.

3) Nếu các bạn muốn hỏi về code, các bạn phải đọc hiểu, và trích ra những phần mà các bạn không hiểu để hỏi, chứ không post toàn bộ đoạn code lên để hỏi như thế này. Mỗi người lập trình, có một tư duy lập trình khác nhau. Không thể nào trả lời các câu hỏi về code được, nếu như bạn không trình bày ý đồ của bạn một cách rõ ràng, nhất là khi các bạn muốn lấy code của những người khác.

4) Nếu như các bạn muốn đặt câu hỏi về các chương trình, cấu trúc, và việc tận dụng các chức năng của PIC, cũng như vận dụng các chức năng đó một cách hợp lý, với dạng câu hỏi này, các bạn lưu ý post lưu đồ giải thuật, hoặc nội dung cần làm, chứ không post đoạn code.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn  
Old 08-04-2006, 05:56 PM   #14
zero_OR_one
Nhập môn đệ tử
 
Tham gia ngày: Oct 2005
Bài gửi: 5
:
Trích:
Nguyên văn bởi ntc
Mọi người khi post phần code nhớ post theo cách như trên nghe. Nhìn nó sáng sủa, dễ đọc, dễ hiểu, dễ trả lời.

Hic, viết code kiểu gì mà đọc muốn túi mắt túi mũi luôn.

Cái thời gian delay còn phụ thuộc vào tần số hoạt động của con PIC nữa, không biết làm sao tính được. Bạn coi lại coi tần số của thạch anh là bao nhiêu?

1A, 1B là 2 thanh ghi nằm trong RAM sử dụng cho chương trình delay. Nó không được khởi tạo nên có thể xem giá trị ban đầu bằng 0. Khi giảm lần đầu tiên thì 0 sẽ giảm về 255.

Cách tính thời gian delay cho đoạn chương trình delay này nhh đã giải thích rất cụ thể ở các bài trước. Bạn xem lại các bài trước trong luồng này sẽ thấy (cái chương trình điều khiển LED chớp tắt trong 1 giây á).

Còn cái thanh ghi 1F. Hic, chóng mặt quá, để từ từ xem sau vậy. Đại khái nó dùng 3 bit LSB để chỉ thị trạng thái cái nút bấm nó như thế nào mà xử lí. Chưa bấm thì giá trị trong thanh ghi 1F nó như thế nào đó, bấm 1 lần thì như thế nào đó, 2 lần thì như thế nào đó.
Xin lỗi anh C,em sẽ rút kinh nghiệm lần sau.
Thạch anh ở đây dùng 4 MHZ anh à
Em vẫn chưa hiểu giải thuật,ai hiểu giải thuật thì chỉ cho em với.
Em thấy bài toán này khó đấy chứ nhỉ
zero_OR_one vẫn chưa có mặt trong diễn đàn  
Old 12-04-2006, 10:34 AM   #15
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi vpic16f877
Hey,mấy đồng bào có thể hướng dẫn viết C trên pic6f877a ko?
Mình đã có những bài viết ở luồng này rồi mà !
http://www.picvietnam.com/forum//showthread.php?t=357
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
CCS C for PIC16F877A nhh Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 405 24-04-2008 12:00 PM


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