Tải bản đầy đủ (.pdf) (44 trang)

HỌC PIC QUA VI dụ hot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 44 trang )


TỰ HỌC LẬP TRÌNH C
CHO PIC QUA VÍ DỤ.

Biên Soạn: Ch Phan Vinh Hiếu.

Tập 1: Dành cho người mới bắt đầu



































Lời nói đầu:

Trên thế giới, dòng Vi điều khiển Pic (Programmable Interlligent Controller)
đang được sử dụng ngày càng rộng rải trong mọi lãnh vực của đời sống do các tính năng
vượt trội của nó so với các dòng VĐK khác. Do đó, nhu cầu học tập, nghiên cứu và ứng
dụng Vi Điều Khiển Pic trong giới sinh viên các trường khối kỷ thuật cũng như của các
anh chị đang làm việc trong các lĩnh vực Điện-Điện Tử-Tự Động Hóa ngày càng cao.
Tuy nhiên, tài liệu Tiếng Việt của VĐK Pic hiện nay chưa nhiều và còn nặng tính lý
thuyết, học thuật mà chưa đi sâu vào thực tế ứng dụng nên còn gây nhiều khó khăn cho
người học. Từ lý do đó, tôi viết cuốn”” này với mong muốn là đem tới cho độc giả một
cách tiếp cận VĐK mới: dể hiểu, dể làm, ít tốn thời gian và tiết kiệm chi phí nhất nhưng
vẫn đảm bảo lượng kiến thức cần thiết để các bạn có thể tự mở rông, nâng cao. Trong
cuốn sách này chúng ta từng bước học cách lập trình và sử dụng các modul của Pic qua
các bài tập thực tế, trực quang. Tài liệu chắc chắn không tránh khỏi thiếu sót, tôi mong
nhận được ý kiến đóng góp chân thành của các bạn để các ấn bản sau được tốt hơn. Rất
cám ơn.
Mọi thư từ, ý kiến, đóng góp và thắc mắc xin gởi về địa chỉ:
Handphone: 0983053941.






























Mục lục

Phần 1: Các bước chuẩn bị trước khi làm việc với PIC.


1- Tổng quan.

2- Giới thiệu và hướng dẩn cài đặt CCSC

3- Ráp mạch hoạt động của Pic.

4- Ráp mạch nạp của Pic.

5- Giới thiệu và sử dụng chương trình Win Pic-800.

6- Kiểm tra mạch nạp và mạch test.

7- Giới thiệu VĐK Pic-Pic 16f877a.

8- Cấu trúc cơ bản của một chương trình C cho Pic.


Phần 2: Các bài thực hành.

Bài tập 1: Bặt tắt đèn Led.

Bài tập 2: DK dong co buoc.

Bài tập 3: Điều khiển tốc độ động cơ DC.

Bài tập 4: Giao tiếp với bàn phím.

Bài tập 5: Quét Led 7 đoạn.


Bài tập 6: Đo - hiển thị nhiệt độ .











Phần 1: Các bước chuẩn bị trước khi làm việc với PIC.

1 Tổng quan:

Để làm việc với VĐK chúng ta cần có 3 thứ cơ bản: Trình biên dịch (Compiler),
Mạch-chương trình nạp(Programmer) và Kit thực hành .

- Về trình biên dịch : Chúng ta sử dụng CCSC phiên bản 4.0.11 cho phép
chúng ta dùng ngôn ngữ C để lập trình cho Pic, trình biên dịch này các
bạn có thể tự tải trên mạng hoặc lấy trong đĩa CD đính kèm theo sách.

- Mạch nạp(Programmer) và Kit thực hành: Tối có tặng kèm theo sách 2
PCB: 1 PCB mạch nạp loại JMD Programmer và 1 PCB kit thực hành
khá đơn giản để các bạn có thể mua linh kiện về tự ráp, trong đĩa CD tôi
có ghi danh sách linh kiện cần mua và hướng dẩn chi tiết cách lắp ráp,
các bạn chịu khó nghiên cứu. Ngoài ra, các bạn có thể sử dụng bất kỳ
loại mạch nạp và kit test nào mà các bạn có miễn là có nguyên lý phần
cứng giống như yêu cầu mà tôi mô tả ở mỗi bài tập.


