tài liệu lập trình pic18f4450

88
CÔNG TY CỔ PHẦN TỰ ĐỘNG HOÁ T©n Ph¸t AUTOMATION Địa chỉ: Km11 + 500 – Quốc lộ 1A – Thanh Trì Điện thoại: 084 - 4 - 62883181/ Fax: 084 - 4 Website: www.tpa.com.vn - Email: TÀI LIỆU HƯỚNG DẪN SỬ DỤNG BỘ THÍ NGHIỆM PIC18F4550 mP.A003 Hà Nội, tháng 01-2011 ISO 9001:2008

Upload: rockwellsiemens

Post on 11-Jan-2016

44 views

Category:

Documents


8 download

DESCRIPTION

tài liệu học lập trình PIC18 hay cho những ai muốn tìm hiểu về vi điều khiển PIC

TRANSCRIPT

Page 1: Tài liệu lập trình PIC18F4450

CÔNG TY CỔ PHẦN TỰ ĐỘNG HOÁ

T©n Ph¸t AUTOMATION Địa chỉ: Km11 + 500 – Quốc lộ 1A – Thanh Trì – Hà Nội

Điện thoại: 084 - 4 - 62883181/ Fax: 084 - 4 - 62883180Website: www.tpa.com.vn - Email: [email protected]

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG

BỘ THÍ NGHIỆM PIC18F4550mP.A003

Hà Nội, tháng 01-2011

BỘ THÍ NGHIỆM PIC18F4550mP.A003

ISO 9001:2008

Page 2: Tài liệu lập trình PIC18F4450

CÁC NỘI DUNG ĐƯỢC TRÌNH BÀY

☺ Giới thiệu bộ thí nghiệm☺ Vi điều khiển PIC18F4550☺ Giới thiệu MPLAB☺ Các bài thí nghiệm trên bộ thí nghiệm

PIC18F4550☺ Sơ đô nguyên ly PIC18F4550 TRAINNING

KIT

Page 3: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

1 Giới thiệu bộ thí nghiệm

Bộ thí nghiệm PIC được sản xuất đạt tiêu chuẩn quản lý chất lượng ISO 9001: 2008 và ISO 14001-2004 trong lĩnh vực thiết bị dạy nghề và sản xuất mô hình học cụ phục vụ dạy nghề. Hộp gá lắp thiết bị và hộp gá lắp module bằng nhựa, đảm bảo tính thẩm mỹ và độ bềnn theo thời gian.

Bộ thí nghiệm vi xử lý PIC sử dụng chip PIC 18F4550, có thể lập trình sử dụng hệ thống công tắc nhấn và chuyển mạch, giao tiếp với máy tính qua cổng COM, USB, RS 232, RS 485, có khả năng điều khiển được nhiều đối tượng công nghiệp. Môi trường phát triển phần mềm chính hãng MBLAB IDE v8.00 hoặc cao hơn.

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 3

Page 4: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

2 Vi điều khiển PIC18F4550

2.1 Sơ đồ chân của PIC18F550

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 4

Page 5: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

2.2 Chức năng các chân của PIC18F550Bảng: Bảng mô tả các chức năng từng chân của PIC18F4550

Chân Hướng Mô tả chức năng và các đặc tính

AN0- AN12

I 13 kênh Input, Analog, AN6 và AN7 còn dùng cho lập trình dữ liệu và xung clock vào.

Avdd Nguồn dương cho môđun tương tự.

Avss Nguồn Ground cho modul tương tự

CLKI I Lối vào của xung Clock ngoài, luôn kết hợp với chân OSC1.

CLKO O Lối ra của bộ dao động tinh thể, nối với tinh thể hoặc bộ cộng hưởng trong chế độ dao động thạch anh. Giống như CKLO trong chế độ RC hoặc EC. Luôn kết hợp với chân chức năng OSC2.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 5

Page 6: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

CN0-CN7, CN17-CN18

I Khai báo thay đổi ở lối vào.

COFS I/O Cổng giao tiếp chuyển đổi dữ liệu đồng bộ khung.

CSCK I/O Cổng giao tiếp chuyển đổi dữ liệu Clock vào ra nối tiếp.

CSDI I Lối vào dữ liệu nối tiếp

CSDO O Lối ra dữ liệu nối tiếp.

C1RX I Cổng nhận bus CAN1

C1TX O Cổng phát bus CAN1

EMUD I/O Cổng vào ra dữ liệu kênh truyền thông sơ cấp của ICD.

EMUC I/O Vào ra xung nhịp kênh sơ cấp.

EMUD1 I/O Vào ra dữ liệu kênh thứ cấp.

EMUC1EMUD2 EMUC2EMUD3 EMUC3

I/O …

IC1, IC2, IC7, IC8

I Các cổng vào của môđun Capture.

INT0, INT1, INT2

I. Các ngắt ngoài.

LVDIN I Cổng vào phát hiện sụt thế.

/MCLR I Power, chân Reset, mức tích cực thấp

OSC1 I Lối vào bộ giao động tinh thể.

OSC2 O Bộ đệm Trigger Schmitt được sử dụng khi cấu hình trong chế độ RC. Lối ra bộ dao động tinh thể.

PGD I/O Vào ra dữ liệu của ICSP.

PGC I Lối vào Clock của ICSP.

RA11 I/O Port A.

RB0- I/O PortB.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 6

Page 7: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

RB12

RC13- RC15

I/O PortC.

RD0-RD3, RD8, RD9

I/O PortD.

RF0-RF5 I/O PortF.

SCK1 I/O Vào ra Clock đồng bộ của khối SPI1.

SDI1 I Lối vào dữ liêu của khối SPI1.

SDO1 O Lối ra dữ liệu của SPI1.

SS1 I Slaver đồng bộ.

SCL I/O Vào ra Clock nối tiếp của I2C.

SDA I/O Vào ra Data nối tiếp đồng bộ của I2C.

SOSCO O Lối ra bộ dao động tinh thể công suất thấp 32Khz

SOSCI I Lối vào bộ dao động 32Khz

T1CK I Lối vào xung Clock ngoài của Timer1.

T2CK I Lối vào xung Clock ngoài của Timer2.

U1RX I Cổng nhận khối UART1

U1TX O Cổng phát khối UART1

U1ARX I Cổng nhận mở rộng khối UART1.

U1ATX O Cổng phát mở rộng khối UART1.

VDD Chân nguồn Vdd

VSS Chân nguồn Vss

Vref+ I Lối vào Vref+ (cao) thế analog chuẩn

Vref- I Lối vào Vref- (thấp) thế chuẩn.

3 Giới thiệu MPLAB

