1. Trang chủ
  2. » Tài Chính - Ngân Hàng

Mạch đếm và phân loại sản phẩm dùng vi xử lý PIC 16f877a giao tiếp máy tính

100 1,2K 6

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 100
Dung lượng 4,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

PIC sử dụng microcode đơn giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bây giờ, nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ m

Trang 1

SVTH : Nguyễn Duy Phúc MSSV : 08510030059

LỜI MỞ ĐẦU

Trong cuộc sống hiện tại ngày nay, khoa học kỹ thuật phát triển rất nhanh đặt biệt

là sự phát triển của công nghiệp vi điện tử, kỹ thuật số các hệ thống điều khiển dần được tự động hóa Với những kỹ thuật tiên tiến như Vi xử lý, Vi mạch số… được ứng dụng vào lĩnh vực điều khiển thì các hệ thống điều khiển cơ khí thô sơ với tốc

độ xử lý chậm, ít chính xác dần dần được thay thế bằng các hệ thống điều khiển tự động với các lệnh chương trình đã được thiết lập trước

Trong quá trình sản xuất ở các nhà máy, xí nghiệp hiện nay, việc phân loại tự động

là một yêu cầu hết sức cần thiết và quan trọng Vì nếu nắm bắt được việc phân loại sản phẩm sẽ giúp tiết kiệm công sức, thời gian cho công nhân, cho sản phẩm đầu

ra Và có những xử lý kịp thời tránh được những hư hỏng và sự cố có thể xảy ra cho sản phẩm

Để đáp ứng được yêu cầu phân loại tự động thì có nhiều cách để thực hiện Việc ứng dụng vi điều khiển PIC 16F877A vào việc phân loại tự động là phương pháp tối ưu Đồng thời được sự đồng ý của khoa Xây Dựng Và Điện, em đã ứng dụng nó vào đề tài: “ Mạch đếm và phân loại sản phẩm dùng PIC 16F877A giao tiếp máy tính”

Giới hạn của đề tài:

Với thời gian 3 tháng thực hiện đề tài, cũng là thời gian có nhiều lễ hội nhất trong năm, với trình độ và chuyên môn có hạng, em đã cố gắng hết sức để hoàn thành tập luận văn này đúng thời hạn do trường đặt ra Tập luận văn này tập trung giải quyết các vấn đề sau:

 Tìm hiểu về vi điểu khiển PIC16F877A

 Thiết kế mạch đếm sản phẩm và mô hình băng chuyền

 Viết chương trình phần mềm để đáp ứng yêu cầu phân loại sản phẩm

………

………

Trang 2

SVTH : Nguyễn Duy Phúc MSSV : 0851030059

LỜI CẢM ƠN

Để thực hiện và hoàn chỉnh được luận văn này, ngoài công sức nhỏ bé của em, đó

là công lao và sự tận tình giảng dạy, truyền thụ rất lớn của tất cả các Thầy Cô khoa Xây Dựng Và Điện nói chung và các Thầy Cô giảng dạy bộ môn Điện-Điện Tử nói riêng Đặc biệt hơn cả, em xin bày tỏ lòng biết ơn chân thành nhất đối với Ths Lê Minh Hải đã dành thời gian quý báo, tận tình giúp đỡ em thực hiện và hoàn thành luận văn này đúng thời hạn

Và xin chân thành cảm ơn những người bạn, những người thân đã giúp đỡ và động viên tôi trong học tập và trong quá trình thực hiện đồ án tốt nghiệp

Cuối cùng, em xin chúc quý Thầy Cô trong khoa Xây Dựng Và Điện, các Thầy Cô trong hội đồng bảo vệ và Thầy hướng dẫn Ths Lê Minh Hải được dồi dào sức

khỏe

Trang 3

MỤC LỤC

Lời mở đầu Lời cảm ơn Mục lục Chương 1: DẪN NHẬP – PHƯƠNG ÁN THIẾT KẾ 1

1.1 Đặt vấn đề……… 1

1.2 Phương án thiết kế……… 1

1.2.1 Dùng IC số………

1.2.2 Dùng vi xử lý………

1 2 1.3 Mục đích yêu cầu của đề tài ……… 2

1.4 giới hạn của đề tài……… 3

Chương 2: GIỚI THIỆU VI XỬ LÝ PIC 16F877A 4 2.1 Tổng quan về vi xử lý PIC 16F877A……… 4

2.1.1 PIC là gì ?……… 4

2.1.2 Đặc tính của vi xử lý PIC 16F877A……… 4

2.2 Giới thiệu vi xử lý PIC 16F877A ……… 5

2.2.1 Đặc tính ngoại vi ……… 5

2.2.2 Đặc tính Analog……… 6

2.2.3 Đặc tính đặc biệt……… 6

2.2.4 Công nghệ CMOS ……… 7

2.3 Sơ đồ chân vi xử lý PIC 16F877A……… 7

2.4 Sơ đồ khối vi xử lý PIC 16F877A ……… 8

2.5 Tổ chức bộ nhớ……… 9

2.5.1 Bộ nhớ của chương trình … ……… 9

2.5.2 Bộ nhớ dữ liệu ……… ……… 10

2.6 Các thanh ghi đặc biệt FSR ……… 11

2.7 Thanh ghi mục đích chung GPR ……… 14

2.8 Stack……… ……… 14

2.9 Các cổng xuất nhập của PIC 16F877A ……… 15

2.9.1 PORTA……… 15

2.9.2 PORTB……… 16

2.9.3 PORTC……… ……… 19

2.9.4 PORTD……… 20

2.9.5 PORTE……… 21

2.10 Tổng quan về một số đặc tính của CPU … ……… 22

2.10.1 Configuration bit ……… 22

2.10.2 Các đặc tính của OSCILLATOR… ……….……… 23

2.10.3 Các chế độ Reset……… 24

2.11 Ngắt (Interrupt)……… 26