- Chương trình nạp: Chúng ta sử dụng chương trình Winpic 800 phiên bản
, trong đĩa CD tôi cũng đã hướng dẩn chi tiết cách sử dụng.

2 Hướng dẩn cài đặt và sử dụng CCSC:

Một trong những khó khăn với người học khi lần đầu tiếp cận với VĐK là việc
lập trình bằng hợp ngữ do sự khó hiểu và phức tạp của nó. Do đó tôi chọn ngữ C để giới
thiệu với các bạn nhằm tạo sự dể chịu cũng như rút ngắn thời gian làm việc cho người
dùng VĐK. Với ưu thế về sự đơn giản, tiện lợi, C dường như là 1 giải pháp cho người
học VĐK. Tuy nhiên, nếu có thời gian các bạn nên tìm hiểu thêm về hợp ngử để có nền
tảng vững chắc .



Phần mềm CCSC là phần mềm phổ biến để lập tri2ng C cho Pic. Tôi sử dụng
phiên bản 4.016 để làm việc.

Hướng dẩn cài đặt: Bỏ đĩa CD vào ổ đĩa. Click vào file CCS_PCWH_4.016. Trong đó
có chứa 3 file:









Để cài thành công trình biên dịch này các bạn phải tuân thủ theo 3 bước sau:


Bước thứ 1: Cài đặt chương trình
Click vào tập tin pcwhupd để cài đặt.



Click next.



Chọn thư mục cài đặt. Click next.



Click next. Để bắt đầu quá trình cài đặt.








Sau khi hoan tat máy sẽ hiện ra thông báo đòi file đăng ký:

Nhấn cancel. Rồi nhấn Finish.

Bước thứ 2: Đăng ký
Sau đó bạn chép file KeyfileGen từ tập tin CCS_PCWH_4.016.


vào thư mục cài đặt C:\Program Files\PICC để đăng ký sử dụng

Click vào KeyfileGen lúc đó sẽ hiện lên bảng thông báo sau:




Click vào Tab Generar licencias.org sẽ xuất hiện:




Bạn tìm đường dẩn đến thư mục cài đặt PICC


Sau đó click vào PICC rồi nhấn OK

Bước thứ 3: Cuối cùng là cài phần update cho chương trình

. Bạn click vào tập tin ideutilsupd trong thư mục CCS_PCWH_4.016 ở đĩa CD:


Tiếp tục Click next



Sau khi hoàn tất bạn nhấn finish rồi khởi động lại máy.

Hướng dẫn sử dụng CCSC.


Sau khi khởi động lại máy, trên màn hình Desktop sẽ xuất hiện Icon:



Click vào Icon này cửa sổ làm việc chính sẽ mỡ ra.




Mục Help
Thanh Men
u

Save



Trên thanh Menu có các mục là: File, Project, Edit, Search, Compile, View, Tools,
Debug, Document, Users. Bạn nhấn vào từng mục để xem các chức năng cụ thể.










* Mục File :

Mục Compile ( biên dịch):



Tạo 1 chương trình soạn thảo mới.
Mở 1 chương trình đã có sẳn.

FILE




Đóng 1 chương trình đang mở.


Lưu nội dung chương trình.


Lưu nội dung chương trình với 1 tên khác.





*

* Mục Tool (công cụ):

COMPILE


























Xác định giòng Pic đang lập trình.
Xem mã asm được dịch từ file C.

Nhấn vào đây (hoặc nh để dịch ra file hex.ắn F9)
Dùng để hiển thị nội dung VĐK gởi về PC qua cổng RS232.
Dùng để dịch ngược file .hex về file.asm hay .c


Dùng để chuyển đổi giá trị giữa các hệ
đếm(deca-binary-hexa 8 16 32).


* Mục Edit (Chỉnh sữa):
Mục Help (hỗ trợ, hướng dẫn):











*





Nhấn vào đây (hoặc F1) để mở Help.
Thư viện tập lệnh phần cứng của PIC.
Thư viện tập lệnh C.





- Ráp mạch hoạt động của Pic.
0- Ráp mạch nạp của Pic.