3.1 Môi trường phát triển MPLAB

- Các phần mềm cần có để lập trình cho PIC18F4550:

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 7

Page 8: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

MPLAB IDE 8.5

HT PIC 8.05

MPLAB C18.

Hướng dẫn tạo 1 project trên MPLAB C18.

Kích đúp chuột vào biểu tượng MPLAB trên Desktop hoặc theo cách sau: Start -> All Programs -> Microchip -> MPLAB IDE v8.5 -> MPLAB IDE.

Từ thanh Menu, click chọn tab Project -> Project Wirazd…

Cửa sổ Welcome hiện lên và chọn Next.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 8

Page 9: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chọn PIC cần sử dụng tại khung Device >>PIC18F4550 Click Next:

Chọn tool Microchip C18 Toolsuite tại Active Toolsuite. Chọn MPLAB C18 C Compiler tại Tollsuite contents. Nếu lập trình bằng assembly thì chon Active Toolsuite theo hình sau:

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 9

Page 10: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Ở đây chúng ta lập trình bằng C18.

Click Next

Chọn Browse…. Để chọn thư mục lưu project.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 10

Page 11: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Đánh vào tên Project muốn tạo. Save, sau đó chọn Next thì hiện ra của sổ như sau:

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 11

Page 12: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Đây là nơi để add thư viện cho project. Nên add hết các file cần thiết cho việc lập trình trước khi bắt đầu viết

chương trình gồm file .lib và file .lkr. Nếu viết chương trình cho con chip nào thì ta lấy file .lib và file .lkr của chíp tương ứng, như hình trên đang sử dụng chip 18f4550. Click Next.

Click Finish. Sẽ được một project như hình sau:

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 12

Page 13: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Một project đơn giản nhất phải gồm có 2 thành phần Source files và Hearder Files. Thư mục Source files chứa file text *.asm hoặc file *.c chứa code lâp trình. Thư mục Hearder Files chứa file *.h hoặc *.INC: file có sẵn của microchip. User khai báo dùng loại chip gì => add vào thư mục này.

ADD source file: Click chọn New trên toolbar:

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 13

Page 14: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Save as file với tên KeyLed.c

Từ Source Files click chuột phải chọn Add files :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 14

Page 15: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chọn File từ đường dẫn trực tiếp của project, sau đó chọn Files “KeyLed.c” và Open :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 15

Page 16: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chúng sẽ soạn thảo chương trình khi ấn 4 phím ấn lần lượt thì 4 Led lần lượt sáng tương ứng.

Chương trình code :#include <p18f4550.h>

//SW101 = 0;SW201 = 1;SW301 = 1;SW601 = 0;

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL

#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz //PLL with 4 MHz input

#pragma config CPUDIV = OSC2_PLL3 // Divide 96 MHz PLL output by //2 to get 48 MHz //system clock

#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2

#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor

#pragma config IESO = OFF // Disable Oscillator Switchover mode

#pragma config PWRT = OFF // Disable Power-up timer

#pragma config BOR = OFF // Disable Brown-out reset

#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator

#pragma config WDT = OFF // Disable Watchdog timer

#pragma config MCLRE = ON // Enable MCLR Enable

#pragma config LVP = OFF // Disable low voltage ICSP

#pragma config ICPRT = OFF // Disable dedicated programming port (44-//pin devices)

#pragma config CP0 = OFF // Disable code protection

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 16

Page 17: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

#define KEY0 PORTDbits.RD0 //Define LEDPin as PORT D Pin 0

#define KEY1 PORTDbits.RD1 //Define LEDPin as PORT D Pin 1

#define KEY2 PORTDbits.RD2 //Define LEDPin as PORT D Pin 2

#define KEY3 PORTDbits.RD3 //Define LEDPin as PORT D Pin 3

#define LED0 LATDbits.LATD4

#define LED1 LATDbits.LATD5

#define LED2 LATDbits.LATD6

#define LED3 LATDbits.LATD7

void delay(unsigned int d);

void initPort();

void display(unsigned int dat);

//======================================================//