2.12 Tập lệnh của Vi xử lý PIC ……… 29

2.12.1 Vài nét sơ lược về tập lệnh của Vi xử lý PIC ……… 29

2.12.2 Tập lệnh…… ……… 31

Trang 4

CHƯƠNG 3 : GIỚI THIỆU LINH KIỆN SỬ DỤNG TRONG MẠCH 38

3.1 Điện trở………… ……… 38

3.1.1 Khái niệm……… 38

3.1.2 Hình dáng và ký hiệu………….……… 38

3.1.3 Bảng quy ước màu của điện trở ……… 38

3.1.4 Cách đọc……… ……… 39

3.2 Tụ điện……… 39

3.2.1 Khái niệm tụ điện ……… 39

3.2.2 Cấu tạo của tụ điện……… 39

3.2.3 Phân loại tụ điện……… 40

3.2.4 Điện dung - Đơn vị - Kí hiệu của tụ điện.……… 41

3.2.5 Sự phóng nạp – Cách đọc trị số - Ý nghĩa điện áp của tụ điện……… 41

3.3 Diode……… ……… 42

3.3.1 Khái niệm và cấu tạo của diode……… 42

3.3.2 Hoạt động và phân cực cho diode……… 43

3.3.3 Phân loại cho diode……… 44

3.4 Cầu diode……… 46

3.4.1 Sơ đồ chân…… ……… 46

3.4.2 Đặc tính cơ bản……… ……… 46

3.5 Transistor……… ……… 46

3.5.1 Cấu tạo…….……… 46

3.5.2 Nguyên tắc hoạt động của Transistor ……… 46

3.5.3 Kí hiệu và hình dạng của Transistor ……… 48

3.5.4 Xác định chân Transistor ………….……… 49

3.6 Led…….……….……… 49

3.6.1 Khái niệm……… 49

3.6.2 Nguyên lý làm việc và cấu tạo của led… ……… 50

3.7 Led 7 đoạn……… ……… 51

3.7.1 Các khái niệm cơ bản…….……… 51

3.7.2 Cấu tạo……… ……… 51

3.8 Led thu phát hồng ngoại ……… 52

3.8.1 Khái niệm tia hồng ngoại ……… 52

3.8.2 Công dụng từng loại ……… 52

3.9 Relay……… ……… 53

3.10 IC ổn áp……… 53

3.10.1 Sơ đồ chân ……… 53

3.10.2 Đặc tính cơ bản……….……… 53

3.11 IC 74244……… 54

3.11.1 Sơ đồ chân…….……… 54

3.11.2 Đặc tính cơ bản……… 54

3.12 Mosfet IRFZ44N… ……… 54

3.12.1 Sơ đồ chân ……… 54

3.12.1 Đặc tính cơ bản ……… 54

3.13 IC MAX232……… ……… 55

Trang 5

CHƯƠNG 4 : SƠ ĐỒ KHỐI TOÀN MẠCH 56

4.1 Khối nguồn……….……… 56

4.2 Khối cảm biến……… 56

4.3 Khối xử lý……… 56

4.4 Khối động lực……….……… 56

4.5 Khối hiển thị ……….……… 56

CHƯƠNG 5: SƠ ĐỒ NGUYÊN LÝ – TÍNH TOÁN MẠCH 57 5.1 Khối nguồn ……… ……… 57

5.2 Khối cảm biến……… 59

5.3 Khối xử lý……… ……… 60

5.3.1 Mạch reset …… ……… 60

5.3.2 Mạch tạo xung nhịp……… 61

5.3.3 Khối truyền thông nối tiếp ……… 61

5.4 Khối hiển thị……….……… 61

5.5 Khối động lực……… ……… 62

CHƯƠNG 6: LẬP TRÌNH CHO PIC 63 6.1 Lưu đồ giải thuật ……… 63

6.1.1 Lưu đồ giải thuật chương trình chính…….……… 63

6.1.2 Lưu đồ giải thuật chương trình con……… 64

6.2 Viết chương trình cho vi xử lý PIC 16F877A ……… 68

CHƯƠNG 7: LẬP TRÌNH ĐIỀU KHIỂN TRÊN PC 7.1 Cơ bản về giao tiếp RS232………

76 76 7.2 VISUAL BASIC 6.0 ……… 78

7.2.1 Tổng quan về Visual Basic ……… 78

7.2.2 Các Thuộc Tính (property) ……… 79

7.2.3 Sự kiện OnComm ……… 82

7.3 Mã nguồn Visual Basic 6.0 của chương trình giao tiếp máy tính….………… 83

7.4 Giao diện chương trình sau khi biên dịch ……….……… 90

KẾT LUẬN 91 PHỤ LỤC 92 TÀI LIỆU THAM KHẢO 94

Trang 7

CHƯƠNG 1: DẪN NHẬP – PHƯƠNG ÁN THIẾT KẾ

1.1 Đặt vấn đề:

Ngày nay cùng với sự phát triển của các ngành Khoa học kỹ thuật, kỹ thuật điện – điện tử… trong đó kỹ thuật số đóng vai trò quan trọng trong mọi lĩnh vực Khoa học kỹ thuật, quản lý, tự động hóa, thông tin liên lạc…

Từ ý tưởng tự động hóa trong sản xuất, “Mạch đếm và phân loại sản phẩm” được em chọn làm

đề tài tốt nghiệp vì nó gần gũi với thực tế

Để làm được mạch này, hệ thống cần có bộ phận đếm và bộ phận cảm biến:

 Bộ phận cảm biến: gồm phần phát và phần thu Thông thường phần phát sử dụng led phát hồng ngoại và phần thu là led thu hồng ngoại

 Bộ phận đếm có nhiều phương pháp thực thi, đó là:

 Tần số đáp ứng lớn, cho phép đếm với tốc độ cao

 Khoảng cách cảm biến thu – phát có thể đặt xa nhau cho phép đếm những sản phẩm có kích thước lớn

 Tổn hao công suất thấp, có thể dùng pin hoặc ắc quy