7 G
9

1





iới thiệu Pic16f877a:



Vi điều khiển Pic có rất nhiều loại, nhiều dòng như: 12fxxx, 16fxxx, 18fxxx,

Bảng so sánh đặc tính giửa AT89C51 và P16F877A:
33fxxx, 32fxxx, dsPIC, rfPIC, PIC giao tiếp Usb . v . v…….; tùy theo nhu cầu ứng
dụng của người sử dụng mà chúng ta có sự lựa chọn cho thích hợp. Trong khuôn khổ
cuốn sách này tôi chọn Pic16f877a để giới thiệu vối các bạn vì nó là con Pic thuộc họ 14
bit 40 chân đủ mạnh cho các ứng dụng ở mức độ thông thường và tương đối phổ biến ở
thị trường Việt Nam. Nếu các bạn nắm vửng cấu trúc và cách lập của Pic16f877a các
bạn có thể dể dàng tiếp cận với các họ Pic khác vì chúng có chung các cấu trúc và tập
lệnh căn bản.













AT89C51




Đặc tính. AT89C51.
PIC16F877A.
Hãng sản xuất:
Atmel
(USA).
Hãng sản xuất:Microchip
(USA).
Năm ra đời 1982. 1995.
Độ dài tập lệnh 8 bit. 14 bit.
Bộ nhớ Flash Rom
4 K. 8 K.
Bộ nhớ Ram
128 Bytes. 368 Bytes.
Bộ nhớ EEPROM.
Khơng có.
256 Bytes.

Số Port xuất nhập 4 Port(0,1,2,3), 32 I/O.
5 Port (A, B, C, D, E), 33 I/O.
Bộ đònh thời (Timer)
2. 3.

Khơng có. 2.
Modul điều biến xung (CCP )
Độ phân giải: 10 bit.
Modul biến đổi tương tự - số (ADC)
Khơng có.
1
Độ phân giải: 10 bit, 8 kênh.
Modul so sánh tng tư
(Compartor)ï.
Khơng có
2
Modul giám sát hoạt động(WDT).
Khơng có
1
Cổng song song (Parallel)
Khơng có.
1
Cổng nối tiếp (RS232)
1. 1.
Chuẩn giao tiếp SPI.
Chuẩn giao tiếp I2C.
Chế độ tiết kiệm năng lượng (Sleep
Mode).
Khơng có. 1
Nguồn ngắt (Interrupt).

6 15

Nạp trương trình theo chuẩn nối
tiếp
(ICSP™)
Công ghệ chế tạo
CMOS. CMOS.
Số tập lệnh hợp ngữ.

111 35
Tần số hoạt động 12 MHz. Tối đa 20 MHz.
Giá thành 15.000-25.000 VNĐ 55.000-70.000 VNĐ
Cống suất họat động tối đa của các cổng I/O:

Dòng ngõ ra cực đại khi ngõ ra ở trạng thái điện áp cao là 20 mA.
Dòng ngõ ra cực đại khi ngõ ra ở trạng thái điện áp thấp là 25 mA.
Dòng điện của ngõ ra đủ lớn để kích đèn Led trực tiếp mà khơng cần qua Buffer.











Điện áp làm việc:


Điện áp làm việc tối đa là 5.5V.
Điện áp làm việc tối thiểu là 4.5V.

Mạch Reset:

Pic sẽ bị reset nếu đưa chân số 1(MCLR) xuống GND .










Nguyên lý mạch reset: khi mở nguồn tụ C18 sẽ nối chân 1 xuống Mass – Reset VĐK.
Khi điện áp đã ổn định điện trở R24 sẽ nối chân 1 lên cao thế 5V- đưa VĐK về trạng thái
hoạt động. Nút nhấn sẽ Reset mạch một cách bắt buộc. Diod d1 dùng để xã dòng điệntừ
tụ c18 về nguồn mà không phải qua điện trở r24 khi tắt điện nguồn làm mạch reset ngay
sau khi ta tắt điện.




Thạch anh dao động:

VĐK Pic hoạt động ở 4 chế độ dao động :

RC: Chế độ tạo dao động bằng điện trở R- tụ điện C.

