YOMEDIA
ADSENSE
tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG - vuson.tk
255
lượt xem 104
download
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...
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG - vuson.tk
- 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.
- 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
- 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:
- 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.
- 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.
- 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.
- 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
- 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
- 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 ;=========================================================================
- 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 ??
- 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
- 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
- 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ũ
- 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
- 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
- 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
- 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
- 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:
- 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:
- 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
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn