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-12-2005, 01:36 PM   #1
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
"PIC16F877A!NÀO TA CÙNG CHAT!"

Chào cả làng!

Đây là luồng để cho các bạn thảo luận, thắc mắc và … nói nhảm về các bài post lên trong luồng “PIC16F877A từ dễ tớI khó”. Rất mong các bạn tham gia đóng góp ý kiến.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-12-2005, 03:14 PM   #2
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Trích:
Nguyên văn bởi ntc
Chào cả làng!

Đây là luồng để cho các bạn thảo luận, thắc mắc và … nói nhảm về các bài post lên trong luồng “PIC16F877A từ dễ tớI khó”. Rất mong các bạn tham gia đóng góp ý kiến.

Em sẽ theo chân bác. Hôm nọ vừa làm hỏng mất một con F877A. xot quá.

Bác cứ POST lên đê, tôi cũng đang dung con này



Để cho tiện theo dõi mọi người khi bình luận bài nào bên luồng “PIC16F877A từ dễ tớI khó”, các bạn cho biết bài đấy là bài số mấy trong Topic đó. Ít bài thì ko sao nhưng khi mà có nhiều bài hơn rồi thì việc làm thế này sẽ dễ quản lý hơn

Lưu ý: để biết số bài các bạn chú ý đến #number góc phải của bài mình cần quan tâm. VD như bài của tôi là có số #2 trong mục này

thay đổi nội dung bởi: mafd_47a, 04-12-2005 lúc 03:18 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-12-2005, 10:52 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
Hehe! Mới có một con mà đã la ầm lên rồi. Phải chấp nhận hy sinh mà tiến lên thôi bác màd 47a thân mến.

Tui post bài số 1 lên rồi. Mời bà con nhào dzô.
ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-12-2005, 08:58 PM   #4
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
Bạn tinhthanhthep nhớ qua đây rồi thảo luận nghe.

Lâu lắm mới có được một người cho biết ý kiến.

Bài thứ hai bà con chịu khó thư thả cho tui một chút. Tui đang ... thi học kì.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2006, 11:07 AM   #5
minhtienbk
Đệ tử 5 túi
 
minhtienbk's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 120
:
Send a message via ICQ to minhtienbk Send a message via Yahoo to minhtienbk
em la` tha`nh vien moi , em muon hoi 1 chut ,em co' 1 doa.n code cho con 15f84 ,nhung trong tay la.i co' 16f877 ,con quy nay nhieu chan wa' ,ko biet la`m sao de nap cho no' ,can sua cod lai nhu the na`o ... mong ca'c anh chi cu the giu'p :->
__________________
Mạch - remote điều khiển từ xa qua RF 30m ,300m ,500m,1000m,... (đã test ) ,loại công suất lớn , loại cực nhỏ .... , rẻ ,giao hàng nhanh chóng toàn quốc (3 ngày), thâm niên 3 năm mua bán mạch RF 09 8485.bảy bảy.11
bán linh kiện ,MCU ARM , kit , dụng cụ , mạch www.nhattaoonline.com
Hỗ trợ kỹ thuật đầy đủ. Tài liệu đầy đủ.
minhtienbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2006, 12:53 PM   #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
Trích:
Nguyên văn bởi minhtienbk
em la` tha`nh vien moi , em muon hoi 1 chut ,em co' 1 doa.n code cho con 15f84 ,nhung trong tay la.i co' 16f877 ,con quy nay nhieu chan wa' ,ko biet la`m sao de nap cho no' ,can sua cod lai nhu the na`o ... mong ca'c anh chi cu the giu'p :->
Code em tạm thời giữ nguyên, thay đổi như sau:

thay đổi con chip processor

nếu nó có tương tác với portA, thì trong 16F877, em cần phải set portA thành chế độ I/O.

Còn lại em nối mạch tương ứng vào các chân PORTA và PORTB của 877 giống như 84. Vì 84 chỉ có 2 port này.

Về các biến đặt trogn chương trình, nếu nó chỉ ghi vào ở 0x020 trở xuống thì không thành vấn đề gì, bởi vì bộ nhớ của 877 lớn hơn 84, cho nên chắc chắn các vị trí bộ nhớ trong chương trinh 84 có giá trị đối với 877.

Em dịch và nạp lại thử. Nếu không được, thì gửi chương trình lên đây cho mọi người giúp.

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-01-2006, 09:22 AM   #7
minhtienbk
Đệ tử 5 túi
 