LP: Chế độ tạo dao động bằng thạch anh công suất thấp, tần số giao đông từ:
32Khz-200Khz.
XT: Chế độ tạo dao động bằng thạch anh tần số trung bình, tần số giao đông từ:
100Khz-4Mhz.

HS: Chế độ tạo dao động bằng thạch anh tần số cao, tần số giao đông từ: 4Mhz-
20Mhz.











Khi lập trình các bạn phải khai báo chế độ dao động tương ứng với giá trị thạch anh mà
các bạn sử dụng một cách chính xác nếu không chương trình sẽ không chạy. Tụ lọc nhiễu
xung thạch anh nằm trong khoảng từ 15-33pF.

Ví dụ:
Nếu sử dụng thạch anh 10Mhz các bạn phải khai báo chế độ dao động là HS.
Nếu sử dụng thạch anh 1Mhz các bạn phải khai báo chế độ dao động là XT.







8 Cấu trúc 1 chương trình C cơ bản:

Một chương trình C về cơ bản gồm 3 phần:

Phần thứ 1(Không bắt buộc): Phần chú thích. Bất cứ một chương trình nào, cũng được
bắt đầu bằng việc giới thiệu về chương trình, tên chương trình, người thực hiện chương
trình, lưu ý phần cứng, . v. v . . .Nội dung của phần này phải nằm sau dấu //



//================================================= =======
// Ten chuong trinh : Chuong trình chop tat den led.
// Nguoi thuc hien : X X X
// Ngay thuc hien : 19/06/2008
// Phien ban : 1.0
// Mo ta –Chu thich : Dung PIC16F877A - thach anh 20MHz
//
//
//
//================================================= =======

Số lượng chương trình các bạn viết sẽ ngày càng nhiều và càng phức tạp, đa dạng. Việc
ghi chú thích rõ ràng ở đầu mỗi chương trình sẻ giúp các bạn quản lý nắm bắt và sử dụng
các chương trình mình đã viết tốt hơn, ngăn nắp hơn.



Phần thứ hai(Bắt buộc): Phần khởi tạo PIC. Phần này là phần bắt buộc theo sau phần
ghi chú, bởi vì chương trình dịch cần phải hiểu bạn đang làm việc với con PIC nào, làm

việc với nó như thế nào và thiết lập phần cứng cho nó ra sao.

#include<16f877A.h>
#fuses HS,NOLVP,NOWDT,NOPUT, NOPROTECT
#use delay (clock=20000000)

Giải thích:
• Từ khóa #include<x x x > dùng để khai báo bạn đang viết chương trình cho con
Pic nào.
• Từ khóa#use delay (clock=20000000) dùng để khai báo tốc độ thạch anh mà bạn
đang sử dụng cho Pic.
• Từ khóa #fuses dùng để thiết lập cấu hình hoạt động cho Pic :
1. Khai tốc độ thạch anh: HS, XT, LP hay RC.
2. Có sự dụng bộ giám sát hoạt động WDT hay không.
3. Có bảo vệ code hay không.
4. Timer 0 có sử dụng khi mở nguồng lên hay không.


Phần còn lại là chương trình chính (Bắt buộc):



void main()
{



//Nội dung chương trình chính được viết tại đây.





}

• Lưu ý: Trình biên dịch không dịch những nội dung nằm sau dấu // vì những nội
dung đó được hiểu là chú thích.

Đến đây các bạn đã có đầy đủ những phương tiện và kiến thức cơ bản để bắt tay vào
phần thứ 2: làm các bài thực hành.




Phần 2: Các bài thực hành.

Bài 1: Xuất Giá Trị.

I _ Lý thuyết:
Pic 16f877a có 5 Port I/O bao gồm:

• Port A(RA0- RA5): có 6 I/O.
• Port B(RB0- RB7): có 8 I/O.
• Port C(RC0- RC7): có 8 I/O.
• Port D(RD0- RD7): có 8 I/O.
• Port E(RE0- RE2): có 3 I/O.

Khác với AT89C51 hoạt động xuất nhập của từng Port được thực hiện chỉ bởi 1
thanh ghi là thanh ghi Port(P0, P1, P2, P3) thì Pic sử dụng 2 thanh ghi là thanh ghi
Port(PortA,PortB,PortC…) và thanh ghi Tris (TrisA, TrisB, TrisC… ).


