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 06-03-2006, 02:51 PM   #46
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
Tutorial thứ 3.

http://www.picvietnam.com/download/T...TCR.050306.pdf

Đây là bài viết về kĩ thuật bảng. Sau bài này, có thể nói ta đã trang bị được những cơ sở cơ bản nhất cho việc lập trình cho vi điều khiển PIC.
Có thể tham khảo thêm một số tutorial trong diễn đàn để xây dựng một số ứng dụng cho mình dựa trên các kĩ năng đã có được.
Bài thứ 4 mình định viết về một số ứng dụng, phần quan trọng nhất là các thao tác về chức năng input của các cổng của vi điều khiển, nhưng nghĩ lại thấy không cần, bạn có thể tham khảo rồi tự thực hiện các ứng dụng cũng được. Có gì thắc mắc thì hỏi vậy. Mọi người thấy thế nào.
Nếu không có gì thay đổi, bài tới mình dự định sẽ viết về LED 7 đoạn và các thao tác hiển thị cơ bản với LED 7 đoạn dùng vi điều khiển PIC.
__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 18-03-2006, 08:45 AM   #47
ahchu
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 23
:
Cho em hỏi là làm thế nào biết được 1 chương trình bắt đầu từ address nào? VD như trong tutor của ntc thì tất cả đều bắt đầu tại 0x000. Khi em đọc datasheet của con 16F877a thì địa chỉ 0x000 là "Reset vector", chứ đâu phải là "On-chip program memmory"???
Vậy thì em phải thể bắt đầu từ address 0x000 hay là 0005h?Em không hiểu rõ phần này.
ahchu vẫn chưa có mặt trong diễn đàn  
Old 20-03-2006, 11:57 AM   #48
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
0x000 là reset vector, có nghĩa là khi được reset, bộ đếm chương trình sẽ nhảy đến địa chỉ này và bắt đầu thực hiên lệnh tại đây.

0x004 là interrupt vector, có nghĩa là khi có ngắt xảy ra, bộ đếm chương trình sẽ quay về địa chỉ này để thực hiện lệnh từ đây.

Ví dụ ta có một đoạn code như sau:
ORG 0x000
GOTO start

Có nghĩa là lệnh "GOTO start" sẽ được đưa vào bô nhớ chương trình của vi điều khiển tại địa chỉ 0x000. Khi vi điều khiển được reset, bộ đếm chương trình quay về "reset vector" tại địa chỉ 0x000, ở đó nó đọc được lệnh "GOTO start" và nhảy đến label "start".

Còn việc label start nằm ở chỗ nào thì còn tùy thuộc vào việc ta đặt cái label "start" tại vị trí nào trong chương trình, hoặc ta có thể điều khiển địa chỉ đặt nó bằng cách sử dụng lệnh "ORG ....". Ví dụ ta viết như sau:

ORG 0x050
start
; đoạn chương trình start

Thì khi đó đoạn chương trình "start" sẽ được bắt đầu tại địa chỉ 0x050 của bộ nhớ chương trình.

Như vậy bạn có thể tổ chức bộ nhớ chương trình theo như mình mong muốn.

__________________

ntc vẫn chưa có mặt trong diễn đàn  
Old 25-03-2006, 04:10 PM   #49
ngoalongdochanh
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 2
:
Cho toi hoi tai sao khi khai bao:
#device PIC16F877 *=16 ADC=10

thi CCSC bao loi: "Can not change device type this far into the code"
Cach khac phuc
ngoalongdochanh vẫn chưa có mặt trong diễn đàn  
Old 27-03-2006, 09:26 AM   #50
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, 07:57 PM   #51
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 ngoalongdochanh
Cho toi hoi tai sao khi khai bao:
#device PIC16F877 *=16 ADC=10

thi CCSC bao loi: "Can not change device type this far into the code"
Cach khac phuc
Hi!

CCS C báo lỗi tại vị trí câu lệnh này,nhưng bản thân nó hoàn toàn đúng đắn,vì bạn không post toàn bộ chương trình của bạn lên nên không thể biết chỉ độc mỗi tội bạn đã cố tình thay đổi device type,nên chương trình báo lỗi.
Tớ có post 1 bài ADC đơn giản ở luồng này :
http://www.picvietnam.com/forum/show...=2113#post2113

Hy vọng nó sẽ có ích cho bạn !
__________________
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, 08:17 PM   #52
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   #53
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   #54
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   #55
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, 11:06 AM   #56
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   #57
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, 06:31 PM   #58
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, 08:09 PM   #59
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   #60
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  
Ðề 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à 09:12 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