const unsigned char Led[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//=======================================================//

void main()

{

unsigned char flag = 0, i = 0;

unsigned char n,m,time;

initPort();

time = 5;

flag = 1;

while(1)

{

if(flag)

{

LED0 = 1; LED1 = LED2 = LED3 = 0;

for(m=0;m<time;m++) delay(0xfff);

LED1 = 1; LED0 = LED2 = LED3 = 0;

for(m=0;m<time;m++) delay(0xfff);

LED2 = 1; LED1 = LED0 = LED3 = 0;

for(m=0;m<time;m++) delay(0xfff);

LED3 = 1; LED1 = LED2 = LED0 = 0;

for(m=0;m<time;m++) delay(0xfff);

}

else {LED3 = LED1 = LED2 = LED0 = 0;}

if(KEY0==0) if(time<255) time+=2; else time = 255;

if(KEY1==0) if(time>2) time-=2; else time = 1;

if(KEY2==0) flag = 0;

if(KEY3==0) flag = 1;

/*

if(KEY0==0) LED0 = 0; else LED0 = 1;

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 17

Page 18: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

if(KEY1==0) LED1 = 0; else LED1 = 1;

if(KEY2==0) LED2 = 0; else LED2 = 1;

if(KEY3==0) LED3 = 0; else LED3 = 1;

delay(0xfff);*/

}

}

void initPort()

{

ADCON1 = 0xFFFF; //Config digital I/O all

TRISD = 0x0F;

TRISA = 0;

TRISB = 0;

TRISC = 0;

TRISE = 0;

}

void delay(unsigned int d)

{

while(d--);

}

Ở trên ta thấy có 2 phần trong hàm main :Phần 1 :

if(flag){

LED0 = 1; LED1 = LED2 = LED3 = 0;for(m=0;m<time;m++) delay(0xfff);LED1 = 1; LED0 = LED2 = LED3 = 0;for(m=0;m<time;m++) delay(0xfff);LED2 = 1; LED1 = LED0 = LED3 = 0;for(m=0;m<time;m++) delay(0xfff);LED3 = 1; LED1 = LED2 = LED0 = 0;for(m=0;m<time;m++) delay(0xfff);

}else {LED3 = LED1 = LED2 = LED0 = 0;}

if(KEY0==0) if(time<255) time+=2; else time = 255;if(KEY1==0) if(time>2) time-=2; else time = 1;if(KEY2==0) flag = 0;

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 18

Page 19: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

if(KEY3==0) flag = 1;Phần này có tác dụng : ban đầu các Led sẽ sáng lần lượt nếu :

- Nhấn KEY0 thì Led nhấp nháy chậm dần.- Nhấn KEY1 thì Led nhấp nháy nhanh dần.- Nhấn KEY2 thì Led tắt.- Nhấn KEY3 thì hoạt động trở lại.

Phần 2 :if(KEY0==0) LED0 = 0; else LED0 = 1;

if(KEY1==0) LED1 = 0; else LED1 = 1;if(KEY2==0) LED2 = 0; else LED2 = 1;if(KEY3==0) LED3 = 0; else LED3 = 1;delay(0xfff);*/

- Khi nhấn KEY1 thì Led1 sáng.- Khi nhấn KEY2 thì Led2 sáng.- Khi nhấn KEY3 thì Led3 sáng.- Khi nhấn KEY4 thì Led4 sáng.

Sauk hi viết chương trình xong ta biên dịch Project bằng cách click vào biểu tương Build All :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 19

Page 20: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Nếu kết quả của chương trình như trên ta phải sửa lỗi như sau :Ta vào Project>>Buid Option>>Project :

Chọn New sau đó điền vào : “Output-Hex Files” và ấn Apply.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 20

Page 21: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chuyển sang thông số tiếp theo, chon new và điền “Object-Linking Files”, sau đó ấn Apply:

Chuyển sang thông số tiếp theo, chon new và chỉ đường dẫn tới :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 21

Page 22: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

C:\MCC18\h

Ấn Ok, sau đó Apply chuyển sang thông số tiếp theo. Chọn New và chỉ tới đường dẫn : C:\MCC18\lib

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 22

Page 23: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Ấn OK, sau đó ấn Apply, và chuyển tới thông số cuối cùng. Chọn đường dẫn tới C:\MCC18\lkr

Ấn Ok, sau đó Apply. Cuối cùng ta ấn Ok để thoát ra và biên dịch lại :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 23

Page 24: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chương trình không lỗi sẽ báo như trên.Chọn mạch nạp PICKIT2 :

Vào phần Setting chọn các thông số sau :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 24

Page 25: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Các thông số trên có nghĩa sẽ nạp chương trình nếu build thành công, sau đó cho phép chip hoạt động luôn.

4 Các bài thí nghiệm trên bộ thí nghiệm PIC18F4550

4.1 CPU

Sơ đồ bố trí linh kiện trên bộ thí nghiệm

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 25

Page 26: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Sơ đồ nguyên lý

Chương trình quét ma trận phím 4x4 và hiển thị Led7Thanh :#include <p18f4550.h>#include "8255.h"

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input#pragma config CPUDIV = OSC2_PLL3 //Divide 96MHz PLL output by 2 to get 48 MHz system clock#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor#pragma config IESO = OFF // Disable Oscillator Switchover mode#pragma config PWRT = OFF // Disable Power-up timer#pragma config BOR = OFF // Disable Brown-out reset#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator#pragma config WDT = OFF // Disable Watchdog timer#pragma config MCLRE = ON // Enable MCLR Enable#pragma config LVP = OFF // Disable low voltage ICSP#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)#pragma config CP0 = OFF // Disable code protection

#define ALED0 LATDbits.LATD0 //Define LEDPin as PORT D Pin 0#define ALED1 LATDbits.LATD1 //Define LEDPin as PORT D Pin 1#define ALED2 LATDbits.LATD2 //Define LEDPin as PORT D Pin 2#define ALED3 LATDbits.LATD3 //Define LEDPin as PORT D Pin 3

#define LCD_EN LATCbits.LATC1 // Enable

void initPort();void initTimer0();void display(unsigned int dat);

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 26

Page 27: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void InterruptHandlerHigh ();unsigned int i = 0, j = 0, time = 0;//===========================================================//const unsigned char Font[]={ 0x00, 0x10, 0x20, 0x30, 0x40,

0x50,0x60,0x70,0x80, 0x90};unsigned char led[4];unsigned char index;//===========================================================//void main(){

unsigned char key;initPort();initTimer0();write8255(0x88,'W'); //PC4-PC7 : input; PC0-PC3 : output//write8255C(0xFE,'C');while(1){

write8255C(0xFE,'C'); //write 0 to C1key = read8255('C');if((key&0xF0)==0xE0) i = 1;else if((key&0xF0)==0xD0) i = 5;else if((key&0xF0)==0xB0) i = 9;else if((key&0xF0)==0x70) i = 13;write8255C(0xFD,'C'); //write 0 to C2key = read8255('C');if((key&0xF0)==0xE0) i = 2;else if((key&0xF0)==0xD0) i = 6;else if((key&0xF0)==0xB0) i = 10;else if((key&0xF0)==0x70) i = 14;write8255C(0xFB,'C'); //write 0 to C3key = read8255('C');if((key&0xF0)==0xE0) i = 3;else if((key&0xF0)==0xD0) i = 7;else if((key&0xF0)==0xB0) i = 11;else if((key&0xF0)==0x70) i = 15;write8255C(0xF7,'C'); //write 0 to C4key = read8255('C');if((key&0xF0)==0xE0) i = 4;else if((key&0xF0)==0xD0) i = 8;else if((key&0xF0)==0xB0) i = 12;else if((key&0xF0)==0x70) i = 16;

display(i);delay(0xffff);

}}

void initPort(){

ADCON1 = 0xFFFF; //Config digital I/O allTRISD = 0; TRISA = 0;TRISB = 0;TRISC = 0;TRISE = 0;

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 27

Page 28: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

LCD_EN = 0;}

void initTimer0(){

// Timer0 configuration T0CON = 0x87;TMR0H = 0xFF; //20M/256*4 = TMR0L = 0xEB;

//enable priority levels RCONbits.IPEN = 1;

INTCON = 0xE0; T0CONbits.TMR0ON = 1; // Start the timer}

void display(unsigned int dat ){

if(dat>9999) {dat = 0;led[0] = led[1] = led[2] = led[3];}else {

led[0] = dat/1000;led[1] = (dat%1000)/100;led[2] = ((dat%1000)%100)/10;led[3] = ((dat%1000)%100)%10;

}}

// High priority interrupt vector#pragma code InterruptVectorHigh = 0x0Avoid InterruptVectorHigh (void){ _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm}#pragma code#pragma interrupt InterruptHandlerHighvoid InterruptHandlerHigh (){

if (INTCONbits.TMR0IF == 1) {

write8255(0xFF,'A');switch(index){

case 0: {write8255(Font[led[0]]|0x07,'A');index++;}break;case 1: {write8255(Font[led[1]]|0x0B,'A');index++;}break;case 2: {write8255(Font[led[2]]|0x0D,'A');index++;}break;case 3: {write8255(Font[led[3]]|0x0E,'A');index=0;}

}TMR0H = 0xFF;TMR0L = 0xEB;INTCONbits.TMR0IF = 0;

}

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 28

Page 29: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

}