Trang 8

Vi xử lý đa chức năng do đó việc sử dụng Vi xử lý, Vi điều khiển đã giải quyết được những bế tắc mà dùng IC số kết hợp không giải quyết được

1.2.2 Dùng Vi xử lý:

Ngoài những ưu điểm như đã liệt kê khi sử dụng IC số ghép lại, thì mạch đếm

sử dụng Vi xử lý còn có các ưu điểm sau:

 Mạch có thể thay đổi số đếm một cách linh hoạt bằng cách thay đổi phần mềm mà không ảnh hưởng tới phần cứng

 Sử dụng linh kiện ít hơn

 Mạch đơn giản hơn mạch sử dụng IC số

 Mạch có thể cài đặt số đếm ban đầu

 Mạch có thể lưu lại số lượng của các ca sản xuất

 Mạch cũng có thể giao tiếp được với máy tính

Nhưng trong thiết kế, người ta thường chọn phương pháp tối ưu về kinh tế do đó em chọn phương pháp “Đếm sản phẩm dùng Vi xử lý”

1.3 Mục đích yêu cầu của đề tài:

Trong đồ án này, em thực hiện đếm sản phẩm bằng phương pháp dựa trên sự thay đổi mức logic của các chân cảm biến Như vậy mỗi sản phẩm đi trên băng chuyền cần có một thiết bị

để cảm nhận sản phẩm, thiết bị này gọi là cảm biến Khi một sản phẩm đi qua cảm biến, cảm biến sẽ nhận được sự thay đổi mức logic (1 hoặc 0) đưa về khối xử lý để tăng số đếm và phân loại sản phẩm (cao – trung – thấp) Sản phẩm sẽ được đếm và hiển thị trên led 7 đoạn và trên màn hình máy tính

Tuy nhiên, mỗi bộ phận hay mỗi ca sản xuất lại yêu cầu với số đếm khác nhau nên phải có sự chuyển đổi linh hoạt trong việc chuyển đổi số đếm Bộ phận chuyển đổi trực quan nhất là bàn phím Khi cần thay đổi số đếm, người sử dụng chỉ việc nhập số và hệ thống sẽ tự động đếm Khi số sản phẩm đếm bằng với số sản phẩm được nhập từ bàn phím thì mạch đếm sẽ dừng đếm Từ đây suy ra được mục đích yêu cầu của đề tài:

 Số đếm phải chính xác và việc thay đổi số đếm một cách linh hoạt

 Bộ phận hiển thị rõ ràng

 Mạch không quá phức tạp, đảm bảo an toàn sử dụng

 Giá thành không quá cao

Trang 9

1.4 Giới hạn của đề tài:

Do mạch sử dụng bộ phận cảm biến là led phát và led thu hồng ngoại do đó tín hiệu hồng ngoại từ led phát không đủ mạnh để truyền đi xa trong không gian nên để led thu nhận được tín hiệu một cách mạnh và ổn định nhất thì khoảng cách khoảng cách đặt led thu và led phát không quá xa khi đặt với nhau Chính vì vậy mà kích thước sản phẩm đếm không quá lớn Đếm số sản phẩm trong phạm vi từ 00 đến 99

Trang 10

CHƯƠNG 2: GIỚI THIỆU VI XỬ LÝ PIC16F877A

2.1 Tổng quan về họ Vi điều khiển PIC:

2.1.1 PIC là gì ?

PIC là một họ vi điều khiển RISC được sản xuất bởi công ty Microchip Technology

Dòng PIC đầu tiên là PIC1650 được phát triển bởi Microelectronics Division thuộc General Instrument

PIC bắt nguồn là chữ viết tắt của "Programmable Intelligent Computer" (Máy tính khả trình thông minh) là một sản phẩm của hãng General Instruments đặt cho dòng sản phẩm đầu tiên của họ là PIC1650 Lúc này, PIC1650 được dùng để giao tiếp với các thiết bị ngoại vi cho máy chủ 16bit CP1600, vì vậy, người ta cũng gọi PIC với cái tên "Peripheral Interface Controller" (Bộ điều khiển giao tiếp ngoại vi) CP1600 là một CPU tốt, nhưng lại kém về các hoạt động xuất nhập, và vì vậy PIC 8-bit được phát triển vào khoảng năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600 PIC sử dụng microcode đơn giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bây giờ, nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động)

Năm 1985 General Instruments bán bộ phận vi điện tử của họ, và chủ sở hữu mới hủy bỏ hầu hết các dự án - lúc đó đã quá lỗi thời Tuy nhiên PIC được bổ sung EEPROM để tạo thành 1

bộ điều khiển vào ra khả trình Ngày nay rất nhiều dòng PIC được xuất xưởng với hàng loạt các module ngoại vi tích hợp sẵn (như USART, PWM, ADC ), với bộ nhớ chương trình từ

512 Word đến 32K Word

2.1.2 Đặc tính của Vi xử lý PIC:

Hiện nay có khá nhiều dòng PIC và có rất nhiều khác biệt về phần cứng, nhưng chúng

ta có thể điểm qua một vài nét như sau:

 8/16 bit CPU, xây dựng theo kiến trúc Harvard có sửa đổi

 Flash và ROM có thể tuỳ chọn từ 256 byte đến 256 Kbyte

 Các cổng Xuất/Nhập (I/O ports) (mức logic thường từ 0V đến 5.5V, ứng với logic 0 và logic 1)

 8/16 Bit Timer

 Công nghệ Nanowatt

