Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung trong một bộ nhớ, o đó trong cùng một thời điểm CPU chỉ tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trìn
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
KHOA CÔNG NGHỆ ĐIỆN TỬ
LỚP : DHDT5B
TP.HCM, ngày 27 tháng 8 năm 2012
Trang 2NH N T CỦA GI O VI N HƢ NG N
Điểm số bằng số: _Điểm số bằng chữ: _
TP.HCM, ngày…….tháng……… năm 2012
(GV hướng dẫn ký và ghi rõ họ tên)
Trang 3NH N XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Điểm số bằng số: _Điểm số bằng chữ: _
TP.HCM, ngày…….tháng……… năm 2012
(GV ký và ghi rõ họ tên)
Trang 4LỜI CẢM ƠN
Lời đầu tiên, chúng em xin gửi lời cảm ơn tới các thầy cô giáo trong trường ĐH Công nghiệp TpHcm đã truyền đạt cho chúng em những kiến thức quí báu trong suốt thời gian học tập tại trường vừa qua
Ch ng m xin ch n thành cảm ơn các thầy cô trong ho Công nghệ điện tử đã truyền đạt ch ng m những iến thức về chuy n môn và gi p ch ng m định hướng
th o s hiểu iết và hả năng để ch ng m th c hiện tốt đ án
và tạo điều iện thuận i cho ch ng m
hoàn t t học phần này
Ch ng m c ng xin gởi ời cảm ơn ch n thành đến thầy Phạm Quang Trí- giáo
vi n hướng n, đã tạo điều kiện gi p đ ch ng m hoàn thành đ án này
Sau cùng, chúng em xin gửi lời cảm ơn đến gi đình, ạn è động vi n, đóng góp
ý kiến trong quá trình hoàn thành đ án này
Trang 5LỜI MỞ ĐẦU U
Ngày nay, những ứng dụng củ vi điều khiển đã đi s u vào đời sống sinh hoạt
và sản xu t củ con người, là một phần t t yếu không thể thiếu trong đời sống hiện đại Thế kỷ 21 đư c xem là thế kỷ của khoa học công nghệ, là thế kỷ mà máy móc
đư c thiết kế và lập trình một cách t động để thay thế các hoạt động củ con người trong sản xu t, c ng như để phục vụ các công việc trong sinh hoạt Trong một cuộc sống mang tính t động hoá cao thì các mạch vi xử ý như à một công cụ đắc l c, quan trọng, hỗ tr cho con người th c hiện nhu cầu ngày càng cao và càng hoàn thiện của mình
S u hi đư c học, nghiên cứu về vi điều khiển ở phần lý thuyết Chúng em có thể tiến hành các bài thí nghiệm đối với vi điều khiển nhằm mục đích gi p ch ng m hiểu một cách tường tận hơn về những gì ch ng t đã học trong phần lý thuyết c ng như cách vận dụng nó vào th c tế
Trong th c tế, các ứng dụng củ vi điều khiển r t đ ạng và phong phú Từ những ứng dụng đơn giản chỉ vài thiết bị ngoại vi cho đến những hệ thống vi điều khiển phức tạp Với những hệ thống ứng dụng rộng rãi, đ ạng và phong ph như vậy với những kiến thức đã học và nghiên cứu ch ng m xin trình ày sơ ư c của khối vi điều khiển PIC 16F877A, cách thức giao tiếp với máy tính và mô hình thí nghiệm ứng dụng của nó
Tuy đã cố gắng nhiều nhưng o thời gian và kiến thức có hạn nên chắc chắn không tránh khỏi những thiếu sót, em trân trọng t t cả những ý kiến ph ình, đóng góp của các thầy cô ch m đ án, và những chỉ d n của thầy Nguyễn Minh Ngọc Em xin chân thành cảm ơn
Trang 6MỤC LỤC
CHƯƠNG I: SƠ LƯỢC PHẦN CỨNG 1
I PIC 16F877A 1
1.Giới thiệu chung về PIC 1
2.PIC 16F877A 5
II.LED Ma trận 21
1.Giới thiệu về led ma trận 21
2.Các phương pháp hiển thị cho quang báo 23
III IC GHI DỊCH 6B595 29
IV KHẢO SÁT TRANSISTOR A1015 32
V KHẢO SÁT IC ULN2803 33
VI GIAO TIẾP RS-232 34
CHƯƠNG II: GI I THIỆU VỀ NGÔN NGỮ L P TRÌNH 37
1.Tổng quan về C HI-TECH 37
2.Mô tả nội ung chương trình 38
CHƯƠNG III:THIẾT KẾ HỆ THỐNG 40
I THIẾT KẾ PHẦN CỨNG 40
1.Mạch module PIC 40
2.Mạch RS232 41
3.Mạch led ma trận 42
II THIẾT KẾ PHẦN MỀM 43
1.Lưu đ giải thuật C HI – TECH 43
2.Chương trình vi xử lý 46
CHƯƠNG IV: KẾT LU N 52
I ƯU VÀ NHƯỢC ĐIỂM CỦA THI CÔNG MẠCH 52
II.CÁC HƯỚNG PHÁT TRIỂN ĐỀ TÀI 52
III.KẾT LUẬN 52
IV TÀI LIỆU THAM KHẢO 53
Trang 7CHƯƠNG I : SƠ LƯỢC PHẦN CỨNG
I GI I THIỆU VỀ PIC 16F877A
1 GI I THIỆU CHUNG VỀ PIC
PIC là viết tắt củ Progr m Int ig nt Comput r , do hãng General Instrum nt đặt t n cho vi điều khiển đầu tiên của họ: PIC1650 đư c thiết kế để dùng làm các thiết bị ngoại vi cho vi điều khiển CPU1600 Vi điều khiển này s u đó đư c nghiên cứu phát triển thêm và từ đó hình thành n n òng vi điều khiển PIC ngày nay
1.1 SỰ PHỔ IẾN CỦA VI ĐIỀU KHIỂN PIC
Trên thị trường có r t nhiều họ vi điều khiển như 8051, Motoro 68HC, AVR, ARM Tuy nhiên, hiện n y PIC đ ng đư c sử dụng rộng rãi ở Việt Nam vì những nguyên nhân sau:
- Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam
- Giá thành hông quá đắt
- Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập
- Là s bổ sung r t tốt về kiến thức c ng như về ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051
- Hiện nay tại Việt N m c ng như tr n thế giới, PIC đư c sử dụng khá rộng rãi Điều này tạo nhiều thuận l i trong quá trình tìm hiểu và phát triển các ứng dụng
- S hỗ tr của nhà sản xu t về trình biên dịch, các công cụ lập trình, nạp chương trình từ đơn giản đến phức tạp…
- Các tính năng đ ạng của vi điều khiển PIC không ngừng đư c phát triển
1 2 KIẾN TR C PIC
C u trúc phần cứng của một vi điều khiển đư c thiết kế theo hai dạng kiến trúc:
Kiến trúc Von-Neumann và kiến trúc Harvard
Trang 8Hình 3.1: Kiến trúc Harvard và kiến trúc Von-Neuman
Tổ chức phần cứng củ PIC đư c thiết kế theo kiến tr c H rv r Điểm khác biệt giữa kiến trúc Harvard và kiến trúc Von-Neumann là c u trúc bộ nhớ dữ liệu và bộ nhớ chương trình
Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung trong một bộ nhớ, o đó trong cùng một thời điểm CPU chỉ tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình Như vậy có thể nói kiến trúc Von-Neumann không thích h p với c u trúc của một vi điều khiển
Đối với kiến trúc Harvard, bộ nhớ dữ liệu và bộ nhớ chương trình tách r thành h i
bộ nhớ riêng biệt Do đó trong cùng một thời điểm CPU có thể tương tác với cả hai
bộ nhớ, như vậy tốc độ xử lí củ vi điều khiển đư c cải thiện đáng ể Một điểm cần chú ý nữa là tập lệnh trong kiến trúc Harvard có thể đư c tối ưu tùy th o y u cầu kiến trúc củ vi điều khiển mà không phụ thuộc vào c u trúc dữ liệu Ví dụ, đối với vi điều khiển òng 16Fxxx, độ dài lệnh luôn là 14 bit (trong khi dữ liệu đư c tổ chức thành từng yt ), còn đối với kiến trúc Von-Neum nn, độ dài lệnh luôn là bội số của 1 byte (do dữ liệu đư c tổ chức thành từng byte) Điều này có nghĩ tập lệnh củ vi điều khiển thuộc c u trúc Harvard sẽ ít lệnh hơn, ngắn hơn, đơn giản hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số ư ng bit nh t định
Vi điều khiển đư c tổ chức theo kiến tr c H rv r còn đư c gọi à vi điều khiển RISC (R uc Instruction S t Comput r) h y vi điều khiển có tập lệnh rút gọn
Vi điều khiển đư c thiết kế theo kiến trúc Von-N um n còn đư c gọi à vi điều khiển CISC (Comp x Instruction S t Comput r) h y vi điều khiển có tập lệnh phức tạp vì mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit (1 byte)
Trang 91.3 PIPELINING
Đ y chính à cơ chế xử lí lệnh củ các vi điều khiển PIC Một chu kì lệnh của vi điều khiển sẽ bao g m 4 xung clock Ví dụ ta sử dụng oscillator có tần số 4 MHZ, thì xung lệnh sẽ có tần số 1 MHz (chu kì lệnh sẽ là 1 us) Giả sử ta có một đoạn chương trình như s u:
1 MOVLW 55h
2 MOVWF PORTB
4 BSF PORTA,BIT3
5 instruction @ address SUB_1
Ở đ y t chỉ àn đến qui trình vi điều khiển xử í đoạn chương trình tr n thông qu từng chu kì lệnh Quá trình trên sẽ đư c th c thi như s u:
có thể xem lênh 3 cần 2 chu ì xung c oc để th c thi
TCY5: th c thi lệnh đầu tiên củ SUB_1 và đọc lệnh tiếp theo của SUB_1
Quá trình này đư c th c hiện tương t cho các lệnh tiếp theo củ chương trình Thông thường, để th c thi một lệnh, ta cần một chu kì lệnh để gọi lệnh đó, và một chu kì xung clock nữ để giải mã và th c thi lệnh Với cơ chế pip ining đư c trình
Trang 10bày ở trên, mỗi lệnh x m như chỉ đư c th c thi trong một chu kì lệnh Đối với các lệnh mà quá trình th c thi nó àm th y đổi giá trị thanh ghi PC (Program Counter) cần hai chu kì lệnh để th c thi vì phải th c hiện việc gọi lệnh ở địa chỉ thanh ghi PC chỉ tới S u hi đã xác định đ ng vị trí lệnh trong thanh ghi PC, mỗi lệnh chỉ cần một chu
kì lệnh để th c thi xong
1.4 C C NG PIC V C CH LỰA CHỌN PIC
* Các kí hiệu của vi điều khiển PIC
- PIC12xxxx: độ dài lệnh 12 bit
- PIC16xxxx: độ dài lệnh 14 bit
- PIC18xxxx: độ dài lệnh 16 bit
- C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
*Cách lựa chọn PIC
Trước hết cần ch ý đến số chân củ vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số ư ng chân khác nhau, thậm chí có vi điều khiển chỉ
có 8 ch n, ngoài r còn có các vi điều khiển 28, 40, 44 … ch n
Cần chọn vi điều khiển PIC có bộ nhớ f sh để có thể nạp xó chương trình đư c nhiều lần hơn Tiếp theo cần ch ý đến các khối chức năng đư c tích h p sẵn trong vi điều khiển, các chuẩn giao tiếp bên trong Sau cùng cần ch ý đến bộ nhớ chương trình mà vi điều khiển cho phép Ngoài ra mọi thông tin về cách l a chọn vi điều khiển PIC có thể đư c tìm th y trong cuốn sách S ct PIC gui o nhà sản xu t Microchip cung c p
1.5 NGÔN NGỮ L P TR NH PIC
Ngôn ngữ lập trình cho PIC r t đ ạng Ngôn ngữ lập trình c p th p có MPLAB (đư c cung c p miễn phí bởi nhà sản xu t Microchip), các ngôn ngữ lập trình c p cao
Trang 11hơn o g m C, B sic, P sc , … Ngoài r còn có một số ngôn ngữ lập trình đư c phát triển ành ri ng cho PIC như PICB sic, Mi roB sic…
bộ nhớ dữ liệu 368 byte RAM và bộ nhớ dữ liệu EEPROM với ung ư ng 256 byte
Số PORT I/O là 5 với 33 pin I/O
Các đặc tính ngoại vi bao g m các khối chức năng s u:
- Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit
- Timer1: bộ đếm 16 bit với bộ chia tần số, có thể th c hiện chức năng đếm d a vào xung clock ngoại vi ng y hi vi điều khiển hoạt động ở chế độ sleep
- Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler
- Hai bộ C ptur /so sánh/điều chế độ rông xung
- Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C
- Chuẩn giao tiếp nối tiếp USART với 9 it đị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
Trang 12Các đặc tính Analog:
- 8 kênh chuyển đổi ADC 10 bit
- Hai bộ so sánh
Bên cạnh đó à một vài đặc tính khác củ vi điều khiển như:
- Bộ nhớ flash với khả năng ghi xó đư c 100.000 lần
- Bộ nhớ EEPROM với khả năng ghi xó đư c 1.000.000 lần
- Dữ liệu bộ nhớ EEPROM có thể ưu trữ tr n 40 năm
- Khả năng t nạp chương trình với s điều khiển của phần mềm
- Nạp đư c chương trình ng y tr n mạch điện ICSP (In Circuit Serial Programming) thông qua 2 chân
- Watchdog Timer với bộ o động trong
- Chức năng ảo mật mã chương trình
- Chế độ Sleep
- Có thể hoạt động với nhiều dạng Oscillator khác nhau
2.2 SƠ ĐỒ KHỐI CỦA PIC1 A
Trang 13Hình 3.3: Sơ đồ khối vi điều khiển PIC16F877A
2.3 TỔ CHỨC NH
C u trúc bộ nhớ củ vi điều khiển PIC16F877A bao g m bộ nhớ chương trình (Program memory) và bộ nhớ dữ liệu (Data Memory)
* Bộ nhớ chương trình
Bộ nhớ chương trình củ vi điều khiển PIC16F877A là bộ nhớ f sh, ung ư ng
bộ nhớ 8K wor (1 wor = 14 it) và đư c phân thành nhiều trang (từ p g 0 đến page 3) Như vậy bộ nhớ chương trình có hả năng chứ đư c 8*1024 = 8192 lệnh (vì một lệnh sau khi mã hóa sẽ có ung ư ng 1 word (14 bit)
Khi vi điều khiển đư c reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt
Trang 14vector) Bộ nhớ chương trình hông o g m bộ nhớ st c và hông đư c địa chỉ hóa bởi bộ đếm chương trình
* Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM đư c chia ra làm nhiều n Đối với PIC16F877A bộ nhớ dữ liệu đư c chia ra làm 4 bank Mỗi n có ung ư ng 128 byte, bao g m các thanh ghi có chức năng đặc biệt SFG (Special Function Register) nằm ở các vùng địa chỉ th p và các thanh ghi mục đích chung GPR (G n r Purpos Register) nằm ở vùng địa chỉ còn lại trong n Các th nh ghi SFR thường xuyên
đư c sử dụng (ví dụ như th nh 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ư s u:
Trang 15nh : Sơ đồ nhớ i u
** THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR:
Trang 16Đ y à các th nh ghi đư c sử dụng bởi CPU hoặc đư c ùng để thiết lập và điều khiển các khối chức năng đư c tích h p n trong vi điều khiển Có thể phân thanh ghi SFR làm hai lọ i: th nh ghi SFR i n qu n đến các chức năng n trong (CPU) và thanh ghi SRF ùng để thiết lập và điều khiển các khối chức năng n ngoài (ví ụ như ADC, PWM …)
Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chứa kết quả th c hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xu t trong bộ nhớ
dữ liệu
Th nh ghi OPTION_REG (81h, 181h): th nh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pu -up của các chân trong PORTB, xác lập các tham số
về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):th nh ghi cho phép đọc và ghi, chứa các it điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrputon- change tại các chân của PORTB
Thanh ghi PIE1 (8Ch): chứ các it điều khiển chi tiết các ngắt của các khối chức năng ngoại vi
Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt này
đư c cho phép bởi các it điều khiển chứa trong thanh ghi PIE1
Thanh ghi PIE2 (8Dh): chứ các it điều khiển các ngắt của các khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Trang 17Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắt này đư c cho phép bởi các it điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của
vi điều khiển
** THANH GHI MỤC ĐÍCH CHUNG GPR:
Các thanh ghi này có thể đư c truy xu t tr c tiếp hoặc gián tiếp thông qua thanh ghi FSG (Fi S ct R gist r) Đ y à 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ể ùng các th nh 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
PC sẽ t động đư c l y ra từ trong st c , vi điều khiển sẽ th c hiện tiếp chương trình
th o đ ng qui trình định trước
Bộ nhớ St c trong vi điều khiển PIC họ 16F87xA có khả năng chứ đư c 8 địa chỉ và hoạt động th o cơ chế xo y vòng Nghĩ à 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 đè 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 st c , o đó t hông iết
đư c khi nào stack tràn Bên cạnh đó tập lệnh củ vi điều khiển òng PIC c ng hông
Trang 18có 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
2.4 C C CỔNG UẤT NH P CỦA PIC1 A
Cổng xu t nhập (I/O port) chính à phương tiện mà vi điều khiển ùng để tương tác với thế giới bên ngoài Bên cạnh đó, o vi điều khiển đư c tích h p sẵn bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng à cổng xu t nhập thông thường, một số chân xu t nhập còn có thêm các chức năng hác để thể hiện s tác động củ các đặc tính ngoại vi n u tr n đối với thế giới bên ngoài
Vi điều khiển PIC16F877A có 5 cổng xu t nhập, bao g m PORTA, PORTB, PORTC, PORTD và PORTE
*PORT A:
PORTA (RPA) bao g m 6 I/O pin Đ y à các ch n h i chiều ( i ir ction pin), nghĩ à có thể xu t và nhập đư c Chức năng I/O này đư c điều khiển bởi thanh ghi TRISA (địa chỉ 85h) Muốn xác lập chức năng của một chân trong PORTA là input,
t s t it điều khiển tương ứng với ch n đó trong th nh ghi TRISA và ngư c lại Chức năng I/O hoàn toàn tương t đối với các PORT còn lại Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)
Các th nh ghi SFR i n qu n đến PORTA bao g m:
- PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA
- TRISA (địa chỉ 85h) : điều khiển xu t nhập
- CMCON (địa chỉ 9Ch) : th nh ghi điều khiển bộ so sánh
- CVRCON (địa chỉ 9Dh) : th nh ghi điều khiển bộ so sánh điện áp
- ADCON1 (địa chỉ 9Fh) : th nh ghi điều khiển bộ ADC
* PORT B:
PORTB (RPB) g m 8 pin I/O Th nh ghi điều khiển xu t nhập tương ứng là TRISB Bên cạnh đó một số chân củ PORTB còn đư c sử dụng trong quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau PORTB còn liên quan đến ngắt ngoại vi và bộ Tim r0 PORTB còn đư c tích h p chức năng điện trở kéo
n đư c điều khiển bởi chương trình
Trang 19Các th nh ghi SFR i n qu n đến PORTB bao g m:
- PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB
- TRISB (địa chỉ 86h,186h) : điều khiển xu t nhập
- OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ Timer0
* PORT C:
PORTC (RPC) g m 8 pin I/O Th nh ghi điều khiển xu t nhập tương ứng là TRISC Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART
Các th nh ghi điều khiển i n qu n đến PORTC:
- PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
- TRISC (địa chỉ 87h) : điều khiển xu t nhập
* PORT D:
PORTD (RPD) g m 8 ch n I/O, th nh ghi điều khiển xu t nhập tương ứng là TRISD PORTD còn là cổng xu t dữ liệu của chuẩn giao tiếp PSP (Parallel Slave Port)
Các th nh ghi i n qu n đến PORTD bao g m:
- Thanh ghi PORTD : chứa giá trị các pin trong PORTD
- Th nh ghi TRISD : điều khiển xu t nhập
* PORT E:
PORTE (RPE) g m 3 ch n I/O Th nh ghi điều khiển xu t nhập tương ứng là TRISE Các chân của PORTE có ngõ vào analog Bên cạnh đó PORTE còn à các
ch n điều khiển của chuẩn giao tiếp PSP
Các th nh ghi i n qu n đến PORTE bao g m:
- PORTE : chứa giá trị các chân trong PORTE
- TRISE : điều khiển xu t nhập và xác lập các thông số cho chuẩn giao tiếp PSP
- ADCON1 : th nh ghi điều khiển khối ADC
2.5 TIMER 0
Đ y à một trong ba bộ đếm hoặc bộ định thời củ vi điều khiển PIC16F877A Timer0 là bộ đếm 8 it đư c kết nối với bộ chia tần số (prescaler) 8 bit C u trúc của
Trang 20Timer0 cho phép ta l a chọn xung c oc tác động và cạnh tích c c của xung clock Ngắt Timer0 sẽ xu t hiện khi Timer0 bị tràn
nh : Sơ đồ khối c a timer 0
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), hi đó giá trị thanh ghi TMR0 sẽ tăng th o từng chu kì xung
đ ng h (tần số vào Timer0 bằng ¼ tần số oscillator) Khi giá trị thanh ghi TMR0 từ
FFh trở về 00h, ngắt Timer0 sẽ xu t hiện Thanh ghi TMR0 cho phép ghi và xóa
đư c giúp ta n định thời điểm ngắt Timer0 xu t hiện một cách inh động Muốn Timer0 hoạt động ở chế độ count r t s t it TOSC (OPTION_REG<5>) Khi đó xung tác động lên bộ đếm đư c l y từ chân RA4/TOCK1 Bit TOSE (OPTION_REG<4>) cho phép l a chọn cạnh tác động vào bột đếm Cạnh tác động
sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1 Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ đư c s t Đ y chính à cờ ngắt của Timer0 Cờ ngắt này phải đư c xóa bằng chương trình trước khi bộ đếm bắt đầu th c hiện lại quá trình đếm Ngắt Timer0 không thể đánh thức vi điều khiển từ
chế độ sleep
Trang 21Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler
Khi đối tư ng tác động à Tim r0, tác động lên giá trị thanh ghi TMR0 sẽ xóa prescaler nhưng hông àm th y đổi đối tư ng tác động củ pr sc r Khi đối tư ng tác động là WDT, lệnh CLRWDT sẽ xó pr sc r, đ ng thời prescaler sẽ ngưng tác
vụ hỗ tr cho WDT
Các th nh ghi điều khiển i n qu n đến Timer0 bao g m:
- TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0
- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)
- OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler
2.6 TIMER 1
Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ đư c ưu trong h i th nh ghi (TMR1H:TMR1L) Cờ ngắt củ Tim r1 à it TMR1IF (PIR1<0>) Bit điều khiển của Timer1 sẽ à TMR1IE (PIE<0>) Tương t như Tim r0, Tim r1 c ng có h i chế
độ hoạt động: chế độ định thời (timer) với xung kích là xung clock của oscillator (tần
số của timer bằng ¼ tần số của oscillator) và chế độ đếm (counter) với xung kích là xung phản ánh các s kiện cần đếm l y từ bên ngoài thông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên) Việc l a chọn xung tác động (tương ứng với việc l a chọn chế độ hoạt động à tim r h y count r) đư c điều khiển bởi bit TMR1CS (T1CON<1>) S u đ y à sơ đ khối của Timer1:
nh : Sơ đồ hối i r
Trang 22Các thanh ghi liên qu n đến Timer1 bao g m:
- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)
- PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF)
- PIE1( địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE)
- TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit th p của bộ đếm Timer1
- TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1
- T1CON (địa chỉ 10h): xác lập các thông số cho Timer1
2.7 TIMER 2
Timer2 là bộ định thời 8 it và đư c hỗ tr bởi hai bộ chia tần số prescaler và postscaler Thanh ghi chứa giá trị đếm của Timer2 là TMR2 Bit cho phép ngắt Tim r2 tác động là TMR2ON (T2CON<2>) Cờ ngắt của Timer2 là bit TMR2IF (PIR1<1>) Xung ngõ vào (tần số bằng ¼ tần số osci tor) đư c đư qu ộ chia tần
số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và đư c điều khiển bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>))
nh : Sơ đồ khối c a Timer 2
Ngoài ra ngõ ra củ Tim r2 còn đư c kết nối với khối SSP, o đó Tim r2 còn đóng vai trò tạo r xung c oc đ ng bộ cho khối giao tiếp SSP
Các th nh ghi i n qu n đến Timer2 bao g m:
- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE và PEIE)
- PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer2 (TMR2IF)
- PIE1 (địa chị 8Ch): chứ it điều khiển Timer2 (TMR2IE)
Trang 23- TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2
- T2CON (địa chỉ 12h): xác lập các thông số cho Timer2
- PR2 (địa chỉ 92h): thanh ghi hỗ tr cho Timer2
Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đ à FFh), trong hi Tim r1 à
bộ đếm 16 bit (giá trị đếm tối đ à FFFFh) Tim r0, Tim r1 và Tim r2 đều có hai chế độ hoạt động là timer và counter Xung clock có tần số bằng ¼ tần số của osci tor Xung tác động n Tim r0 đư c hỗ tr bởi prescaler và có thể đư c thiết lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số
củ xung tác động lên Timer1 là cố định Tim r2 đư c hỗ tr bởi hai bộ chia tần số
pr sc r và postc r độc lập, tuy nhiên cạnh tác động v n đư c cố định là cạnh lên Timer1 có quan hệ với khối CCP, trong hi Tim r2 đư c kết nối với khối SSP
2.8 ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương
t và số PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0) Hiệu điện thế chuẩn VREF có thể đư c l a chọn là VDD, VSS hay hiệu điện thể chuẩn đư c xác lập trên hai chân RA2 và RA3 Kết quả chuyển đổi từ tín tiệu tương t sang tín hiệu
số là 10 bit số tương ứng và đư c ưu trong h i th nh ghi ADRESH:ADRESL
Các th nh ghi i n qu n đến bộ chuyển đổi ADC bao g m:
- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bit GIE, PEIE)
- PIR1 (địa chỉ 0Ch): chứa cờ ngắt AD (bit ADIF)
- PIE1 (địa chỉ 8Ch): chứ it điều khiển AD (ADIE)
- ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD
- ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): xác lập các thông số cho bộ chuyển đổi AD
- PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): liên quan đến các ngõ vào analog
ở PORTA
- PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): i n qu n đến các ngõ vào analog
ở PORTE
Trang 242.9 GIAO TIẾP NỐI TIẾP
USART (Universal Synchronous Asynchronous Receiver Transmitter) là một trong hai chuẩn giao tiếp nối tiếp.USART còn đư c gọi là giao diện giao tiếp nối tiếp SCI (Serial Communication Interface) Có thể sử dụng giao diện này cho các giao tiếp với các thiết bị ngoại vi, với các vi điều khiển khác hay với máy tính Các dạng của giao diện USART ngoại vi bao g m:
đ ng bộ tác động củ it BRGH đư c bỏ qua Tốc độ baud do BRG tạo r đư c tính theo công thức sau:
Trong đó X à giá trị của thanh ghi RSBRG ( X là số nguyên và 0<X<255)
Các th nh ghi i n qu n đến BRG bao g m:
- TXSTA (địa chỉ 98h): chọn chế độ đòng ộ hay b t đ ng bộ ( bit SYNC) và chọn mức
tốc độ baud (bit BRGH)
- RCSTA (địa chỉ 18h): cho phép hoạt động cổng nối tiếp (bit SPEN)
- RSBRG (địa chỉ 99h): quyết định tốc độ baud
* USART bất đồng bộ: Ở chế độ truyền này USART hoạt động theo chuẩn NRZ
(None-Return-to-Z ro), nghĩ à các it truyền đi sẽ bao g m 1 bit Start, 8 hay 9 bit
dữ liệu (thông thường là 8 bit) và 1 bit Stop Bit LSB sẽ đư c truyền đi trước Các khối truyền và nhận t độc lập với nhau sẽ dùng chung tần số tương ứng với tốc độ baud cho quá trình dịch dữ liệu (tốc độ baud g p 16 hay 64 lần tốc độ dịch dữ liệu tùy
Trang 25theo giá trị củ it BRGH), và để đảm bảo tính hiệu quả của dữ liệu thì hai khối truyền và nhận phải dùng chung một định dạng dữ liệu
Các th nh ghi i n qu n đến quá trình truyền dữ liệu bằng giao diện USART b t
đ ng bộ:
- Thanh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép t t cả các ngắt
- Th nh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF
- Th nh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE
- Th nh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT)
- Th nh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền
- Th nh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện
- Th nh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud
* USART đồng bộ: Giao diện USART đ ng bộ đư c kích hoạt bằng cách set bit
SYNC Cổng giao tiếp nối tiếp v n à h i ch n RC7/RX/DT, RC6/TX/CK và đư c cho phép bằng cách set bit SPEN USART cho phép hai chế độ truyền nhận dữ liệu là Master mode và Slave mo M st r mo đư c kích hoạt bằng cách set bit CSRC (TXSTA<7>), S v mo đư c kích hoạt bằng cách c r it CSRC Điểm khác biệt duy nh t giữa hai chế độ này là Master mode sẽ l y xung c oc đ ng bộ từ bộ tao xung baud BRG còn Slave mode l y xung cloc đ ng bộ từ bên ngoài qua chân RC6/TX/CK Điều này cho phép Slave mode hoạt động ngay cả hi vi điều khiển
đ ng ở chế độ sleep
Các th nh ghi i n qu n đến quá trình truyền dữ liệu bằng giao diện USART đ ng
bộ Master mode:
- Th nh ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép t t cả các ngắt
- Th nh ghi PIR1 (địa chỉ 0Ch): chứa cờ hiệu TXIF
- Th nh ghi PIE1 (địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE
- Th nh ghi RCSTA (địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT)
- Th nh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền
- Th nh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện
Trang 26- Th nh ghi SPBRG (địa chỉ 99h): quyết định tốc độ baud
2.10 NG T
PIC16F877A có đến 15 ngu n tạo ra hoạt động ngắt đư c điều khiển bởi thanh ghi INTCON (bit GIE) Bên cạnh đó mỗi ngắt còn có một it điều khiển và cờ ngắt riêng Các cờ ngắt v n đư c s t ình thường khi thỏ mãn điều kiện ngắt xảy ra b t ch p trạng thái của bit GIE, tuy nhiên hoạt động ngắt v n phụ thuôc vào bit GIE và các bit điều khiển hác Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2 Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2
Trong một thời điểm chỉ có một chương trình ngắt đư c th c thi, chương trình ngắt đư c kết thúc bằng lệnh RETFIE Khi chương trình ngắt đư c th c thi, bit GIE
t động đư c xó , địa chỉ lệnh tiếp theo củ chương trình chính đư c c t vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h Lệnh RETFIE đư c ùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đ ng thời bit GIE c ng sẽ đư c set để cho phép các ngắt hoạt động trở lại Các cờ hiệu đư c ùng để kiểm tra ngắt nào đ ng xảy ra và phải đư c xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện đư c thời điểm tiếp theo mà ngắt xảy ra
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ s th y đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần
3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt
Cần chú ý là trong quá trình th c thi ngắt, chỉ có giá trị của bộ đếm chương trình
đư c c t vào trong Stack, trong khi một số thanh ghi quan trọng sẽ hông đư c c t và
có thể bị th y đổi giá trị trong quá trình th c thi chương trình ngắt Điều này nên
đư c xử lí bằng chương trình để tránh hiện tư ng trên xảy ra
Trang 28
single color type
Dual color type
Hì : K cấ ê r củ le rậ
Khi có một tín hiệu điều hiển ở cột và hàng, các ch n Ano củ các
tr n cột tương ứng đư c c p điện áp c o, đ ng thời các ch n C tho củ các
tr n hàng tương ứng đư c c p điện áp th p Tuy nhi n, c đó chỉ có một sáng, vì nó có đ ng thời điện thế c o tr n Ano và điện thế th p tr n C tho Như vậy, hi có một tín hiệu điều hiển hàng và cột thì tại một thời điểm chỉ có
uy nh t một tại chỗ gặp nh u củ hàng và cột à sáng Các ảng qu ng áo với số ư ng ớn hơn c ng đư c ết nối th o c u tr c như vậy
Trong trường h p t muốn cho sáng đ ng thời một số rời rạc tr n m trận để hiển thị một í t nào đó, nếu trong hiển thị tĩnh t phải c p áp c o ch o Ano và áp th p cho C tho cho các tương ứng mà t muốn sáng Nhưng trong hi đó một số t hông mong muốn c ng sẽ sáng, miễn à nó nằm tại vị trí gặp nh u củ các cột và hàng mà t c p ngu n Vì vậy trong điều hiển
m trận t hông thể sử ụng phương pháp hiển thị tĩnh mà phải sử ụng phương pháp quét (hiển thị động), có nghĩ à t phải tiến hành c p tín hiệu điều hiển
Trang 29th o ạng xung quét tr n các hàng và cột có cần hiển thị Để đảm ảo cho mắt nhìn th y các hông ị nháy, thì tần số quét nhỏ nh t cho mỗi chu ì à hoảng 20Hz(50ms) Trong ập trình điều hiển m trận ằng vi xử ý t
c ng phải sử ụng phương pháp quét như vậy
M trận có thể à oại hiển thị đư c một màu hoặc hiển thị đư c 2 màu
tr n một điểm, hi đó có số ch n r tương ứng: đối với m trận 8x8 hiển thị một màu thì số ch n r à 16, trong đó 8 ch n ùng để điều hiển hàng và 8
ch n còn ại ùng để điều hiển cột Đối với oại 8x8 có 2 màu thì số ch n r củ
à 24 ch n, trong đó có 8 ch n ùng để điều hiển cột (hoặc hàng) chung cho
cả 2 màu, 16 ch n còn ại thì 8 ch n ùng để điều hiển hàng (hoặc cột) màu thứ
nh t, 8 ch n còn ại điều hiển màu thứ 2
2 C C PHƯƠNG PH P HIỂN THỊ CHO BẢNG QUANG BÁO