4.2 Động cơ 1 chiều

Sơ đồ bố trí trên bộ thí nghiệm1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

Chương trình ví dụ

#include <p18f4550.h>#include <pwm.h>#include <timers.h>#include <adc.h>#include "LCD.h"

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 29

Page 30: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input#pragma config CPUDIV = OSC2_PLL3 // Divide 96 MHz PLL output by 2 to get 48 MHz system clock#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor#pragma config IESO = OFF // Disable Oscillator Switchover mode#pragma config PWRT = OFF // Disable Power-up timer#pragma config BOR = OFF // Disable Brown-out reset#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator#pragma config WDT = OFF // Disable Watchdog timer#pragma config MCLRE = ON // Enable MCLR Enable#pragma config LVP = OFF // Disable low voltage ICSP#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)#pragma config CP0 = OFF // Disable code protection

#define PWM LATCbits.LATC2 //Define STEP3Pin as PORT B Pin 6

void delay(unsigned int d);void initPort();void initTimer0();void initInt0();void InterruptHandlerHigh ();

unsigned int T, t, DCycle, Duty, ReadAdc, Speed;unsigned char index;

char c[] = "DC Motor Module";char h[] = "ADC= ";char m[] = "Speed= V/P";char n[] = "PWM= %";

void main(){

unsigned char i;initPort();initInt0();initTimer0();OpenTimer2(TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_1); //Using Timer2OpenPWM1(0xFF); //Chanel 1; PWM period =[(PR2) + 1] x 4 x TOSC x TMR2 prescalerSetOutputPWM1(SINGLE_OUT,PWM_MODE_1);SetDCPWM1(Duty);//DutyCycleOpenADC( ADC_FOSC_32 & // A/D clock source set to 32Tosc ADC_RIGHT_JUST& // write the Digital result(10bits) from right, into ADRESH:ADRESL (16bits).

ADC_20_TAD, // A/D acquisition time: 20TAD (for 10bit conversion at least 12TAD) ADC_CH1 & //choose input channel (0), AN0 ADC_INT_OFF& //ADC interrupt off ADC_VREFPLUS_VDD& // choose the supply voltage VDD as reference voltage, V+ ADC_VREFMINUS_VSS, // choose the supply voltage VSS as reference voltage, V- 7 // this value is used for setting the Analog and Digital I/O. Make

//sure that AN0 is chosen as analog input. );

while(1){

lcdGoPos (0,0);LCD_PUTS(c);

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 30

Page 31: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

lcdGoPos (1,0);LCD_PUTS(h); lcdGoPos (1,5);lcdWrNum(Duty);lcdGoPos (2,0);LCD_PUTS(m);lcdGoPos (2,7);lcdWrNum(Speed);lcdGoPos (3,0);LCD_PUTS(n);lcdGoPos (3,6);lcdWrNum(DCycle);

delay(0xffff);ConvertADC (); // Start an A/D conversion.

while( BusyADC()); // Wait for completion. when BusyADC is cleared, the conversion is finished. Duty = ReadADC();

SetDCPWM1(Duty);DCycle = Duty/10.24;

}}

void initPort(void){//InitPort

ADCON1 = 0xFFFF; //Config digital I/O allTRISD = 0; TRISA = 0x03;TRISB = 0x01;TRISC = 0;TRISE = 0;

//InitVarT = 0xFF32; //10ms

// T = 0xFF9D; //5msindex = 0;

//InitLCDLCD_INIT();LCD_CLEAR();lcdGoPos (0,0);LCD_PUTS(c); lcdGoPos (1,0);LCD_PUTS(h); lcdGoPos (2,0);LCD_PUTS(m);lcdGoPos (3,0);LCD_PUTS(n);

STEP0 = 0;STEP1 = 0;STEP2 = 0;STEP3 = 1;}

void initTimer0(){

// Timer0 configuration T0CON = 0x87; //Scale 1/256TMR0H = T>>8; //20M/256*4 <=> 5.12*10^(-5)TMR0L = T&0xff; //T = (0xFFFF-T)*5.12*10^(-5)

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 31

Page 32: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

//enable priority levels RCONbits.IPEN = 1;

INTCONbits.TMR0IE = 1;INTCONbits.PEIE = 1;INTCONbits.GIE = 1;

T0CONbits.TMR0ON = 1; //Start the timer}

void initInt0(){

INTCONbits.INT0IE = 1;INTCONbits.INT0IF = 0;INTCON2bits.INTEDG0 = 1; //rising

}

void delay(unsigned int d){

while(d--){};}

// High priority interrupt vector#pragma code InterruptVectorHigh = 0x08void InterruptVectorHigh (void){ _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm}#pragma code#pragma interrupt InterruptHandlerHighvoid InterruptHandlerHigh (){

if (INTCONbits.TMR0IF == 1){

Speed = 16.7*t; //Speed = t = 0;TMR0H = T>>8;TMR0L = T&0xff;

INTCONbits.TMR0IF = 0;}if(INTCONbits.INT0IF){

t++;INTCONbits.INT0IF = 0;

}}

4.3 LCD

Sơ đồ bố trí trên bộ thí nghiệm

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 32

Page 33: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION 1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Chương trình ví dụ

#include <p18f4550.h>

#include "LCD.h"

//SW101 = 0;SW201 = 1;SW301 = 0;SW601 = 0;

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL

#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input

#pragma config CPUDIV = OSC2_PLL3 //Divide 96MHzPLL output by 2 to get 48 MHz system clock

#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2

#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor

#pragma config IESO = OFF // Disable Oscillator Switchover mode

#pragma config PWRT = OFF // Disable Power-up timer

#pragma config BOR = OFF // Disable Brown-out reset

#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator

#pragma config WDT = OFF // Disable Watchdog timer

#pragma config MCLRE = ON // Enable MCLR Enable

#pragma config LVP = OFF // Disable low voltage ICSP

#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)

#pragma config CP0 = OFF // Disable code protection

#define CS8255 LATEbits.LATE2 // Register select

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 33

Page 34: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void initPort();

//===========================================================//

void main()

{

char c[] = " PIC18F4550 ";

char h[] = " TRAINING KIT ";

char m[] = " TANPHAT ";

char n[] = " AUTOMATION";

initPort();

LCD_INIT();

LCD_CLEAR();

lcdGoPos (0,0);

LCD_PUTS(c);

lcdGoPos (1,0);

LCD_PUTS(h);

lcdGoPos (2,0);

LCD_PUTS(m);

lcdGoPos (3,0);

LCD_PUTS(n);

while(1)

{

}

}