Trang 11

 Các chuẩn Giao Tiếp Ngoại Vi Nối Tiếp Đồng bộ/Không đồng bộ USART, AUSART, EUSARTs

 Bộ chuyển đổi ADC Analog-to-digital converters, 10/12 bit

 Bộ so sánh điện áp (Voltage Comparators)

 Các module Capture/Compare/PWM

 LCD

 MSSP Peripheral dùng cho các giao tiếp I2C, SPI, và I2S

 Bộ nhớ nội EEPROM - có thể ghi/xoá lên tới 1 triệu lần

 Module điều khiển động cơ, đọc encoder

 Hỗ trợ giao tiếp USB

 Hỗ trợ điều khiển Ethernet

 Hỗ trợ giao tiếp CAN

 Hỗ trợ giao tiếp LIN

 Hỗ trợ giao tiếp IrDA

 Một số dòng có tích hợp bộ RF (PIC16F639, và RFPIC)

 KEELOQ mã hoá và giải mã

 DSP những tính năng xử lý tín hiệu số (dsPIC)

2.2 Giới thiệu Vi xử lý PIC 16F877A:

PIC16F877A thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit

Mỗi lệnh điều được thực thi trong một chu kỳ xung clock

Tốc độ hoạt động tối đa cho phép là 20MHz với một chu kỳ lệnh là 200ns

Bộ nhớ chương trình 8K x 14 bit, bộ nhớ dữ liệu 368 x 8 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256 x 8 byte

Số Port I/O là 5 với 33 pin I/O

2.2.1 Đặc tính ngoại vi:

Timer0: 8 bit định thời, đếm với 8 bit prescaler

Timer1: 16 bit định thời, đếm với prescaler, có thể được tăng lên trong suốt chế độ sleep qua thạch anh, xung clock bên ngoài

Timer2: 8 bit định thời, đếm với 8 bit prescaler và postcaler

Trang 12

Hai module Capture, Compare, PWM:

 Capture có độ rộng 16 bit, độ phân giải 12.5ns

 Compare có độ rộng 16 bit, độ phân giải 200ns

 Độ phân giải lớn nhất của PWM là 10 bit

Chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port) với SPI và I2C

Chuẩn giao tiếp nối tiếp USART (Universal Synchronous Asynchronous Receiver Transmitter) với 9 bit địa chỉ

Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD, WR, CS ở bên ngoài

2.2.2 Đặc tính Analog:

8 kênh chuyển đổi ADC (Analog-to-Digital Converter) 10 bit

Brown-out Reset (BOR)

Module so sánh tương tự:

 Hai bộ so sánh tương tự

 Bộ điện áp chuẩn VREF có thể lập trình PIC

 Có thể lập trình ngõ ra vào đến từ những ngõ vào của PIC và trên điện áp bên trong

 Những ngõ ra của bộ so sánh có thể sử dụng cho bên ngoài

2.2.3 Đặc tính đặc biệt:

Có thể ghi xóa 100.000 lần với kiểu bộ nhớ chương trình Enhanced Flash

1.000.000 lần ghi xóa với kiểu bộ nhớ EEPROM

Dữ liệu EEPROM có thể được lưu trữ hơn 40 năm

Có thể tự lập lập trình lại dưới sự điều khiển của phần mềm

Nạp chương trình ngay trên mạch điện ICSP (In - Circuit Serial Programming) thông qua

2 chân

Nguồn đơn 5V cho mạch lập trình nối tiếp

Watchdog Timer (WDT) với bộ dao động RC tích hợp sẵn trên chip cho hoạt động đáng tin cậy

Có thể lập trình mã bảo vệ

Tiết kiệm năng lượng với chế độ Sleep

Trang 13

Có thể lựa chọn bộ dao động

Mạch dở sai (ICD : In - Circuit Debug) qua 2 chân

2.2.4 Công nghệ CMOS:

Năng lượng thấp, công nghệ Flash/EEPROM tốc độ cao

Thiết kế hoàn toàn tĩnh

Khoảng điện áp hoạt động từ 2V đến 5.5V

Tiêu tốn năng lượng thấp

2.3 Sơ đồ chân Vi xử lý PIC16F877A:

Hình 2.3: Sơ đồ chân và hình dạng của PIC16F877A (40 pin)

Trang 14

2.4 Sơ đồ khối Vi xử lý PIC16F877A:

Hình 2.4.1: Cấu trúc bên trong của PIC16F877A Như đã nói ở trên, Vi điều khiển PIC có kiến trúc Harvard, trong đó CPU truy cập chương trình và dữ liệu trên hai bus riêng biệt, nên làm tăng đáng kể băng thông so với kiến trúc Von Neumann, trong đó CPU truy cập chương trình và dữ liệu trên cùng một bus

Việc tách riêng bộ nhớ chương trình và bộ nhớ dữ liệu cho phép số bit của từ lệnh có thể khác với số bit của dữ liệu Ở PIC16F877A, từ lệnh dài 14 bit, từ dữ liệu 8 bit PIC16F877A chứa một bộ ALU 8 bit và thanh ghi làm việc WR (Working Register) ALU là đơn vị tính toán số học và logic, nó thực hiện các phép tính số và đại số Boole trên thanh ghi làm việc WR và các thanh ghi dữ liệu ALU có thể thực hiện các phép cộng, trừ, dịch bit và các phép toán logic

Trang 15

2.5 Tổ chức bộ nhớ:

2.5.1 Bộ nhớ chương trình:

Bộ nhớ chương trình của Vi điều khiển PIC16F877A là bộ nhớ Flash, dung lượng bộ nhớ 8K word (1 word = 14 bit) và được phân chia thành nhiều trang (từ page 0 đến page 3) Như vậy,

bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì 1 lệnh sau khi mã hóa sẽ

có dung lượng 1 word = 14 bit)

Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình cần có dung lượng 13 bit (PC <12:0>)

Khi Vi điều khiển được Reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000H (Resetvector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004H (Interruptvector)

Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình

Hình 2.5.1: Bộ nhớ chương trình của PIC

Trang 16

2.5.2 Bộ nhớ dữ liệu:

Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank Đối với PIC16F877A, bộ nhớ dữ liệu chia làm 4 bank Mỗi bank có dung lượng 12 bytes, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special Function Register) nằm ở các vùng địa chỉ thấp

và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank Các thanh ghi SFR thường xuyên sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cả các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau :

Hình 2.5.2: Bộ nhớ dữ liệu của PIC

Trang 17

2.6 Các thanh ghi đặc biệt FSR:

Hình 2.6.1: Các thanh ghi đặc biệt ở Bank 0

Trang 18

Hình 2.6.2: Các thanh ghi đặc biệt ở Bank 1

Trang 19

Hình 2.6.3: các thanh ghi đặc biệt ở Bank 2 và Bank 3

Trang 20

2.7 Thanh ghi mục đích chung GPR:

Các thanh ghi này có thể truy xuất trực tiếp thông qua thanh ghi FSG (File Select Register) Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thế tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình

2.8 Stack:

Stack cho phép 8 lệnh gọi chương trình con và ngắt hoạt động Stack chứa địa chỉ mà chương trình chính sẽ quay về thực hiện từ sau chương trình con hay ngắt Đối với PIC16F877A, Stack có độ sâu 8 lớp

Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được Vi điều khiển cất vào trong Stack Khi một trong các lệnh RETURN, RETLW hay RETFIE được thực thi, giá trị

PC sẽ tự động lấy ra từ trong Stack, Vi điều khiển sẽ thực hiện tiếp chương trình theo đúng quy trình định trước

Bộ nhớ Stack trong Vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá trị cất vào Stack lần thứ 2

Cần chú ý là không có cớ hiệu nào cho biết trạng thái Stack, do đó ta không biết được khi nào Stack bị tràn Bên cạnh đó, tập lệnh của Vi điều khiển dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ Stack sẽ hoàn toàn được điều khiển bởi CPU

Trang 21

2.9 Các cổng xuất nhập của PIC16F877A:

2.9.1 PORTA:

Hình 2.9.1: Cấu trúc bên trong của PORTA PORTA gồm 6 chân từ RA0 đến RA5 Việc ghi giá trị vào thanh ghi TRISA sẽ quy định các chân của PORTA là input hay output Việc đọc thanh ghi PORTA sẽ đọc trạng thái các chân ở PORTA Việc ghi giá trị vào thanh ghi PORTA sẽ thay đổi trạng thái của các chân PORTA Riêng chân RA4 được tích hợp chức năng là chân cung cấp xung clock ngoài cho Timer 0 (RA4/T0CKI) Những chân khác của PORTA được đa hợp với các chân ngõ vào Analog của ADC và chân ngõ vào của điện thế so sánh của bộ so sánh Comparator Hoạt động của những chân này được quy định bằng những bit tương ứng trong các thanh ghi ADCCON1

và CMCON1 Khi các chân của PORTA được sử dụng làm ngõ vào Analog thì các bit trong thanh ghi TRISA phải được set bằng 1

Trang 22

Hình 2.9.1a: Chức năng và các thanh ghi liên quan đến PORTA

2.9.2 PORTB:

Hình 2.9.2: Cấu trúc bên trong của PORTB

Trang 23

PORTB gồm 8 chân từ RB0 – RB7 Việc ghi giá trị vào thanh ghi TRISB sẽ quy định các chân của PORTB là input hay output Việc đọc thanh ghi PORTB sẽ đọc trạng thái của các chân ở PORTB Việc ghi giá trị vào thanh ghi PORTB sẽ thay đổi trạng thái của các chân PORTB

Ba chân của PORTB được đa hợp với chức năng In-Circuit Debugger và Low Voltage Programming Function là : RB3/PGM, RB6/PGC, RB7/PGD Mỗi chân PORTB có một transistor kéo lên VDD Chức năng này hoạt động khi bit RBPU (Option <7>) được xóa Chức năng này sẽ tự động được xóa khi PORTB được quy định là input

Bốn chân của PORTB từ RB7 đến RB4 có chức năng ngắt khi trạng thái chân PORTB thay đổi (Khi PORTB được quy định là output thì chức năng này không hoạt động) Giá trị chân của PORTB được so sánh với giá trị đã được lưu trước đó, khi có sự sai lệch giữa 2 giá trị này, ngắt sẽ xảy ra với cờ ngắt RBIF (INTCON <0>) được set lên Ngắt có thể làm cho VĐK thoát khỏi trạng thái SLEEP

Bất cứ sự truy xuất nào trên PORTB sẽ xóa trạng thái sai lệch, kết thúc ngắt và cho phép xóa cờ ngắt RBIF

Trang 24

Hình 2.9.2: Chức năng và các thanh ghi liên quan đến PORTB

Trang 25

2.9.3 PORTC:

Hình 2.9.3: Cấu trúc bên trong của PORTC PORTC gồm 8 chân từ chân RC0 – RC7 Việc ghi giá trị vào thanh ghi TRISC sẽ quy định các chân của PORTC là input hay output Việc đọc thanh ghi PORTC sẽ đọc trạng thái của các chân ở PORTC Việc ghi giá trị vào thanh ghi PORTC sẽ thay đổi trạng thái của các chân PORTC

Các chân PORTC được đa hợp với các chức năng ngoại vi

Khi các chức năng ngoại vi được cho phép ta cần quan tâm chặt chẽ tới giá trị các bit của thanh ghi TRISC Một số chức năng ngoại vi sẽ ghi đè giá trị 0 lên các bit của thanh ghi TRISC và mặc định các chân này là output, ngoài ra một số chức năng ngoại vi khác sẽ tự động mặc định một số chân là ngõ vào Do đó cần xem kỹ các tính năng của các hàm ngoại vi

để thiết lập giá trị các bit trong thanh ghi TRISC cho thích hợp

Hình 2.9.3a: Chức năng và các thanh ghi liên quan đến PORTC

Trang 26

2.9.4 PORTD:

Hình 2.9.4: Cấu trúc bên trong của PORTD PORTD gồm 8 chân từ chân RD0 – RD7 Bên cạnh chức năng là port xuất nhập, PORTD còn có thể hoạt động như một cổng song song bằng cách set các bit PSPMODE (TRISE <4>), trong chế độ này buffer ngõ vào là TTL PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)

Hình 2.9.4a: Chức năng và các thanh ghi liên quan đến PORTD

Trang 27

Ngoài ra các chân PORTE còn có thể được cấu hình như là các ngõ vào Analog, tại chế độ này, khi đọc giá trị của các chân này sẽ cho ta giá trị là 0

Thanh ghi TRISE quy định chức năng xuất nhập của PORTE ngay cả khi nó được sử dụng như các ngõ vào Analog Phải đảm bảo các chân này được quy định là ngõ vào trong chế độ này

Hình 2.9.5a: Chức năng và các thanh ghi liên quan đến PORTE

Trang 28

2.10 Tổng quan về một số đặc tính của CPU:

2.10.1 Configuration bit:

Đây là các bit dùng để lựa chọn các đặc tính của CPU Các bit này được chứa trong bộ nhớ chương trình tại địa chỉ 2007h và chỉ có thể được truy xuất trong quá trình lập trình cho vi điều khiển Chi tiết về các bit này như sau :

Bit 13 CP: (Code Protection)

 1 : tắt chế độ bảo vệ mã chương trình

 0 : bật chế độ bảo vệ mã chương trình

Bit 12, 5, 4: không quan tâm và được mặc định mang giá trị 0

Bit 11 DEBUG (In-circuit debug mode bit)

 1:không cho phép, RB7 và RB6 được xem như các pin xuất nhập bình thường

 0:cho phép, RB7 và RB6 là các pin được sử dụng cho quá trình debug

Bit 10-9 WRT1:WRT0 Flash Program Memory Write Enable bit

 11: Tắt chức năng chống ghi, EECON sẽ điều khiển quá trình ghi lên toàn bộ nhớ chương trình

 10: chỉ chống từ địa chỉ 0000h:00FFh

 01: chỉ chống ghi từ địa chỉ 0000h:07FFh

 00: chỉ chống ghi từ địa chỉ 0000h:0FFFh

Bit 8 CPD Data EEPROM Memory Write Protection bit

 1: Tắt chức năng bảo vệ mã của EEPROM

 0: Bật chức năng bảo vệ mã

Bit 7 LVP Low-Voltage (Single supply) In-Circuit Serial Programming Enable bit:

 1: Cho phép chế độ nạp điện áp thấp, pin RB3/PGM được sử dụng cho chế độ này

 0: Không cho phép chế độ nạp điện áp thấp, điện áp cao được đưa vào từ pin , pin RB3 là pin I/O bình thường

Bit 6 BODEN Brown-out Reset Enable bit

 1: cho phép BOR (Brown-out Reset)

 0: không cho phép BOR

Trang 29

Bit 3 Power-up Timer Enable bit

PIC16F877A có khả năng sử dụng một trong 4 loại oscillator, đó là:

 LP: (Low Power Crystal)

Trang 30

Đối với các ứng dụng không cần các loại oscillator tốc độ cao, ta có thể sử dụng mạch dao động RC làm nguồn cung cấp xung hoạt động cho vi điều khiển Tần số tạo ra phụ thuộc vào các giá trị điện áp, giá trị điện trở và tụ điện, bên cạnh đó là sự ảnh hưởng của các yếu tố như nhiệt độ, chất lượng của các linh kiện Các linh kiện sử dụng cho mạch RC oscillator phải bảo đảm các giá trị sau :

3K < REXT < 100K

CEXT > 20 pF

2.10.3 Các chế độ Reset:

Có nhiều chế độ reset vi điều khiển, bao gồm:

 Power-on Reset POR (Reset khi cấp nguồn hoạt động cho vi điều khiển) reset trong quá trình hoạt động

 từ chế độ sleep

 WDT reset (reset do khối WDT tạo ra trong quá trình hoạt động)

 WDT wake up từ chế độ sleep

 Brown-out reset (BOR)

Hình 2.10.3: Mạch reset qua pin Ngoại trừ reset POR trạng thái các thanh ghi là không xác định vàWDT wake up không ảnh hưởng đến trạng thái các thanh ghi, các chế độ reset còn lại đều đưa giá trị các thanh ghi về giá trị ban đầu được ấn định sẵn Các bit và chỉ thị trạng thái hoạt động, trạng thái reset của vi điều khiển và được điều khiển bởi CPU

 reset: Khi pin ở mức logic thấp, vi điều khiển sẽ được reset Tín hiệu reset được cung cấp bởi một mạch ngoại vi với các yêu cầu cụ thể sau:

 Không nối pin trực tiếp lên nguồn VDD

Trang 31

 R1 phải nhỏ hơn 40 K để đảm bảo các đặc tính điện của vi điều khiển

 R2 phải lớn hơn 1 K để hạn dòng đi vào vi điều khiển

 reset còn được chống nhiễu bởi một bộ lọc để tránh các tín hiệu nhỏ tác động lên

Power-up Timer (PWRT): đây là bộ định thời hoạt động dựa vào mạch RC bên trong vi điều khiển Khi PWRT được kích hoạt, vi điều khiển sẽ được đưa về trạng thái reset PWRT sẽ tạo ra một khoảng thời gian delay (khoảng 72 ms) để VDD tăng đến giá trị thích hợp

Oscillator Start-up Timer (OST): OST cung cấp một khoảng thời gian delay bằng 1024 chu

kì xung của oscillator sau khi PWRT ngưng tác động (vi điều khiển đã đủ điều kiện hoạt động)

để đảm bảo sự ổn định của xung do oscillator phát ra Tác động của OST còn xảy ra đối với POR reset và khi vi điều khiển được đánh thức từ chế độ sleep OST chỉ tác động đối với các lọai oscillator là XT, HS và LP