Thanh ghi Tris được dùng để quy định từng chân riêng rẽ của Port hay cả Port là
xuất hay nhập. Sau đó dữ liệu sẽ được xuất hay được nhập thông qua việc ghi vào hay
đọc ra từ thanh ghi Port.



Ví dụ: Khi ta ghi vào thanh ghi Tris B giá trị 00001111 thì nghĩa làcác chân từ RB0-RB3
là nhập còn từ RB4-RB7 là xuất.


Hệ đếm trong C:
Số nhị phân được viết dưới dạng: 0Bxxxxxxxx. Ví dụ: 0b11111111.
Số Hexa được viết dưới dạng: 0Xxx. Ví dụ: 0XFF.
Số Deca được viết dưới dạng: xxx. Ví dụ: 255.









II _ Thực hành:

Bài 1 A:
Bây giờ chúng ta bắt đầu bài thực hành đầu tiên: Sử dụng Port B để bật tắt đèn Led:

Bước thứ 1: Viết chương trình.
Bạn mở chương trình CCSC, vào File ->New -> Source file.





Bạn đặt tên và lưu project vào 1 thư mục nào đó do bạn chỉ định.Ví dụ: baitap1.c
Sau đó bạn đánh đoạn mã sau vào.

//================================================= =======
// Ten chuong trinh : Chuong trình xuat gia tri thay doi trang thai Port B
// Nguoi thuc hien : Phan Vinh Hieu.
// Ngay thuc hien : 19/08/2008
// Phien ban : 1.0
// Mo ta –Chu thich : Dung PIC16F877A - thach anh 20MHz
//Port B được quy định là Port xuat va noi voi 8 led de kiem tra trang thai.
//================================================= =======
#include<16f877A.h>

#fuses HS,NOWDT,PUT

#use delay(clock=20000000) // Su dung thanh anh 20MHz.

main()
{
Set_tris_B (0B 00000000);//Quy định trạng thái xuất nhập của Port.
Lưu ý: Kết thúc lệnh phải có dấu ;
Output_B(0B 11111111);//Xuất giá trị ra Port B.
}

Bây giờ, chúng ta cùng tìm hiểu ý nghĩa của từng giòng lệnh:


Tại phần khai bao phần cứng: #fuses HS,NOWDT,PUT.


- Khai báo HS: Sử dụng thạch anh tốc độ cao(20MHz).
- Khai báo NOWDT:Không sử dụng bộ định thời giám sát.
- Khai báo PUT: Không sử dụng Timer0.
Trong thân chương trình chính:
- Lệnh Set_Tris_B(0B 00000000
) sẽ đưa giá trị 0B 00000000 vào
thanh ghi TRIS_B nhằm quy định toàn bộ Port B là xuất.
- Lệnh Output_B(0B 11111111) sẽ đưa giá trị 0B 11111111 vào thanh ghi
PortB đưa trạng thái ngõ ra của tất cả các chân của Port B lên cao .
(*Lưu ý : Tham khảo Help của CCSC phần Build in function để nắm rõ hơn về các tập
lệnh.)
Sau khi hoàn tất, các bạn ấn nút save để lưu chương trình lại rồi nhấn Compile
(hoặc F9) để dịch ra tập tin .Hex . Lúc đó chương trình sẽ hiện ra bản thông báo sau :

Tên

đường dẩn của project được dịch.















Thông báo xem có lỗi hay
không.

Thông báo dung lượng Ram - Rom đã
sài hết.
Bước 2: Tiếp theo ta nạp chương trình cho Pic bằng phần mếm Win Pic 800.

- Đầu tiên bạn mở tập tin WinPic800-356d-All nằm trong đĩa CD.
- Click chuột phãi vào Icon.



-Tạo một shortcut rồi chép ra desktop.



Click vào Shortcut này để mở chương trình nạp.



















Kiểm tra kết nối giữa kit nạp
với máy tính.
Thiết lập cấu hình mạch nạp.
Tải file Hex.
Chọn ngôn ngữ.
Bắt đầu nạp IC.