void initPort()

{

ADCON1 = 0xFF; //Config digital I/O all

TRISD = 0x00;

TRISA = 0;

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 34

Page 35: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

TRISB = 0;

TRISC = 0;

TRISE = 0;

}

4.4 Loa

Sơ đồ bố trí trên bộ thí nghiệm1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

1 2

U503A

74HC04

SP501Loa Buzzer

D5014148

3 4

U503B

74HC04

5 6

U503C

74HC04

13 12

U503D

74HC04

BUZZ

3.3uF/16V

C503

Chương trình ví dụ

Giống chương trình DC Motor, nhưng phải gạt SW101 sang vị trí ‘1’.

4.5 Động cơ bước

Sơ đồ bố trí trên bộ thí nghiệm

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 35

Page 36: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 36

Page 37: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chương trình ví dụ

#include <p18f4550.h>

#include "LCD.h"

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL

#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input

#pragma config CPUDIV = OSC2_PLL3 //Divide 96MHz PLL output by 2 to get 48 MHz system clock

#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2

#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor

#pragma config IESO = OFF // Disable Oscillator Switchover mode

#pragma config PWRT = OFF // Disable Power-up timer

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 37

Page 38: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

#pragma config BOR = OFF // Disable Brown-out reset

#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator

#pragma config WDT = OFF // Disable Watchdog timer

#pragma config MCLRE = ON // Enable MCLR Enable

#pragma config LVP = OFF // Disable low voltage ICSP

#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)

#pragma config CP0 = OFF // Disable code protection

#define STEP0 LATBbits.LATB3 //Define STEP0Pin as PORT B Pin 3

#define STEP1 LATBbits.LATB4 //Define STEP1Pin as PORT B Pin 4

#define STEP2 LATBbits.LATB5 //Define STEP2Pin as PORT B Pin 5

#define STEP3 LATBbits.LATB6 //Define STEP3Pin as PORT B Pin 6

void delay(unsigned int d);

void initPort();

void initTimer0();

void InterruptHandlerHigh ();

unsigned int T, t;

unsigned char index;

void main()

{

char c[] = "PIC18F4550";

char h[] = "TRAINING KIT";

char m[] = "Step Motor Module";

char n[] = "T = ms";

initPort();

initTimer0();

LCD_INIT();

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 38

Page 39: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

LCD_CLEAR();

lcdGoPos (0,5);

LCD_PUTS(c);

lcdGoPos (1,2);

LCD_PUTS(h);

lcdGoPos (3,0);

LCD_PUTS(m);

lcdGoPos (4,0);

LCD_PUTS(n);

while(1)

{

t = (65535-T)*0.0512;

lcdGoPos (3,3);

lcdWrNum(t);

delay(0xffff);

}

}

void initPort(void)

{

ADCON1 = 0xFFFF; //Config digital I/O all

TRISD = 0;

TRISA = 0;

TRISB = 0;

TRISC = 0;

TRISE = 0;

//T = 0xFF2D; //10ms

T = 0xFF9D; //5ms

index = 0;

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 39

Page 40: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

}

void initTimer0()

{

// Timer0 configuration

T0CON = 0x87; //Scale 1/256

TMR0H = T>>8; //20M/256*4 <=> 5.12*10^(-5)

TMR0L = T&0xff; //T = (0xFFFF-T)*5.12*10^(-5)

//enable priority levels

RCONbits.IPEN = 1;

INTCON = 0xE0; //enable interrupt : GIE, PEIE, TMR0IE

T0CONbits.TMR0ON = 1; //Start the timer

}

void delay(unsigned int d)

{

while(d--);

}

// High priority interrupt vector

#pragma code InterruptVectorHigh = 0x08

void InterruptVectorHigh (void)

{

_asm

goto InterruptHandlerHigh //jump to interrupt routine

_endasm

}

#pragma code

#pragma interrupt InterruptHandlerHigh

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 40

Page 41: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void InterruptHandlerHigh ()

{

if (INTCONbits.TMR0IF == 1)

{

switch(index)

{

case 0: {STEP0 = 0; STEP1 = 0; STEP2 = 0; STEP3 = 1;index++;}break;

case 1: {STEP0 = 0; STEP1 = 0; STEP2 = 1; STEP3 = 0;index++;}break;

case 2: {STEP0 = 0; STEP1 = 1; STEP2 = 0; STEP3 = 0;index++;}break;

case 3: {STEP0 = 1; STEP1 = 0; STEP2 = 0; STEP3 = 0;index=0;}

}

TMR0H = T>>8;

TMR0L = T&0xff;

INTCONbits.TMR0IF = 0;

}

}

4.6 Truyền thông

Sơ đồ bố trí trên bộ thí nghiệm

1 2

1 2

1

2

1

2

1

2

2 1

2 1

21

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

2

1

HOLF

HOLE

4

32

1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 41

Page 42: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Sơ đồ nguyên lý

Chương trình ví dụ

- RS-232

#include <p18f4550.h>

#include <stdio.h>

#include <delays.h>

#include <usart.h>

#define constant 100 //Baud = 19200

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL

#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input

#pragma config CPUDIV = OSC1_PLL2 //Divide 96MHzPLL output by 2 to get 48 MHz system clock

#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2

#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor

#pragma config IESO = OFF // Disable Oscillator Switchover mode

#pragma config PWRT = OFF // Disable Power-up timer

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 42

Page 43: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

#pragma config BOR = OFF // Disable Brown-out reset

#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator

#pragma config WDT = OFF // Disable Watchdog timer

#pragma config MCLRE = ON // Enable MCLR Enable

#pragma config LVP = OFF // Disable low voltage ICSP

#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)

#pragma config CP0 = OFF // Disable code protection

void delay(unsigned int d);

void initPort(void);

void RxIntFcn(void);

void InterruptHandlerHigh ();

void InitializeUSART(void);

void main (void)

{

char c[] = "Viet Nam SingGapore ";

initPort();

InitializeUSART();

while(1)

{

Delay10KTCYx (500);

Delay10KTCYx (500);

Delay10KTCYx (500); // each data packet sent every 0.5s

while(BusyUSART()) ;

putsUSART(c);

}//end while

}

void initPort(void)

{

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 43

Page 44: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

ADCON1 = 0xFF; //Config digital I/O all

TRISD = 0x0F;

TRISA = 0;

TRISB = 0;

TRISC = 0x80;

TRISE = 0;

}

void InitializeUSART(void)