Brown-out reset (BOR): Nếu VDD hạ xuống thấp hơn giá trị VBOR (khoảng 4V) và kéo dài trong khoảng thời gian lớn hơn TBOR (khoảng 100 us), BOR được kích hoạt và vi điều khiển được đưa về trạng thái BOR reset Nếu điện áp cung cấp cho vi điều khiển hạ xuống thấp hơn VBOR trong khoảng thời gian ngắn hơn TBOR, vi điều khiển sẽ không được reset Khi điện áp cung cấp đủ cho vi điều khiển hoạt động, PWRT được kích hoạt để tạo ra một khoảng thời gian delay (khoảng 72ms) Nếu trong khoảng thời gian này điện áp cung cấp cho

vi điều khiển lại tiếp tục hạ xuống dưới mức điện áp VBOR, BOR reset sẽ lại được kích hoạt khi vi điều khiển đủ điện áp hoạt động Một điểm cần chú ý là khi BOR reset được cho phép, PWRT cũng sẽ hoạt động bất chấp trạng thái của bit PWRT

Trang 32

Hình 2.10.3: Sơ đồ các chế độ reset của PIC16F877A

Tóm lại để vi điều khiển hoạt động được từ khi cấp nguồn cần trải qua các bước sau:

Đến thời điểm này vi điều khiển mới bắt đầu hoạt động bình thường Thanh ghi điều khiển

và chỉ thị trạng thái nguồn cung cấp cho vi điều khiển là thanh ghi PCON

Trang 33

là quá trình tán gẫu của bạn với người bạn ngồi ở nhà, điện thoại reo tạo ra một interrupt và thủ tục interrupt là cuộc nói chuyện với người ở đầu dây bên kia, khi kết thúc cuộc nói chuyện bằng điện thoại bạn quay về “chương trình chính” để tiếp tục tán gẫu

Ví dụ này giải thích chính xác một interrupt tạo ra một tiến trình xử lý như thế nào ? Một chương trình chính đang chạy, thực hiện một vài chức năng nào đó trên mạch điện nhưng khi interrupt xảy ra, chương trình chính sẽ tạm ngưng và ngay lúc đó một thủ tục khác được thực hiện, khi thủ tục này kết thúc con PIC sẽ quay lại chương trình chính

Con PIC có 15 nguồn ngắt, khi ngắt được xảy ra cần : Khai báo ngắt (Set các bit điều khiển

IE tương ứng) và có cờ ngắt tác động (IF), để biết ngắt như thế nào, chúng ta cần xem sơ đồ sau :

Hình 2.11: Giản đồ ngắt Các bit điều khiển ngắt :

 Bit GIE : INTCON <7> : Cho phép ngắt toàn cục

 Bit PEIE : INTCON <6> : Cho phép ngắt ngoại vi

 Bit RBIE : INTCON <3> : Cho phép ngắt PORTB

 Bit INTE : INTCON <4> : Cho phép ngắt RB0

 Bit TMR0IE : INTCON <5> : Cho phép ngắt Timer0

 Bit FEIE : PIE2 <4> : Cho phép ngắt EEPROM

 Bit PSPIE : PIE1 <7> : Cho phép ngắt truyền song song

Trang 34

 Bit ADIE : PIE1 <6> : Cho phép ngắt chuyển đổi ADC

 Bit RCIE : PIE1 <5> : Cho phép ngắt nhận nối tiếp

 Bit TXIE : PIE1 <4> : Cho phép ngắt truyền nối tiếp

 Bit SSPIE : PIE1 <3> : Cho phép ngắt truyền nhận nối tiếp đang bận

 Bit CCP1IE : PIE1 <2> : Cho phép ngắt bộ CCP1

 Bit TMR2IE : PIE1 <1> : Cho phép ngắt Timer2

 Bit TMR1IE : PIE1 <0> : Cho phép ngắt Timer1

 Bit CCP2IE : PIE2 <0> : Cho phép ngắt bộ CCP2

 Bit BCLIE : PIE2 <3> : Cho phép ngắt truyền nhận nối tiếp xảy ra

 Bit CMIE : PIE2 <6> : Cho phép ngắt bộ so sánh

Các bit cờ ngắt :

 Bit RBIF : INTCON <0> : Cờ ngắt PORTB

 Bit INTF : INTCON <1> : Cờ ngắt RB0

 Bit TMR0IF : INTCON <2> : Cờ ngắt Timer0

 Bit FEIF : PIR2 <4> : Cờ ngắt EEPROM

 Bit PSPIF : PIR1 <7> : Cờ ngắt truyền song song

 Bit ADIF : PIR1 <6> : Cờ ngắt chuyển đổi ADC

 Bit RCIF : PIR1 <5> : Cờ ngắt nhận nối tiếp

 Bit TXIF : PIR1 <4> : Cờ ngắt truyền nối tiếp

 Bit SSPIF : PIR1 <3> : Cờ ngắt truyền nhận nối tiếp đang bận

 Bit CCP1IF : PIR1 <2> : Cờ ngắt CCP1

 Bit TMR2IF : PIR1 <1> : Cờ ngắt Timer2

 Bit TMR1IF : PIR1 <0> : Cờ ngắt Timer1

 Bit CCP2IF : PIR2 <0> : Cờ ngắt CCP2

 Bit BCLIF : PIR2 <3> : Cờ ngắt truyền nhận nối tiếp xảy ra

 Bit CMIF : PIR2 <6> : Cờ ngắt bộ so sánh

=> Dựa vào sơ đồ trên, chúng ta có thể set bit tương ứng để khai báo ngắt

Trang 35

 Cấu trúc chương trình có dùng ngắt :

ORG 0000H ; Địa chỉ vector Reset

GOTO MAIN ; Nhảy vào chương trình chính

;………INTERRUPT ROUTINE…………

ORG 04H ; Địa chỉ vector ngắt

 Lưu các giá trị vào tạm thời vào Ram nội (nếu các giá trị này thay đổi khi thực thi chương trình ngắt)

