CHƯƠNG 3: GIỚI THIỆU VĐK PIC 8BIT HỌ 16F8XX Trình bày được chức năng của họ VĐK PIC và PIC 16F8xx.

Một phần của tài liệu Bài giảng lý thuyết vi xử lý kỹ thuật vi xử lý cd rom (Trang 31 - 50)

VI. VI XỬ LÝ VÀ VI ĐIỀU KHIỂN Về cấu trúc phần cứng:

CHƯƠNG 3: GIỚI THIỆU VĐK PIC 8BIT HỌ 16F8XX Trình bày được chức năng của họ VĐK PIC và PIC 16F8xx.

- Trình bày được chức năng của họ VĐK PIC và PIC 16F8xx.

- Trình bày được sơ đồ cấu trúc, cách tổ chức bộ nhớ thanh ghi và các modul thành phần, tập lệnh của VĐK PIC

- Phân tích, lựa chọn loại VĐK cho mục đích thiết kế. 3.1 Đặc tính, cấu trúc, chức năng

3.1.1 Giới thiệu các VĐK , lịch sử phát triển của VĐK.

+ PIC viết tắt của “Programmable Intelligent Computer”, có thể dịch là máy tính thông minh lập trình được, là một sản phẩm do hãng General Instruments đặt cho dòng sản phẩm đầu tiên của họ PIC 1650.

+ 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à PIC 1650 được phát triển bởi MicroElectronics Division thuộc General Instruments. Lúc này PIC 1650 được dung để giao tiếp với các thiết bị ngoại vi cho máy chủ CP 1600. Hiện nay PIC phát triển mạnh, có rất nhiều loại PIC ra đời.

 PIC 12 (độ dài mã lệnh 12 bit) như là dòng PIC 12Cxxx (thí dụ: PIC 12F50x, PIC 12F675), PIC 5x (16F54),

 PIC 14 như dòng PIC 16Fxxx (16F84, 16F818, 16F877A, 16F872),  PIC 16 như dòng PIC 18Fxxx (PIC 18F4520, 18F2550).

3.1.2 Khảo sát VĐK 8 bit o Cấu hình VĐK 8 bit.

+ PIC 16F877A là vi điều khiển PIC thông dụng, loại trung (mid- range) có đặc điểm:

- Đây là vi điều khiển thuộc họ PIC 16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit. - Mỗi lệnh đều được thực thi trong một chu kì xung clock.

- Tốc độ hoạt động tối đa cho phép là 20 Mhz với một chu kì lệnh 20 ms.

- Bộ nhớ chương trình Flash là 8k x 14 words, bộ nhớ dữ liệu (RAM) là 368x8 byte, và bộ nhớ EEPROM với dung lượng 256 x 8 byte.

- Số port I/O là 5 với 33 chân I/O.

+ Các đặc tính ngọai vi bao gồm các khối chức năng sau: -Timer 0: bộ đếm 8 bit bộđếm với hệ số tỉ lệ trước.

-Timer 1: bộ đếm 16 bit, bộ đếm với hệ số tỉ lệ trước.Có thể được đếm thông qua xung clock/ xung clock thạch anh ngoài ở chế độ phương thức cất giữ sleep.

31

-Timer 2: bộ đếm 8 bit với thanh ghi chu kì 8 bit, bộ đếm8 bit của hệ số tỉ lệ trước, hệ số tỉ lệ sau.

- Có hai bộ bắt giữ/so sánh/điều rộng xung.

- Các cổng giao tiếp nối tiếp đồng bộ (SSP) với SPI phương thức chủ và I2C (chủ/tớ). - Bộ truyền nhận nối tiếp đồng bộ, không đồng bộ (UASRT/SCL) có khả năng phát hiện 9 bit địa chỉ.

- Cổng phụ song song với 8 bit mở rộng, với các chân điều khiển RD, WR, CS. - Các đặc tính analog:

 Bộ chuyển đổi tương tự-số 10 bit trên chip với 8 kênh vào.  Hai bộ so sánh,

+ Bên cạnh đó là một vài đặc tính của vi điều khiển như: - Bộ nhớ Flash với khả năng ghi xóa được 100000 lần.