minhtienbk's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 120
:
Send a message via ICQ to minhtienbk Send a message via Yahoo to minhtienbk
cảm ơn anh falleaf rất nhiu`
__________________
Mạch - remote điều khiển từ xa qua RF 30m ,300m ,500m,1000m,... (đã test ) ,loại công suất lớn , loại cực nhỏ .... , rẻ ,giao hàng nhanh chóng toàn quốc (3 ngày), thâm niên 3 năm mua bán mạch RF 09 8485.bảy bảy.11
bán linh kiện ,MCU ARM , kit , dụng cụ , mạch www.nhattaoonline.com
Hỗ trợ kỹ thuật đầy đủ. Tài liệu đầy đủ.
minhtienbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2006, 02:43 PM   #8
minhtienbk
Đệ tử 5 túi
 
minhtienbk's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 120
:
Send a message via ICQ to minhtienbk Send a message via Yahoo to minhtienbk
anh cho hoi chu't nua :
phan khai bao ban dau trong code : co' nguoi viet nhu sau
=====
list 16f877a
#include <p16f877a.inc>
=====
co' nguoi viet la`
====
list p=pic16f84a
include p16f84a.inc
=======
co' nguoi viet la`
===
PROCESSOR 16F877A
#INCLUDE <P16F877A.inc>


noi' chung co`n nhieu cach viet khac nua ,anh chi em xem tai sao lai co chuyen nhu vay ,dau la` cach viet dung nhat .merci beaucoup
__________________
Mạch - remote điều khiển từ xa qua RF 30m ,300m ,500m,1000m,... (đã test ) ,loại công suất lớn , loại cực nhỏ .... , rẻ ,giao hàng nhanh chóng toàn quốc (3 ngày), thâm niên 3 năm mua bán mạch RF 09 8485.bảy bảy.11
bán linh kiện ,MCU ARM , kit , dụng cụ , mạch www.nhattaoonline.com
Hỗ trợ kỹ thuật đầy đủ. Tài liệu đầy đủ.

thay đổi nội dung bởi: minhtienbk, 06-01-2006 lúc 02:48 PM.
minhtienbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2006, 02:47 PM   #9
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
Không vấn đề gì cả, chỉ là cách viết directive, các các viết này có quy định trong cách viết directive.

Chúng ta nên thống nhất cách viết này với nhau, để có thể viết chương trình được chuẩn hoá tốt. Theo như các chương trình mẫu anh viết, em nên bắt chước làm theo, còn những chương trình khác, họ chưa có ý định làm thành chuẩn, vì vậy vẫn còn viết theo thói quen, hoặc theo một tài liệu hướng dẫn nào đó mà họ học đầu tiên. Chính vì vậy, anh mới đưa ra chuẩn để khi tụi em học, học ngay từ đầu cái chuẩn đó. picvietnam chủ trương đi đầu về việc chuẩn hoá mà.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2006, 02:50 PM   #10
minhtienbk
Đệ tử 5 túi
 
