Bài giảng Vi xử lý

1. Trình bày cấu trúc sơ đồ khối vi mạch giao tiếp song song 8255. 2. Lập trình 8255 sao cho port A, port B, port C là xuất, mode 0. 3. So sánh giao tiếp ngoại vi song song và giao tiếp ngoại vi nối tiếp. 4. Truyền dữ liệu nối tiếp là gì? Đồng bộ và bất đồng bộ? Song công và đơn công? 5. Chuẩn RS232 là gì? 6. Kết nối giữa máy tính và modem. 7. Kết nối giữa PIC 16F877A và RS232 8. Vẽ mạch truyền dữ liệu giữa máy tínhvà vi điều khiển PIC 16F877A sử dụng MAX232/MAX233

pdf198 trang | Chia sẻ: phanlang | Lượt xem: 3657 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Bài giảng Vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
một phần. Mạch giải mã đầy đủ giải mã cho tất cả các đường địa chỉ, mỗi ô nhớ có duy nhất 1 địa chỉ. Cách giải mã này được dùng trong hệthống hoàn chỉnh. Ví dụ : máy tính có RAM 256KB nhưng được giải mã đầy đủ 1MB để khi cần có thể lắp thêmbộ nhớ vào. Mạch giải mã không đầy đủ là mạch giải mã bỏ qua một số đường địa chỉ cao, một ô nhớ có nhiều địa chỉ(về mặt logic), nhưng không thể có 1 địa chỉ chọn nhiều ô nhớ trong mạch giải mã. Mạch giải mã phải mang tính kinh tế và khả thi. 1.Giải mã địa chỉ bằng cổng logic : Ví dụ : Hãy giải mã địa chỉ sao cho eprom 2764 có địa chỉ là A000h-BFFFh A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 A000h . . . . . . . 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 BFFFh địa chỉ không thay đổi địa chỉ thay đổi theotừng IC nhớ đưa vào mạch giải mã đưa vào IC nhớ address bus của data bus của 16F877A 16F877A A13 A14 LS00 CS GND A15 Mạch giải mã đơn giản dùng cổng NAND, địa chỉ A000h-BFFFh Trong mạch giải mã đơn giản cho eprom này, xung chip select sẽ tác động khi ta đọc địa chỉ A000h -> BFFFh, 3 bit địa chỉ phần cao A13=0, A14=0 và A15 =1 được đưa vào cổng NAND để tạo xung chọn vùng nhớ 8KB, đặt tại địa chỉ cao trong không gian địa chỉ của PIC 16F877A. Mỗi ô nhớ cụ thể của vi mạch nhớ eprom 2764 sẽ do các bit thấp còn lạiA0-A12 chọn ra. A0-A12 EPROM 2764 CE OE 157 2. Giải mã địa chỉ bằng mạch giải mã (decoder) và các cổng logic: Vi mạch 74LS138 : giải mã 3Ỉ8 Chọn các đầu ra của mạch giải mã đầu vào các đầu vào cho phép 74LS139: 2 bộ giải mã 2Ỉ 4 Đối với hệ PIC 16F877A nếu ta muốn kết nối nhiều EPROM và/ hoặc nhiều RAM thì cấn phải có mạch giải mã địa chỉ. Thí dụ nếu ta sử dụng các EPROM 8KB và RAM 8KB thì bus địa chỉ phải được giải mã để chọn các IC nhớ theo các vùng 8K : 0000H-1FFFH, 2000H-3FFFH,vv.. Thường người ta dùng IC giải mã 74LS138 với các ngõ ra của nó nối với các ngõ vào chọn chip trên các IC nhớ. Hình 2. 13 minh họa hệ thống sử dụng các EPROM 8KB 2764 và các RAM 8KB 6264. Chú ý là do có các đường cho phép riêng ( /RD và /WR cho bộ nhớ dữ liệu) nên 16F877A có thể truy cập đến 64KB cho mỗi EPROM và RAM. Ví dụ : Giả thiết trong hệ PIC 16F877A ta cần ghi bộ nhớ 64 KB cho các vi mạch nhớ eprom 8KB(8xIC 2764). Hãy thiết kế mạch giải mã dùng IC 74LS138 để thực hiện. A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h . . . . . . . 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 2001h . . . . . . . 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh ………. ……… 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 E000h 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 E001h . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFh không đổi thay đổi theo từng IC nhớ eprom 2764 A0-A12 Sơ đồ mạch giải mã địa chỉ : A /Y0 B /Y1 C 74LS138 G2a G2b G1 /Y7 158 A0-A12 D0-D7 A13 CS 1 0v A14 CS ROM 2 A15 các chân chọn chip cho 7 IC eprom2764 +5V CS ROM 8 : FE000h-FFFFFh Hình 2.13a Ví dụ : Giả thiết trong hệ PIC 16F877A ta cần đọc ghi bộ nhớ 64 KB cho các vi mạch nhớ RAM 8KB(8xIC 6264). Hãy thiết kế mạch giải mã dùng IC 74LS138 để thực hiện. A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001h . . . . . . . 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 2001h . . . . . . . 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh ………. ……… 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 E000h 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 E001h . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFh không đổi thay đổi theo từng IC nhớ RAM 6264 A0-A12 Sơ đồ mạch giải mã địa chỉ : A Y0 B Y1 C 74LS138 G2a G2b G1 Y7 A0-A12 D0-D7 OE EPROM1 2764 8K 159 A0-A12 D0-D7 A13 CS 1 RD A14 CS 2 WR A15 các chân chọn chip cho 7 IC RAM 6264 +5V CS RAM 8 : FE000h-FFFFFh Hình 2.13b Ví dụ : Thiết kế mạch giải mã địa chỉ 12KB bộ nhớ , trong đó 1 ROM 2KB + 1 SRAM 4KB + 3 SRAM 2KB Bản đồ bộ nhớ : 0000h Ỉ2FFFh 0000h 07FFh A11 CSrom 0800h A12 CSram1 A13 CSram2 0FFFh A14 CSram 3 1000h A15 CSram4 17FFh +5V 1800h 1FFFh 2000h 2FFFh 9.2. Thiết kế kit vi xử lý 9.2.1.Thiết bị phát triển dùng vi xử lý: Ta trình bày vài phương pháp phát triển và hiệu chỉnh chương trình trước khi nạp nó vào PROM. Phân phối bộ nhớ điển hình của máy vi tính thông thường (hình 1) Phân phối bộ nhớ trong thiết bị phát triển dùng máy vi tính cho trên hình 2. A Y0 B Y1 C 74LS138 G2a G2b G1 Y7 A0-A12 D0-D7 OE WE RAM 1 6264 8K ROM 2K RAM 1, 2K RAM 2, 2K RAM 3, 2K RAM 4, 4K A /Y0 B /Y1 C /Y2 G2a /Y3 G2b /Y4 /Y5 G1 /Y6 /Y7 160 Địa chỉ Bộ nhớ FFFFH Khởi động lại Con trỏ ngăn xếp 0000H Hình 1 : Máy vi tính thông thường Hệ thống monitor bao gồm 1 vùng ROM để chứa chương trình service, một vùng RAM để chứa tạm thời thông tin và chương trình vào/ra. Thành phần quan trọng nhất của chương trình hướng dẫn là chương trình vào ra thông tin. + Chương trình vào. + Chương trình đọc. + Chỉ thị nội dung ô nhớ +Ghi số liệu vào ô nhớ. Phân phối bộ nhớ trong thiết bị phát triển dùng máy vi tính cho trên hình 2. Địa chỉ Bộ nhớ Địa chỉ khởi động lại Địa chỉ ngắt Chương trình của người sử dụng (PROM) . . . Thiết bị vào ra của người sử dụng Ngăn xếp của người sử dụng Số liệu của người sử dụng 161 FFFFH Khởi động lại Khởi động lại Monitor Con trỏ ngăn xếpcủa Monitor Con trỏ ngăn xếp 0000H Hình 2 : Thiết bị phát triển dùng máy vi tính Hình 3 :Chỉ thị sau khi gọi địa chỉ ô nhớ FC00H và đưa vào số 8E 9.1.2. Hệ thống phát triển vi xử lý: Hình 4: Cấu trúc của một hệ phát triển Ngôn ngữ Assembly và trình biên dịch Assembler: MPLAB, CCS C F C 0 0 8 E Bộ nhớ đĩa Thiết bị phát triển dùng máy vi tínhVào ra Máy lập trình để nạp chương trình vào rom Địa chỉ khởi động lại Chuyển mạch Địa chỉ ngắt ------------------------------------------------- Chương trình của người sử dụng (RAM) . . . Chương trình hướng dẫn (Monitor ROM) Ngăn xếp của monitor RAM của monitor Vào ra của monitor Thiết bị vào ra của người sử dụng Ngăn xếp của người sử dụng Số liệu của người sử dụng (RAM) 162 Kit vi xử lý đơn giản Mạch điện tối thiểu dùng với PIC 16F877A Hình 5: Hệ thống tối thiểu Kit vi xử lý mở rộng Một ví dụ thiết kế kit vi xử lý: gồm CPU 16F877A, EPROM 8KB, RAM 8KB có tầm địa chỉ , 8255 ROM : 0000H-1FFFH, RAM : 2000H-3FFFH 8255: 4000h-5FFFh (chỉ dung 4000h-4003h) Phương pháp thiết kế : 1/ Thiết kế mạch nguồn 2/Thiết kế clock 3/Mạch Reset 4/Thiết kế mạch giải mã 5/Sơ đồ kit vi xử lý 3.1.3.Sơ đồ Kit vi điều khiển: 163 Hình 6: Hệ phát triển vi điều khiển PIC 16F877A. (Tham khảo: Sạp N6 , chợ Điện tử Nhật Tảo, Nguyễn Kim, Quận 10, Tp. HCM). Kit ph át tri ển c ủa t ác gi ả D. W. Smith t ại website: 164 Hình 7 : Kit phát triển vi điều khiển PIC (Tham khảo trong sách [1]). 9.3. PPI 8255 8255 có 3 cổng song song A, B, C, mỗi cổng 8 bit, thường được chia ra : A : 8 bit , PA0-PA7 B : 8 bit , PB0-PB7 CL : 4 bit , PC0-PC3 CH : 4 bit, PC4-PC7 Có 3 mode (chế độ hoạt động ) -mode 0 : xuất nhập đơn giản dùng A,B,C -mode 1 : xuất nhập có điều kiện -mode 2: là bus 2 chiều (dùng A) 9.3.1.Tổng quát : Cấu trúc khối của 8255 a.Bộ đệm truyền dữ liệu : bộ đệm 8 bit, 2 chiều , 3 trạng thái dùng để giao tiếp 8255 với CPU. Dữ kiện được phát hay nhận bởi bộ đệm khi thực hiện lệnh IN, OUT bởi CPU. Các từ điều khiển cũng truyền qua dữ kiện b.Phần kiểm soát đọc/ghi : chức năng của khối này là kiểm soát tất cả các sự truyền đạt bên trong và ngoài của từ điều khiển và dữ kiện. Nó nhận ngõ vào từ tuyến địa chỉ và điều khiển của CPU, phát ra các lệnh cần thiết cho cả 2 nhóm điều khiển A và B. 165 /CS : ngõ vào =0 cho phép truyền tin giữa 8255 và CPU //RD: =0 cho phép 8255 gởi dữ kiện đến CPU trên tuyến dữ kiện chủ yếu là cho phép CPU đọc dữ kiện từ 8255 WR : =0 CPU xuất từ điều khiển hay dữ liệu ra 8255 A0 và A1 : để chọn cổng A,B,C A1 A0 chọn cửa 0 0 port a 0 1 port b 1 0 port c 1 1 từ điều khiển RESET : =1 xóa tất cả các thanh ghi bên trong gồm thanh ghi điều khiển và các cổng A,B,C ở mode nhận. c.Điều khiển nhóm A và B Cấu hình hoạt động của mỗi nhóm được lập trình bởi phần mềm, chủ yếu là, CPU xuất từ điều khiển đến 8255. Từ điều khiển gồm các thông tin như chế độ (mode), bit set, bit reset, vv… sẽ khởi động cấu hình hoạt động của 8255. Thanh ghi từ điều khiển chỉ có thể viết vào mà không thể đọc ra. d.Các cửa (port) A, B, C : 8255 gồm 3 cổng A, B, C. Mỗi cổng gồm 8 bit. Các cổng này có thể lập trình bởi phần mềm để có thể hoạt động ở chế độ thích hợp. Cổng A : gồm bộ đệm, cài ngõ ra 8 bit và cài ngõ vào 8 bit. Cổng B : gồm bộ đệm, cài ngõ ra 8 bit và cài ngõ vào 8 bit. Cổng C : đệm và cài ngõ ra 8 bit và đệm 8 bit ngõ vào (không cài). Cửa C có thể chia làm 2 phần, mỗi phần 4 bits cho điều khiển mode. Mỗi phần được dùng kết hợp với cửa A hay B để tạo nên các tín hiệu điều khiển. 166 PA0-PA7 PC4-PC7 D0-D7 PPC0-PC3 Giao RD Tiếp WR A1 A0 Reset PB0-PB7 CS Hình 8: Sơ đồ khối của 8255 Bảng làm việc của 8255 A1 A0 /RD /WR /CS Hoạt động Nhập 0 0 0 1 0 A data bus 0 1 0 1 0 B data bus 1 0 0 1 0 C data bus Xuất 0 0 1 0 0 data bus A 0 1 1 0 0 data bus B 1 0 1 0 0 data bus C 1 1 1 0 0 data bus từ điều khiển 1 1 0 1 0 tổng trở cao x x x x 1 của data bus 9.3.2.Mô tả chi tiết a.Lập trình xuất nhập để chọn chế độ (Mode) : Có ba chế độ hoạt động cơ bản thiết lập do phần mềm : Đệm dữ liệu Điều khiển đọc ghi Điều khiển nhóm 1 (group A) Điều khiển nhóm 2 (group B) Port A CH CL Port B 167 Mode 0 : vào ra cơ bản Mode 1 : vào ra bắt tay (chỉ cho phép 1 trong 2 chiều) Mode 2: truyền dữ liệu 2 chiều Khi reset, tất cả các cổng được thiết lập ở chế độ nhập (input), tức là cả 24 đường đều ở 3 trạng thái.Sau khi reset, 8255 có thể duy trì ở chế độ nhập mà không cần khởi động gì thêm. Trong khi thực hiện chương trình hệ thống, có thể chọn bất kì mode nào bằng cách xuất đến 8255 từ điều khiển. Điều này cho phép chỉ cần 1 8255 mà có thể phục vụ nhiều kiểu thiết bị ngoại vi. Các chế độ của cổng A và B có thể định nghĩa riêng biệt. Còn cổng C được chia làm 2 phần cho 2 nhóm tùy yêu cầu định nghĩa chế độ cổng A và B. Ta có từ điều khiển cho 8255 như sau : Control word : D7 D6 D5 D4 D3 D2 D1 D0 Nhóm B Mode set flag Port C 1 : in 1= (phần thấp) 0 : out active port B 1 : in 0 : out Chọn chế độ 0 : mode 0 1 : mode 1 Nhóm A Port C (phần cao) : 1 : in 0 : out port A : 1 : in 0 : out Chọn mode 00 : mode 0 01 : mode 1 1x : mode 2 Ví dụ : 8255 ở mode 0, port A là nhập, port B,C xuất. Từ điều khiển : 100100002= 90h Khi CS=0 8255 được chọn thì port A có địa chỉ 300h Port B có địa chỉ 301h Port C có địa chỉ 302h Từ điều khiển : 303h Lệnh xuất nhập : Out &h303, &h90 ; xuất 90h ra từ điều khiển Out &h301, &hFF ; xuất FFh ra cổng B Inp (&h300) ; nhập số liệu từ cổng A Mov dx, 301h Out dx, 0ffh Mov dx, 300h In ax, dx 168 b.Đặc tính xóa/thiết lập bit cho cửa C khi nó dùng làm tín hiệu trạng thái/điều khiển cho cửa A/B : Ta dùng lệnh OUT xuất ra từ điều khiển trong đó bit D7=0 Khi chọn mode 2 cho port A, các bit D3, D4, D5 không còn ý nghĩa nữa. Lúc đó port A là 2 chiều, còn phần cao của C sẽ làm tín hiệu điều khiển và trạng thái cho port A Ở mode 1 : CH điều khiển cổng A, còn CL điều khiển cổng B. Khi giao tiếp thiết bị ngoại vi, cổng C làm việc ở chế độ dạng bit. Bit set và reset flag, phần còn lại của từ điều khiển có ý nghĩa như sau : X x x Bit set/reset Bit set/reset flag 0 : reset 0=active 1 : reset Bit select 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 Mỗi lần xuất ra 1 từ điều khiển đến 8255 với D7=0, chỉ tác động đến chỉ 1 bit của port C( được chọn bởi bit select) c.Chức năng kiểm soát ngắt quãng Khi 8255 được lập trình ở mode 1 hay 2, các tín hiệu điều khiển được cung cấpcó thể được dùng để yêu cầu ngắt quảng CPU. Tín hiệu yêu cầu ngắt quảng phát ra từ port C có thể bị cấm hay cho phépbằng cách set hay reset flip-flop INTE tương ứng, dùng chức năng set/reset bit của port C. Chức năng này cho phép CPU cấm hay cho phép các thiết bị I/O đã xác định ngắt quảng CPU mà không làm ảnh hưởng các thiết bị khác trong cấu trúc ngắt quảng. 9.3.3.Các chế độ hoạt động a.Mode 0 : Vào/ra cơ bản , đơn giản Không có bắt tay, dữ liệu được ghi và đọc 1 cách đơn giản đến hay từ 1 cửa đã chỉ ra. Các đặc tính cơ bản ở mode 0 : .2 cổng 8 bit và 2 cổng 4 bit .Bất kì cổng nào cũng có thể là ra hay vào .Ngõ ra được cài .Cho phép 16 dạng vào/ra ở mode Ví dụ : từ điều khiển 83h xác định port A ra, B vào Phần cao của C : ra, phần thấp của C : vào b.Mode 1 : Vào/ra có bắt tay, dùng cho port A, port B D7 D6 D5 D4 D3 D2 D1 D0 169 Ở mode 1, cổng A và B dùng những đường ở cửa C để phát hay nhận các tín hiệu bắt tay. A và B xuất nhập có điều kiện. *Ở chế độ nhập : -STB (strobe input) ngõ vào, =0 :cài dữ liệu vào 8255 -IBF (input buffer full) ngõ ra, =1 :đã có dữ liệu, thông báo cho biết vùng đệm đã đầy. Nói cách khác, mức thấp của STB sẽ thiết lập IBF=1, và IBF bị xóa bởi cạnh lên của RD. -INTR (interrupt request) :ngõ ra = 1 để yêu cầu ngắt quảng CPU.INTR được set bởi STb=1 và IBF=1, INTE=1 -INTR bị reset bởi cạnh xuống của RD -INTE A kiểm soát bởi bit set/reset PC4 -INTE B kiểm soát bởi bit set/reset PC2 *Cổng B : STBB=PC2 (input) IBF = PC1 INTR = PC0 INTEB = PC2 (output) Cổng A PA0-PA7 STBa IBF INTR a về CPU RD I/O INTE a=PC4 (xoá/lập bit) *Ở chế độ xuất : -OBF (output buffer full) :ngõ ra, =0 đã có dữ liệu(được set bởi cạnh lên của xung WR từ CPU) báo là CPU vừa xuất 1 byte ra cổng đó, và bị reset bởi ACK=0 do ngoại vi (tức là ở mức không tích cực) -ACK (Acknowledge input) :=0 đã lấy dữ liệu, thông báo cho 8255 biết thông tin từ A hay B đã nhận bởi ngoại vi. -INTR (interrupt request) : mức 1 ở ngõ ra dùng để yêu cầu ngắt quảng CPU khi ngoại vi đã nhận dữ liệu phát bởi CPU. INTR được set bởi ACK=1 và OBF=1, INTE=1 -INTR bị xóa bởi cạnh xuống của xung WR -INTE A kiểm soát bởi bit set/reset PC6 -INTE B kiểm soát bởi bit set/reset PC2 *Cổng B : OBFB=PC1 INTEA PC4 PC5 PC3 PC6,7 170 ACK = PC2 INTR = PC0 INTEB = PC2 Cổng A PA0-PA7 OBFa ACKa INTR a WR I/O INTE a =PC6 (xoá / lập bit) c.Mode 2 : Xuất nhập tuyến 2 chiều, bắt tay Các đặc tính cơ bản của mode 2: . Chỉ dùng cho nhóm A . 1 cửa 2 chiều 8 bit (A) và 1 cổng điều khiển 5 bit (C) cho cổng A . Cả ra/vào đều có cài Cổng A PA0-PA7 INTRa OBFa ACKa WR STBa RD IBFa Từ điều khiển : PC2-0 0 :in 1 : out Port B 0: in 1 : out Group B Mode 0 : mode 0 1 : mode 1 Định nghĩa các tín hiệu điều khiển xuất nhập 2 chiều : *INTR (interrupt request) Mức 1 ở ngõ ra này báo cho CPU biết yêu cầu ngắt quảng cho phép nhập hay xuất (chung) PA0-PA7 PC7 INTEa PC6 PC3 PC4 5 PA0-PA7 PC3 PC7 INTE1PC6 PC4 INTE2 PC5 1 1 x x x 1/0 1/0 1/0 171 *Phép xuất : -OBF (output buffer ful) output OBF xuống 0 để báo cho ngoại vi biết CPU đã ghi dữ liệu ra cửa A -ACK (acknowledge) input Mức 0 từ ngoại vi cho phép bộ đệm ra 3 trạng thái của cửa A mở để phát dữ liệu, ngược lại, bộ đệm ra ở 3 trạng thái -INTE 1 (INTE F-F liên quan với OBF) Kiểm soát bởi bit set/reset PC6 *Phép nhập : -STB : mức thấp ở ngõ vào này cài data vào mạch cài ngõ nhập -IBF (input buffer full) output Mức 1 thông báo cho CPU biết dữ liệu đã nạp vào mạch cài nhập -INTE 2 (liên quan với IBF) Kiểm soát bởi bit set/reset PC4 Kết hợp mode 2 và các mode khác : Mode 2 và mode 0 (in) : từ điều khiển : 1 1 x x x 0 1 1/0 Mode 2 và mode 0 (out) : từ điều khiển : 1 1 x x x 0 0 1/0 Mode 2 và mode 1 (in) : từ điều khiển : 1 1 x x x 1 1 x Mode 2 và mode 1 (out) : từ điều khiển : 1 1 x x x 1 0 x Sự kết hợp các mode đặc biệt : Có 1 số tổ hợp các mode mà không phải tất cả cửa C đều dùng làm điều khiển hay trạng thái. Các bit còn lại được dùng như sau : Nếu lập trình là ngõ vào : Tất cả các ngõ vào được truy xuất qua phép đọc cửa C bình thường Nếu lập trình là ngõ ra : Các bit ở phần cao cửa C (C4-C7) phải được truy xuất riêng rẽ dùng chức năng bit set/reset Các bit ở phần thấp cửa C(C0-C3) có thể truy xuất dùng chức năng bit set/reset như nhóm 3 bằng cách ghi ra cửa C Đọc trạng thái port C : Ở mode 0, port C truyền dữ liệu đến hay từ ngoại vi khi 8255 được lập trình ở mode 1 hay mode 2, cửa C trở nên các tín hiệu điều khiển bắt tay cho port A hay B Đọc nội dung cửa C cho phép người lập trình kiểm tra trạng thái của mỗi thiết bị ngoại vi và thay đổi chiều chương trình tương ứng Không có lệnh đặc biệt để đọc thông tin trạng thái từ C. Phép đọc bình thường port C dùng để thực hiện chức năng này Ta có dạng từ trạng thái mode 1 : D7 D6 D5 D4 D3 D2 D1 D0 Nhóm A Nhóm B Mode 1 (input) I/O I/O IBFa INTEa INTRa INTEb IBFb INTRb 172 Nhóm A Nhóm B Mode 1 (output) Nhóm A Nhóm B Mode 2 Định nghĩa bởi chọn mode 0 hay 1 9.3.4. Ứng dụng của 8255 Ứng dụng của 8255 gồm có : 1. Ghép nối với bàn phím .Ví dụ : điều khiển bàn phím (mode 0) 2. Mode 0 : điều khiển đèn bảy đoạn 3. Ghép nối 8255 với ADC, DAC 4. Điều khiển motor bước , motor DC 5. Truyền số liệu : -truyền nối tiếp bất đồng bộ : (RS232) . Ví dụ : cổng COM1 , COM 2 -truyền song song đồng bộ : cổng ghép nối với máy in (LPT1, LPT2) -xuất nhập song song dùng IC 74LS373/374, 74LS245/244 -giao tiếp máy tính. Sơ đồ chân 8255 OBFa INTEa 1/0 1/0 INTRa INTEb OBFb INTRb OBFa INTE1 IBFa INTE2 INTRa X X X 173 U4 8255 34 33 32 31 30 29 28 27 5 36 9 8 35 6 4 3 2 1 40 39 38 37 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 D0 D1 D2 D3 D4 D5 D6 D7 RD WR A0 A1 RESET CS PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 Hình 9. 9.4. GIAO TIẾP NGOẠI VI NỐI TIẾP: 9.4.1.Gới thiệu về truyền dữ liệu nối tiếp : So sánh giữa truyền dữ liệu song song và truyền dữ liệu nối tiếp : - Truyền dữ liệu song song ( ví dụ với máy in) . Nhanh , nhưng khoảng cách không lớn. . Đắt tiền. . Truyền từ 2 bit trở lên. - Truyền dữ liệu nối tiếp ( ví dụ qua đường dây điện thoại) .Khỏang cách truyền xa .Rẻ tiền hơn . Truyền từng bit một 174 (a) one bit/data line (b) Hình (a) Truyền dữ liệu song song và (b) truyền dữ liệu nối tiếp Bất đồng bộ và đồng bộ Có hai phương pháp truyền dữ liệu nối tiếp Đồng bộ (synchronous) : mỗi lần truyền một khối dữ liệu (các ký tự) với tốc độ không đổi. -Bất đồng bộ (asynchronous): mỗi lần truyền 1 byte. 8051 có sẵn một UART ở bên trong Duplex (song công và) simplex ( Đơn công) Tx and Rx Only Tx (a) (b) Hình : Duplex (a) và Simplex (b) -Duplex là truyền dữ liệu mà hai bên đều có thể phát/thu. -Simplex là truyền dữ liệu mà chỉ có một bên phát và bên kia thu. Trong duplex lại được chia thành hai loại : -Full duplex (song công): dữ liệu được truyền đồng thời theo hai chiều. -Half duplex (bán song công) : dữ liệu được truyền mỗi lần theo một chiều. Truyền dữ liệu nối tiếp: -Trong giao tiếp nối tiếp, dữ liệu song song được đổi ra thành chuỗi bit liên tiếp và tạo thành 1 dãy xung không nhất định. -Cách đổi dữ liệu song song ra nối tiếp mà người ta thường dùng là nhờ một thanh ghi dịch tác động theo cạnh của 1 xung đồng bộ (gọi là xung truyền hay xung nhận) -Như vậy vấn đề quan trọng nhất trong truyền nối tiếp là thời điểm bắt đầu dữ liệu và độ rộng cùa mỗi bit -Độ rộng bit cũng thể hiện tốc độ truyền dữ liệu. Chẳng hạn, dữ liệu truyền đi có độ rộng bit được tính là 20ms thì trong 1 giây (sec) truyền được 1/(20.10-3)=50 bit. Lúc Sender Receiver Sender City A Receiver City B PC PC PC Printer 175 đó người ta nói tốc độ truyền là 50 bit/s hay là 50 bauds (đơn vị đo tốc độ truyền trong giao tiếp nối tiếp) -Theo hình vẽ sau, nếu xung truyền tác động theo cạnh xuống thì ta thấy ngay độ rộng bit chính bằng chu kì xung truyền. Suy ra tốc độ truyền bằng tần số xung truyền. -Chỉ cần xác định sai 1 trong 2 yếu tố trên là không thể nhận đúng dữ liệu được CLK Data 1 1 0 1 0 0 1 0 Độ rộng bit Dạng truyền dữ liệu nối tiếp -Tùy theo cách xác định thời điểm bắt đầu có dữ liệu mà người ta chia giao tiếp nối tiếp ra thành phương pháp truyền nối tiếp đồng bộ hay bất đồng bộ a. Truyền đồng bộ : Trong cách truyền đồng bộ, dữ liệu được truyềnliên tục thành khối và có kiểm tra theo tổng kiểm tra (checksum) Nếu kèm theo dữ liệu, người ta truyền cả xung clock thì gọi là đồng bộ cứng. Lúc đó nơi nhận sẽ dùng xung clock để lấy mẫu dữ liệu. Như vậy, ứng với mỗi bit dữ liệu, người ta gửi kèm theo 1 xung clock ở đầu bit. -Người ta có thể dùng cách đồng bộ khác mà không phải gửi xung clock theo, chỉ gởi dữ liệu thôi. Cách này gọi là đồng bộ mềm. Lúc đó việc đồng bộ đượ thực hiện bằng các kí tự đặc biệt gọi là kí tự đồng bộ( SYN) -Dữ liệu truyền đi theo từng khối và có kí tự Syn ở đầu khối -Ký tự SYN được chọn sao cho không trùng với kí tự nào trong dữ liệu -Nếu không thể chọn được ký tự SYN thì có thể dùng 2 ký tự SYN1 và SYN2 với điều kiện tổ hợp SYN1 và SYN2 đi liền nhau không có trong dữ liệu. Khối dữ liệu nối tiếp đồng bộ mềm -Nơi nhận phải tiến hành dò tìmkí tự SYN(1 hoặc 2 kí tự). Sau khoảng thời gian bằng độ rộng bit, dữ liệu nối tiếp được dịch vào và đổi ra song song. Dữ liệu song song này được so sánh với kí tự SYN và quá trình này được lập lại cho đến khi phát hiện ra kí tự SYN là coi như đã đồng bộ và sẽ bắt đầu lấy dữ liệu ngay sau kí tự SYN b. Truyền bất đồng bộ : -Dữ liệu được đặt vào một khung truyền nhận gồm có thêm bit bắt đầu (start bit), bit kiểm tra chẵn lẻ(parity bit) và các bit kết thúc (stop bit) SYN SYN Khối dữ liệu Tổng kiểm tra 176 -Theo chuẩn RS232C, giao tiếp giữa các đường liên lạc nối tiếp của 2 máy tính , khung dữ liệu gồm có 1 bit bắt đầu, không có hoặc có 1 bit kiểm tra (mà có thể chọn chẵn hoặc lẻ), dữ liệu dài từ 5 đến 8 bit và số bit kết thúc có thể lá 1, 1 1/2, hoặc 2 bit như hình vẽ sau : Start bit Data bit Parity bit Stop bit Khung dữ liệu nối tiếp bất đồng bộ Start bit Data bit(5-8) Parity bit Stop bit 1 LSB … MSB 0-1 1, 1+1/2, 2 Chiều dài 1 ký tự Dạng xung của khung dữ liệu nối tiếp bất đồng bộ 9.4.2. Chuẩn giao tiếp nối tiếp RS-232 Chuẩn giao tiếp nối tiếp RS232 được qui định bởi EIA (electronics industries association= Hiệp hội công nghiệp điện tử ) vào năm 1960 và các chuẩn nối tiếp RS232 có sửa đổi là RS232A (năm 1963), RS232B (năm 1965) và RS232C (năm 1969). Hai chữ đầu ES có nghĩa là recommended standard. RS 232 được qui định trước khi xuất hiện họ logic TTL, do đó các mức điện áp của nó không tương thích với TTL (họ TTL ra đời vào năm 1968). a. Giao tiếp nối tiếp bất đồng bộ Giao tiếp nối tiếp bất đồng bộ là giao tiếp mà các bit lần lượt được gửi ra đường truyền và xung đồng bộ nơi phát không nhất thiết phải đồng bộ với xung đồng hồ nơi thu Ngoài các bit dữ liệu muốn phát thì trên đường truyền còn có thêm các bit để bắt tay và để kiểm tra người ta gọi là thông tin khung 1-2 bit dừng Bit khởi động bit kiểm tra chẵn lẻ Trong thực tế bit khởi động ngược với trạng thái đường truyền, bit dừng cùng với trạng thái đường truyền Số bit dừng : 1; 1,5; 2 bit Độ dài ký tự : 5, 6, 7, 8 bit 1 5 – 8 1 1, 1+1/2, 2 177 Các IC chuyên dụng để thu phát bất đồng bộ : 6402, 6850, 8251, 8250 b. Giao diện RS-232 Khi muốn truyền thông tin đi khoảng cách xa, chúng ta không thể truyền trực tiếp mức TTL (0v-5v) vì : -Do suy giảm ở nơi thu , khó phân biệt được mức tín hiệu 0 và 1 -Do lẫn nhiễu nơi thu Vì vậy người ta phải : -Điều chế tín hiệu phát khởi bằng một sóng mang ít bị suy giảm trên đường dây -Tăng mức điện áp TTL -Sử dụng đường dây điện thoại Đối với mạch trao đổi thông tin khoảng cách xa vì mức điện áp TTL của các thiết bị số khác với mức đường dây điện thoại, do đó cần phải có các khối ghép nối chuẩn. Tùy tốc độ trao đổi tin, khoảng cách và các loại modem cũng như đường dây truyền mà ta có các phối hgép chuẩn khác nhau : RS232C, RS 449, RS423A +Thông số kỹ thuật của chuẩn RS-232C Chuẩn RS232C áp dụng cho tốc độ truyền số liệu tối đa là 20kbps và khoảng cách cực đại là 15 m Đó là khối ghép nối chuyển mức TTL (0-5v) lên mức điện thế của điện thoại (+/-15v) Trong đó các đường truyền số liệu dùng mức logic âm : -tín hiệu logic 1 ở giữa –5v - -15v -tín hiệu logic 0 ở giữa +5v - +15v Tuy nhiên tín hiệu điều khiển dùng tín hiệu logic dương +Sơ đồ chân của RS232C : Chốt ra ổ 9 chân Chốt ra ổ 25 chân Chức năng 1 8 DCD :data carrier detect 2 3 RXD :receive data Vi xử lý 1 Khối ghép nối song á Khối ghép nối nối tiếp - Vi xử lý 2 Vi xử lý Khối ghép nối song song- nối tiếp RS2 32C Modem Mo dem RS2 32C Khối ghép nối nối tiếp- song song Vi xử lý 178 3 2 TxD :transmit data 4 20 DTR : data terminal ready 5 7 GND : mass 6 6 DSR :data set ready 7 4 RTS :request to send 8 5 CTS :clear to send 9 22 RI :ring indicator -Các đường dữ liệu TxD: dữ liệu được truyền từ modem trên đường truyền RxD : dữ liệu được thu bởi modem trên đường truyền -các đường báo hiệu thiết bị sẵn sàng DSR:báo modem đã sẵn sàng DTR:báo rằng thiết bị đầu cuối đã sẵn sàng -Các đường bắt tay bán song song RTS:tín hiệu báo thiết bị đầu cuối yêu cầuphát dữ liệu CTS :modem đáp ứng nhu cầu gửi dữ liệu của thiết bị đầu cuối -Các đường trạng thái song song và tín hiệu điện thoại CD:modem báo cho thiết bị đầu cuối biết rằng đã nhận được một sóng mang hợp lệ từ đường truyền RI: modem tự động trả lời (báo rằng đã phát tín hiệu chung từ đường truyền) 9.4.3. MAX232 Mạch lái đường dây : các IC thông dụng là MAX232, MC 1488 và MC 1489, DS275 Trong các hệ phát triển sẽ được trình bày, việc ghép nối với máy tính được thực hiện qua cổng nối tiếp. Thông thường, có 2 cách ghép nối bộ vi xử lý với cổng nối tiếp. 1/ Cách đơn giản là dùng transistor làm bộ đệm. 2/ Ghép nối các đường truyền và nhận (TxD và RxD, chân 10 và 11) của bộ vi xử lý với bộ đệm /nhận dùng vi mạch, chẳng hạn loại MAX232 của hãng MAXIM. Vi mạch MAX232 chuyển đổi mức TTL ở lối vào thành mức +10V hoặc – 10V ở phía truyền và các mức +3V…+15V hoặc –3V…-15V thành mức TTL ở phía nhận.Hình sau mô tả cách sắp xếp chân và sơ đồ cấu trúc vi mạch MAX232. 179 U2 MAX232 13 8 11 10 1 3 4 5 2 6 12 9 14 7 R1IN R2IN T1IN T2IN C+ C1- C2+ C2- V+ V- R1OUT R2OUT T1OUT T2OUT (a) 5V + DTR RTS Lối vào Lối ra TTL/CMOS RS232 Lối ra Lối vào (b) Hình :Sắp xếp chân (a ) và sơ đồ cấu trúc (b) của vi mạch MAX232 Đường dẫn TxD dẫn trực tiếp đến chân 11 của vi mạch MAX232, còn bộ đệm lối ra ở chân 14 được nối trực tiếp với chân 2 của cổng nối tiếp. Việc sắp xếp chân ở cổng nối tiếp được lựa chọn sao cho có thể dùng 1 cáp nối trực tiếp của hệ phát triển với cổng nối tiếp của máy tính , thường dùng COM2. Với đường dẫn RxD, mọi việc cũng diễn ra tương tự, chân 13 của vi mạch được nối với chân 3 của cổng nối tiếp. Vi mạch MAX232 có 2 bộ đệm và 2 bộ nhận. Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch MAX232. Còn chân RTS ( chân 10 của MAX) nối với đường dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối với cổng +5V Ỉ +10V -------------------- -+10V Ỉ -10V 180 nối tiếp qua những cầu nối, để khi không dùng đến có thể để hở mạch các cầu này. Cách truyền dữ liệu đơn giản nhất đến máy tính PC là chỉ dùng 3 đường dẫn : TxD, RxD và GND ( hoặc mass). +12V TTl level RS-232 output -12 V TTL level RS-232 input Hình : Ví dụ mạch lái đường dây dùng MC 1488 và MC1489 Ví dụ kết nối giữa các thiết bị Ví dụ : Máy tính và modem Computer (DTE) Modem (DCE) TxD 2 TxD 2 RxD 3 RxD 3 RTS 4 RTS 4 CTS 5 CTS 5 DSR 6 DSR 6 GND 7 GND 7 DCD 8 DCD 8 DTR 20 DTR 20 RNG 22 RNG 22 Hình : Giao tiếp giữa máy tính và modem Chuỗi sự kiện truyền thông: 1- Xác nhận DTr- Tôi đang “ON”. Bạn cũng đang “ON” phải không? 2- Đợi DSR – Vâng, tôi đang “ON” 3- Xác nhận RTS- Tôi có thể gửi dữ liệu được không ? 4- Đợi CTS- Vâng , bạn có thể. 5- Truyền (phát)- Bắt đầu truyền dữ liệu /TxD UART /RxD 1488 1489 181 Kết nối PIC 16F877A với RS232 MAX232 DB-9 (RS232 con) 25(RC6) 11 14 2 RxD 26 (RC7) 12 13 3 TxD GND 9.5.Ứng dụng: 9.5.1. Điều khiển led đơn Thí dụ 1: Điều khiển led sử dụng port A và port E: xem chương thí dụ chương 4. Thí dụ 2: chương trình điều khiển 8 led chạy đuổi d ùng PORTB. PIC 16F877A cĩ Fosc là 4 Mhz. Logic 0: led sang. Logic 1: led tắt. PORTA EQU 5;nghĩa là portA là ơ nhớ 5. PORTB EQU 6;nghĩa là portB là ơ nhớ 6. PORTC EQU 7 PORTD EQU 8 PORTE EQU 9 TRISA EQU 85H; TRISA (chọn I/O portA) là ơ nhớ 85H TRISB EQU 86H; TRISB (chọn I/O portB) là ơ nhớ 86H TRISC EQU 87H TRISD EQU 88H TRISE EQU 89H COUNT EQU 20; COUNT là ơ nhớ 20H, thanh ghi để đếm sự kiện. ;*************************************** LIST P=16F87A ; chúng ta đang dùng 16F877A ORG 0 ; địa chỉ bắt đầu là 0 GOTO START; nhảy đến START ;*************************************** ;Bit cấu hình __CONFIG H’3FF2’ ; chọn dao động HS, WDT off, PUT on, bảo vệ mã bị cấm. ;Phần chương trình con ;trì hỗn 500 microgiây delay500us movlw .166 movwf count again decfsz count PIC 16F877A TX RX T1 in T1 out R1 out R1 in 182 goto again return ; trì hỗn 10 miligiây delay movlw .20 movwf count again1 call delay500us decfsz count goto again1 return ;Phần cấu hình. START BSF STATUS,5; trở lại bank 1 MOVLW B’11111111’; 6 bit của port A là I/P (ngõ vào) MOVWF TRISA MOVLW B’00000000’ MOVWF TRISB ; PortB là output (ngõ ra) MOVLW B’11111111’ MOVWF TRISC; portC l à ngõ vào MOVLW B’00000000’ MOVWF TRISD; PortD là output (ngõ ra) MOVLW B’11111111’; 3 bit của port E là I/P (ngõ vào) MOVWF TRISE BCF STATUS,5 ;trở lại bank 0 BCF STATUS,6 CLRF PORTA ; xĩa PORTA CLRF PORTB ;xĩa PORTB CLRF PORTC ;xĩa PORTC CLRF PORTD ;xĩa PORTD CLRF PORTE ;xĩa PORTE ;chương trình chính bắt đầu loop movLw 0FEh movwf portb call delay movLw 0FDh movwf portb call delay movLw 0FBh movwf portb call delay movLw 0F7h movwf portb call delay movLw 0EFh movwf portb call delay movLw 0DFh movwf portb call delay 183 movLw 0BFh movwf portb call delay movLw 7Fh movwf portb call delay goto loop END Chú ý: ch ư ơng tr ình con delay500us t ạo tr ễ 500μs, c ịn delay t ạo tr ễ 10 ms. 9.5.2. Điều khiển LCD: S ơ đ ồ m ạch k ết n ối LCD t ới 16F84 đ ư ợc minh h ọa ở h ình. C ấu h ình n ày l à cho b ộ đi ều khi ển LCD HD44780 v à c ĩ th ể đ ư ợc d ùng v ới b ất k ì hi ển th ị s ử d ụng chip n ày. PIC 16F84 đi ều khi ển hi ển th ị LCD. Cấu tạo, hoạt động của LCD GND +5V -5V D0 D1 D2 D3 D4 D5 D6 D7 RS R/W EN 1 2 3 7 8 9 10 11 12 13 14 4 5 6 184 Bít RS R/W D7 D6 D5 D4 D3 D2 D2 D0 Chức năng 0 0 0 0 0 0 0 0 0 0 Xoá LCD và bộnhớ, con trỏ hiện tại. 0 0 0 0 0 0 0 0 1 0 Chỉ xóa và con trỏ hiện tại. 0 0 0 0 0 0 0 1 I/O S Tác động màn hình như hiển thị ký tự được viết. I/O=1/0: con trỏ R/L, màn hình L/R. S=1/0: dịch màn hình/con trỏ. 0 0 0 0 0 0 1 D C B D=1/0: màn hình on/off. C=1/0: con trỏ on/off. B=1/0: con trỏ nhấp nháy/không nhấp nháy. 0 0 0 0 0 1 S/C R/L 0 0 S/C=1/0: màn hình/con trỏ R/L: dịch một khoảng trống R/L. 0 0 0 0 1 DL N F 0 0 DL=1/0: 8/4 bit trên kí tự. N=1/0:2/1 dòng kí tự. F=1/0: 5x10/5x7 chấm(dot)/ký tự. 0 0 0 1 Địa chỉ kí tự Ghi tới địa chỉa Ram kí tự sau điều này. 0 0 1 Hiển thị địa chỉ dữ liệu Ghi tới địa chỉa Ram hiển thị ï sau này. 0 1 Loại ký tự Ghi byte với RAM cuối được chọn. 1 1 Loại ký tự Đọc byte với RAM cuối được chọn. Mạch kết nối: RB1 nối với RS. RB2 nối với R/W. RB3 nối với EN. RB4—RB7 nối với D4—D7. 185 Hình : Kết nối LCD với vi điều khiển: Vi ết ch ư ơng tr ình hi ển th ị ch ữ HANOI tr ên LCD d ùng PIC 16F84. Vi ết ch ư ơng tr ình hi ển th ị ch ữ HANOI tr ên LCD d ùng PIC 16F877A. 9.5.3. Điều khiển led 7 đoạn: *Trường hợp led 7 đoạn loại catốt chung: Thiết kế một mạch mà đếm và hiển thị trên led 7 đoạn (loại catốt chung), số lần một nút nhấn được ấn tới 10. Mã nhị phân để lái led 7 đoạn như sau: Số PORTB B7 B6 B5 B4 B3 B2 B1 B0 0 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0 0 1 2 0 0 1 1 1 0 1 1 3 0 1 1 0 1 0 1 1 4 0 1 0 0 1 1 0 1 5 0 1 1 0 1 1 1 0 6 0 1 1 1 1 1 0 0 7 0 1 0 0 0 0 1 1 8 0 1 1 1 1 1 1 1 9 0 1 0 0 1 1 1 1 Xét mạch điện như sau: Hình: Sơ đồ mạch của điều khiển led 7 đoạn. Dp g f e d c b a B7 B3 B2 B4 B5 B6 B0 B1 0 0 1 1 1 1 1 1 số 0 ( mã 77h) Mở rộng chương trình cho PIC 16F877A. Xét mạch sau: 186 Hình: Kết nối vi điều khiển với led 7 đoạn trong chế độ multiplex. Viết chương trình hiển thị số 30 trên hai led. Mở rộng cho PIC 16F877A. *Tr ư ờng h ợp led 7 đo ạn lo ại anod chung: D ùng port B k ết n ối 7 thanh, c ịn port A đi ều khi ển ch ọn led (c ấp đi ện). N ếu RA0=0 th ì transistor d ẫn l àm Vc=VE=+5V v à anod c ủa led 0 đ ư ợc c ấp đi ện, portB n ối v ới c ác thanh a,b,..,g,dp. RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 1 1 1 1 1 1 1 0 FEh (ch ọn led 0) RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Dp g f e d c b a 1 1 0 0 0 0 0 0 C0H (s ố 0) +5V RA0 Led 0 b0 B1 B7 187 Vi ết ch ư ơng tr ình hi ển th ị s ố 0 tr ên led 0. Vi ết ch ư ơng tr ình hi ển th ị ch ữ HUI tr ên 3 led ( led 0, led 1, led 2). 9.5.4. Điều khiển led ma trận: Sơ đồ nguyên lí: Phân tích sơ đồ điều khiển ma trận led. Hình : Sơ đồ nguyên lý led ma trận. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM). Ma trận gồm 8 hàng và 8 cột(red-col. và green col.). Dùng port C –hàng, port B/Port D-column red (cột đỏ). -Nguyên lý một led sáng :PortB quét coat, PortC quét hàng; thí dụ led(1,1) sáng thì Va>Vk , nghĩa là PortC,0=’0’ và PortB,0=’0’. Khi đó Vk=0,8v; TST PNP Q1 dẫn làm Va≈VE=5V. Nếu muốn PortC,0=’0’ và PortB,0=’1’ (cột tích cực mức logic ‘1’) led sáng thì ta dùng bộ đệm đảo ở cột , còn hàng không đệm đảo. -Nguyên lý 1 dãy led sáng : Thí dụ chữ L Phương pháp quét cột (không có đệm đảo) (ACT=’0’) và hiển thị hàng (ACT=’0’): tuần tự cho cột tích cực mức 0 và xuất dữ liệu hàng . Thí dụ: chữ T, PortB quét cột, PortC quét hàng. Quét cột 0: PortB,0=’0’ ;PortC,0ỈPortC,7=’0’ : mã hàng, cột là (00h, Feh). Quét cột 1: PortB,1=’0’ ;PortC,0ỈPortC,7=’0’ : mã hàng, cột là (00h, FDh). Quét cột 2: PortB,2=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, FBh). Quét cột 3: PortB,3=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là ( E7h, F7h). Quét cột 4: PortB,4=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, EFh). Quét cột 5: PortB,5=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, DFh). Quét cột 6: PortB,6=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, BFh). Quét cột 7: PortB,7=’0’ ;PortC,3=’0’ và PortC,4=’0’ : mã hàng, cột là (E7h, 7Fh). Phương pháp quét cột (có đệm đảo) (ACT=’1’) và hiển thị hàng (ACT=’0’): tuần tự cho cột tích cực mức 1 và xuất dữ liệu hàng . THí dụ : Hiện chữ T, dùng PortB quét cột, portC quét hàng 188 Chương trình led matrix: dùng để tạo chữ, số và các ký hiệu. 9.5.5. Điều khiển nút nhấn, b àn ph ím: Điều khiển nút nhấn: Sơ đồ mạch của nút nhấn vi điều khiển. Viết chương trình điều khiển nút nhấn (dùng PIC 16F84). -Đợi cho nút nhấn SW1 đĩng. -Bật led 1. -Đợi cho SW1 nhả. -Tắt led 1. -Lặp lại. Bài tập: làm lại thí dụ trên sử dụng vi điều khiển PIC 16F877A. -Qu ét b àn ph ím: 189 K ết n ối b àn ph ím v ới vi đi ều khi ển. Port B: RB0, RB1, RB2 n ối v ới c ột C1,C2,C3 v à RB3, RB4, Rb5, RB6 n ối v ới h àng R1,R2,R3,R4. B àn ph ím g ồm 4 h àng v à 3 c ột. C ột 1, C1 C ột 2, C2 C ột 3, C3 H àng 1, R1 1 2 3 H àng 2, R2 4 5 6 H àng 3, R3 7 8 9 H àng 4, R4 * 0 # Vi ết ch ư ơng tr ình (d ùng PIC 16F84) hi ển th ị ph ím nh ấn: khi ph ím 1 đ ư ợc nh ấn hi ển th ị s ố nh ị ph ân 1 tr ên port A., khi ph ím 2 đ ư ợc nh ấn hi ển th ị s ố nh ị ph ân 2 tr ên port A. B ài t ập: l àm l ại th í d ụ tr ên d ùng PIC 16F877A. Khối bàn phím, nut nhấn và công tắc: Phân tích sơ đồ điều khiển : -Nút nhấn: 190 Hình : Sơ đồ nguyên lý nut nhấn. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM). Gi ả s ử portB đi ều khi ển 8 n út nh ấn SW0-SW7. Khi nh ấn n út SW0, bit nh ận đ ư ợc l à logic 0 : RB0=’0’ . Khi nh ả nh út nh ấn SW0, bit nh ận đ ư ợc l à logic 1, RB0=’1’. -Công tắc: Hình : Sơ đồ nguyên lý công tắc. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM). -Bàn phím: 191 Hình : Sơ đồ nguyên lý bàn phím. (Hình vẽ được trích dẫn từ sách “Thí nghiệm vi xử lí” của tác giả Phạm Quang Trí, ĐHCN Tp. HCM). Bài tập : Chương trình điều khiển bàn phím và hiển thị mã của phím nhấn trên 8 led đơn dưới dạng số nhị phân. dùng port B (RB0Ỉ RB3 : hàng, RB4Ỉ RB7: cột) xuất tuần tự cho từng cột bằng 0. Sau đó kiểm tra mức logic của 4 ngõ nhập để xem có phím nhấn: khi có phím nhấn thì hàng cột chập nhau, ngõ nhập ở mức logic 0, từ đó ta tính ra mã quét của phím đó. Giải thuật điều khiển bàn phím: Quét phím Đ Có phím nhấn? S I=4 S Đ Thoát i=0 Cột i=’0’ I=i+1 Cờ C=’0’ Mã phím 192 Mã phím Hàng 0 Đ S Hàng 1 Đ S Hàng 2 Đ S Hàng 3 Đ S End Chương trình: Dự án Dự án 1: điều khiển tốc độ motor DC loại nhỏ Viết chương trình điều khiển motor DC loại nhỏ: Sơ đồ khối cho điều khiển tốc độ của động cơ một chiều loại nhỏ sử dụng vi điều khiển PIC 16F877A: (hình 1) Yêu cầu là sử dụng vi điều khiển để điều khiển tốc độ động cơ DC theo chiều thuận và ngược và hiện thực ở hai tốc độ (nhanh và chậm). Cơng tắc (nút nhấn) được dung tạo ra hai tốc độ và tác động quay ngược. Sơ đồ khối được minh họa ở hình 1, sử dụng vi điều khiển PIC 16F877A. Phương pháp điều khiển tốc độ là bằng điều rộng xung (PWM) dung PIC 16F877A. Đặt chân 7 RC1=’0’ (logic 0) và áp dụng PWM vào chân RC2 làm cho động cơ quay thuận. Việc điều khiển quay thuận hay nghịch đạt được bằng thiết kế cầu của mạch điều khiển động cơ. Nếu nút nhấn khơng Mp+0 Mp+4 Mp+8 Mp+12 Cờ C=’0’ Cờ C=’1’ 193 được nhấn thì động cơ vẫn ổn định. Giả sử nút nhấn 1 được thiết lập PWM ở tỉ số 6:4 và nút 2 được thiết lập PWm với tỉ số 9:1. offon onon TT T T TPWM +== PIC 16F877A Động cơ Hình 1 Nút nhấn dùng RA0, RA1, RA2 Tỉ số 6:4 cĩ chu kì tổng T=6+4=10 và 6 chu kì ở mức cao (1), 4 ở mức thấp (0). Tỉ số 9:1 cĩ T=10, và 9 ở mức 1, và 1 ở mức 0. Động cơ chạy Ngược chiều Tốc độ 1 Tốc độ 2 Ngược chiều Mạch lái động cơ Nút nhấn 1 Nút nhấn 2 Nút nhấn 3 194 Hình 2: Mạch điều khiển cầu sử dụng ngõ vào từ chân RC2 và RC1 để điều khiển tốc độ động cơ một chiều thứ nhất và hướng quay. Động cơ ngừng (off) khi RC2 và RC1 ở logic 0, cực C của T1 và T6 ở mức cao. Vì vậy T2 và T4 sẽ dẫn (on) trong khi T3 và T5 tắt (off)(khơng dẫn) và khơng cĩ dịng dẫn qua động cơ giữa 5V và đất (GND, mass). Động cơ quay(on): khi RC1=’0’, cực C của T6 sẽ cao, T4 dẫn và T5 tắt. Nếu tín hiệu PWM áp dụng vào RC2 thì khi PWM ở logic 1, T1 dẫn, cực C của T1 ở mức thấp; vì vậy T2 tắt và T3 dẫn. Do đĩ dịng điện dẫn qua đất thong qua transistor T3, động cơ Dc và qua transistor T4 lên nguồn +5V. Động cơ quay ngược(reverse): Nếu RC2=’0’ (logic 0) thì T2 dẫn và T3 tắt. Nếu tín hiệu PWM áp dụng vào RC1 thì khi PWM là logic cao (1), transistor T4 tắt và T5 dẫn, tạo ra dịng điện dẫn ngược thong qua T5, động cơ và T2. 2/Viết chương trình Điều khiển động cơ bước. Dự án 2: Điều khiển tốc độ của động cơ bước Yêu cầu là dung vi điều khiển để lái động cơ bước trong cả hai chiều quay thuận và ngược và để hiện thực sắp xếp hai tốc độ (nhanh và chậm). Nút nhấn được dùng tạo ra hai tốc độ và đảo chiều quay. Hình vẽ được minh họa ở hình 3, sử dụng vi điều khiển PIC 16F877A. PIC 16F877A Động cơ Hình 3: Sơ đồ khối của điều khiển động cơ bước sử dụng vi điều khiển PIC 16F877A. Động cơ chạy RB7 RB6 RB5 RB4 Tốc độ 1 Tốc độ 2 Ngược chiều Mạch lái động cơ Nút nhấn 1 Nút nhấn 2 Nút nhấn 3 195 Mạch điều khiển cho động cơ bước Hình 4: Sắp xếp mạch phù hợp để cung cấp mạch lái cho động cơ bước. Trình tự xung điều khiển: RB7 RB6 RB5 RB4 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Nếu đầu A cĩ RB7=logic 1 thì transistor Q1 dẫn, cĩ dịng điện Ic qua cuộn dây và cuộn dây thành nam châm điện, tương tác với nam châm vĩnh cửu rotor làm động cơ quay một gĩc. Tương tự cho đầu B, C, D (bit RB6, RB5, RB4 tương ứng). 3/Mạch báo trộm. 4/ Hột súc sắc điện tử. 5/Bộ timer mạch phản ứng. IV.Tổng kết bài: -Tĩm tắt các ý chính trong bài. -Chuẩn bị bài mới. V. Câu hỏi và bài tập về nhà: Chương 9: Thiết kế hệ vi xử lí và hệ phát triển vi điều khiển Giải mã địa chỉ : 1.Thiết kế mạch giải mã địa chỉ sao cho bộ nhớ 196 12 KB = 1 ROM 2KB + 1 SRAM 4KB + 3x SRAM 2KB Địa chỉ : 0000h –2FFFh 2. Thiết kế mạch giải mã địa chỉ cho hệ vi xử lý gồm : 1 EPROM 2764, 1 RAM 6264, 2 PPI 8255. Vùng địa chỉ như sau : EPROM : 0000h-1FFFh, RAM : 2000h-3FFFh 8255(1) : A000h-BFFFh (chỉ dùng A000h-A003h) 8255(2) : E000h-FFFFh (chỉ dùng E000h-E003h) 3.Thiết kế mạch giải mã địa chỉ : 8x 1 KB (8 IC EPROM 1KB) 4. Thiết kế mạch giải mã địa chỉ 8 KB trong đó 2x ROM 2 KB và 4xSRAM 1KB 5. Thiết kế mạch giải mã địa chỉ 8 KB trong đó 1Rom 2Kb + 2xSRAM 1Kb + 1xSRAM 4KB 6. Hãy giải mã địa chỉ sau cho EPROM 2764 có địa chỉ là A000h-BFFFh dùng cổng logic hay IC 74LS138 8. Thiết kế mạch giải mã địa chỉ cho để sử dụng với các thiết bị 1 : 8000H- 9FFFH và thiết bị 2 : 0000H-1FFFH. 9. Giao tiếp với bộ nhớ RAM HM6264 và ROM 27C256, hai số đầu trong các thiết bị này chỉ RAM(62) hoặc ROM(27). Các số tiếp theo để chỉ dung lượng theo K bits, có thể có các bộ nhớ 4, 8, 16, 32 và 64KB ( nghĩa là các số theo sau 62/27 là 32, 64, 128, 256 và 512). 10. Thiết kế mạch giao tiếp bộ nhớ 64KB (từ 8 chip EPROM mỗi chip 8KB) với 8031/8051. 11. Thiết kế mạch giải mã địa chỉ cho bảng bộ nhớ sau : 0000H-BFFFH là tầm địa chỉ của 48 KB RAM (mỗi chip RAM 8KB) C000H-DFFFH là tầm địa chỉ cổng xuất 1 bit. E000H-FFFFH là tầm địa chỉ cổng nhập 1 bit Thiết kế kit vi xử lý : 1.Thiết kế kit xử lý gồm CPU PIC 16F877A, RAM 8KB, EPROM 8KB, 2xIC8255 2.Thiết kế kit vi xử lý CPU PIC 16F877A, RAM 16KB, EPROM 16KB, 2xIC8255 3.Thiết kế kit vi xử lý CPU PIC 16F877A, RAM 64KB, EPROM 64KB, 2xIC8255 4. Kit vi điều khiển tối thiểu và kit mở rộng là gì? Thiết kế ngoại vi: 1. Trình bày cấu trúc sơ đồ khối vi mạch giao tiếp song song 8255. 2. Lập trình 8255 sao cho port A, port B, port C là xuất, mode 0. 3. So sánh giao tiếp ngoại vi song song và giao tiếp ngoại vi nối tiếp. 4. Truyền dữ liệu nối tiếp là gì? Đồng bộ và bất đồng bộ? Song công và đơn công? 5. Chuẩn RS232 là gì? 6. Kết nối giữa máy tính và modem. 7. Kết nối giữa PIC 16F877A và RS232 8. Vẽ mạch truyền dữ liệu giữa máy tính và vi điều khiển PIC 16F877A sử dụng MAX232/MAX233 197 9. Thiết kế mạch giao tiếp PIC 16F877A với led 7 đoạn 10. Thiết kế bàn phím 16 key giao tiếp với PIC 16F877A sử dụng a)port B của 16F877A b) port A của 8255 Lập trình điều khiển : 1. Điều khiển led đơn chạy đuổi, sáng dần, tắt dần và hai bìa vào ra. 2. Điều khiển đóng nhả rờle. 3. Điều khiển hiển thị led 7 đoạn. 4. Điều khiển ma trận led hiển thị chữ HANOI, DHCN. 5. Điều khiển bàn phím. Dự án 1/Dự án 1: điều khiển tốc độ motor DC loại nhỏ Viết chương trình điều khiển motor DC loại nhỏ: 2/Dự án 2: Điều khiển tốc độ của động cơ bước Viết chương trình Điều khiển động cơ bước. 3/Mạch báo trộm. 4/ Hột súc sắc điện tử. 5/Bộ timer mạch phản ứng. 198 Tài liệu tham khảo: 1. D.W. Smith, PIC in Practice: A project-based approach, 2nd ed., Elsevier, 2006. 2. Tài liệu PIC của bộ mơn Điện tử Cơng nghiệp, trường ĐHCN Tp. HCM. 3. Datasheet của PIC 16F84A, 16F877A. Website: 4. Website : Phần mềm MPLAB IDE v6.60 (lập trình hợp ngữ), Phần mềm CCS : PCW C Compiler IDE v3.227 (gồm PCB, PCM, PCH) (lập trình C). Phần mềm nạp WinPic800. Phần mềm PICC Lite, Hi-Tech C for PIC 10/12/16 MCUs: user’s guide. MPLAB C18 C Compiler for PIC 18 MCUs. 5. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003. 6. Trương Trác, Chip đơn PIC16C84 và ứng dụng của chúng, Tạp chí Điện tử (Electronic Fan) từ số 117 (tháng 7/2003) đến số 122 (tháng 12/2003). 7. Myke Predko, Programming and customizing the PIC microcontroller, 3rd edition, Tab Electronics, McGrawHill, 2008(Ebook). 8. Nebojsa, Dragan Andric, PIC microcontrollers. 9. Văn Thế Minh, Kỹ thuật vi xử lý, NXB GD, 1997. 10. Douglass V.Hall, Microprocessors and interfacing: Programming and Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992. 11. John Morton, The PIC microcontroller: your personal introductory course, 3rd ed., Newnes, 2005. 12. Nigel Gardner, PICmicro MCU C: An introduction to programming the microchip PIC in CCS C, Copyright Bluebird Electronics 2002.

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_vi_xu_ly_0289.pdf