- Bộ nhớ dữ liệu EEPROM với khả năng ghi xóa được 1000000 lần. - Dữ liệu bộ nhớ EEPROM có thể lưu trữ được 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 ngay trên mạch điện ISP (in circuit programming) thông qua 2 chân.

- Bộ đếm xung thời gian (WDT-Watch dog timer) với dao động RC bên trong. - Có mã chương trình bảo vệ (chức năng bảo mật mã chương trình).

- Có thể hoạt động hiều dạng dao động khác nhau.

- Chếđộ sleep (phương thức cất giữ) tiết kiệm năng lượng.

- Công nghệ CMOS Flash/ eeprom với nguồn mức thấp, tốc độ cao. - Dãi điện thế hoạt động rộng: 2V -> 5,5 V.

- Công suất tiêu thụ thấp: <0,6 mA với 5V, 4Mhz. 20 μA với nguồn 3V, 32 Khz. <1 μA với nguồn dự phòng.

- Khả năng ngắt: lên tới 14 nguồn ngắt trong và ngắt ngoài. - Ngăn xếp được chia làm 8 mức.

- Truy cập bộ nhớ bằng địa chỉ trực tiếp hay gián tiếp. - Nguồn khởi động lại (POR-Power on reset).

32

33 + Ý nghĩa các chân:

 OSC1/CLKI: chân ngõa vào mạch dao động, chân 13.  OSC2/CLKO: chân ngõ ra của mạch dao động, chân 14.

 /MCLR/Vpp: chân số 1, chân reset, tích cực mức thấp và còn là xung lập trình cho ROM.  RA0, RA1, RA2, RA3, RA4, RA5: chân 2-7, là các chân xuất nhập của PORTA.

 Chân 2-7, 8-10 còn là ngõ vào analog AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7.

 RA4/T0CKI: vừa là chân xuất nhập dữ liệu của port A, vừa là chân lấy xung cho thanh đếm của timer 0 (timer 0 clock input).

 RE0, RE1, RE2: chân 8-10, là các chân xuất nhập của PORTE.  RE0/RD: còn là xung cho phép đọc bộ nhớ (read), tích cực logic 0.  RE1/WR: còn là xung cho phép ghi bộ nhớ (write), tích cực logic 0.  RE2/CS: còn là xung chọn chip (chip select), tích cực logic 0.

 RC0, RC1, RC2, RC3: chân 15-18, và RC4, RC5, RC6, RC7: chân 23-26: là các chân xuất nhập của port C.

 RC0/T1OSO/T1KCI: còn là chân lấy xung cho thanh đếm của timer 1, và là chân T1OSO.  RC1/T1OSI: còn là chân T1OSI.

 RC2/CCP1, RC1/T1OSI/CCP2: còn là chân bắt (capture), so sánh (compare) và điều rộng xung (PWM). Mođun CCP giao tiếp với timer 1 và timer 2.

 RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7: chân 33-40 là các chân xuất nhập của PORTB.  RB0/INT: còn là chân phát động theo ngắt ngoài.

34

 RC6/TX/CK: nó có thể được lập trình để dung chân này phát xung nhịp (serial clock) dung cho truyền bit dạng nối tiếp. Đây còn là chân phát TX (transmit data). Hai chân này dung cho thu phát bất đồng bộ và đồng bộ (USART), có thể định địa chỉ.

 RC7/RX/DT: nó có thể được lập trình để dung chân này trao đổi dữ liệu (serial data). Đây còn là chân thu dữ liệu (receive data).

 RA3/AN3/Vref+, RA2/AN2/Vref-/Cref: là các chân điện áp tham chiếu cho bộ chuyển đổi tương tự-số (ADC) 10 bit.

 RC3/SCK/SCL: chân 18, còn là xung clock nối tiếp (Serial clock-SCK) cho SPI, và là chân clock nối tiếp cho I2C.

 RC4/SDI/SDA: chân 23, còn là chân dữ liệu nối tiếp (serial data).  RC5/SDO: chân 24, còn là chân xuất dữ liệu nối tiếp (serial data out).

 Môđun nối tiếp đồng bộ chủ (Master synchronous serial port-MSSP) có thể hoạt động ở hai chếđộ: SPI và I2C

 SPI (serial peripheral interface): giao tiếp ngoại vi nối tiếp. SPI dùng 3 chân SDO, SDI, SCK.  I2C: (inter-integrated circuit): mạch tích hợp lien kết, dung 2 chân: SCL, SDA, có thể ở chế

độ chủ hoàn toàn (full master mode) hay chế độ tớ (slave mode) (với gọi địa chỉ tổng quát).  RD0, RD1, RD2, RD3: chân 19-22, và RD4, RD5, RD6, RD7: chân 27-30: là các chân xuất

nhập của PORT D.

 VDD: chân 11, 32: là nguồn dương Vcc từ 2V đến 6V (5,5 V).  VSS: chân 12, 31, là chân đất (mass, GND, 0V).

3.2. Tổ chức bộ nhớ thanh ghi 3.2.1. Giới thiệu.

+ Thanh ghi là một bộ nhớ dung lượng nhỏ và rất nhanh, được sử dụng để tăng tốc độ xử lý của các chương trình máy tính bằng cách cung cấp các truy cập trực tiếp đến các giá trị cần dùng. Hầu hết, nhưng không phải tất cả, các máy tính hiện đại hoạt động theo nguyên lý chuyển dữ liệu từ bộ nhớ chính vào các thanh ghi, tính toán trên chúng, sau đó chuyển kết quả vào bộ nhớ chính. 3.2.2. Các loại kiến trúc bộ nhớ.

+ Kiến trúc Harvard được dùng để chỉ những kiến trúc máy tính mà trong đó phân biệt rõ ràng bộ nhớ dữ liệu và bộ nhớ chương trình, chúng có những đường truyền (bus) riêng để truy cập vào bộ nhớ dữ liệu và bộ nhớ chương trình (ngược lại, kiến trúc von Neumann có bộ nhớ và bộ nhớ chương trình chung).

35

+ Trong một máy tính sử dụng kiến trúc von Neumann, CPU có thể đọc một lệnh, hoặc đọc/ghi dữ liệu từ bộ nhớ. Tuy vậy, cả hai quá trình tương tác với lệnh hoặc với dữ liệu, không thể thực hiện cùng lúc, vì nó sử dụng chung một đường truyền và bộ nhớ. Trong một máy tính kiến trúc Harvard, CPU có thể vừa đọc một lệnh, vừa truy cập dữ liệu từ bộ nhớ cùng lúc. Một máy tính kiến trúc Harvard có thể chạy nhanh hơn, bởi vì nó có thể thực hiện ngay lệnh tiếp theo khi vừa kết thúc lệnh trước đó. Tốc độ được tăng lên nhưng phải trả giá bằng sự thiết kế phần cứng phức tạp hơn (cụ thể nhất mà chúng ta thấy, đó là việc phải thiết kế 2 bus khác nhau cho dữ liệu và chương trình). + Những năm gần đây, tốc độ CPU tăng lên rất nhiều lần so với tốc độ truy cập vào bộ nhớ chính. Người ta cần quan tâm đến việc giảm số lần truy cập vào bộ nhớ để đảm bảo tốc độ hoạt động của CPU. Nếu, trong cùng một lúc, mỗi lệnh của CPU cần phải truy cập vào bộ nhớ 1 lần, vậy thì việc tăng tốc độ CPU chẳng còn ý nghĩa gì nữa, bởi vì nó luôn luôn bị giới hạn bởi việc truy cập vào bộ nhớ.

+ Bộ nhớ có thể được thiết kế để có tốc độ truy cập cao, nhưng nó đồng nghĩa với việc giá sản xuất sẽ cao. Giải pháp là cung cấp một dung lượng nhỏ bộ nhớ đệm, với tốc độ truy cập rất cao, và chúng ta gọi đó là cache (bộ nhớ đệm). Khi bộ nhớ CPU cần tương tác đang nằm trong cache, vì việc tương tác vào đó tốn ít thời gian hơn rất nhiều lần so với khi cache phải thay đổi và lấy dữ liệu từ bộ nhớ chính đưa vào. Việc điều chỉnh cache là một vấn đề quan trọng trong việc thiết kế máy tính.