minhtienbk's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 120
:
Send a message via ICQ to minhtienbk Send a message via Yahoo to minhtienbk
sao trong 1 so doan code nguoi ta ko khai bao TRISA ,PORTA..., ha anh , no' dc mac dinh a`
__________________
Mạch - remote điều khiển từ xa qua RF 30m ,300m ,500m,1000m,... (đã test ) ,loại công suất lớn , loại cực nhỏ .... , rẻ ,giao hàng nhanh chóng toàn quốc (3 ngày), thâm niên 3 năm mua bán mạch RF 09 8485.bảy bảy.11
bán linh kiện ,MCU ARM , kit , dụng cụ , mạch www.nhattaoonline.com
Hỗ trợ kỹ thuật đầy đủ. Tài liệu đầy đủ.
minhtienbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-01-2006, 05:05 PM   #11
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
hehheehe.. thôi, mấy cái này anh để Chính trả lời cho em... Chính là mod phần này, tại anh hay lên mạng quá, lại thói quen cứ thuận miệng trả lời, hy vọng chính sẽ trả lời bằng cái tut sau hấp dẫn hơn .

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 17-01-2006, 05:53 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ấy cái bạn minhtienbk hỏi liên quan đến cái header file. Đây là cái file đính kèm mà bạn "include" vào chương trình thông qua lệnh "INCLUDE <.... .inc>". Nội dung của file này đại khái là dùng để định nghĩa và khai báo một số thông số liên quan đến vi điều khiển PIC, ví dụ như định nghĩa địa chỉ các thanh ghi chức năng. Và do mỗi vi điều khiển PIC được tổ chức sắp xếp theo một qui tắc riêng (ví dụ như địa chỉ các thanh ghi chức năng được sắp xếp khác nhau) nên mỗi vi điều khiển cần một cách định nghĩa hay một file header riêng (bạn dùng PIC16F84 thì phải "INCLUDE <p16f84.inc>, dùng PIC16F877 thì phải "INCLUDE <p16f877.inc>", ...)

Việc dung header file có nhiều tác dụng

Thứ nhất, khỏi phải tốn thì giờ đi định nghĩa lại mấy thanh ghi.

Thứ hai, người viết chương trình sẽ cảm thấy thân thiện hơn trong việc lập trình cho vi điều khiển PIC. VÍ dụ, nếu không sử dụng header file, muốn đưa một giá trị nào đó vào thanh ghi TRISA, bạn phải tra coi cái địa chỉ của thanh ghi TRISA là bao nhiêu, rồi sau đó mới thao tác trên thanh ghi TRISA dựa vào địa chỉ đó. Như vậy đoạn mã lệnh sẽ rất tối nghĩa. Khi đã đính kèm header file, bạn chỉ việc sử dụng cái "tên" TRISA một cách tự nhiên mà không cần quan tâm tới việc địa chỉ của nó là bao nhiêu. Bên cạnh đó đoạn mã lệnh sẽ trở nên thân thiện và dễ hiểu hơn.

Như vậy thực chất PORTA, TRISA, ... chỉ là những cái tên dùng để thay thế cho địa chỉ của các thanh ghi chức năng đó.

Tóm lại

Thứ nhất, không phải là không cần định nghĩa, mà các định nghĩa này đã được thực hiện trong cái header file.

Thứ hai, khi đã đính kèm header file, bạn cứ viết chương trình và sử dụng nó một cách thoải mái, cứ như là đã được "mặc định" như bạn nói.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-02-2006, 01:41 PM   #13
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
Đề nghị mod NTC post tiếp bài cho anh em tham khảo!Lâu quá!
File Kèm Theo
File Type: pdf PIC16F877A-pin diagram.pdf (35.5 KB, 401 lần tả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

thay đổi nội dung bởi: nhh, 20-02-2006 lúc 11:03 AM.
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-04-2006, 11:39 PM   #14
newuser
Đệ tử 4 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 66
:
mình có thắc mắc với bộ nhớ chương trình của P16F877A, mong được bạn Chính giúp đỡ, theo mình hiểu thì bộ nhớ chương trình của P16F877A là bộ nhớ Flash, nghĩa là nó cho phép ta truy cập trực tiếp (đọc/ghi/xóa) nhiều lần bằng phần mềm? Nếu chương trình viết nạp vào mà còn thừa dung lượng thì ta có thể dùng phần thừa ấy như những vùng nhớ khác (lưu dữ liệu chẳng hạn)?có gì khác trong cách truy cập nó với EEPROM?
một thắc mắc nhỏ nữa là về cách định trang của bộ nhớ chương trình, khác với con F84 mình đã từng vọc, con này có 4 pages , vậy cách sự dụng nó như thế nào? các lệnh như GOTO hay CALL chỉ có thể trỏ đến không quá 2K bộ nhớ chương trình, bằng cách nào ta có thể truy cập đến những vùng nhớ còn lại ????
rất mong được bạn Chính phúc đáp!
tb: bạn Chính có nhớ mình không nhỉ? Mình có gặp bạn buổi tối hôm mua mạch nạp ở nhà anh Đăng ấy!
newuser vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-04-2006, 05:20 PM   #15
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ì. Nhớ.

Bộ nhớ chương trình của PIC6F877A có dung lượng 8K và được chia làm 4 page.

Để mã hóa hết bộ nhớ chương trình, thì bộ đếm chương trình PC (Program Counter) cần có dung lượng 13 bit (8 K = 2exp13).

Các lệnh GOTO và CALL chỉ có thể gọi và nhảy trong vòng 2 K (trong trường hợp này nó là một page bộ nhớ chương trình, vì có 4 page, mỗi page 2 K => 8 K) bởi vì trong cách mã hóa lệnh của PIC dòng 16F cho các lệnh GOTO và CALL, thì 3 bit đầu dùng cho opcode (opcode dùng để mã hóa lệnh), 11 bit còn lại dùng cho tham số của các lệnh này. Việc cấu trúc như vậy giúp đảm bảo rằng mỗi lệnh của PIC sẽ được mã hóa bằng một số lượng bit nhất định, trong trường hợp của PIC dòng 16F là 14 bit.

Do tham số của các lệnh GOTO và CALL chỉ là 11 bit, cho nên vùng nhớ chương trình mà các lệnh GOTO và CALL có thể chuyển đến chỉ giới hạn trong vòng 2exp11 = 2 K.

Coi như giải quyết xong vấn đề về lệnh CALL và GOTO. Mình giải quyết tiếp vấn đề truy xuất bộ nhớ chương trình.

Địa chỉ truy xuất bộ nhớ chương trình nằm trong thanh ghi PC 13 bit và bao gồm 2 thanh ghi, PCL và PCH.

PCL là thanh ghi 8 bit. Nó nằm trong bộ nhớ dữ liệu luôn. Như vậy nó cho phép các thao tác như thanh ghi bình thường (đọc, ghi, xóa, ...). Một ứng dụng cho việc truy xuất này là kĩ thuật bảng. Bạn đọc lại cái TUT về kĩ thuật bảng của anh Hiệp hay của mình để nắm rõ hơn.

PCH chứa các bit cao của PC. Nhưng PC chỉ sử dụng 5 bit thấp (cộng lại là 13 bit). Thanh ghi này không cho phép các thao tác thông thường, vì nó không nằm trong bộ nhớ dữ liệu. Việc truy xuất nó phải thông qua thanh ghi PCLATH. Thanh ghi PCLATH nằm trong bộ nhớ dữ liệu.

Lệnh GOTO hay CALL sẽ lấy 3 bit thấp của thanh ghi PCH, và 8 bit của thanh ghi PCL làm tham số điều khiển (tổng cộng 11 bit).

Vấn đề còn lại nằm ở 2 bit 4 và 5 của thanh ghi PLH. Khi được reset, mặc định các bit này mang giá trị 0. Như vậy nếu chỉ dùng các lệnh GOTO hay CALL, ta chỉ có thể nhảy đi nhảy lại trong page 0 của bộ nhớ chương trình. Muốn chuyển đến các page khác, ta phải điều chỉnh giá trị trong các bit này.

Ví dụ:
Chuyển đến Page 1: PCLATH<5:4> = 01.
Chuyển đến Page 2: PCLATH<5:4> = 10.
Chuyển đến Page 3: PCLATH<5:4> = 11.

Thực chất của việc điều khiển này là để diều chỉnh lại giá trị trong bộ đếm chương trình thôi. Muốn truy xuất đến vũng nhớ có địa chỉ cao thì phải điều khiển giá trị địa chỉ của nó. Do giới hạn điều chỉnh của các lệnh GOTO và CALL mà ta cần thêm các thao tác bổ trợ này.

Vấn đề về bộ nhớ Flash. Nó cho phép ta truy cậo trực tiếp bằng phần mềm. Bạn tham khảo thêm datasheet của PIC để biết các thao tác truy xuất như thế nào. Việc truy xuất bộ nhớ chương trình đòi hỏi các yêu cầu khắc khe, các lệnh điều khiển cũng phải gộp chung lại thành một khối lệnh. Trong datasheet có hướng dẫn đó.

Một trong những ứng dụng rất hưu ích của việc ghi lên bộ nhớ chương trình là Tiny Bootloader. Firmware Tiny Bootloader thực hiện công việc này để bố trí lại bộ nhớ chương trình, cũng như ghi chương trình mới lên bộ nhớ chương trình mà không cần thông qua mạch nạp.

Tất nhiên ta cũng có thể sử dụng bộ nhớ chương trình với vai trò như EEPROM. Vấn đề là cách đọc và ghi lên nó. Còn EEPROM ngoài được truy xuất dựa trên các phương thức giao tiếp với nó.

__________________

ntc 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
bác fall cho em hỏi tý về CCSC tại sao lại "Out of ROM" sớm thế? MoH Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 12 20-10-2006 11:31 AM
Hội thảo: "Tầm nhìn dientuvietnam 2006" falleaf Đóng góp ý kiến 2 03-08-2006 06:48 PM
Ý kiến về "Tài liệu hướng dẫn PIC - Tiếng Việt" baoquyen Đóng góp ý kiến 8 04-12-2005 10:04 PM
"Mechatronics handbook " elecminh Điều khiển 3 07-09-2005 12:42 AM
Nộp bài tập "Hoc PIC trong 1 ngày" teo Cơ bản về vi điều khiển và PIC 5 02-06-2005 01:11 AM


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