Xóa nội dung IC.
Tự động tìm mã IC được nạp.
Đọc ngược từ IC


Đầu tiên bạn cần khai báo và thiết lập phần cứng cho mạch nạp: Vào Setting ->
Hardware:















Khai báo cổng com
mà bạn cắm mạch
nạp vào.
Lực chọn loại Kit nạp

Tại mục Selection Hardware bạn chọn loại kit nạp JMD Programmer. Sau đó xác dịnh
địa chỉ cổng Com của máy rồi nhấn Apply edits để thoát.
Sau khi set up xong, bạn cắm IC vào mạch nạp(Lưu ý: Chỉ cắm IC vào sau khi set up
phần cứng xong.).Bạn nhấn vào biểu tượng:


Tải file Hex cần nạp.

Tiếp theo nhấn:


Để nạp.

Sau khi nạp bạn rút IC ra khỏi mạch và cắm IC vào mạch test.

Bước 3: Cấm Buss nối giữa Port B với modul 8 đèn Led theo sơ đồ sau:























LED4
RESET
1 2
3 4
LED3
R10
330
C18
104pF
3

3
R6
330
BUS 8 SOI
R24
1k
LED2
R12
330
R11
330
LED1 LED5LED0
5V
LED7
3
3
R13
330
5V
R9
330
U6
PIC16F877A
31
12
1
13
11
32
2

3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8

9
10
14
GND
GND
MCLR/VPP
OSC1/CLK
VDD
VDD
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3
RA4/T0CLK
RA5/AN4/SS
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSI/T1CLK
RC1/CCP2/T1OSO
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK

RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/AN5/RD
RE1/AN6/WR
RE2/AN6/CS
OSC2/CLKOUT
LED6
2
R7
330
J10
HEADER 8x2/SM
2
4
6
8
1
3
5
7
R8
330
JUMPER 8

2
4
6
8
1
3
5
7




Sau đó bạn cấp nguồn cho Kit thực hành , ta thấy toàn bộ Led Port B sáng. Nếu trạng thái
Led không thay đổi bạn làm lại thật cẩn thận và chính xác từng bước trên.

Bây giờ các bạn làm lại bài tập trên với các port A, C, D, E ()và xuất ra các giá trị khác
nhau rồi quan sát trạng thái của các đèn Led.


Ngoài lệnh Output_B() tác động lên cả Port ta còn lệnh tác động lên từng chân của Port
như:
output_bit( PIN_B0, 0); Lệnh này điều khiểng trạng thái 1 chân của Port,
output_high(PIN_A0); Lệnh này điều khiểng trạng thái 1 chân của Port

output_low (PIN_A0);
output_toggle(PIN_B4); Lệnh này đảo trạng thái ngõ ra

Bài 1 B:

Bây giờ sẽ đọc trạng thái ngõ vào: Việc đọc trạng thái ngõ vào của VĐK nha




R8
1K
B8
5V
1 4
2 3






Đọc trạng thái PortB và xuất ra PortD:


#include<16f877A.h>
#fuses HS
#use delay(clock=20000000) // defind crystal = 20MHz


main()
{
Set_tris_B (0B 11111111);
Set_tris_D (0B 00000000);
Output_D(Input_B());
}



- Lệnh SET_TRIS_B(0B 11111111) sẽ đưa giá trị 0B
11111111 vào thanh ghi TRIS_B nhằm quy định toàn bộ
Port B là nhập.
-
Lệnh SET_TRIS_D(0B 00000000) sẽ đưa giá trị 0B
00000000 vào thanh ghi TRIS_D nhằm quy định toàn bộ
Port D là xuất.
-
-
Input_B() sẽ đọc trạng thái các chân của PortB.
- Output_D(Input_B()); sẽ xuất các trạng thái đó ra các led của Port D






















R12
330
C18
104pF
B1
R11
330
1 4
2 3
33pF
5V
LED3
5V
R10
330
1 4
2 3
R13
330
LED6
1 4
2 3
B7
R7
330
RESET
1 2