+ Những thiết kế chip CPU tốc độ cao ngày này thường kết hợp hai kiến trúc Harvard và von Neumann. Bộ nhớ cache trên chip được phân thành cache chương trình và cache dữ liệu. Kiến trúc Harvard được dùng khi CPU truy cập vào cache. Tuy nhiên, trong trường hợp không có cache, dữ liệu được lấy từ bộ nhớ chính, mà bộ nhớ chính không được chia thành vùng nhớ chương trình và vùng nhớ dữ liệu. Như vậy, kiến trúc von Neumann được dùng ở tầm vực truy cập bộ nhớ chính.

+ Kiến trúc Harvard cũng thường được dùng trong một số DSP chuyên dụng, thường dùng trong các sản phẩm xử lý âm thanh, hình ảnh.

36

+ Thêm vào đó, hầu hết các vi điều khiển thông dụng được dùng trong các ứng dụng điện tử như là PIC được sản xuất bởi Microchip Technology Inc và AVR của hãng Atmel Corporation, được phát triển dựa trên kiến trúc Harvard. Những vi xử lý này có đặc tính là có lượng bộ nhớ dữ liệu và bộ nhớ chương trình nhỏ, rất phù hợp với kiến trúc Harvard và tập lệnh RISC để đảm bảo hầu hết các lệnh được thực hiện trong 1 chu kỳ máy. Việc phân chia bộ nhớ ra thành bộ nhớ chương trình và bộ nhớ dữ liệu có thể làm cho bus dữ liệu và bus chương trình có kích thước băng truyền khác nhau. Ví dụ như các vi điều khiển PIC có bus dữ liệu 8-bit (phụ thuộc vào dòng PIC), nhưng bus chương trình có thể là 12-bit, 14-bit hoặc 16-bit word. Điều này cho phép mỗi một lệnh đơn có đủ chỗ chứa cho một giá trị hằng. Những CPU RISC khác, ví dụ như ARM, thường cần ít nhất 2 lệnh để load một hằng số đủ kích thước.

3.2.3. Tổ chức bộ nhớ của VĐK PIC 16F8xx 8 bit o Tổ chức bộ nhớ.

+ Cấu trúc bộ nhớ của 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).

o Khảo sát 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 thành nhiều trang (từ page0 đế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ì một 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ó 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 (Reset vector). - Khi có ngắt xảy ra, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector).

- 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. Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau.

37 o Khảo sát 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 được chia ra làm 4 bank. Mỗi bank có dung lượ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 (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank.

- Các thanh ghi SFR thường xuyên được 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.

39 o Khảo sát các thanh ghi đặc biệt

+ Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều khiển các khối chức năng được tích hợp bên trong vi điều khiển.

+ Có thể phân thanh ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví dụ như ADC, PWM, …). Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức năng bên trong. Các thanh ghi dùng để thiết lập và điều khiển các khối chức năng sẽ được nhắc đến khi ta đề cập đến các khối chức năng đó.

+ Chi tiết về các thanh ghi SFR sẽ được liệt kê cụ thể trong bảng phụ lục. Chúng ta liệt kê các SFR đặc biệt quan trong sau:

 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.

 Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull-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):thanh ghi cho phép đọc và ghi, chứa các bit đ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ứa các bit điều khiển chi tiết các ngắt của các khối chức năng ngoại vi.

40

 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 bit điều khiển chứa trong thanh ghi PIE1.

 Thanh ghi PIE2 (8Dh): chứa các bit đ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.

 Thanh 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 bit đ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 (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.  Thanh ghi PC (13 bit): bao gồm 2 thanh ghi PCL và PCH, trong đó PCH không truy cập được

trực tiếp mà truy cập gián tiếp thông qua 5 bit thấp trong thanh ghi PCLATH. Có 2 kiểu truy cập đến PC (chỉ tác động đến PCL; chọn BANK 2K trong ROM rồi dùng lệnh GOTO, CALL)

41

*** 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 hat RETFIE được thực thi, giá trị PC sẽ tự động được lấy ra từ

Một phần của tài liệu Bài giảng lý thuyết vi xử lý kỹ thuật vi xử lý cd rom (Trang 31 - 50)

Tải bản đầy đủ (PDF)

(156 trang)