2.12 Tập lệnh của Vi xử lý PIC:

2.12.1 Vài nét sơ lược về tập lệnh của Vi xử lý PIC:

Như đã trình bày ở trên PIC là vi điều khiển có tập lệnh rút gọn RISC (Reduced Instruction Set Computer), bao gồm 35 lệnh và có thể được phân ra thành 3 nhóm cơ bản:

 Nhóm lệnh thao tác trên bit

 Nhóm lệnh thao tác trên byte

 Nhóm lệnh điều khiển

Trang 36

Đối với dòng vi điều khiển PIC16Fxxx, mỗi lệnh được mã hóa thành 14 bit word, bao gồm các bit opcode (dùng để xác định lệnh nào được mã hóa) và các bit mô tả một hay vài tham số của lệnh Đối với nhóm lệnh thao tác trên byte, ta có 2 tham số f (xác định địa chỉ byte cần thao tác) và d (xác định nơi chứa kết quả thực thi lệnh) Nếu d = 0, kết quả sẽ được đưa vào thanh ghi W Nếu d = 1, kết quả được đưa vào thanh ghi được mô tả bởi tham số f

Hình 2.12.1: Cơ chế mã hóa lệnh của PIC 16Fxxx Đối với nhóm lệnh thao tác trên bit, ta có hai tham số b (xác định bit cần thao tác) và f (xác định địa chỉ byte dữ liệu cần thao tác)

PIC16Fxxx

Đối với nhóm lệnh điều khiển chỉ có một tham số duy nhất là k (k có thể là 8 bit trong trường hợp các lệnh bình thường hay 11 bit trong trường hợp là lệnh CALL và lệnh GOTO) dùng để mô tả đối tượng tác động của vi điều khiển (một label, một hằng số nào đó)

Mỗi lệnh sẽ được vi điều khiển thực thi xong trong vòng một chu kì lệnh, ngoại trừ các lệnh làm thay đổi giá trị bộ đếm chương trình PC cần 2 chu kì lệnh Một chu kì lệnh gồm 4 xung clock của oscillator Ví dụ ta sử dụng oscillator có tần số 4 MHz thì tần số thực thi lệnh sẽ là 4MHz/4 = 1 MHz, như vậy một chu kì lệnh có thời gian 1 uS

Các lệnh thao tác trên một thanh ghi bất kì đều thực hiện cơ chế Read-Modify-Write, tức là thanh ghi sẽ được đọc, dữ liệu được thao tác và kết quả được đưa vào thanh ghi chứa kết quả (nơi chứa kết quả tùy thuộc vào lệnh thực thi và tham số d) Ví dụ như khi thưc thi lệnh

“CLRF PORTB”, vi điều khiển sẽ đọc giá trị thanh ghi PORTB, xóa tất cả các bit và ghi kết quả trở lại thanh ghi PORTB Sau đây ta sẽ đi sâu vào cấu trúc, cú pháp và tác động cụ thể của từng lệnh

Trang 37

Tác dụng: thực hiện phép toán AND giữa các giá trị chứa trong hai thanh ghi W và f

Kết quả được đưa vào thanh ghi W nếu

d=0 hoặc thanh ghi f nếu d = 1

Bit trạng thái: Z

 Lệnh BCF

Cú pháp: BCF f,b (0 ≤ f ≤ 127, 0 ≤ b ≤ 7)

Tác dụng: xóa bit b trong thanh ghi f về giá trị 0

Bit trạng thái: không có

 Lệnh BSF

Cú pháp: BSF f,b (0 ≤ f ≤ 127, 0 ≤ b ≤ 7)

Tác dụng: set bit b trong thanh ghi f

Bit trạng thái: không có

Trang 38

 Lệnh BTFSS

Cú pháp: BTFSS f,b (0 ≤ f ≤ 127, 0 ≤ b ≤ 7)

Tác dụng: kiểm tra bit b trong thanh ghi f

Nếu bit b bằng 0, lệnh tiếp theo được thực thi Nếu bit b bằng 1, lệnh tiếp theo được bỏ qua và thay vào đó là lệnh NOP

Bit trạng thái: không có

Bit trạng thái: không có

Trang 39

Tác dụng: giá trị thanh ghi f được giảm đi 1 đơn vị Kết quả được đưa vào thanh ghi W nếu d

= 0 hoặc thanh ghi f nếu d = 1

Bit trạng thái: Z

 Lệnh DECFSZ

Cú pháp: DECFSZ f,d (0 ≤ f ≤ 127, d∈[0,1])

Tác dụng: gía trị thanh ghi f được giảm 1 đơn vị Nếu kết quả sau khi giảm khác 0,

lệnh tiếp theo được thực thi, nếu kết quả bằng 0, lệnh tiếp theo không được thực thi và thay vào đó là lệnh NOP Kết quả được đưa vào thanh ghi W nếu d = 0 hoặc thanh ghi f nếu d = 1 Bit trạng thái: không có

 Lệnh GOTO

Cú pháp: GOTO k (0 ≤ k ≤ 2047)

Tác dụng: nhảy tới một label được định nghĩa bởi tham số k và 2 bit PCLATH <4:3>

Bit trạng thái: không có

Bit trạng thái: không có

Trang 40

Tác dụng: thực hiện phép toán OR giữa hai thanh ghi W và f Kết quả được đưa vào thanh ghi

W nếu d=0 hoặc thanh ghi f nếu d=1

Tác dụng : quay trở về chương trình chính từ một chương trình con

Bit trạng thái: không có

 Lệnh RRF

Cú pháp: RRF f,d (0 ≤ f ≤ 127, d∈[0,1])

Tác dụng: dịch phải các bit trong thanh ghi f qua cờ carry Kết quả được lưu trong thanh ghi

W nếu d=0 hoặc thanh ghi f nếu d=1

Ngày đăng: 09/07/2017, 12:46

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w