3 4
R8
1K
R8
1K
JUMPER 8
2
4
6
8
1
3
5
7
20Mhz
5V
1 4
2 3
BUS 8 SOI
U6
PIC16F877A
31
12
1
13
11
32
2
3
4

5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10

14
GND
GND
MCLR/VPP
OSC1/CLK
VDD
VDD
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3
RA4/T0CLK
RA5/AN4/SS
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSI/T1CLK
RC1/CCP2/T1OSO
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0

RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/AN5/RD
RE1/AN6/WR
RE2/AN6/CS
OSC2/CLKOUT
B4
5V
R8
1K
R6
330
R8
1K
B3 B8
5V
1 4
2 3
B5
LED4
R8
1K
R24
1k
1 4

2 3
5V
R8
1K
5V
BUS 8 SOI
J10
HEADER 8x2/SM
2
4
6
8
1
3
5
7
LED1 LED2
33pF
R8
1K
5V
LED5
R8
330
1 4
2 3
B2
JUMPER 8
2
4

6
8
1
3
5
7
5V
5V
1 4
2 3
LED0
B6
R9
330
R8
1K
JUMPER 8
2
4
6
8
1
3
5
7
LED7













Bài 2: SỬ DỤNG HÀM DELAY VÀ LỆNH GOTO.

I _ Lý thuyết:
a-hàm delay:


Khi lập trình bằng hợp ngử để điều khiển đèn Led chớp tắt ta phải viết 1 chương trình
con có tên là Delay với mục đích là làm chậm hoạt động của VĐK đi 1 khoảng thời gian
bằng cách tuần tự giảm giá trị của các thanh ghi. Đối với C ta không còn phải làm công
việc này nữa vì C hộ trợ cho ta 3 hàm Delay như sau:
- delay_cycles (time):Làm chậm chương trình đi (time) lần chu kỳ
máy, giá trị của (time) thay đổi trong khoảng từ 0-255.
- delay_ms (time): Làm chậm chương trình đi (time) mili giây, giá
trị của (time) thay đổi trong khoảng từ 0- 65535.
- delay_us (time): Làm chậm chương trình đi (time) micro giây, giá
trị của (time) thay đổi trong khoảng từ 0- 65535.
Vi dụ: Nếu bạn muốn chương trình chạy chậm đi 1 giây bạn sử dụng hàm Delay như sau:
delay_ms (1000);//1 giây bằng 1000 mili giây.
a-Lệnh Goto:


Khi các bạn muốn chương trình của các bạn rẻ nhánh đến 1 vị trí, 1 đoạn chương

tri2ng khác thỉ các bạn dùng lệnh nhảy, trong 89c51 ta dùng lệnh LJMP NHAN. Còn
trong PIC ta dùng lệnh GOTO NHAN.

Ví dụ:






II _ Thực hành:

Bây gio chúng ta sẽ sử dụng hàm delay và lênh goto để viết một chương
trình chớp tắt đèn led
//Chuong trinh chớp tắt đèn Led ung dụng hàm delay và lệnh goto
#include<16f877A.h>
#fuses HS

#use delay(clock=20000000) // defind crystal = 20MHz
main()
{
SET_TRIS_B (0b00000000);
LOOP:
OUTPUT_B(0b00000000);
DELAY_MS(1000);
OUTPUT_B(0b11111111);
DELAY_MS(1000);
GOTO LOOP;
}



Giải thích:
Đầu tiên bằng lệnh
SET_TRIS_B (0b00000000);
chúng ta thiết lập toàn bộ Port B là xuất. Sau lenh này ta gán một nhản tên là
LOOP:
Sau nhan LOOP ta dùng lệnh
OUTPUT_B(0b00000000);
để tắt toàn bộ Port B. Tiếp theo ta dung hàm delay
DELAY_MS(1000);
Để delay 1 giây rồi bật sáng toàn bộ Port B bằng lệnh:

OUTPUT_B(0b11111111);
Chúng ta delay tiep 1 giây
DELAY_MS(1000);
Như vậy đèn Led đã chớp tắt 1 lần sau 1 giây và chúng ta muốn quá trình này lặp đi lặp
lại nên sẽ nhảy về để thực hiện lại từ đầu bằng lệnh GOTO
GOTO LOOP;






















Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×