Nghiên cứu khảo sát bộ vi điều khiển 8 bit PIC16F877
1. Giới thiệu bộ vi điều khiển 8 bít
Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong
các lĩnh vực kỹ thuật và đời sống xã hội, đặc biệt là trong kỹ thuật tự động hoá
và điều khiển từ xa. Giờ đây với nhu cầu chuyên dụng hoá, tối ưu (thời gian,
không gian, giá thành), bảo mật, tính chủ động trong công việc. ngày càng đòi
hỏi khắt khe. Việc đưa ra công nghệ mới trong lĩnh vực chế tạo mạch điện tử để
đáp ứng những yêu cầu trên là hoàn toàn cấp thiết mang tính thực tế cao.
1.1. Khái niệm về bộ vi điều khiển
Để hiểu khái niệm về bộ vi điều khiển, ta có thể làm phép so sánh nó với bộ
vi xử lý công dụng chung như sau:
Ta biết rằng, các bộ vi xử lý công dụng chung như họ Intel x86 (8086,
80286, 80386, 80486 và Pentium) hoặc họ Motorola 680x0(6800, 68010, 68020,
68030, 68040 vv.) không có RAM, ROM và không có các cổng ra vào trên
chip. Với lý do đó mà chúng được gọi là các bộ vi xử lý công dụng chung.
Một nhà thiết kế hệ thống sử dụng một bộ vi xử lý công dụng chung chẳng
hạn như Pentium hay 68040 sẽ phải bổ xung thêm RAM, ROM, các cổng vào ra
và các bộ định thời ngoài để làm cho chúng hoạt động được. Mặc dù việc bổ
xung các RAM, ROM, các cổng vào ra sẽ làm cho hệ thống cồng kềnh lên
nhưng nó lại có ưu điểm khi sử dụng các bộ vi xử lý này là rất linh hoạt. Chẳng
hạn như người thiết kế có thể quyết định về số lượng RAM, ROM, và các cổng
vào ra cần thiết sao cho phù hợp với khả năng, mục đích sử dụng của hệ thống.
Điều này không thể có đối với các bộ vi điều khiển. Bởi vì, một bộ vi điều
khiển đã có một CPU (một bộ vi xử lý) cùng với một số lượng RAM, ROM, các
cổng vào ra và một bộ định thời trên cùng một chíp. Hay nói cách khác là bộ vi
xử lý, RAM, ROM, các cổng vào ra và một bộ định thời cùng được nhúng trên
một chip. Do vậy người thiết kế không thể bổ xung thêm bộ nhớ ngoài, số các
cổng vào ra hoặc bộ định thời cho nó. Với số lượng RAM, ROM và số các cổng
vào ra cố định như vậy là một mặt hạn chế (kém linh hoạt) xong nó lại thật sự lý
tưởng đối với những ứng dụng mang tính chuyên biệt, tối ưu về giá thành, tối ưu
về không gian.
Hiện nay trên thị truờng có các bộ vi điều khiển 8 bít chính là. 6811 của
Motorola, 8051 của Intel, Z8 của Xilog và Pic16x của Microchip Technology.
Mỗi loại trên đây đều có một tập lệnh và thanh ghi riêng duy nhất, nên chúng
đều không tương thích lẫn nhau. Cũng có những bộ vi điều khiển 16 bít và 32 bít
được sản xuất ra bởi các hãng sản xuất chíp khác nhau.
Tóm tắt nội dung tài liệu: Nghiên cứu khảo sát bộ vi điều khiển 8 bit PIC16F877
Nghiờn cứu khảo sỏt bộ vi điều khiển 8 bit PIC16F877 Copyright (c) IRF Group Nghiên cứu khảo sát bộ vi điều 8 bit PIC16F877 1. Giới thiệu bộ vi điều khiển 8 bít Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong các lĩnh vực kỹ thuật và đời sống xã hội, đặc biệt là trong kỹ thuật tự động hoá và điều khiển từ xa. Giờ đây với nhu cầu chuyên dụng hoá, tối −u (thời gian, không gian, giá thành), bảo mật, tính chủ động trong công việc... ngày càng đòi hỏi khắt khe. Việc đ−a ra công nghệ mới trong lĩnh vực chế tạo mạch điện tử để đáp ứng những yêu cầu trên là hoàn toàn cấp thiết mang tính thực tế cao. 1.1. Khái niệm về bộ vi điều khiển Để hiểu khái niệm về bộ vi điều khiển, ta có thể làm phép so sánh nó với bộ vi xử lý công dụng chung nh− sau: Ta biết rằng, các bộ vi xử lý công dụng chung nh− họ Intel x86 (8086, 80286, 80386, 80486 và Pentium) hoặc họ Motorola 680x0(6800, 68010, 68020, 68030, 68040 vv...) không có RAM, ROM và không có các cổng ra vào trên chip... Với lý do đó mà chúng đ−ợc gọi là các bộ vi xử lý công dụng chung. Một nhà thiết kế hệ thống sử dụng một bộ vi xử lý công dụng chung chẳng hạn nh− Pentium hay 68040 sẽ phải bổ xung thêm RAM, ROM, các cổng vào ra và các bộ định thời ngoài để làm cho chúng hoạt động đ−ợc. Mặc dù việc bổ xung các RAM, ROM, các cổng vào ra sẽ làm cho hệ thống cồng kềnh lên nh−ng nó lại có −u điểm khi sử dụng các bộ vi xử lý này là rất linh hoạt. Chẳng hạn nh− ng−ời thiết kế có thể quyết định về số l−ợng RAM, ROM, và các cổng vào ra cần thiết sao cho phù hợp với khả năng, mục đích sử dụng của hệ thống. Điều này không thể có đối với các bộ vi điều khiển. Bởi vì, một bộ vi điều khiển đã có một CPU (một bộ vi xử lý) cùng với một số l−ợng RAM, ROM, các cổng vào ra và một bộ định thời trên cùng một chíp. Hay nói cách khác là bộ vi xử lý, RAM, ROM, các cổng vào ra và một bộ định thời cùng đ−ợc nhúng trên một chip. Do vậy ng−ời thiết kế không thể bổ xung thêm bộ nhớ ngoài, số các cổng vào ra hoặc bộ định thời cho nó. Với số l−ợng RAM, ROM và số các cổng vào ra cố định nh− vậy là một mặt hạn chế (kém linh hoạt) xong nó lại thật sự lý t−ởng đối với những ứng dụng mang tính chuyên biệt, tối −u về giá thành, tối −u về không gian... Hiện nay trên thị truờng có các bộ vi điều khiển 8 bít chính là. 6811 của Motorola, 8051 của Intel, Z8 của Xilog và Pic16x của Microchip Technology. Mỗi loại trên đây đều có một tập lệnh và thanh ghi riêng duy nhất, nên chúng đều không t−ơng thích lẫn nhau. Cũng có những bộ vi điều khiển 16 bít và 32 bít đ−ợc sản xuất ra bởi các hãng sản xuất chíp khác nhau. 1.2. Những yêu cầu để lựa chọn một bộ vi điều khiển là: Copyright (c) IRF Group 9 Đáp ứng nhu cầu tính toán của bài toán một cách hiệu quả về mặt giá thành và đầy đủ chức năng có thể nhìn thấy đ−ợc, (khả dĩ). 9 Có sẵn các công cụ phát triển phần mềm chẳng hạn nh− các trình biên dịch trình hợp ngữ và gỡ rối. 9 Nguồn các bộ vi điều khiển có sẵn nhiều và tin cậy. 1.3. Các tiêu chuẩn lựa chọn một bộ vi điều khiển: Tiêu chuẩn đầu tiên và tr−ớc hết trong lựa chọn một bộ vi điều khiển là nó phải đáp ứng nhu cầu bài toán về mặt công suất tính toán, giá thành và hiệu quả. Trong khi phân tích các nhu cầu của một dự án dựa trên bộ vi điều khiển, chúng ta tr−ớc hết phải biết là bộ vi điều khiển nào là 8 bít, 16 bít hay 32 bít có thể đáp ứng tốt nhất nhu cầu tính toán của bài toán một cách hiệu quả nhất. • Những tiêu chuẩn đ−ợc đ−a ra để cân nhắc là: 9 Tốc độ: Tốc độ lớn nhất mà bộ vi điều khiển hỗ trợ là bao nhiêu. 9 Kiểu đóng vỏ: Đó là kiểu 40 chân DIP hay QFP hay là kiểu đóng vỏ khác. Đây là điều quan trọng đối với yêu cầu về không gian, kiểu lắp ráp và tạo mẫu thử cho sản phẩm cuối cùng. 9 Công suất tiêu thụ: Điều này đặc biệt khắt khe đối với những sản phẩm dùng pin, ắc quy. 9 Dung l−ợng bộ nhớ RAM và ROM trên chíp. 9 Số chân vào – ra, bộ định thời, số ngắt trên chíp. 9 Khả năng dễ dàng nâng cấp cho hiệu suất cao hoặc giảm công suất tiêu thụ. 9 Giá thành cho một đơn vị: Điều này quan trọng quyết định giá thành cuối cùng của sản phẩm mà một bộ vi điều khiển đ−ợc sử dụng. 2. Bộ Vi điều khiển 8 bit PIC16F877 2.1. Đặc tính nổi bật của bộ vi xử lí. + Sử dụng công nghệ tích hợp cao RISC CPU. + Ng−ời sử dụng có thể lập trình với 35 câu lệnh đơn giản. + Tất cả các câu lệnh thực hiện trong một chu kì lệnh ngoại trừ một số câu lệnh rẽ nhánh thực hiện trong 2 chu kì lệnh. + Tốc độ hoạt động là: - Xung đồng hồ vào là DC- 20MHz - Chu kỳ lệnh thực hiện trong 200ns + Bộ nhớ ch−ơng trình Flash 8Kx14 words + Bộ nhớ Ram 368x8 bytes + Bộ nhớ EFPROM 256x 8 bytes Khả năng của bộ vi xử lí này + Khả năng ngắt ( lên tới 14 nguồn ngắt trong và ngắt ngoài ) + Ngăn nhớ Stack đ−ợc phân chia làm 8 mức + Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp. + Nguồn khởi động lại (POR) + Bộ tạo xung thời gian (PWRT) và bộ tạo dao động (OST) Copyright (c) IRF Group + Bộ đếm xung thời gian (WDT) với nguồn dao động trên chíp (nguồn dao động RC ) hoạt động đáng tin cậy. + Có mã ch−ơng trình bảo vệ. + Ph−ơng thức cất giữ SLEEP + Có bảng lựa chọn dao động. + Công nghệ CMOS FLASH /EEPROM nguồn mức thấp ,tốc độ cao. + Thiết kế hoàn toàn tĩnh . + Mạch ch−ơng trình nối tiếp có 2 chân. + Xử lý đọc /ghi tới bộ nhớ ch−ơng trình . + Dải điện thế hoạt động rộng : 2.0V đến 5.5V + Nguồn sử dụng hiện tại 25 mA + Dãy nhiệt độ công nghiệp và thuận lợi . + Công suất tiêu thụ thấp: < 0.6mA với 5V, 4MHz 20à A với nguồn 3V, 32 kHz < 1 à A nguồn dự phòng. Các đặc tính nổi bật của thiết bị ngoại vi trên chip + Timer0: 8 bít của bộ định thời, bộ đếm với hệ số tỷ lệ tr−ớc + Timer1: 16 bít của bộ định thời, bộ đếm với hệ số tỷ lệ tr−ớc, có khả năng tăng trong khi ở chế độ Sleep qua xung đồng hồ đ−ợc cung cấp bên ngoài. + Timer 2: 8 bít của bộ định thời, bộ đếm với 8 bít của hệ số tỷ lệ tr−ớc, hệ số tỷ lệ sau + Có 2 chế độ bắt giữ, so sánh, điều chế độ rộng xung(PWM). + Chế độ bắt giữ với 16 bít, với tốc độ 12.5 ns, chế độ so sánh với 16 bít, tốc độ giải quyết cực đại là 200 ns, chế độ điều chế độ rộng xung với 10 bít. + Bộ chuyển đổi tín hiệu số sang t−ơng tự với 10 bít . + Cổng truyền thông nối tiếp SSP với SPI ph−ơng thức chủ và I2C(chủ/phụ) + Bộ truyền nhận thông tin đồng bộ, dị bộ(USART/SCL) có khả năng phát hiện 9 bít địa chỉ. + Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR và CS điều khiển. Copyright (c) IRF Group Sơ đồ các chân PIC16F87X. Copyright (c) IRF Group Sơ đồ khối bộ vi điều khiển PIC16F87X 2.2. So sánh với bộ vi điều khiển 8051 *Bộ vi điều khiển 8051 là bộ VĐK đầu tiên thuộc họ VĐK x51 đ−ợc sản xuất bởi công ty Intel, Siemens, Advanced Micro Devices, Fujitsu, Philips. Các đặc điểm chung của bộ VĐK này: • 4KB ROM • 128 B RAM • 4 cổng I/O 8 bit • 2 Timer 16 bit • Có khả năng quản lý đ−ợc 64 KB bộ nhớ mã ch−ơng trình ngoài (ROM ngoài). • Có khả năng quản lý đ−ợc 64 KB bộ nhớ dữ liệu ngoài (RAM ngoài) • Có bộ xử lý logic riêng (thao tác trên các bit) • Có thể thao tác trực tiếp đ−ợc 210 bit (các bit này đã đ−ợc địa chỉ hoá) • Có 5 ngắt • Dùng nguồn dao động ngoài Copyright (c) IRF Group • Dùng điện áp 5V để cho chip hoạt động *Cổng P0: Có dạng cực máng hở và có 8 chân (8 bit) là cổng vào/ra hoặc là cổng chuyển dữ liệu và địa chỉ. *Cổng P1: Là cổng vào/ra có 8 chân (8 bit). *Cổng P2: Có 8 chân (8 bit) là cổng vào/ra hoặc là cổng chuyển dữ liệu và địa chỉ. *Cổng P3: Có 8 chân, cổng này có thể là cổng vào/ra 8 bit hay còn có các chức năng quan trọng khác nh− phục vụ cho ngắt, các bộ định thời, việc truyền nhận dữ liệu truyền thông nối tiếp, đọc và ghi các bộ nhớ ngoài Sơ đồ khối của VĐK 8051: CPU Registers RAM128 bytes ROM 4 KInterupt control Bus I / O Ports Serial port Timer 0 Timer 1 Timer 0 Serial Ports P0 P2 P1 P3 TxD RxD GND 0Int 1Int Timer 1 T0 T1 Oscilator Nh− vậy có thể thấy đặc điểm đầu tiên mà PIC16F877 đem lại và nổi bật so với VĐK 8051 là dòng PIC16F877 những đặc tính kĩ thuật hơn hẳn so với bộ VĐK 8051 thể hiện ở những điểm sau: VĐK8051 VĐK PIC16F877 Đặc tính Số l−ợng Đặc tính Số l−ợng ROM trên chíp RAM Bộ định thời Các chân vào ra Cổng nối tiếp Nguồn ngắt 4K byte 128 byte 2 32 1 6 ROM trên chíp RAM Bộ định thời Các chân vào ra Cổng nối tiếp Nguồn ngắt 8K 368 byte 3 40 2 14 Ngoài những đặc tính trên thì bộ vi điều khiển PIC16F877 còn có một đặc điểm hơn hẳn so với 8051 là có 10 bít chuyển đổi A/D trên chíp điều này sẽ giúp chúng ta không phải mất một bộ chuyển đổi (sẽ dẫn đến kết nối dây trở nên phức tạp). Một đặc điểm nữa là bộ vi điều khiển PIC16F877 có bộ tạo dao động chủ trên chíp điều này sẽ tránh đ−ợc những sai số không cần thiết trong việc tạo Copyright (c) IRF Group xung dao động, vi điều khiển PIC16F877 có khả năng tự Reset bằng bộ WDT, và có thêm 256 byte EEPROM. 2.3. Sự tổ chức bộ nhớ Pic16F877. Pic16F877 có 3 khối bộ nhớ. Bộ nhớ ch−ơng trình PLASH, bộ nhớ dữ liệu RAM, bộ nhớ EEPROM. 2.3.1. Sự tổ chức bộ nhớ ch−ơng trình FLASH và Stack nhớ. Vi điều khiển PIC16F877 có một bộ đếm ch−ơng trình 13 bit và có 8Kx14 từ mã của bộ nhớ ch−ơng trình FLASH, đ−ợc chia thành 4 trang mỗi trang 2Kx14 từ mã. Khi Reset địa chỉ bắt đầu thực hiện chạy là 0000h, Vector ngắt bắt đầu 0004h. Stack có 8 mức dùng để l−u địa(PC) chỉ lệnh thực hiện tiếp theo sau lệnh CALL và khi xẩy ra ngắt. Bản đồ bộ nhớ ch−ơng trình và các ngăn xếp. 2.3.2. Sự tổ chức bộ nhớ dữ liệu RAM RAM là bộ nhớ có thể đọc và ghi, nó không l−u dữ liệu khi mất điện, bộ nhớ RAM của PIC16F877 có 4 bank, mỗi bank có dải địa chỉ 0-7FH(128byte) trên các bank những thanh ghi đa mục đích, nó hoạt động nh− một RAM Copyright (c) IRF Group tĩnh.(General purpose register), và nh−ng thanh ghi chức năng đặc biệt(Special function registers) ở vùng địa chỉ thấp. Bít RP1(Status ) và bit RP0(Status ) dùng để lụa chọn bank làm việc. RP1:RP0 Bank 00 0 01 1 10 2 11 3 Hình ảnh các bank nh− sau: Các thanh ghi đa mục đích: (General Purpose Register), các thanh ghi này đ−ợc truy cập bằng cả hai cách trực tiếp hoặc gián tiếp qua thanh ghi FSR,tổng cộng có 368 byte. Các thanh ghi chức năng đặc biệt. Các thanh ghi này đ−ợc dùng bởi CPU và các khối ngoại vi để điều khiển sự hoạt động theo yêu cầu của thiết bị. Copyright (c) IRF Group Các thanh ghi này có thể đ−ợc phân loại vào hai bộ phận trung tâm (CPU) và ngoại vi. Sau đây là một số thanh ghi đặc biệt quan trọng. * Các thanh ghi trạng thái STATUS: Có 4 thanh ghi trạng thái trên 4 dãy, tại các địa chỉ 03h, 83h, 103h, 183h. Các thanh ghi này cho biết trạng thái của phần tử lôgic toán học ALU, trạng thái RESET, trạng thái của các bit lựa chọn dãy thanh ghi cho bộ nhớ dữ liệu. Thanh ghi trạng thái có thể là kết quả của một số lệnh nh− là với một số thanh ghi khác. Nếu thanh ghi trạng thái là kết quả bởi một lệnh mà tác động đến các bit Z, DC, C thì việc ghi vào các bit này là không thể. * Các thanh ghi lựa chọn OPTION_REG: Có hai thanh ghi lựa chọn tại các địa chỉ 81h và 181h, các thanh ghi này có thể đọc hoặc ghi, nó chứa đựng nhiều bit điều khiển khác nhau để xác định hệ số định tr−ớc TMR0/hệ số định sau WDT, ngắt ngoài INT, TMR0, các điện áp treo trên cổng B * Các thanh ghi INTCON: Có 4 thanh ghi INTCON tại các địa chỉ 0Bh, 8Bh, 10Bh, 18Bh. Các thanh ghi này có thể đọc và ghi, nó chứa đựng nhiều sự cho phép và các bit cờ cho việc tràn thanh ghi TMR0, các ngắt thay đổi cổng RB và chân các ngắt ngoàI RB0/INT. * Thanh ghi PIE1: Tại địa chỉ 8Ch, chứa đựng các bit cho phép riêng lẻ cho các ngắt ngoại vi. * Thanh ghi PIR1: Tại địa chỉ 0Ch, chứa đựng các bit cờ riêng lẻ cho các ngắt ngoại vi. * Thanh ghi PIE2: Tại địa chỉ 8Dh, chứa đựng các bit cho phép riêng lẻ cho các ngắt ngoại vi CCP2, ngắt xung đột tuyến SSP và EEPROM ghi các hoạt động ngắt . * Thanh ghi PIE2: Tại địa chỉ 8Dh, chứa đựng các cờ bit cho các ngắt ngoại vi CCP2, ngắt xung đột tuyến SSP và EEPROM ghi các hoạt động ngắt . * Thanh ghi PCON (Power Control): Chứa bit cờ cho phép phân biệt giữa việc Reset hệ thống (POR) để Reset MCLR ngoại với Reset WDT. * PCL và PCLATH. Ch−ơng trình đếm chỉ rõ địa chỉ của lệnh tiếp theo đ−ợc thực hiện. PC có độ rộng 13 bit, byte thấp đ−ợc gọi là thanh ghi PCL, thanh ghi này có thể đọc hoặc ghi. Byte cao đ−ợc gọi là thanh ghi PCH, nó chứa các bit PC và không trực tiếp đọc hoặc ghi mà toàn bộ sự cập nhập của nó thông qua thanh ghi PCLATH. Khi reset 5 bit PCLATH nạp tới PCH, khi thực hiện các lệnh CALL, GOTO 11 bit Ofcode và 2 bit PCLATH tạo thành 13 bit nạp vào PC. Do vậy khi dùng lệnh CALL, GOTO chú đến hai bit PCLATH đó cũng chính là hai bit chỉ các trang của bộ nhớ ch−ơng trình. Hình ảnh sự nạp PCLATH tới PC Copyright (c) IRF Group 2.3.3. Các trang bộ nhớ ch−ơng trình. PIC16F877 có 8Kx14 PLASH các lệnh CALL, GOTO chỉ cung cấp 11 bit địa chỉ cho phép rẽ nhánh đ−ợc 2k211-1>của một trang bộ nhớ ch−ơng trình 2 bit cao đ−ợc cung cấp bởi 2 bit 3,4 của PCLATH do vậy tuỳ việc thiết lập các bit 3,4 của PCLATH tr−ớc khi lệnh CALL, GOTO thực hiện cho phép rẽ nhánh tới các trang bộ nhớ khác nhau. Chú ý các lệnh RETURN, RETFIE không làm thay đổi PCLATH Ví dụ từ trang 0 gọi chuơng trình con ở trang 1 nh− sau ORG 0000h Goto main main BSF PCLATH,3 BCF PCLATH,4 CALL SUB1 BCF PCLATH,3 BCF PCLATH,4 LOOP GOTO LOOP ORG 0X800H SUB1 Copyright (c) IRF Group RETURN END 2.3.4. Truy cập bộ nhớ RAM bằng địa chỉ trực tiếp, gián tiếp. * Ví dụ đọc ô nhớ 0xE0 bằng địa chỉ trực tiếp BSF STATUS,RP0 ;chọn bank 1 BCF STATUS,RP1 MOVF 0XE0,W ;copy ô nhớ 0xE0(ở bank 1) tới W BCF STATUS,RP0 ;chọn bank0 BCF STATUS,RP1 MOVF 0X30,W ;copy ô nhớ 0x30(ở bank 0) tới W * Truy cập RAM bằng địa chỉ gián tiếp Thanh ghi FSR chỉ ra địa chỉ(0->0XFF) ô nhớ cần truy cập, thanh ghi INDF cho nội dung ô nhớ truy cập, bit IRP thanh ghi STATUS chỉ ra bank truy cập ví dụ xoá các ô nhớ từ địa chỉ 0x20-0xFF MOVLW 0X1A MOVWF FSR BCF STATUS,IRP ;bank 0 Copyright (c) IRF Group LOOP INCF FSR, F CLRF INDF MOVF FSR, W XORLW 0XFF BTFSS STATUS, ZR GOTO LOOP 2.3.5. Bộ nhớ dữ liệu EEPROM và bộ nhớ ch−ơng trình FLASH. Các bộ nhớ này có thể đọc và ghi trong khi các hoạt động vẫn diễn ra bình th−ờng. Bộ nhớ dữ liệu không trực tiếp sắp xếp dữ liệu trên các thanh ghi dữ liệu còn trống. Thay vì đó là đánh các địa chỉ gián tiếp qua các thanh ghi chức năng đặc biệt. Có 6 thanh ghi SFR dùng để đọc và ghi bộ nhớ ch−ơng trình và bộ nhớ dữ liệu EEPROM đó là các thanh ghi: EECON1 EEDATH EECON2 EEADR EEDATA EEADRH Bộ nhớ dữ liệu EEPROM cho phép đọc và ghi các byte. Khi có tác động tới khối bộ nhớ dữ liệu. Thanh ghi EEDATA giữ 8 bit dữ liệu để đọc/ghi và thanh ghi EEADR giữ địa chỉ vị trí của EEPROM đ−ợc truy cập. Các thanh ghi EEDATH và EEADRH không đ−ợc sử dụng để truy cập dữ liệu EEPROM. Các thiết bị này có tới 256 byte của dữ liệu EEPROM ... hể ngắt hoạt động của nó bằng việc đặt bít RCIE của thanh ghi PIE1. Cờ bít RCIF chỉ dùng để đọc, nó đ−ợc xóa trong phần cứng. Nó sẽ đ−ợc xoá khi thanh ghi RCREG đ−ợc đọc là trống. Thanh ghi này là một thanh ghi có bộ đệm đôi. Nó có khả năng nhận 2 byte dữ liệu và truyền tới thanh ghi RCREG FIFO và khi đó byte thứ 3 đi vào thanh ghi RSR. Nếu phát hiện bít STOP mà thanh ghi RCREG vẫn đầy thì bít báo lỗi OERR sẽ đ−ợc đặt. Bít báo Copyright (c) IRF Group lỗi chỉ đ−ợc xoá trong phần mềm. Nếu bít OERR đ−ợc đặt thì việc truyền dữ liệu từ thanh ghi RSR tới thanh ghi RCREG bị ngăn cấm và không có dữ liệu đ−ợc nhận. Cấu trúc của bít báo lỗi FERR đ−ợc đặt khi bít STOP đ−ợc phát hiện đã đ−ợc xoá. Bít FERR và bít thứ 9 là các bộ đệm giống nh− ph−ơng pháp bộ đệm. Trong khi đang đọc thanh ghi RCREG nó sẽ nạp giá trị mới cho bít RX9D và FERR 2.6.3. Truyền thông đồng bộ chế độ chủ Trong chế dộ này dữ liệu đ−ợc truyền nhận duới dạng bán song công (việc truyền và nhận dữ liệu không thể tiến hành đồng thời cùng một lúc). Khi đang truyền dữ liệu thì việc nhận dữ liệu bị ngăn cấm. việc chọn chế độ truyền thông đồng bộ đ−ợc xác lập bằng việc đặt bít SYNC của thanh ghi TXSTA, ngoài ra bít SPEN còn đ−ợc đặt để định dạng các chân RC6/TX/CKvà RC7/RX/DT để cho chân xung đồng hồ và chân truyền dữ liệu. Chế độ chủ còn đ−ợc xác lập bằng việc đặt bit CSRC của thanh ghi TXSTA. Việc nhận dữ liệu trong chế độ truyền thông đồng bộ chủ. T−ơng tự nh− truyền thông dị bộ, nó phải có thanh ghi TSR. thanh ghi này đọc và viết dữ liệu thông qua bộ đêm là thanh ghi TXREG. Thanh ghi này đ−ợc nạp dữ liệu trong phần mềm. Thanh ghi TSR sẽ không đ−ợc nạp giá tị cho tới tận thi đã truyền hết bít cuối cùng của lần truớc đó. Khi đã truyền hết bít cuối cùng, thì thanh ghi TSR sẽ nạp giá trị mới từ thanh ghi TXREG. Thanh ghi TXREG rỗng thì bít cờ ngắt TXIF sẽ đ−ợc đặt. Cờ ngắt này có thể quy định hoạt động hoặc không hoạt động bằng việc đặt hoặc xoá bít TXIE của thanh ghi PIE1. Trong khi cờ bít TXIF cho biết trạng thái của thanh ghi TXREG, thì bít TRMT cho biết trạng thái của thanh ghi TSR. Bít trạng thái TRMT chỉ dùng để đọc, nó đ−ợc đặt khi thanh ghi TSR rỗng. Việc truyền dữ liệu hoạt động bằng việc đặt bít TXEN của thanh ghi TXSTA, bít dữ liệu đầu tiền sẽ đ−ợc di chuyển trên xung đi lên của xung clock trên chân CLK. Việc truyền dữ liệu đ−ợc bắt đầu bằng thanh ghi TXREG và đặt bít TXEN. Ưu điểm ở đây là tốc độ thấp có thể đ−ợc lựa chọn. Tốc độ truyền đ−ợc giữ nguyên trong khi RESET khi xoá 3 bít TXEN, CREN, SREN. Việc truyền dữ liệu đ−ợc bắt đầu lần đầu tiên khi thanh ghi TSR rỗng, khi chuyển dữ liệu tới thanh ghi TXREG nó ngay lập túc chuyển tới thanh ghi TSR và kết quả là thanh ghi TXREG rỗng. Xoá bít TXEN Trong khi đang truyền dữ liệu là lí do việc truyền dữ liệu bị gián đoạn và nó phải dừng lại, và nếu bít CREN hoặc bít SREN đ−ợc đặt trong khi đang truyền cũng là nguyên nhân gây ra việc truyền dữ liệu bị gián đoạn. Với mục đích truyền 9 bít dữ liệu thì bít TX9 của thanh ghi TXSTA phải đ−ợc đặt và bít thứ 9 này phải đ−ợc viết tới bít TX9D. Bít thứ 9 này phải đ−ợc viết tr−ớc khi viết 8 bít dữ liệu tới thanhghi TXREG. Bởi vì dữ liệu đ−ợc viết tới thanh ghi TXREG ngay lập tức đ−ợc chuyển tới thanh ghi TSR, nếu thanh ghi này rỗng. Nếu thanh ghi TSR rỗng và thanh ghi TXREG đ−ợc viết tr−ớc khi viết giá trị mới tới bít TX9D, thì hiện tại nó sẽ nạp giá trị cũ ở trong bít TX9D. Copyright (c) IRF Group Việc nhận dữ liệu ở chế độ đồng bộ chủ: chế độ nhận dữ liệu ở chế độ đồng bộ chủ đ−ợc chọn bằng việc đặt bít SREN hoặc bít CREN của thanh ghi RCSTA. Dữ liệu đ−ợc đ−a ở chân RC/RX/DT ở trên cạnh xuống của xung đồng hồ. Nếu bít SREN đ−ợc đặt thì chỉ có 1 từ đ−ợc nhận. nếu bít CREN đ−ợc đặt thì việc nhận cứ tiếp diễn cho tới tận khi bít này đ−ợc xoá mới thôi. Cả hai bít này đều đ−ợc đặt thì bít CREN đ−ợc −u tiên tr−ớc rồi theo thứ tự đó. Sau khi dữ liệu đã đ−ợc nhận vào trong thanh ghi RSR nó sẽ chuyển tới thanh ghi RCREG. Khi việc chuỷên dịch này hoàn thành thì cờ bít RCIF của thanh ghi PIR1 sẽ đ−ợc đặt. Hoạt động của cờ này có thể có hoặc không nhờ việc đặt hoặc xoá bít RCIE của thanh ghi PIE1. RCREG là 1 thanh ghi có 2 bộ đệm là 2 thanh ghi. Nó có khả năng nhận 2 byte dữ liệu để chuyển tới thanh ghi RCREG FIFO và byte thứ ba bắt đầu chuyển tới thanh ghi RSR. Trong khi rời bít cuối cùng của byte thứ ba mà thanh ghi RCREG vẫn đầy thì bít báo lỗi OERR sẽ đ−ợc đặt va từ ở trong thanh ghi RSR sẽ bị lỗi. Bít OERR đ−ợc xóa trong phần mềm. Nếu bít này đ−ợc đặt thì việc chuyển dữ liệu từ thanh ghi RSR tới thanh ghi RCREG bị ngăn cấm. Việc nhận bít thứ 9 cũng t−ơng tự nh− việc nhận bít dữ liệu. Trong khi thanh ghi RCREG đang đọc nó sẽ nạp giá trị mới cho bít RX9D. Đó là đIều cần chú ý khi ng−ời sử dụng dùng truyền thông chín bít dữ liệu 2.6.4. Truyền thông đồng bộ chế độ phụ Truyền thông đồng bộ chế độ phụ khác với truyền thông đồng bộ chế độ chính trong tr−ờng hợp xung đồng hồ bên ngoài cung cấp tại chân RC6/ TX / CK. Nó có thể cho phép thiết bị nhận hoặc truyền dữ liệu trong chế độ SLEEP. Chế độ phụ đ−ợc tiến hành bằng việc xoá bít CSRC của thanh ghi TXSTA. *Truyền dữ liệu trong chế độ truyền thông phụ: Hoạt động của chế độ truyền thông đồng bộ chính và truyền thông đồng bộ phụ hoàn toàn giống nhau, chỉ khác là chế độ truyền thông phụ có thể hoạt động ở chế độ SLEEP. Nếu hai từ đ−ợc viết tới thanh ghi TXREG và lệnh SLEEP đựơc tiến hành thì nó sẽ tồn tại những điểm sau : +Từ đầu truyền tới thanh ghi TSR và nó chuyển đi ngay lập tức +Từ thứ hai đ−ợc chứa trong thanh ghi TXREG +Cờ bit TXIF sẽ không đ−ợc đặt +Khi từ đầu tiên đ−ợc chuyển ra khỏi thanh ghi TSR. Thanh ghi TXREG sẽ chuyển từ thứ hai vào thanh ghi TSR và bây giờ cờ bít TXIF sẽ đ−ợc đặt +Nếu bít TXIE đ−ợc đặt ngắt sẽ đ−ợc gọi từ SLEEP và ngắt tính toàn cầu của ngắt sẽ đ−ợc gọi. Khi thiết lập Truyền thông đồng bộ ở chế độ phụ ta có những b−ớc sau: + Để thiết lập chế độ cổng truyền thông đồng bộ phụ thì ta phải đặt bít SYNC và Bít SPEN và xoá bít CSRC + Xoá bít CREN và SREN + Nếu ngắt có thể hoạt động, thì phải đặt bít TXIE + Nếu truyền thông chín bít thì phảI đặt bít TX9 +Việc truyền thông có thể thiết lập TXEN Copyright (c) IRF Group + Nếu việc truyền thông chín bit đ−ợc thiết lập thì bít thứ chín phảI đ−ợc nạp tới bít TX9D +Khi mới bắt đầu truyền thì dữ liệu đ−ợc nạp tới thanh ghi TXREG + Nếu sử dụng ngắt thì phảI chắc chắn rằng bít GIE và bít PEIE đã đ−ợc đặt *Nhận dữ liệu ở chế độ truyền thông đồng bộ phụ: Hoạt động của chế độ truyền thông đồng bộ chế độ phụ và truyền thông đồng bộ chế độ chính hoàn toàn giống nhau, nh−ng ở chế độ phụ nó có thể hoạt động ở lệnh SLEEP. Bít SREN không đ−ợc sử dụng ở chế độ này. Nếu việc nhận dữ liệu đ−ợc hoạt động bằng việc đặt bít CREN tr−ớc khi lệnh SLEEP đ−ợc thực hiện. Từ đ−ợc nhận trong khi SLEEP, khi việc nhận dữ liệu hoàn thành, thì thanh ghi RSR sẽ chuyển dữ liệu tới thanh ghi RCREG Và nếu bít RCIE đ−ợc đặt, thì ngắt có thể gọi từ lệnh SLEEP. 2.7. Bộ chuyển đổi t−ơng tự sang số : Bộ chuyển đổi t−ơng tự sang số có 8 kênh đối Pic16F877. Tín hiệu t−ơng tự đ−ợc nạp vào bộ nạp điện và giữ điện dung. Tín hiệu ra điển hình và giữ điện dung duy trì là đầu vào bộ chuyển đổi. Bộ chuyển đổi A/D phát ra kết quả số 10 bít. Bộ chuyển đổi A/D có sự chuyển điện thế cao và thấp đầu vào đ−ợc lựa chọn trong phần mềm để có sự kết hợp của VDD, VSS, RA2, RA3. Bộ chuyển đổi A/D có đặc tr−ng duy nhất có thể hoạt động trong khi thiết bị là trong trạng thái SLEEP. Để hoạt động trong ph−ơng thức này A/D phải đ−ợc lấy từ nguồn đồng hồ bên trong mạch dao động RC. Bộ chuyển đổi A/D có 4 thanh ghi. Đó là những thanh ghi: A/D thanh ghi kết quả cao(ADRESH) A/D thanh ghi kết quả thấp(ADRESL) Thanh ghi điều khiển chuyển đổi A/D ( ADCON0) Thanh ghi điều khiển chuyển đổi A/D ( ADCON1) Thanh ghi ADCON0 trình bày trong thanh ghi 8.1 điều khiển hoạt động của bộ chuyển đổi A/D. Thanh ghi ADCON1 trình bày trong hình 8.2 định dạng hàm của chân cổng. Chân cổng có thể sắp xếp nh− là tín hiệu vào t−ơng tự hoặc nh− là đầu vào ra số. *Thanh ghi 8.1: Thanh ghi ADCON0 ( địa chỉ 1Fh) Bít 7-6: ADCS1:ADCS0 Những bít lựa chọn đồng hồ chuyển đổi A/D 00=FOSC/2 01= FOSC/8 10= FOSC/32 11= FRC(đồng hồ xuất phát từ bên trong bộ chuyển đổi A/D dao động RC) Bít 5-3:CHS2:CHS0 Bít chọn kênh t−ơng tự. 000=kênh 0( RA0/AN0) 001=kênh 1 (RA1/AN1) 010=kênh 2 (RA1/AN2) Copyright (c) IRF Group 011=kênh 3 (RA3/AN3) 100=kênh 4 (RA5/AN4) 101=kênh 5 ( RE0/AN5) 110=kênh 6 (RE1/AN6) 111=kênh 7( RE2/AN7) Bít 2 :GO/DONE bít trạng thái chuyển đổi A/D Nếu ADON=1 1=chuyển đổi A/D đang thực hiện (đặt bít này để bắt đầu quá trình chuyển đổi) 0=chuyển đổi A/D không trong qua trình thực hiện(Bít này sẽ tự động xoá bởi phần cứng sau khi quá trình chuyển đổi A/D hoàn thành.) Bít 1: Bít ng−ời dùng định nghĩa . Bít 0: ADON:bít bật chuyển đổi. 1= Bộ chuyển đổi A/D hoạt động 0=Bộ chuyển đổi A/D tắt và ngừng hoạt động. *Thanh ghi 8.2 thanh ghi ADCON1(địa chỉ 9Fh) Bít 7 : ADFM : bít lựa chọn kết quả định dạng . Bít 6-4 : ng−ời dùng định nghĩa . Bít 3-0 : Bít điều khiển sắp xếp cổng chuyển đổi A/D. Thanh ghi ADRESH:ADRESL chứa đựng 10 bít kết quả của chuyển đổi A/D. Khi chuyển đổi A/D là hoàn thành kết quả đ−ợc nạp vào thanh ghi kết quả chuyển đổi A/D. Bít GO/DONE (ADCON0) đ−ợc xoá và bít cờ ngắt chuyển đổi A/D là ADIF đ−ợc đặt. Sau đó bộ chuyển đổi A/D đ−ợc sắp xếp nh− mong muốn. Lựa chọn kênh phải đạt đ−ợc tr−ớc khi chuyển đổi bắt đầu. Kênh vào t−ơng tự phải có bít TRIS t−ơng ứng đ−ợc lựa chọn nh− là đầu vào. Những b−ớc cần làm theo khi thực hiện chuyển đổi A/D : 1. lựa chọn cấu hình A/D +Đặt cấu hình t−ơng tự cho chân vào A/D +Lựa chọn kênh vào chuyển đổi A/D (ADCON0) . +Lựa chọn đồng hồ chuyển đổi A/D . +Bật bộ chuyển đổi A/D (ADCON0) . 2. Lựa chọn cấu hình ngắt cho A/D +Xoá bít ADIF. +Đặt bít ADIE. +Đặt bít PEIE. +Đặt bít GIE 3. Đợi phụ thuộc thời gian đạt đ−ợc. 4. Bắt đầu chuyển đổi: +Đặt bít GO/DONE(ADCON0). 5. Đợi cho chuyển đổi A/D hoàn thành bởi : +Thăm dò bít GO/DONE để xoá (với thực hiện ngắt) hoặc đợi cho ngắt chuyển đổi A/D. Copyright (c) IRF Group 6. Đọc kết quả chuyển đổi cặp thanh ghi (ADRESH:ADRESL) xoá bít ADIF nếu quy định . 7. Cho chuyển đổi kế tiếp, thực hiện b−ớc 1 hoặc b−ớc 2 theo quy định.Tốc độ chuyển đổi A/D qui định nh− là chu kì TAD. Giá trị nhỏ nhất đợi của 2 chu kì là đ−ợc quy định tr−ớc khi bắt đầu kế tiếp. 2.7.1. Lựa chọn tốc độ chuyền đổi : Tốc độ chuyển đổi là đ−ợc định nh− là TAD. Quy định thời gian chuyển đổi A/D nhỏ nhất 12TAD cho 10 bít chuyển đổi. Nguồn của thời gian chuyển đổi lựa chọn trong phần mềm. Có thể chọn một trong 4 ở bảng lựa chọn. 2TOSC , 8TOSC, 32TOSC, Dao động RC trong bộ chuyển đổi A/D.(2đến 6à s). Để cho việc chuyển đổi đúng ,thời gian chuyển đổi TADphải đ−ợc lựa chọn để chắc chắn TADnhỏ nhất 1.6à s. Bảng 11-1 trình bày giá trị thời gian TAD nhận đ−ợc từ thiết bị phát tần số và lựa chọn nguồn đồng hồ . Chú ý: 1>Nguồn RC có thời gian chu kì TAD4 à s nh−ng có thể trong khoảng 2ữ6 à s. 2>Khi tần số thiết bị lớn hơn 1MHz bộ chuyển đổi A/D nguồn đồng hồ khởi tạo cho SLEEP hoạt động. 2.8. Các ngắt của PIC16F877 PIC16F877 có 14 nguồn ngắt, thanh ghi INTCON là thanh ghi điều khiển các ngắt, mỗi ngắt có một bit cờ ngắt và một bit cho phép hoặc cấm ngắt. Bit GIE (INTCON) điều khiển chung cho 14 ngắt khi bit này set thì các ngắt mới có tác dụng, khi bit GIE xoá thì tất cả các ngắt bị cấm. Bit GIE bị xoá khi reset. Khi bit cờ ngắt thiết lập bit GIE thiết lập và bit PEIE thiết lập với ngắt ngoại vi đồng thời bit cho phép ngắt của ngắt đó cho phép thì ngắt đó xẩy ra. Khi một ngắt xẩy ra bộ đếm ch−ơng trình PC đ−ợc nạp giá trị 0004h và bit GIE bị xoá để cấm sự chồng ngắt, khi chỉ lệnh RETFIE thực hiện trả lại địa chỉ cho PC nơi xẩy ra ngắt, đồng thời thiết lập lại bit GIE. Khi xẩy ra ngắt PC luôn đ−ợc nạp giá trị 0004h vì các ngắt đ−ợc phân biệt bởi bit cờ ngắt của ngắt đó. Ngắt ngoài từ chân RB0/INT, và ngắt từ sự thay đổi trạng thái các chân RB4:RB7 có thể đánh thức bộ xử lý từ chế độ SLEEP. Các thanh ghi PIE1, PIR1, PIE2, PIR2 điều khiển các ngắt ngoại vi Sơ đồ các bit điều khiển ngắt: Copyright (c) IRF Group Khi một ngắt xẩy ra chỉ có PC đ−ợc l−u trong stack do đó ng−ời sử dụng phải l−u các thanh ghi W, STATUS, PCLATH, khi xẩy ra ngắt. ví dụ thực hiệ điều này: ORG 0000h ... ORG 0004h MOVWF W_TEM ;L−u W MOVF STATUS,W CLRF STATUS ;chon bank 0 MOVWF STATUS_TEM ;L−u STATUS MOVF PCLATH,W MOVWF PCLATH_TEM ;L−u PCLATH CLRF PCLATH ;chọn trang 0 ... ;ch−ơng trình phục vụ các ngắt ... ;Khôi phục các thanh ghi CLRF STATUS MOVF PCLATH_TEM,W MOVWF PCLATH Copyright (c) IRF Group MOVF STATUS_TEM,W MOVWF STATUS MOVF W_TEM,W RETFIE Chú ý biến W_TEM phải đ−ợc định nghia ở tất cả các bank hoặc ở vùng địa địa chung cho các bank(ở PIC16F877 là địa chỉ 70h-7Fh), các biến PCLATH_TEM, STATUS chỉ định nghĩa ở bank 0. 2.9. Mô tả tập lệnh của PIC16F877. PIC16F877 có 35 lệnh hầu hết các lệnh thực hiện trong một chu kỳ máy trừ một số lệnh rẽ nhánh. Mỗi lệnh luôn có độ dài cố định 14 bit. Quy −ớc f: địa chi ô nhớ từ 0-7fh d: bit định h−ớng dữ liệu kết quả +d=1 kết quả l−u trong f +d=0 l−u trong W b: chỉ ra bit thứ b trong f, 0=<b<=7 k: hằng số từ 0-ffh Bảng tập lệnh PIC16F877. Tên lệnh gợi nhớ Mô tả lệnh Số chu kỳ lệnh Trạng thái cờ ảnh h−ởng ADDWF f,d Cộng W với f 1 C,DC,Z ANDWF f,d AND W và f 1 Z CLRF f Xoá ô nhớ,thanh ghi f 1 Z CLRW Xoá W 1 Z COMF f,d Lấy bù 1 của f 1 Z DECF f,d Giảm f một đơn vị 1 Z DECFSZ f,d Giảm f một đơn vị, skip if 0 1(2) INCF f,d Tăng f một đơn vị 1 Z INCFSZ f,d Tăng f một đơn vị, skip if 0 1(2) IORWF f,d Or W và f 1 Z MOVF f,d Copy f tới W hoặc chính f 1 Z MOVWF f Copy W tới f 1 NOP Không làm gì 1 RLF f,d Quay trái f qua cờ nhớ C 1 C RRF f,d Quay phải f qua cờ nhớ C 1 C SUBWF f,d Trừ f cho W 1 Z,DC,C SWAPF f,d Hoán vị 4 bit thấp của f cho 4 bit cao của f 1 XORWF f,d Xor W và f 1 Z BCF f,b Xoá bit b của f 1 BSF f,b Set bit b của f 1 Copyright (c) IRF Group BTFSC f,b Test bit b của f, Skip if clear 1(2) BTFSS f,b Test bit b của f, Skip if set 1(2) ADDLW k W=Cộng k và W 1 Z,DC,C ANLW k W=WAnd k 1 Z CALL k Gọi thủ tục con ở địa chỉ k là số 11 bit 2 CLRWDT Reser WDT 1 TO , PD GOTO k Nhảy tới địa chỉ k là số 11 bit 2 IORLW k W=W or k 1 Z MOVLW k W=k 1 RETFIE Trở về từ ngắt 2 RETLW k Trở về từ thủ tục con và W=k 2 RETURN Trở về từ thủ tục con 2 SLEEP Nhảy tới chế độ ngủ 1 TO , PD SUBLW k W=k-W 1 Z,DC,C XORLW k W=W xor k 1 Z Skip if 0: Nếu kết quả =0 thì bỏ qua một lệnh ngay sau lệnh này Skip if clear: bit này xoá thi bỏ một lệnh ngay sau lệnh này Skip if set: bit này set thi bỏ một lệnh ngay sau lệnh này Nguyễn Văn Xuân Mail: nvxuan@irfvn.com
File đính kèm:
- nghien_cuu_khao_sat_bo_vi_dieu_khien_8_bit_pic16f877.pdf