{

TRISCbits.TRISC7=1; // RX

TRISCbits.TRISC6=0; // TX

SPBRG = 0xE1;

SPBRGH = 0x02;//0x04; // 0x04E1 for 48MHz -> 9600 baud

// SPBRG = 0x02;

// SPBRGH = 0x70;//Baud = 19200

TXSTA = 0x07;//0x24; // TX enable BRGH=1

RCSTA = 0x90; // continuous RX

BAUDCON = 0x08; // BRG16 = 1

PIR1bits.RCIF = 0;

PIE1bits.RCIE = 1; // Reception Interrupt Enable

INTCONbits.GIE = 1; // Global Interrupt Enable

INTCONbits.PEIE = 1; // Perapheral Interrupt Enable

}

// Implementation of some functions

void RxTxIntFcn(void)

{

char temp;

temp = ReadUSART();

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 44

Page 45: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

WriteUSART(temp+1);

}

// High priority interrupt vector

#pragma code InterruptVectorHigh = 0x08

void InterruptVectorHigh (void)

{

_asm

goto InterruptHandlerHigh //jump to interrupt routine

_endasm

}

#pragma code

#pragma interrupt InterruptHandlerHigh

void InterruptHandlerHigh ()

{

if (PIE1bits.RCIE && PIR1bits.RCIF)

{

PIR1bits.RCIF = 0;

RxIntFcn();

};

}

- RS-485 :

Khai báo thêm chân DTE và sửa hàm truyền như sau :

#define DTE LATCbits.LATC0 void RxTxIntFcn(void)

{char temp;temp = UART_Read();DTE = 1;WriteUSART(temp);DTE = 0;

}

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 45

Page 46: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

- USB :

Chương trình USB được cung cấp theo đĩa đi kèm.

4.7 Chuyển đổi số tương tự

Sơ đồ bố trí trên bộ thí nghiệm

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

Chương trình ví dụ #include <p18f4550.h>#include "LCD.h"

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input#pragma config CPUDIV = OSC2_PLL3 // Divide 96 MHz PLL output by 2 to get 48 MHz system clock#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor#pragma config IESO = OFF // Disable Oscillator Switchover mode#pragma config PWRT = OFF // Disable Power-up timer#pragma config BOR = OFF // Disable Brown-out reset#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator#pragma config WDT = OFF // Disable Watchdog timer#pragma config MCLRE = ON // Enable MCLR Enable#pragma config LVP = OFF // Disable low voltage ICSP#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)#pragma config CP0 = OFF // Disable code protection

#define CSDAC LATAbits.LATA4 // Register select

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 46

Page 47: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void initPort();void delay(unsigned int d);void writeDac(unsigned char value);//===========================================================//void main(){

unsigned char value;char c[] = "PIC18F4550";char h[] = "TRAINING KIT";char m[] = "DAC module";char n[] = "Value : ";initPort();LCD_INIT();LCD_CLEAR();lcdGoPos (0,5);LCD_PUTS(c); lcdGoPos (1,2);LCD_PUTS(h); lcdGoPos (2,0);LCD_PUTS(m); lcdGoPos (3,0);LCD_PUTS(n);value = 0;while(1){

lcdGoPos (1,24);lcdWrNum(value);if(value<255) value++;else {

value = 0;LCD_CLEAR();lcdGoPos (0,5);LCD_PUTS(c); lcdGoPos (1,2);LCD_PUTS(h); lcdGoPos (2,0);LCD_PUTS(m); lcdGoPos (3,9);LCD_PUTS(n);

}writeDac(value);delay(0xffff);delay(0xffff);

}}

void initPort(){

ADCON1 = 0xFFFF; //Config digital I/O allTRISD = 0x00; //TRISA = 0;TRISB = 0;TRISC = 0;TRISE = 0;

}

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 47

Page 48: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void delay(unsigned int d){

while(d--){};}

void writeDac(unsigned char value){

CSDAC = 0;delay(0xff);PORTD = value;CSDAC = 1;

}

4.8 Chuyển đổi tương tự số

Sơ đồ bố trí trên bộ thí nghiệm

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

AN1

AN0

VCC

13

2

U502A

TL082

75

6

U502B

TL082

+12V

VO2

+VS1

3

GND

U501 LM35

Z501

5V

T1

J501

T1

J502

T1

J503

22K

R502

18K

R503

10KR504Z502

5V

104C501

104C502

AN0

AN1

VCC

10K

VR

501

10KR501

123

J504

Chương trình ví dụ

Chương trình đọc cảm biến nhiệt LM35 :

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 48

Page 49: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

#include <p18f4550.h>#include <adc.h>#include <math.h>#include "LCD.h"

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input#pragma config CPUDIV = OSC2_PLL3 / Divide 96MHzPLL output by 2 to get 48 MHz system clock#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor#pragma config IESO = OFF // Disable Oscillator Switchover mode#pragma config PWRT = OFF // Disable Power-up timer#pragma config BOR = OFF // Disable Brown-out reset#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator#pragma config WDT = OFF // Disable Watchdog timer#pragma config MCLRE = ON // Enable MCLR Enable#pragma config LVP = OFF // Disable low voltage ICSP#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)#pragma config CP0 = OFF // Disable code protection

void initPort();void delay(unsigned int d);void writeDac(unsigned char value);//===========================================================//void main(){

unsigned int val; //ADC Value unsigned int t; //Temperature

unsigned char value;char c[] = "PIC18F4550";char h[] = "TRAINING KIT";char m[] = "ADC module LM35";char n[] = "Temp : ";initPort();LCD_INIT();LCD_CLEAR();lcdGoPos (0,5);LCD_PUTS(c); lcdGoPos (1,2);LCD_PUTS(h); lcdGoPos (0,16);LCD_PUTS(m); lcdGoPos (1,16);LCD_PUTS(n);value = 0;

OpenADC( ADC_FOSC_32 & // A/D clock source set to 32Tosc ADC_RIGHT_JUST& // write the Digital result(10bits) from right, into ADRESH:ADRESL (16bits).ADC_20_TAD, // A/D acquisition time: 20TAD (for 10bit conversion at least 12TAD)ADC_CH0 & //choose input channel (0), AN0ADC_INT_OFF& //ADC interrupt off ADC_VREFPLUS_VDD& // choose the supply voltage VDD as reference voltage, V+ADC_VREFMINUS_VSS, // choose the supply voltage VSS as reference voltage, V-7 // this value is used for setting the Analog and Digital I/O. Make sure //that AN0 is chosen as analog input.

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 49

Page 50: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

);while(1){

lcdGoPos (1,23);lcdWrNum(t);Delay10TCYx(5); //Delay for 50TCY. Because within this delay, the holding //capacitor should be disconnected from the ananlog input.

ConvertADC (); // Start an A/D conversion. while( BusyADC()); // Wait for completion. when BusyADC is cleared, the //conversion is finished.

val = ReadADC(); t = val/10.23; //Convert to Degree Celcius

//V = val*5/1023 //5/(1023*5*0.01) = 1/10.23delay(0xffff);delay(0xffff);

}}

void initPort(){

ADCON1 = 0xFFFD; //Config digital I/O allTRISD = 0x00; TRISA = 0x03;TRISB = 0x00;TRISC = 0x00;TRISE = 0x00;

}

void delay(unsigned int d){

while(d--){};}

4.9 LED Segment

Sơ đồ bố trí trên bộ thí nghiệm

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 50

Page 51: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chương trình ví dụ

#include <p18f4550.h>#include "8255.h"

#pragma config FOSC = HSPLL_HS // Using 20 MHz crystal with PLL#pragma config PLLDIV = 5 // Divide by 5 to provide the 96 MHz PLL with 4 MHz input#pragma config CPUDIV = OSC2_PLL3 //Divide 96MHz PLL output by 2 to get 48 MHz system clock#pragma config USBDIV = 2 // USB clock comes from 96 MHz PLL output / 2#pragma config FCMEN = OFF // Disable Fail-Safe Clock Monitor#pragma config IESO = OFF // Disable Oscillator Switchover mode#pragma config PWRT = OFF // Disable Power-up timer#pragma config BOR = OFF // Disable Brown-out reset#pragma config VREGEN = ON // Use internal USB 3.3V voltage regulator#pragma config WDT = OFF // Disable Watchdog timer#pragma config MCLRE = ON // Enable MCLR Enable#pragma config LVP = OFF // Disable low voltage ICSP#pragma config ICPRT = OFF // Disable dedicated programming port (44-pin devices)#pragma config CP0 = OFF // Disable code protection

#define ALED0 LATDbits.LATD0 //Define LEDPin as PORT D Pin 0#define ALED1 LATDbits.LATD1 //Define LEDPin as PORT D Pin 1#define ALED2 LATDbits.LATD2 //Define LEDPin as PORT D Pin 2#define ALED3 LATDbits.LATD3 //Define LEDPin as PORT D Pin 3

void initPort();void initTimer0();void initTimer1(void);void display(unsigned int dat);void InterruptHandlerHigh ();unsigned int i = 0, j = 0, time = 0; //===========================================================//const unsigned char Font[]={ 0x00, 0x10, 0x20, 0x30, 0x40,

0x50,0x60,0x70,0x80, 0x90};unsigned char led[4];unsigned char index;//===========================================================//void main()

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 51

Page 52: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

{unsigned char key;initPort();initTimer0();write8255(0x88,'W'); //write8255(0x0F,'B'); while(1){

write8255(0xFC,'C'); //write 0 to C1key = read8255('C'); display(key);delay(0xffff);

}}

void initPort(){

ADCON1 = 0xFFFF; //Config digital I/O allTRISD = 0xF0; //TRISA = 0;TRISB = 0;TRISC = 0;TRISE = 0;

}

void initTimer0(){

// Timer0 configuration T0CON = 0x87;TMR0H = 0xFF; //20M/256*4 = TMR0L = 0xEB;

//enable priority levels RCONbits.IPEN = 1;

INTCON = 0xE0; T0CONbits.TMR0ON = 1; // Start the timer}

void display(unsigned int dat ){

if(dat>9999) {dat = 0;led[0] = led[1] = led[2] = led[3];}else {

led[0] = dat/1000;led[1] = (dat%1000)/100;led[2] = ((dat%1000)%100)/10;led[3] = ((dat%1000)%100)%10;

}}// High priority interrupt vector#pragma code InterruptVectorHigh = 0x0Avoid InterruptVectorHigh (void){ _asm

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 52

Page 53: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

goto InterruptHandlerHigh //jump to interrupt routine _endasm}#pragma code#pragma interrupt InterruptHandlerHighvoid InterruptHandlerHigh (){

if (INTCONbits.TMR0IF == 1) {

write8255(0x88,'W');write8255(0xFF,'A');switch(index){

case 0: {write8255(Font[led[0]]|0x07,'A');index++;}break;case 1: {write8255(Font[led[1]]|0x0B,'A');index++;}break;case 2: {write8255(Font[led[2]]|0x0D,'A');index++;}break;case 3: {write8255(Font[led[3]]|0x0E,'A');index=0;}

}/* if(j<1000) j++;

else{

if(i<9999) i++; else i = 0;display(i);j = 0;

}*/TMR0H = 0xFF;TMR0L = 0xEB;INTCONbits.TMR0IF = 0;

}}

4.10 LED – button

Sơ đồ bố trí trên bộ thí nghiệm

1

3 2

00

3

3 2

10

123

1 2

3

12

12

12

12

3

4

2

1

1

2

1

2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

1 2

21

12

1

2

1

2

1

2

21

12

1 2

12

1 2 3 4 5 6

12 11 10 9 8 7

1 2 3 4 5

23 1 23 1 23 1 23 1

21

21

2 1

2 1

21

2 1 2 1 2 1 2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1

2 1

21

2 1

2 1

2 1

21

2 1

21

21

21

2 1

2 1

2 1

12

1

3

4

5

6

7

8

9

2

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

5

6

7

8

4

3

2

1

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

11

12

13

14

15

16

17

18

19

20

10

9

8

7

6

5

4

3

2

11

2

3

4

5

6

7

8

16

15

14

13

12

11

10

9

1

2

3

4

8

7

6

5

1

2

4

3

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

3 21

1

2

21 21 21 21 21 21 21 21

0

0 0

0

16151413121110987654321

12

34

56

78

910

16 15

14 13

12 11

6

5

4

3

2

1

1

2 1

2

1

2

21

21

2 1

2 1

21

21

2 1

2 1

2 1

2 1

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

12

2 1

21 21 21 21

2 1

2 1

2 1

21

21

21

1 21 21 21 2

1

2

12

12

1

2

1

1

1

21 21 21 21

2 1

1

2

4

3

2

1

23 123 123 123 1

1 2 31 2 31 2 31 2 3

1 2 3

2 1

2 1

2 1

2 1

2 1

21 21

2 1 2 1 2 1 2 1

2 1

21

21

2 1

12

2 1

21

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

2 1

21

21

2 1

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

5

6

7

14

13

12

11

10

9

8

1

2

3

4

8

7

6

5

1

2

3

4

5

6

7

14

13

12

11

10

9

8

12 3

1 23

1 2

12

1 2

1 2

B A13 2

B A13 2

B A13 2

B A13 2

23 1

87654321

