intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG  - vuson.tk

Chia sẻ: Vu Son | Ngày: | Loại File: PDF | Số trang:29

255
lượt xem
104
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trang cá nhân : http://vn.360plus.yahoo.com/vuvanson_bk/ or vuson.tk Parallel slave Port là một khối chức năng on‐chip được tích hợp trong phần cứng của một số vi điều khiển PIC. Bên cạnh các khối chức năng rất đa dạng dùng cho giao tiếp nối tiếp, PSP là khối chức năng duy nhất trong vi điều khiển PIC dùng cho giao tiếp song song 8 bit. Với sự tham gia của khối PSP, các chức...

Chủ đề:
Lưu

Nội dung Text: tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG  - vuson.tk

  1. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  1/29  Tutorial 04.02    Gửi đến:  picvietnam@googlegroups.com Nội dung:  BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG    MICROSOFT WORD   Tóm tắt:  Tutorial post lên luồng “PIC16F877A TỪ DỄ TỚI KHÓ” thuộc chuyên mục “CƠ BẢN VỀ VI  ĐIỀU KHIỂN VÀ PIC”. Bài 4 bao gồm nội dung sau:  ‐ Cấu tạo phần cứng PSP và các thanh ghi điều khiển.  ‐ Xây dựng module điều khiển PSP ( phần cứng và  phần mềm).     1. Sơ lược về cấu tạo và chức năng của PSP   Parallel slave Port (PSP) là một khối chức năng on‐chip được tích hợp trong phần cứng  của một số vi điều khiển PIC. Bên cạnh các khối chức năng rất đa dạng dùng cho giao tiếp  nối tiếp (I2C, SPI, CAN, USB, …), PSP là khối chức năng duy nhất trong vi điều khiển PIC  dùng cho giao tiếp song song 8 bit.  Với  sự  tham  gia  của  khối  PSP,  các  chức  năng  giao  tiếp  của  vi  điều  khiển  PIC  trở  nên  hoàn thiện hơn, giống như một máy tính, với các cổng nối tiếp và một cổng song song. Ta  có thể tạm so sánh các khối giao tiếp nối tiếp của PIC như cổng COM hoặc cổng USB của  máy tính, còn khối giao tiếp song song 8 bit PSP có thể so sánh như cổng LPT (cổng song  song) của máy tính.  Một điểm tương đồng giữa PSP và các giao tiếp nối tiếp khác trong vi điều khiển PIC,  đó là PSP cũng là giao tiếp theo mô hình master‐ slave. Một master được phép điều khiển  các giao tiếp với một hoặc nhiều slave. master có nhiệm vụ đưa ra các yêu cầu giao tiếp, ví  dụ như giao tiếp với slave nào, nội dung giao tiếp, định hướng chiều dữ liệu (đọc hay ghi  dữ  liệu),  …  và  slave  có  nhiệm  vụ  đáp  ứng  các  yêu  cầu  đó  của  master.  Tùy  theo  phương  thức  giao  tiếp,  ta  có  các  qui  định  riêng  về  cách  “ra  lệnh”  của  master,  cách  đáp  ứng  của  slave cũng như cách truyền nhận dữ liệu.  PSP cũng có các yêu cầu riêng về hoạt động giao tiếp. Tuy nhiên, có một điểm cần lưu ý  ở đây, là PSP của vi điều khiển PIC chỉ hoạt động được ở vai trò của một slave. Các hoạt  động giao tiếp trên PSP sẽ được điều khiển hoàn toàn bởi một master.  Trên đây là một vài điểm sơ lược về PSP. Trong phần tiếp theo ta sẽ đi sâu vào cấu tạo  và hoạt động của PSP, cũng như xây dựng một số ứng dụng cơ bản cho PSP.   
  2. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  2/29  1.1 Cấu tạo phần cứng của PSP trong vi điều khiển PIC16F877A  PSP được tích hợp trong khá nhiều vi điều khiển PIC. Tùy theo vi điều khiển mà cách  bố trí các chân chức năng và các thanh ghi điều khiển cho PSP trong một vi điều khiển có  thể khác nhau, tuy nhiên về bản chất, cấu tạo của PSP là không đổi. Trong bài này, vi điều  khiển PIC16F877A được lựa chọn để tìm hiểu và xây dựng các ứng dụng cho PSP.  PSP có các chân chức năng được tích hợp trong port D và port E của PIC16F877A. port  D là các chân dữ liệu dùng để truyền nhận dữ liệu song song 8 bit. port E là các chân điều  khiển quá trình truyền nhận, bao gồm các chân RD* (ReaD, chân RE0), WR* (WRite, chân  RE1) và CS* (Chip Select, chân RE2). Lưu ý là các chân này tích cực ở trạng thái logic 0.  Có nghĩa là, ở trạng thái không tác động, các chân này phải được đưa lên mức logic 1, nếu  muốn một chân nào đó tác động lên khối PSP, ta điều khiển chân đó trở về trạng thái logic  0.   Khi được cho phép hoạt động ở chế độ PSP, các chân điều khiển nêu trên sẽ không còn  được cho phép hoạt động ở chế độ I/O (port D) hoặc chế độ I/O Analog (port E) nữa. Lúc  này, port D và port E sẽ được điều khiển bởi các thiết bị ngoại vi khác (một vi điều khiển  khác đóng vai trò là một master chẳng hạn) để truyền nhận dữ liệu song song 8 bit. Vai trò  cụ thể của chúng như sau:  ‐ Port D là ngõ xuất nhập dữ liệu và hoàn toàn được điều khiển bởi khối PSP. Vai trò  của thanh ghi TRISD trong trường hợp này sẽ được bỏ qua.   ‐ Port E là các chân điều khiển và phải được thiết lập các chế  độ hoạt động thích hợp,  đó là chế độ ngõ vào Digital. Chế độ này được điều khiển bởi thanh ghi TRISE và  thanh ghi ADCON1.  Bên cạnh các chân điều khiển, PSP còn được hỗ trợ ngắt PSP và các bit trạng thái dùng  để điều khiển hoạt động của khối. Các thành phần hỗ trợ này được trình bày trong bảng  sau(ta chỉ quan tâm tới các bit điều khiển liên quan tới PSP):  Thanh  Địa  Chức năng  ghi  chỉ  PORTD  08h  Chứa dữ liệu truy xuất lên PSP  PORTE  09h  Điều khiển các chân RE2:RE0 của PORT E  TRISE  89h  Chứa các bit điều khiển PSP và các bit điều khiển hướng truy xuất các    chân của PORT E.  Bit  Chức năng  7  IBF: Input Buffer Full status bit  IBF = 1 : có dữ liệu ở bộ đệm ngõ vào  IBF = 0 : không có dữ liệu ở bộ đệm ngõ vào  6  OBF: Output Buffer Full status bit  OBF = 1 : Có dữ liệu ở bộ đệm ngõ ra 
  3. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  3/29  OBF = 0 : Không có dữ liệu ở bộ đệm ngõ ra  5  IBOV : Input Buffer OVerflow detect bit  IBOV = 1 : bộ đệm dữ liệu ngõ vào bị tràn  IBOV = 0 : bộ đệm dữ liệu ngõ vào không bị tràn  4  PSPMODE : Parallel slave Port MODE  PSPMODE = 1 : cho phép khối PSP hoạt động  PSPMODE = 0 : không cho phép khối PSP hoạt động   3  Không quan tâm  2 :0  Các bit điều khiển hướng truy xuất của PORT E.  TRISE = 1 : Input  TRISE = 0 : Output  PIR1  0Ch  Chứa cờ ngắt các ngắt ngoại vi  Bit  Chức năng  7  PSPIF : Parallel Slave Port Interrupt Flag bit    PSPIF = 1 : Xảy ra ngắt PSP  PSPIF = 0 : chưa xảy ra ngắt PSP PIE1  8Ch  Chứa các bit cho phép các ngăt ngoại vi    Bit  Chức năng   7  PSPIE : Parallel Slave Port Interrupt Enable bit      PSPIE = 1 : Cho phép ngắt ngoại vi PSP    PSPIE = 0 : Không cho phép ngắt ngoại vi PSP  ADCON1  9Fh  Chứa các bit điều khiển ADC. Cần thiết lập các giá trị thích hợp cho  thanh ghi này để các cổng I/O của port E là Digital input    1.2 Quá trình truyền nhận dữ liệu qua PSP  Ở chế độ PSP, port D đóng vai trò là nơi đọc và ghi dữ liệu được điều khiển bởi một  master. Để thực hiện được cả hai vai trò là truyền và nhận dữ liệu, port D được bố trí hai  bộ chốt dữ liệu nhập và xuất tách biệt với nhau. Các chốt dữ liệu này được điều khỉển trực  tiếp  bởi  các  chân  điều  khiển  RD*,  WR*  và  CS*.  Tùy  theo  mức  logic  trên  các  chân  điều  khiển này mà quá trình đọc hay ghi dữ liệu được tiến hành.   Ta sẽ dựa vào giản đồ xung để tìm hiểu quá trình truyền nhận dữ liệu của PSP. Trước  tiên là quá trình ghi dữ liệu lên PSP: 
  4. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  4/29    Hình 1: Giản đồ xung thể hiện quá trình ghi dữ liệu lên PSP.    Trước tiên dữ liệu cần ghi sẽ được đưa vào cổng dữ liệu của PSP (port D). Quá trình ghi  dữ  liệu chỉ bắt đầu diễn  ra khi cả  hai chân  WR*  và CS* cùng ở mức logic thấp.  Khi  một  trong  hai  chân  WR*  hoặc  CS*  trở  về  mức  logic  cao,  các  bit  IBF  và  PSPIF  sẽ  đồng  thời  chuyển trạng thái  từ  mức logic 0  lên  mức  logic 1 và ngắt  ngoại  vi  PSP  (nếu đã  được cho  phép  trước  đó  bằng  cách  set  bit  PSPIE  trong  thanh  ghi  PIE1)  sẽ  được  kích  hoạt.  Bit  IBF   (thanh ghi TRISE) chuyển lên mức logic 1 dùng để  báo hiệu rằng dữ liệu bộ đệm ngõ vào  đã  đầy.  Bit PSPIF chuyển  lên mức logic  1  dùng để  chỉ thị  trạng thái  ngắt  PSP.  Bit PSPIF  phải  được  xóa  bằng  chương  trình  để  nhận  biết  được  trường  hợp  xảy  ra  ngắt  tiếp  theo.  Trong khi bit IBF chỉ được xóa khi dữ liệu từ buffer đệm được đọc vào. Trong trường hợp  dữ liệu cũ chưa được đọc vào mà dữ liệu mới đã muốn ghi lên PSP, bit IBOV sẽ chuyển lên  mức logic 1.  Xét quá trình đọc dữ liệu từ PSP:    Hình 2: Giản đồ xung quá trình đọc dữ liệu từ PSP.   
  5. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  5/29  Giản đồ xung quá trình đọc dữ liệu từ PSP có thể phức tạp hơn so với giản đồ xung của  quá  trình  ghi  dữ  liệu.  Tuy  nhiên  nếu  để  ý  phân  tích  kĩ,  ta  vẫn  có  thể  hình  dung  được  phương thức hoạt động của quá trình này. Đầu tiên, ta thấy chỉ khi nào hai chân CS* và  RD* cùng ở mức logic thấp thì quá trình đọc dữ liệu mới bắt đầu. Khi đó, bit OBF từ mức  logic 1 sẽ chuyển về mức logic 0, và dữ liệu cần đọc sẽ xuất hiện tại ngõ ra của port D. Bit  OBF  trở  về  mức  logic  0  để  chỉ  thị  trạng  thái  bộ  đệm  dữ  liệu  ra  đã  rỗng,  điều  đó  có  2  ý  nghĩa:  ‐ Thứ nhất, dữ liệu cần đọc phải được đưa vào PSP trước đó. Khi có sự tác động của  hai chân CS* và RD*, PSP chỉ làm một công việc đơn giản, đó là mở buffer đệm để  cho phép dữ liệu dã được ghi vào trước đó xuất hiện ở ngõ ra port D.  ‐ Thứ hai, khi dữ liệu chưa được đọc, buffer đệm đã có sẵn dữ liệu nên bit OBF sẽ ở  mức logic 1. Khi dữ liệu được đọc, buffer đệm rỗng nên mức logic của OBF sẽ bằng  0. Muốn bit OBF trở về mức logic 1, ta thực hiện thao tác ghi dữ liệu mới cần đọc lên  buffer đệm.   Đến giai đoạn này, việc đọc dữ liệu đã hoàn tất, công việc còn lại là đánh dấu kết thúc  quá  trình  đọc dữ  liệu  bằng cách đưa một trong  hai  chân RD*  hoặc CS* trở  về  mức logic  cao, khi đó cờ ngắt PSPIF được set và ngắt ngoại vi PSP (nếu đã được cho phép trước đó)  xảy ra. Bit PSPIF phải được xóa bằng chương trình để nhận biết được trường hợp xảy ra  ngắt tiếp theo.    2. Xây dựng các module ứng dụng cho PSP.  Mục  đích  của  công  việc  này  là  ứng  dụng  PSP  trong  giao  tiếp  dữ  liệu  với  các  thiết  bị  ngoại vi. Trong các ứng dụng này, để đơn giản, ta sẽ sử dụng 2 vi điều khiển PIC16F877A,  một vi điều khiển được cho phép hoạt động ở chế độ PSP, vi điều khiển còn lại đóng vai  trò là một master để điều khiển PSP (chú ý là PSP chỉ hoạt động với vai trò là một slave).  Ta  sẽ  xây  dựng  các  ứng  dụng  này  theo  từng  bước,  từ  thiết  kế  phần  cứng  đến  viết  chương trình.    2.1 Ứng dụng đọc dữ liệu từ PSP  Trong ứng dụng này, ta sẽ thực hiện công việc đọc dữ liệu từ PSP dựa trên các thông tin  đã được chuẩn bị trong phần trước.    2.1.1 Xây dựng phần cứng cho ứng dụng  Trước tiên là việc thiết kế phần cứng cho ứng dụng. Rõ ràng ta cần nối tất cả các chân  liên quan đến PSP đến vi điều khiển master, để bảo đảm việc có thể  kiểm soát hoàn toàn  hoạt động của PSP.  
  6. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  6/29              Để kiểm tra dữ liệu đọc vào có đúng hay không, ta sử dụng một công cụ thông dụng là  các LED được nối vào một port khác của master.   Bên cạnh đó ta cũng cần đến các thành phần hỗ trợ cho các vi điều khiển (mạch reset,  mạch ổn định xung dao động cho thạch anh,…)  Dựa trên một vài ý tưởng như vậy, ta có thể xây dựng mạch nguyên lí cho ứng dụng  như hình 3.  Trong mạch ứng dụng ở hình 3, PSP của PIC16F877A slave sẽ được điều khiển bởi các  chân RE2 :RE0 của PIC16F877A master. Các chân dữ liệu của slave được nối với các chân  của port D. Như vậy khối PSP của cả 2 PIC master và slave đều được nối chung với nhau  (xét trên quan điểm cấu tạo phần cứng của PIC16F877A). Tuy nhiên vai trò của mỗi PIC là  hoàn toàn khác biệt, đó là PIC master sẽ điều khiển PSP của PIC slave. Như vậy PIC slave  được cho phép hoạt động ở chế độ PSP, còn PIC master sẽ không được cho phép hoạt động  ở chế  độ PSP.  Thực  chất  ta  hoàn  toàn  có  thể  sử  dụng  các  port  điều  khiển  khác  của  master  để  điều  khiển PSP slave (dùng Port B và Port A chẳng hạn) mà không nhất thiết phải là port D và  port E.  Ngoài ra, ta chỉ sử dụng một PSP slave nên việc điều khiển chân CS* (Chip Select) là  không cần thiết và có thể nối trực tiếp chân CS* của PSP slave xuống mass. Trong trường  hợp nhiều PSP slave được sử dụng, chân CS* được dùng để lựa chọn việc PSP slave nào  được cho phép truy xuất. Ở đây, do yêu cầu của ứng dụng là chỉ mang tính chất tìm hiểu  phương thức hoạt động của PSP, và để ứng dụng mang tính tổng quát cao hơn, chân CS*  vẫn sẽ được điều khiển.   
  7. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  7/29  HI HI R1 10 K R2 SW1 10 K 1 40 SW2 330 X 8 MCLR/VPP RB7/PGD 39 1 40 R3 D1 2 RB6/PGC 38 MCLR/VPP RB7/PGD 39 R4 D2 3 RA0/AN0 RB5 37 2 RB6/PGC 38 R5 D3 0 4 RA1/AN1 RB4 36 3 RA0/AN0 RB5 37 R6 D4 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 0 4 RA1/AN1 RB4 36 R7 D5 6 RA3/AN3/VREF+ RB2 34 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 R8 D6 7 RA4/TOCKI/C1OUT RB1 33 6 RA3/AN3/VREF+ RB2 34 R9 D7 RA5/AN4/SS/C2OUT RB0/INT 7 RA4/TOCKI/C1OUT RB1 33 R10 D8 RE0 8 RA5/AN4/SS/C2OUT RB0/INT RE1 9 RE0/RD/AN5 30 RD7 RE0 8 RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 RE1 9 RE0/RD/AN5 30 RD7 0 RE2/CS/AN7 RD6/PSP6 28 RD5 RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 15 RD5/PSP5 27 RD4 RE2/CS/AN7 RD6/PSP6 28 RD5 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 15 RD5/PSP5 27 RD4 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 18 RC2/CCP1 RD2/PSP2 20 RD1 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 23 RC3/SCK/SCL RD1/PSP1 19 RD0 18 RC2/CCP1 RD2/PSP2 20 RD1 24 RC4/SDI/SDA RD0/PSP0 23 RC3/SCK/SCL RD1/PSP1 19 RD0 25 RC5/SD0 24 RC4/SDI/SDA RD0/PSP0 26 RC6/TX/CK 11 25 RC5/SD0 RC7/RX/DT VDD 32 HI 26 RC6/TX/CK 11 30 pF 14 VDD RC7/RX/DT VDD 32 HI OSC2/CLKO 30 pF 14 VDD 4 MHz 31 OSC2/CLKO VSS 12 4 MHz 31 30 pF 13 VSS VSS 12 OSC1/CLKI 13 VSS 0 30 pF OSC1/CLKI 0 0 PIC16F877A PSP SLAVE 0 PIC16F877A MASTER   Hình 3 : Sơ đồ nguyên lí ứng dụng đọc dữ liệu từ PSP sử dụng PIC16F877A.    2.2 Viết chương trình điều khiển cho ứng dụng  Ở đây ta cần viết chương trình cho cả hai vi điều khiển master và slave. Có thể nói đây  là  một  công  việc  không  đơn  giản.  Ta  sẽ  giải  quyết  vấn  đề  bằng  cách  lần  lượt  đứng  trên  phương thức điều khiển của master và cách « phục vụ » của slave để hình dung ra các hoạt  động cho cả hai vi điều khiển.   Trước hết là trong vai trò của một master. Master sẽ yêu cầu PSP slave xuẩt ra dữ liệu  cần đọc cho master bằng cách điều khiển các chân CS* và RD* của PSP slave xuống mức  logic thấp. Sau đó đọc dữ liệu vào và kết thúc truy xuất dữ liệu bằng cách đưa một trong  hai chân RD* hoặc CS* trở về mức logic cao. Như vậy hoạt động của master khá đơn giản.  Bây giờ ta sẽ đóng vai trò là một PSP slave để hình dung được những thao tác cần làm  của PSP slave. Khi hai chân CS* và RD* cùng ở mức logic thấp, phần cứng của PSP sẽ lập  tức  đưa  dữ  liệu  từ  buffer  đệm  ra  thẳng  ngõ  ra  của  PSP  (ngõ  ra  là  port  D)  và  bit  OBF  sẽ  được set. Khi một trong hai chân CS* hoặc RD* trở về mức logic cao thì ngắt ngoại vi PSP  sẽ được kích hoạt, đồng thời quá trình đọc dữ liệu của master cũng đã kết thúc. Đây chỉ  mới là những phản ứng của phần cứng PSP khi được điều khiển bởi master, mà chưa có sự  can thiệp của chương trình. Như vậy, một khi PSP slave đã có sẵn dữ liệu ở buffer đệm thì  mọi  thao  tác  truy  xuất  sẽ  hoàn  toàn  được  điều  khiển  bởi  master,  và  công  việc  của  PSP  slave, đơn giản chỉ là chuẩn bị dữ liệu tiếp theo cho master, và công việc này tốt nhất nên 
  8. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  8/29  được  tiến  hành  trong  chương  trình  ngắt  (ngay  sau  khi  master  kết  thúc  thao  tác  đọc  dữ  liệu). Công việc chuẩn bị dữ liệu mới này sẽ được hỗ trợ bởi các bit OBF và PSPIF.  Dựa trên những phân tích như trên, ta dã có thể viết được chương trình cho cả hai vi  điều khiển. Các chương trình cụ thể như sau :  Chương trình 1M : dùng cho master.  processor   16f877a  include    __CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON  &_XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Khai ba’o pha^`n cu*’ng  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  #define  READ   PORTE,0  #define  WRITE  PORTE,1  #define  CS    PORTE,2    #define  LEDPORT  PORTB  ;========================================================================== ;       CHUONG TRINH CHINH  ORG    0x000  CLRF              STATUS  MOVLW  0x00  MOVWF  PCLATH  GOTO             start    ;========================================================================== start  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho* ?i ta.o ca’c PORT  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  BCF    STATUS,RP1            ; BANK 1      BSF    STATUS,RP0    CLRF              TRISB                         ; kho*?i ta.o ca’c ngo~ ra  CLRF              TRISE  MOVLW  0x06                            ; kho*?i ta.o ca’c ngo~ I/O la` digital I/O  MOVWF  ADCON1    BCF    STATUS,RP0   
  9. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  9/29  CLRF              PORTB  BSF    READ                         ; ‐du*a ta^’t ca ? ca’c cha^n –die^`u   BSF    WRITE                       ; khie^ ?n le^n mu*’c logic cao  BSF    CS  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Vo`ng la*.p chi’nh cu?a chuo*ng tri`nh  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  loop  CALL             readPSP                      MOVWF  LEDPORT                  ; xua^’t du*~ lie^.u –do.c –duo*.c ra LED  GOTO             loop    ;========================================================================== ;  CHUONG TRINH CON  ;========================================================================== ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Chuo*ng tri`nh con ʺreadPSPʺ  ; Du`ng –de^ ? –do.c du*~ lie^.u tu*` slave ve^` master  ; Ke^’t qua? –do.c ve^` chu*’a trong thanh ghi W  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  readPSP  BCF    CS                             ; ba*’t –da^`u –do.c du*~ lie^.u  BCF    READ                          BSF    STATUS,RP0    MOVLW  0xFF                          ; kho*?i ta.o PORT D la` ca’c ngo~ va`o  MOVWF  TRISD                           BCF    STATUS,RP0    MOVF  PORTD,0                 ; ‐do.c du*~ lie^.u va`o    BSF    CS                            ; ke^’t thu’c –do.c du*~ lie^.u  BSF    READ    RETURN    END  ;=========================================================================   
  10. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  10/29  Chương trình 1S : dùng cho slave    processor   16f877a    include    __CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &  _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF    ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Khai ba’o bie^’n  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  DATAOUT    EQU    0x20          ; chu*’a du*~ lie^.u ca^`n –do.c                                                                                 ; bo* ?i master  W_save    EQU    0x21          ; ca’c thanh ghi du`ng –de^?   PCLATH_save  EQU    0x22          ; thao ta’c khi va`o nga*’t va`         STATUS_save  EQU    0x23          ; ; thoa’t nga*’t  FSR_save    EQU    0x24  ;========================================================================  ; CHUONG TRINH NGAT  ORG    0x004  GOTO   ISR  ;========================================================================  ISR  MOVWF  W_save                          ; ‐doa.n chuo*ng tri`nh ba*’t –da^`u  SWAPF  STATUS,W                   ; va`o nga*’t  CLRF              STATUS  MOVWF  STATUS_save  MOVF  PCLATH,W  MOVWF  PCLATH_save  CLRF              PCLATH  MOVF  FSR,W  MOVWF  FSR_save    BTFSS             PIR1,PSPIF          ; kie^?m tra co*` nga*’t PSPIF  GOTO             exit_int                 ; ne^’u nga*’t ngoa.i vi PSP kho^ng xa?y ra                                                          ;  ‐> thoat  BCF    PIR1,PSPIF          ; ne^’u co’, xo’a co*` nga*’t va` ba*’t ‐da^`u                                                         ; xu* ? li’ nga*’t  BSF                 STATUS,RP0       ; thanh ghi TRISE na*`m o*? BANK 1    BTFSC  TRISE,OBF           ; du*~ lie^.u trong buffer –da~                                                         ; ‐duo*.c –do.c chu*a ?? 
  11. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  11/29  GOTO              exit_int                 ; ne^’u chu*a –duo*.c –do.c, thoa’t nga*t      BCF                 STATUS,RP0       MOVF  DATAOUT,0         ; ne^’u –da~ ‐duo*.c –do.c roi,                                                           ; ‐du*a du*~ lie^.u mo*’i va`o  MOVWF  PORTD          ; buffer –de^.m  exit_int              BCF                 STATUS,RP0  MOVF  FSR_save,W  MOVWF  FSR  MOVF  PCLATH_save,W  MOVWF  PCLATH  SWAPF  STATUS_save,W  MOVWF  STATUS  SWAPF  W_save,1  SWAPF  W_save,0  RETFIE  ;========================================================================  ;         CHUONG TRINH CHINH  ORG    0x000  CLRF              STATUS  MOVLW  0x00  MOVWF  PCLATH  GOTO              start    ;========================================================================  ORG    0x050  start  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho* ?i ta.o ca’c PORT  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  BCF    STATUS,RP1  BCF    STATUS,RP0    CLRF              PORTD    BSF    STATUS,RP0    MOVLW  bʹ00010111ʹ                 ; RE2:RE0 la` ca’c ngo~ va`o  MOVWF  TRISE                          ; cho phe’p PSPMODE  MOVLW  0x06                             ; Ta^’t ca ? ca’c cha^n la` Digital I/O 
  12. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  12/29  MOVWF  ADCON1  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho*?i ta.o nga*’t PSP  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  BSF    PIE1,PSPIE    BCF    STATUS,RP0    BSF    INTCON,GIE  BSF    INTCON,PEIE  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho* ?i ta.o ca’c bie^’n  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  MOVLW  bʹ01010101ʹ  MOVWF  DATAOUT  MOVWF  PORTD  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Vo`ng la*.p chi’nh cu?a chuo*ng tri`nh  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  GOTO              $      END  ;========================================================================    Do  dữ  liệu  ta  khởi  tạo  trong  thanh  ghi  “DATAOUT”  ban  đầu  là  b’01010101’  nên  khi  chương trình được thực thi đúng, các LED ở port B của master sẽ sáng tắt tương ứng với  dữ liệu đọc vào.    2.2 Ứng dụng ghi dữ liệu lên PSP  Ta sẽ tiếp tục tìm hiểu các thao tác ghi dữ liệu lên PSP. Các bước tiến hành cũng tương  tự như ứng dụng đọc dữ liệu từ PSP.    2.2.1 Xây dựng phần cứng cho ứng dụng  Việc  thực  hiện  thành  công  ứng  dụng  trước  tạo  được  nhiều  thuận  lợi  hơn  cho  ta  thực  hiện  ứng dụng  tiếp theo này. Rõ ràng độ  tin cậy  của mạch điều khiển PSP đã  được  đảm  bảo, ta chỉ việc chuyển các LED từ port B của master sang slave để kiểm tra xem dữ liệu 
  13. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  13/29  ghi lên PSP slave có đúng hay không. Sơ đồ nguyên lí cụ thể của ứng dụng này như trong  hình 4.   HI HI R1 R2 10 K 10 K SW1 330 X 8 SW2 1 40 R3 D1 1 40 MCLR/VPP RB7/PGD 39 R4 D2 MCLR/VPP RB7/PGD 39 2 RB6/PGC 38 R5 D3 2 RB6/PGC 38 3 RA0/AN0 RB5 37 R6 D4 3 RA0/AN0 RB5 37 0 4 RA1/AN1 RB4 36 R7 D5 0 4 RA1/AN1 RB4 36 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 R8 D6 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 6 RA3/AN3/VREF+ RB2 34 R9 D7 6 RA3/AN3/VREF+ RB2 34 7 RA4/TOCKI/C1OUT RB1 33 R10 D8 7 RA4/TOCKI/C1OUT RB1 33 RA5/AN4/SS/C2OUT RB0/INT RA5/AN4/SS/C2OUT RB0/INT RE0 8 RE0 8 RE1 9 RE0/RD/AN5 30 RD7 0 RE1 9 RE0/RD/AN5 30 RD7 RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 RE2/CS/AN7 RD6/PSP6 28 RD5 RE2/CS/AN7 RD6/PSP6 28 RD5 15 RD5/PSP5 27 RD4 15 RD5/PSP5 27 RD4 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 18 RC2/CCP1 RD2/PSP2 20 RD1 18 RC2/CCP1 RD2/PSP2 20 RD1 23 RC3/SCK/SCL RD1/PSP1 19 RD0 23 RC3/SCK/SCL RD1/PSP1 19 RD0 24 RC4/SDI/SDA RD0/PSP0 24 RC4/SDI/SDA RD0/PSP0 25 RC5/SD0 25 RC5/SD0 26 RC6/TX/CK 11 26 RC6/TX/CK 11 RC7/RX/DT VDD 32 HI RC7/RX/DT VDD 32 HI 30 pF 14 VDD 30 pF 14 VDD OSC2/CLKO OSC2/CLKO 4 MHz 31 4 MHz 31 VSS 12 VSS 12 30 pF 13 VSS 13 VSS OSC1/CLKI 30 pF OSC1/CLKI 0 0 0 0 PIC16F877A MASTER PIC16F877A PSP SLAVE   Hình 4 : Sơ đồ nguyên lí ứng dụng ghi dữ liệu lên PSP sử dụng PIC16F877A.    2.2.2 Viết chương trình điều khiển cho ứng dụng  Ta tiến hành các bước phân tích như trong ứng dụng trước.   Đầu  tiên  là  xem  xét  các  hoạt  động  của  master.  Thao  tác  ghi  dữ  liệu  lên  PSP  được  bắt  đầu bằng việc master đưa dữ liệu cần ghi ra port D, sau đó điều khiển cho cả hai chân WR*  và SC* xuống mức logic thấp. Công việc còn lại là kết thúc thao tác ghi dữ liệu bằng cách  đưa một trong hai chân WR* hoặc CS* trở về mức logic 1.   Hoạt động của PSP slave lần lượt được tiến hành như sau. Khi nhận được tín hiệu yêu  cầu  ghi  dữ  liệu  của  master  (WR*  và  CS*  ở  mức  logic  0),  dữ  liệu  lập  tức  được  đưa  vào  buffer đệm. Khi nhận được tín hiêu kết thúc thao tác ghi dữ liệu (một trong hai chân WR*  hoặc  CS*  trở  về  mức  logic  cao),  bit  IBF  và  PSPIF  được  set,  ngắt  ngoại  vi  (nếu  được  cho  phép trước đó) sẽ được kích hoạt. Nhiệm vụ của phần cứng PSP đến đây là kết thúc. Công  việc còn lại của chương trình điều khiển là đọc dữ liệu từ bộ đệm vào và xử lí dữ liệu đó.  Trong trường hợp của ứng dụng này, ta sẽ đọc dữ liệu đó vào và xuất ra port B của slave  để kiểm tra xem dữ liệu nhận được hay chưa, và nhận được đúng hay sai. Thao tác này tốt  nhất cũng nên được tiến hành trong chương trình ngắt (ngay khi dữ liệu vừa được nhận  vào), như vậy sẽ tránh được trường hợp tràn bộ đệm. Hiện tượng này xảy ra khi dữ liệu cũ 
  14. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  14/29  chưa được đọc vào mà dữ liệu mới đã chuẩn bị ghi lên. Bit chỉ thị trạng thái này là IBOV  (thanh ghi TRISE).   Các chương trình ứng dụng như vậy có thể được viết như sau:  Chương trình 2M : dùng cho master    processor   16f877a    include      __CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &  _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF    ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Khai ba’o pha^`n cu*’ng  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐    #define  READ   PORTE,0    #define  WRITE  PORTE,1    #define  CS    PORTE,2  ;========================================================================  ;         CHUONG TRINH CHINH    ORG    0x000    CLRF              STATUS    MOVLW  0x00    MOVWF  PCLATH    GOTO             start    ;========================================================================  start  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho* ?i ta.o ca’c PORT  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐    BCF    STATUS,RP1    BSF    STATUS,RP0      CLRF              TRISE      MOVLW  0x06    MOVWF  ADCON1      BCF    STATUS,RP0      BSF    READ    BSF    WRITE 
  15. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  15/29    BSF    CS  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Vo`ng la*.p chi’nh cu?a chuo*ng tri`nh  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  loop    CALL             writePSP    MOVWF  PORTB    GOTO             loop    ;========================================================================  ;  CHUONG TRINH CON  ;========================================================================  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Chuo*ng tri`nh con ʺwritePSPʺ  ; Du`ng –de^ ? ghi du*~ lie^.u le^n PSP slave   ; Ke^’t qua? –do.c ve^` chu*’a trong thanh ghi W  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  writePSP    BCF    CS    BCF    WRITE      BSF    STATUS,RP0      CLRF              TRISD      BCF    STATUS,RP0      MOVLW  bʹ01010101ʹ               ; du*~ lie^.u ca^`n ghi le^n PSP slave    MOVWF  PORTD      BSF    CS    BSF    WRITE    RETURN      END  ;========================================================================    Chương trình 2S : dùng cho slave      processor   16f877a 
  16. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  16/29    include      __CONFIG  _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &  _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF    ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Khai ba’o bie^’n  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  W_save    EQU    0x20  PCLATH_save  EQU    0x21  STATUS_save  EQU    0x22  FSR_save    EQU    0x23  ;========================================================================  ;                                                   CHUONG TRINH NGAT    ORG    0x004    GOTO             ISR    ;========================================================================  ISR    MOVWF  W_save                     ; ‐doa.n chuo*ng tri`nh va`o nga*’t    SWAPF  STATUS,W    CLRF              STATUS    MOVWF  STATUS_save    MOVF  PCLATH,W    MOVWF  PCLATH_save    CLRF              PCLATH    MOVF  FSR,W    MOVWF  FSR_save      BTFSS             PIR1,PSPIF              ; kie^?m tra co*` nga*’t PSP    GOTO             exit_int      BCF    PIR1,PSPIF                BSF                 STATUS,RP0      BTFSS   TRISE,IBF                ; du*~ lie^.u –da~ co’ o*? trong buffer                                                                         ; _de^.m chu*a ??    GOTO   exit_int                     ; ne^’u chu*a, thoa’t nga*’t                  BCF                 STATUS,RP0          ; ne^’u ro^`i, ‐du*a du*~ lie^.u nha^.n                                                                         ; –duo*.c ra PORT B    MOVF  PORTD,0    MOVWF  PORTB     
  17. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  17/29  exit_int                                                          ; thoa’t kho?i nga*’t              BCF                 STATUS,RP0    MOVF  FSR_save,W    MOVWF  FSR    MOVF  PCLATH_save,W    MOVWF  PCLATH    SWAPF  STATUS_save,W    MOVWF  STATUS    SWAPF  W_save,1    SWAPF  W_save,0    RETFIE  ;========================================================================  ;         CHUONG TRINH CHINH    ORG    0x000    CLRF              STATUS    MOVLW  0x00    MOVWF  PCLATH    GOTO             start    ;========================================================================    ORG    0x050  start  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho* ?i ta.o ca’c PORT  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐    BCF    STATUS,RP1    BCF    STATUS,RP0      CLRF              PORTD    CLRF              PORTB      BSF    STATUS,RP0      MOVLW  bʹ00010111ʹ                ; RE2 :RE0 la` ca’c ngo~ va`o    MOVWF  TRISE                         ; cho phe’p PSPMODE    MOVLW  0x06    MOVWF  ADCON1    CLRF              TRISB  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Kho*?i ta.o nga*’t PSP  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐    BSF    PIE1,PSPIE 
  18. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  18/29    BCF    STATUS,RP0    BSF    INTCON,GIE    BSF    INTCON,PEIE  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐  ; Vo`ng la*.p chi’nh cu?a chuo*ng tri`nh  ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐    GOTO              $                  END  ;========================================================================    2.3 Ứng dụng tổng hợp    Trong các phần trước, ta đã xây dựng được các chương trình phục vụ cho các thao tác  cơ bản trên PSP, bao gồm đọc và ghi dữ liệu. Để củng cố lại và nắm vững các thao tác trên,  ta sẽ thực hiện một ứng dụng tổng hợp. Yêu cầu của ứng dụng như sau:  ‐ Master sẽ được bổ sung thêm hai công tăc ấn “WRITEBUT” và “READBUT”.      ‐ Nếu  nút  “WRITEBUT”  được  ấn,  master  sẽ  ghi  dữ  liệu  lên  PSP  slave,  sau  đó  slave  xuất dữ liệu nhận được ra các LED ở PORT B. Sau mỗi lần ghi, giá trị ghi lên PSP  slave sẽ tăng lên một đơn vị.  ‐ Nếu nút “READBUT” được ấn, master sẽ đọc dữ liệu từ PSP slave, sau đó xuất dữ  liệu nhận được ra các LED ở PORT B. Sau mỗi lần đọc, giá trị đọc từ PSP slave sẽ  tăng lên một đơn vị.    2.3.1 Xây dựng phần cứng cho ứng dụng  Phần cứng sẽ có một số thay đổi nhỏ như sau:  ‐ PORT B của mỗi PIC đều phải được nối với các LED để kiểm tra dữ liệu nhận được.  ‐ master được bổ sung thêm hai nút nhấn. Ta chọn các chân RA0 và RA1 để đọc trạng  thái của các nút ấn này.  Sau đây là sơ đồ nguyên lí cụ thể của ứng dụng:           
  19. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  19/29                HI HI R1 R2 10 K 10 K SW1 330 X 8 SW2 330 X 8 1 40 1 40 MCLR/VPP RB7/PGD 39 MCLR/VPP RB7/PGD 39 2 RB6/PGC 38 READBUT2 RB6/PGC 38 3 RA0/AN0 RB5 37 0 WRITEBUT RA0/AN0 3 RB5 37 0 4 RA1/AN1 RB4 36 4 RA1/AN1 RB4 36 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 5 RA2/AN2/VREF-/CVREF RB3/PGM 35 6 RA3/AN3/VREF+ RB2 34 6 RA3/AN3/VREF+ RB2 34 7 RA4/TOCKI/C1OUT RB1 33 7 RA4/TOCKI/C1OUT RB1 33 RA5/AN4/SS/C2OUT RB0/INT RA5/AN4/SS/C2OUT RB0/INT RE0 8 RE0 8 RE1 9 RE0/RD/AN5 30 RD7 0 RE1 9 RE0/RD/AN5 30 RD7 0 HI HI RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 RE2 10 RE1/WR/AN6 RD7/PSP7 29 RD6 RE2/CS/AN7 RD6/PSP6 28 RD5 RE2/CS/AN7 RD6/PSP6 28 RD5 15 RD5/PSP5 27 RD4 15 RD5/PSP5 27 RD4 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 16 RC0/T1OSO/T1CKI RD4/PSP4 22 RD3 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 10 K 10 K 17 RC1/T1OSI/CCP2 RD3/PSP3 21 RD2 18 RC2/CCP1 RD2/PSP2 20 RD1 18 RC2/CCP1 RD2/PSP2 20 RD1 23 RC3/SCK/SCL RD1/PSP1 19 RD0 READBUT WRITEBUT 23 RC3/SCK/SCL RD1/PSP1 19 RD0 24 RC4/SDI/SDA RD0/PSP0 24 RC4/SDI/SDA RD0/PSP0 25 RC5/SD0 25 RC5/SD0 26 RC6/TX/CK 11 SW3 SW4 26 RC6/TX/CK 11 RC7/RX/DT VDD 32 HI RC7/RX/DT VDD 32 HI 30 pF 14 VDD 30 pF 14 VDD OSC2/CLKO OSC2/CLKO 31 0 0 4 MHz 31 4 MHz VSS 12 VSS 12 30 pF 13 VSS 13 VSS OSC1/CLKI 30 pF OSC1/CLKI 0 0 0 0 PIC16F877A MASTER PIC16F877A PSP SLAVE   Hình 5 : Sơ đồ nguyên lí  ứng dụng tổnh hợp.    2.3.2 Viết chương trình cho ứng dụng  Chương trình cho ứng dụng này, về cơ bản, là dựa trên các chương trình trước, ta chit  thêm vào các thao tác tương ứng đối với các phím nhấn (chương trình của master) hoặc kết  hợp các bước thao tác đọc và ghi dữ liệu trong chương trình ngắt (đối với chương trình của  slave).  Giải thuật của các chương trình trong ứng dụng này sẽ được trình bày dưới các luu đồ  sau: 
  20. Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  20/29          START KHOI TAO READBUT N DUOC AN?? Y GOI CHUONG TRINH CON readPSP XUAT DU LIEU DOC DUOC RA PORT B WRITEBUT N DUOC AN?? Y TANG GIA TRI THANH GHI DATAOUT GOI CHUONG TRINH CON writePSP   Hình 6 : Lưu đồ giải thuật chương trình chính của master.   
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2