B

DC

A1

1

2

1

2 1

HOLF

HOLE

4

32

1

32 1

11

10

1

6

2

7

3

8

4

9

5

11

10

1

6

2

7

3

8

4

9

5

Sơ đồ nguyên lý

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 53

Page 54: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Chương trình ví dụ

Giống chương trình mẫu ở trên.

Các thư viện cần có :- Thư viện LCD :

#include <p18f4550.h>#include <string.h>

//LCD output Cotrol#define LCD_RS LATEbits.LATE1 // Register select#define LCD_RW LATEbits.LATE0#define LCD_EN LATCbits.LATC1 // Enable

void lcdWrNum(unsigned int val);void delayms(unsigned int ms);void lcdWrCmd(unsigned char ch);void lcdGoPos (unsigned char line, unsigned char pos_of_line);void LCD_STROBE(void);void LCD_WCMD(unsigned char CMD);void LCD_WDATA(unsigned char DATA);void LCD_INIT(void);

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 54

Page 55: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void LCD_CLEAR(void);void LCD_PUTS(const char* s);

void delayms(unsigned int ms){

while(--ms){};}

void lcdWrCmd(unsigned char ch){

LCD_RS = 0; LCD_RW = 0; LATD = ch; LCD_EN = 1;

delayms(10);LCD_EN=0;delayms(10);

}

void lcdGoPos (unsigned char line, unsigned char pos_of_line)// Move cursor to posistion of a line{

unsigned char DDRAMAddr;if (line==0) DDRAMAddr = pos_of_line;else if (line==1) DDRAMAddr = 0x40+pos_of_line;else if (line==2) DDRAMAddr = 0x10+pos_of_line;else if (line==3) DDRAMAddr = 0x50+pos_of_line;lcdWrCmd (0x80+DDRAMAddr);

}

void lcdWrNum(unsigned int val){

unsigned char i, j, num[5];i = 0;while(val > 9){

num[i] = val%10 + 0x30;val = val/10;i++;

}num[i] = val + 0x30;for(j = 0; j <= i; j++){

LCD_WDATA(num[i - j]);}

}//====================== ===========================//void LCD_STROBE(void){

LCD_EN = 1;delayms(0xfff);LCD_EN = 0;

}//===================== ===========================//void LCD_WCMD(unsigned char CMD){

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 55

Page 56: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

LATD = CMD;LCD_RW = 0;LCD_RS = 0;LCD_STROBE();delayms(1);

}//===============================================//void LCD_WDATA(unsigned char DATA){

LATD = DATA;LCD_RW = 0;LCD_RS = 1;LCD_STROBE();delayms(2);

}//================================================//void LCD_INIT(void){

LCD_WCMD(0x0C); //8bit mode; font 5x7delayms(50);LCD_WCMD(0x38);delayms(50);LCD_WCMD(0x0F);delayms(50);LCD_WCMD(0x01);delayms(50);LCD_WCMD(0x06);delayms(10);

}//================================================//void LCD_CLEAR(void){

LCD_WCMD(0x01);}void LCD_HOME(void){

LCD_WCMD(0x02);}//===================== ===========================//void LCD_PUTS(const char* s) //Write String{

char i, len = strlen(s);for(i=0;i<len;i++) LCD_WDATA(s[i]);

}

- Thư viện 8255.h : #include <p18f4550.h>//config 8255 ==================

#define PPI_EN LATEbits.LATE2 #define PPI_RD LATEbits.LATE1 #define PPI_WR LATEbits.LATE0 #define PPI_A0 LATAbits.LATA2 #define PPI_A1 LATAbits.LATA3

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 56

Page 57: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

void delay(unsigned int d);void write8255(unsigned char data,unsigned char ch);unsigned char read8255(unsigned char ch);void write8255C(unsigned char data,unsigned char ch);//small functions detail===============================void write8255(unsigned char data,unsigned char ch){

TRISD = 0; PPI_EN = 0;PPI_RD = 1;

switch(ch){case 'A': //PortA

PPI_A0 = 0;PPI_A1 = 0;break;

case 'B': //PortBPPI_A0 = 1;PPI_A1 = 0;break;

case 'C': //PortCPPI_A0 = 0;PPI_A1 = 1;break;

case 'W': //CW PPI_A0 = 1;

PPI_A1 = 1;}LATD = data;PPI_WR = 0;PPI_WR = 0;PPI_WR = 0;PPI_WR = 1; PPI_WR = 1; PPI_WR = 1;

}void write8255C(unsigned char data,unsigned char ch){

TRISD = 0xF0; PPI_EN = 0;PPI_RD = 1;

switch(ch){case 'A': //PortA

PPI_A0 = 0;PPI_A1 = 0;break;

case 'B': //PortBPPI_A0 = 1;PPI_A1 = 0;break;

case 'C': //PortCPPI_A0 = 0;PPI_A1 = 1;break;

case 'W': //CW PPI_A0 = 1;

PPI_A1 = 1;}

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 57

Page 58: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

LATD = data;PPI_WR = 0;PPI_WR = 0;PPI_WR = 0;PPI_WR = 1; PPI_WR = 1; PPI_WR = 1;

}

unsigned char read8255(unsigned char ch){

unsigned char data;TRISD = 0xF0; PPI_EN = 0;PPI_WR = 1;

switch(ch){case 'A': //PortA

PPI_A0 = 0;PPI_A1 = 0;break;

case 'B': //PortBPPI_A0 = 1;PPI_A1 = 0;break;

case 'C': //PortCPPI_A0 = 0;PPI_A1 = 1;break;

case 'W': //CW PPI_A0 = 1;

PPI_A1 = 1;}PPI_RD = 1;PPI_RD = 1;PPI_RD = 1;PPI_RD = 0;PPI_RD = 0;PPI_RD = 0; data = PORTD;

return data;}

void delay(unsigned int d){

while(d--);}

5 Sơ đô nguyên ly PIC18F4550 TRAINNING KIT1. Sơ đồ tổng quát

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 58

Page 59: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

2. CPU

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 59

Page 60: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

3. NGUỒN CUNG CẤP

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 60

Page 61: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

4. DC MOTOR

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 61

Page 62: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

5. DAC

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 62

Page 63: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

6. STEP MOTOR

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 63

Page 64: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

7. SENSORTài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 64

Page 65: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

8. COMM

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 65

Page 66: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

9. SEGLED

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 66

Page 67: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 67

Page 68: Tài liệu lập trình PIC18F4450

Công ty Cổ Phần Tự Động Hoá Tân Phát AUTOMATION

Tài liệu hướng dẫn sử dụng bộ thí nghiệm PIC18F4550 68