Tài liệu thí nghiệm Vi xử lý CS1

CHƯƠNG 1 TỔNG QUAN VỀ BỘ THÍ NGHIỆM
1.1 TỔ CHỨC TÀI LIỆU HƯỚNG DẪN
Kit thí nghiệm vi xử lý là bộ thí nghiệm được thiết kế dựa trên họ vi điều khiển MCS-51. Tài
liệu hướng dẫn thí nghiệm này giúp người sử dụng tiếp cận với các kiến thức cơ bản về vi
điều khiển 8051 nhanh chóng hơn. Tài liệu thí nghiệm bao gồm tài liệu hướng dẫn sử dụng
kit thí nghiệm, các bài thí nghiệm, và một số mã nguồn để tham khảo 
pdf 79 trang thamphan 27/12/2022 1600
Bạn đang xem 20 trang mẫu của tài liệu "Tài liệu thí nghiệm Vi xử lý CS1", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdftai_lieu_thi_nghiem_vi_xu_ly.pdf
  • pdfschematic.pdf

Nội dung text: Tài liệu thí nghiệm Vi xử lý CS1

  1. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Đoạn chương trình sau sẽ hiển thị số 5 lên Led 7 đoạn số 0. MOV A, #0E0h ; hiển thị 5 lên led 7 đoạn SỐ 0 MOV DPTR, #0000h ; trỏ đến ‘573 của khối led 7 đoạn MOVX @DPTR, A ; ghi giá trị ra ‘573 Để dễ hơn trong việc ghi 10 giá trị từ 0 đến 9 ra led 7 đoạn, người lập trình có thể sử dụng phương pháp tra bảng để tận dụng khả năng dùng vòng lặp, trong đó nội dung bảng tra chính là 10 giá trị sẽ lần lượt được xuất ra ‘573 TABLE: DB 0E0h, 0E1h, 0E2h, Câu lệnh sau cho phép tra lấy nội dung trong bảng MOV DPTR, #TABLE ; trỏ đến bảng tra MOV A, #0 ; thứ tự của phần tử cần lấy trong bảng MOVC A, @A+DPTR ; A = 0E0h 4.4.2 Sử dụng ngôn ngữ C Như đã nói ở trên, khối LED 7 đoạn được thiết kế như là một ngoại vi ở địa chỉ 0x0000 - 0x1FFF ở vùng nhớ dữ liệu ngoài của 8051. Để truy xuất đến vùng nhớ này ta sử dụng con trỏ như sau: Hình 32 Sử dụng con trỏ để giao tiếp LED 7 đoạn Với cách viết này, con trỏ p là một biến con trỏ chỉ đến vùng nhớ dữ liệu ngoài vì nó được khai báo với từ khóa xdata . 39/79
  2. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Ví dụ như ta cần hiển thị 4 số 1234 ra 4 LED. Để làm được điều này, ta sẽ cho LED0 hiển thị số 4 trong một thời gian T, sau đó tắt LED0 và cho LED1 hiển thị số 3 cũng trong thời gian T. Tương tự cho LED2 và LED3. Như vậy, các LED sẽ lần lượt sáng/tắt. Trong 1 giây số lần sáng của mỗi LED sẽ là 1s/4T. Như vậy, quá trình hiển thị 4 số 1234 lên LED 7 đoạn như sau: START Turn off all LEDs LED 0 display number 1 Delay T LED 1 display number 2 Delay T LED 2 display number 3 Delay T LED 3 display number 4 Delay T Hình 35 Lưu đồ chương trình quét LED Nhờ vào hiệu ứng lưu ảnh của mắt người, nếu LED sáng tắt đủ nhanh thì mắt người sẽ không nhận ra hiện tượng chớp nháy. Theo lý thuyết, nếu số lần LED sáng tắt lớn hơn 24 lần trong 1 giây thì mắt người coi như LED sáng liên tục. Như vậy, thời gian T càng nhỏ thì mắt người càng thấy hình ảnh ổn định. Cách thức để ghi giá trị ra 1 led tương tự như trong thí nghiệm 1. Tuy nhiên, tín hiệu cho phép led sẽ lần lượt được tích cực để hiển thị 4 giá trị lên 4 led 7 đoạn khác nhau. Như vậy, 4 41/79
  3. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ CHƯƠNG 5 THÍ NGHIỆM HIỂN THỊ DÙNG LCD 5.1 LÝ THUYẾT CƠ BẢN Để có thể hiển thị thông tin linh hoạt và tiết kiệm năng lượng, hệ thống có thể sử dụng module LCD. Có nhiều loại module LCD, trong đó thông dụng là loại hiển thị 2 hàng 16 ký tự. Module LCD có thể được dùng để hiển thị các thông tin dạng ký tự. Vì được tích hợp sẵn bộ lái LCD nên việc điều khiển module LCD tương đối đơn giản. Các tín hiệu điều khiển module LCD gần giống với các tín hiệu của một MCU hoạt động theo cơ chế 3 bus. Module LCD đã được thiết kế chuẩn để cho phép ta có thể giao tiếp với LCD do một hãng bất kỳ sản xuất với điều kiện là các LCD có sử dụng cùng IC điều khiển HD44780. Phần lớn các module LCD sử dụng giao tiếp 14 chân trong đó có 8 đường dữ liệu, 3 đường điều khiển và 3 đường cấp nguồn. Kết nối được bố trí dưới dạng 1 hàng 14 chân hoặc 2 hàng 7 chân. Các chân 1 và 2 là các chân cấp nguồn Vss, Vdd. Chân 3 Vee là chân điều khiển độ tương phản của màn hình. Chân 4 là đường RS, đây là chân điều khiển lệnh. Khi RS = 0 thì dữ liệu ghi vào LCD được hiểu là các lệnh, dữ liệu đọc từ LCD được hiểu là trạng thái của nó. Chân 5 là đường điều khiển đọc ghi R/nW, mức thấp sẽ cho phép ghi vào LCD, mức cao cho phép đọc ra từ LCD. Chân 6 là đường điều khiển cho phép E. Các chân còn lại chứa dữ liệu 8-bit vào hoặc ra LCD. Chân số Tên Chức năng 1 VSS Đất 2 VDD Cực + của nguồn điện 3 VEE Tương phản (constrast) 4 RS Register Select (Chọn thanh ghi) 5 R/W Read/Write 6 E Cho phép (Enable) 7 D0 Bit 0 của dữ liệu 8 D1 Bit 1 của dữ liệu 43/79
  4. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ (Tắt mở hiển thị và cursor) Display/Cursor Shift 0 0 0 0 0 1 D/C R/L x x 10 đến 1F (Dịch curson/hiển thị) Function set 0 0 0 0 1 8/4 2/1 10/7 x x 20 đến 3F (Đặt chức năng) Set CGRAM address 0 0 0 1 A A A A A A 40 đến 7F (Đặt địa chỉ CGRAM) Set DDRAM address 0 0 1 A A A A A A A 80 đến FF (Đặt địa chỉ DDRAM) Busy Flag & Addr 0 1 BF Bộ đếm địa chỉ (Cờ bận và bộ đếm địa chỉ) Read Data 1 0 Dữ liệu đọc (Đọc dữ liệu từ CGRAM hoặc DDRAM) Write Data 1 1 Dữ liệu ghi (Ghi dữ liệu vào CGRAM hoặc DDRAM) Chú thích: I/D: 1 =Increment *, 0=Decrement R/L: 1 = Right shift, 0 = Left shift 45/79
  5. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Định thì giao tiếp các tín hiệu điều khiển của LCD có thể được xem thêm trong mô tả kỹ thuật của vi mạch HD44780. 5.2 THIẾT KẾ PHẦN CỨNG Hình 36 Sơ đồ thiết kế giao tiếp LCD LCD được thiết kế để hoạt động với cơ chế 3 bus, tức là phải bật ON SW_CC1 và SW_CC3. 8 đường dữ liệu D0-D7 chứa dữ liệu hiển thị hoặc lệnh điều khiển LCD được ghi vào LCD thông qua vi mạch chốt 74x573, trong đó tín hiệu cho phép chốt CS được tạo ra từ mạch giải mã địa chỉ. 47/79
  6. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ MOVX A, @DPTR ; đọc trạng thái LCD JB ACC.7, wait ; nếu busy thì nhảy đến wait ; nếu không thì tiếp tục 5.4 VIẾT CHƯƠNG TRÌNH HIỂN THỊ CHUỖI LÊN LCD Khối LCD được kết nối với 8051 thông qua cơ chế 3 bus, trong đó 8 đường dữ liệu của LCD được nối đến bus dữ liệu của MCU, 3 đường điều khiển được nối đến ngõ ra của khối giải mã địa chỉ. Như vậy lệnh MOVX sau có thể được dùng để đọc hoặc ghi LCD, trong đó DPTR chứa địa chỉ của thao tác tương ứng MOVX A, @DPTR ; lệnh đọc LCD MOVX @DPTR, A ; lệnh ghi LCD Giả sử ta cần ghi chuỗi "Hello" lên LCD. Trước tiên cần khởi động LCD theo mô tả ở phần trên. Sau đó, lần lượt ghi mã của các ký tự ‘H’, ‘e’, ‘l’, ‘l’, ‘o’ đến LCD theo bảng ký tự của LCD. Lưu ý là sau mỗi lần truy xuất module LCD cần chờ cho thao tác hiện thời được hoàn tất trước khi bắt đầu thao tác khác. Để dễ dàng hơn trong việc lấy các ký tự và xuất ra LCD, người lập trình có thể dùng phương pháp tra bảng như sau Message: DB ‘Hello’ Nên thiết kế chương trình bằng cách sử dụng các chương trình con để có thể sử dụng lại. Ví dụ, một chương trình con có tên lcd_init có nhiệm vụ khởi động module LCD, chương trình con write_char có nhiệm vụ ghi 1 byte dữ liệu hiển thị đến LCD, chương trình con write_command có nhiệm vụ ghi 1 byte lệnh đến LCD. Mã nguồn chương trình mẫu hiển thị một chuỗi lên LCD có thể download trên trang web của bộ môn điện tử. 49/79
  7. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ 6.2 RUNG PHÍM VÀ CHỐNG RUNG Với phím nhấn cơ khí, tiếp điếm cơ khí sau khi được nhấn hay nhả sẽ bị rung động. Do đó, khi nhấn hay nhả phím sẽ tạo ra một chuỗi các xung thay vì một xung đơn như ở Hình 39. Hình 39 Phím đơn bị rung khi nhấn hay nhả Khi đó, nếu ta dùng tín hiệu này để xác định số lần phím nhấn thì kết quả sẽ bị sai lệch. Để có kết quả đúng ta cần chống rung (debounce). Có hai cách để chống rung là chống rung bằng phần cứng và chống rung bằng phần mềm. Hình 40 Chống rung bằng phần cứng Hình 40 trình bày cách chống rung bằng phần cứng, sử dụng một tụ điện khoảng 0.1 uF mắc như trong hình. Tụ này phối hợp với điện trở kéo lên hoặc kéo xuống sẽ lọc đi các xung hẹp sinh ra do quá trình rung phím. Cách thứ hai là sử dụng phần mềm để chống rung. Cách chống rung đơn giản nhất là đọc tín hiệu ra hai lần liên tiếp sau một khoảng thời gian trễ thích hợp, nếu 2 lần này mà kết quả đọc được giống nhau thì ta cho là kết quả đúng, nếu kết quả là sai thì ta lại đọc lần thứ 3 cũng sau thời gian T, nếu kết quả giống như lần đọc thứ 2 thì coi như kết quả lần này là đúng, còn nếu không thì lại lặp lại quá trình. Thời gian T thường được chọn là 50ms. 51/79
  8. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ CHƯƠNG 7 THÍ NGHIỆM GIAO TIẾP QUA CỔNG NỐI TIẾP 7.1 LÝ THUYẾT CƠ BẢN Truyền thông nối tiếp là một phần rất quan trọng trong các hệ thống xử lý. Đối với 8051, việc truyền nối tiếp được thực hiện thông qua ngoại vi cổng nối tiếp. Ngoại vi này cho phép người lập trình giao tiếp với bên ngoài thông qua giao thức truyền nối tiếp 8 bit dữ liệu, 1 stop bit. Tốc độ truyền có thể lập trình được bằng phần mềm. 7.1.1 Khung truyền nối tiếp bất đồng bộ Khi không có dữ liệu gửi thì đường tín hiệu duy trì ở trạng thái cao (trạng thái Mark). Bắt đầu của một ký tự dữ liệu được chỉ bởi mức thấp trong thời gian 1 bit. Bit này được gọi là bit bắt đầu (Start bit). Rồi sau đó các bit dữ liệu được gửi ra trên đường tín hiệu lần lượt từng bit một (bắt đầu với LSB). Từ dữ liệu có thể 5, 6, 7, hoặc 8 bit và có thể theo sau là bit kiểm tra chẵn lẻ P (Parity bit). Tiếp theo các bit dữ liệu và P (nếu có sử dụng kiểm tra chẵn lẻ), đường tín hiệu được trả về mức cao trong ít nhất thời gian 1 bit để giúp nhận biết kết thúc ký tự. Bit này còn gọi là bit dừng (Stop bit), một số hệ thống cũ có thể sử dụng 2 bit dừng. Thuật ngữ tốc độ baud dùng để chỉ tốc độ dữ liệu nối tiếp được truyền. Tốc độ baud được định nghĩa là 1/(thời gian giữa những chuyển tiếp tín hiệu). Thí dụ: Nếu tín hiệu thay đổi cứ sau 3.33 ms thì tốc độ baud là 1/3.33ms = 300 bd (hay baud). Chú ý là tốc độ này tổng quát thì khác với tốc độ định nghĩa theo bps (bits/giây). Các tốc độ baud thông dụng là 300, 600, 1200, 2400, 4800, 9600, và 19200 baud (hiện nay các số này còn cao hơn nữa, thường giới hạn với truyền bất đồng bộ là 100000 baud). Bộ thí nghiệm EME-MC8 đã sử dụng cổng nối tiếp này để giao tiếp với chương trình HyperTerminal trên máy tính, từ đó cho phép người dùng có thể sử dụng các chức năng của chương trình monitor. 53/79
  9. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Hai tín hiệu dùng cho giao tiếp là TXD và RXD trên Port 3 của 8051. Như vậy, người lập trình cần bật ON hai switch này (của SW_CC4) để có thể dùng cổng nối tiếp. C105 VCC C104 U105 10u + 10u 6 2 P101 4 V- V+ 1 5 C2+ C1+ + 9 + C106 C107 + 4 10u 10u 8 5 3 3 14 C2- C1- 11 TXD_232 7 7 T1OUT T1IN 10 TXD 2 T2OUT T2IN 6 13 12 RXD_232 1 8 R1IN R1OUT 9 RXD R2IN R2OUT MAX232 RS232 DB9, SOCKET Hình 41 Sơ đồ kết nối cổng nối tiếp và cài đặt switch tương ứng 7.3 PHẦN MỀM GIAO TIẾP Để truyền nhận dữ liệu thông qua cổng nối tiếp, người lập trình chỉ cần khởi động nó bằng các thao tác: truy xuất thanh ghi SMOD để cài đặt chế độ làm viêc; truy xuất Timer 1 để điều khiển tốc độ baud (EME-MC8 sử dụng thạch anh 11.0592MHz, cho phép tạo tốc độ baud với sai số là 0%). MOV SMOD, #52h ; khởi động ở chế độ 2 MOV TH1, # ; cài đặt tốc độ Để có thể ghi hoặc đọc dữ liệu từ cổng nối tiếp, người lập trình cần truy xuất thanh ghi SBUF bằng các chương trình con JNB TI, $ ; chờ phát xong byte trước đó CLR TI ; chuẩn bị phát byte kế MOV SBUF, A ; phát Hoặc JNB RI, $ ; chờ nhận xong 1 byte CLR RI ; nhận byte kế MOV A, SBUF ; byte kế nằm trong A 55/79
  10. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ 8.2 LẬP TRÌNH SỬ DỤNG NGẮT Một chương trình assembly sử dụng ngắt, ví dụ ngắt timer 0 sẽ có cấu trúc như sau: Hình 42 Lập trình ngắt dùng assembly Khi timer 0 tràn, chương trình sẽ quay về địa chỉ 000BH, từ đó nhảy đến TO_ISR, sau khi gặp lệnh RETI thì quay về lệnh kế tiếp từ thời điểm thực thi ngắt. LẬP TRÌNH SỬ DỤNG NGẮT TRÊN KIT THÍ NGHIỆM Trên kit thí nghiệm, bảng vector ngắt được chương trình monitor dời về địa chỉ 2000H. Do đó khi lập trình, ta phải dời bảng vector ngắt lên địa chỉ 2000H như sau 57/79
  11. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ 59/79
  12. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ chủ yếu là START và OE đều được tổ hợp từ tín hiệu giải mã địa chỉ nCS2. Tần số chuyển đổi của ADC (tín hiệu CLK) được chia ra từ tín hiệu dao động của 8051 bằng IC đếm 74x393. Tín hiệu EOC (tích cực khi đã chuyển đổi xong được nối đến header để sử dụng khi cần). ADC0809 có thể chuyển đổi lên đến 8 kênh. Trong đó kênh 0 đã được nối sẵn đến một biến trở để người sử dụng có thể thử nghiệm hoạt động của ADC một cách nhanh chóng. Để chọn kênh, 3 đường địa chỉ thấp của bus địa chỉ (A0, A1, A2) đã được sử dụng. Như vậy, người lập trình có thể truy xuất đến 8 địa chỉ thấp nhất của nCS2 để truy xuất đến 8 kênh này. 9.3 PHẦN MỀM GIAO TIẾP Vì ADC0809 được thiết kế để hoạt động với cơ chế 3 bus và tín hiệu giải mã địa chỉ là từ chân nCS2 nên người lập trình cần dùng các lệnh truy xuất không gian bộ nhớ dữ liệu ngoài để truy cập ADC, cụ thể là lệnh MOVX. Các bước cụ thể gồm: thứ nhất, người lập trình cần yêu cầu ADC0809 thực hiện chuyển đổi một kênh cụ thể bằng cách tích cực tín hiệu START và 3 đường địa chỉ (dùng tín hiệu ALE). Với kết nối phần cứng này, khi tín hiệu START tích cực thì đường ALE cũng tích cực. Như vậy chỉ cần dùng một lệnh ghi ra ngoại vi tại địa chỉ tương ứng là được MOV DPTR, #nCS2 ; kết hợp địa chỉ ADC với địa chỉ kênh MOVX @DPTR, A ; ra lệnh chuyển đổi kênh tương ứng Sau khi chờ một khoảng thời gian (thường lấy khoảng 100us), hoặc chờ mức tích cực trên chân EOC, người lập trình cần đọc từ ADC bằng cách tích cực chân OE. Điều này cũng được thực hiện bằng lệnh đọc ngoại vi MOVX A, @DPTR 61/79
  13. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Dữ liệu ngõ ra của DS18S20 được hiệu chỉnh theo độ C. Dữ liệu nhiệt độ được lưu trữ dưới dạng số bù 2 16-bit (mở rộng dấu). Bit dấu (S) chỉ nhiệt độ dương (S=0) hay âm (S=1). Định dạng thanh ghi nhiệt độ Mối quan hệ giữa dữ liệu số và nhiệt độ Sau khi DS18S20 thực hiện chuyển đổi nhiệt độ, giá trị này được so sánh với giá trị nhiệt độ cảnh báo được lưu trong 2 thanh ghi 8-bit TH và TL. Tuy nhiên chỉ các bit từ 8 đến 1 trong thanh ghi nhiệt độ được so sánh. Nếu nhiệt độ ngoài ngưỡng, tức là cao hơn TH hoặc thấp hơn TL, thì một điều kiện cảnh báo xuất hiện và cờ cảnh báo được đặt lên bên trong DS18S20. Nếu nhiệt độ trở lại bình thường thì điều kiện cảnh báo bị tắt ở lần chuyển đổi nhiệt độ kế tiếp. Định dạng thanh ghi TH và TL Bộ nhớ DS18S20 được tổ chức như sau 63/79
  14. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ do đó trạng thái nghỉ của bus là mức cao. Nếu bus được giữ ở mức thấp nhiều hơn 480μs, các thiết bị trên bus sẽ bị reset. Chuỗi thao tác để truy xuất DS18S20 như sau: Khởi động: bao gồm một xung reset được phát bởi master, và xung có mặt được phát bởi slave. Định thì khởi động Lệnh ROM: sau khi master phát hiện được sự có mặt của slave, nó có thể ra lệnh ROM. Các lệnh này hoạt động trên các mã 64-bit duy nhất của mỗi slave và cho phép master truy xuất đến một thiết bị cụ thể trên bus. Các lệnh này cũng cho phép master xác định loại và số lượng thiết bị trên bus. Có 5 lệnh ROM, mỗi lệnh dài 8-bit, bao gồm SEARCH ROM [F0h], READ ROM [33h], MATCH ROM [55h], SKIP ROM [CCh], ALARM SEARCH [ECh]. Lệnh chức năng DS18S20: sau khi master đã dùng lệnh ROM để xác định được slave mà nó cần thông tin, master có thể ra các lênh chức năng DS18S20. Các lệnh này bao gồm: CONVERT T [44h], WRITE SCRATCHPAD [4Eh], READ SCRATCHPAD [BEh], COPY SCRATCHPAD [48h], RECALL E2 [B8h], READ POWER SUPPLY [B4h]. 65/79
  15. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Lưu đồ lệnh ROM 67/79
  16. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Hình 46 Sơ đồ kết nối DS18B20 10.4 PHẦN MỀM GIAO TIẾP Người lập trình cần dùng các lệnh SETB, CLR để thao tác trên bit P3.2 theo giao thức điều khiển DS18S20. 69/79
  17. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Như vậy, để điều khiển các tín hiệu này, người lập trình cần truy xuất đến các bit trên port 1 bằng các lệnh thông qua thanh ghi port P1. 11.3 PHẦN MỀM GIAO TIẾP Vì tín hiệu điều khiển MCP4922 được kết nối trực tiếp đến các bit của port 1 nên các lệnh cho phép thao tác trên thanh ghi P1. Ví dụ đoạn mã sau có thể được dùng để dịch 1 bit dữ liệu từ 8051 vào MCP4922 CLR SCK ; tạo xung clock MOV SDI, C ; dịch cờ C SETB SCK ; vào MCP4922 Ví dụ để xuất các mức điện áp 0V, 1V, 2.5V, 4V, và 5V ra ngõ ra của MCP4922, người lập trình có thể làm như sau: Vì MCP4922 là DAC 12-bit với điện áp tham khảo l à 5V nên độ phân giải tương ứng là 5V/4096 = 1.22mV/LSB. Như vậy, người lập trình có thể tính ra được các giá trị nhị phân cần xuất ra MCP4922 để tạo ra các mức điện áp như yêu cầu. Vì độ phân giải này có thể tạo ra sai số ở ngõ ra của MCP4922 nên người thiết kế có thể dùng vi mạch tạo điện áp tham khảo chính xác MCP1541. Vi mạch này tạo điện áp 4.096V chính xác ở ngõ ra, do đó, MCP4922 sẽ có độ phân giải là 1mV/LSB. Dùng các chương trình dịch dữ liệu vào và ra ở phần trên để ghi dữ liệu vào MCP4922. 71/79
  18. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ lái led cần phải được đệm với các linh kiện dòng lớn như transistor để đảm bảo đủ dòng cho từng led. Để hiển thị được một ký tự chữ hoặc số, chương trình cần một bảng font để chuyển giữa giá trị bên trong MCU thành giá trị hiển thị lên led ma trận tương tự như với led 7 đoạn. Bảng font này có thể được ghi trực tiếp vào chương trình. 12.2 THIẾT KẾ PHẦN CỨNG Led ma trận trên kit là led có kích thước 8x8 với phương pháp quét led là quét cột (vì mỗi cột đã được đệm với dãy transistor ULN2803 có dòng tối đa lên đến 500mA). Led có hàng là anode và cột là cathode. Thiết kế sẽ sử dụng vi mạch ULN2803 cho phép kéo dòng lên đến 500mA ở phía cột và BJT B562 ở phía hàng vì phía cột sẽ gánh dòng tối đa lên đến 8 led đồng thời. Để hiển thị một điểm ảnh thì dữ liệu xuất ra trên hàng phải là mức 0 vì khi đó khóa BJT sẽ dẫn làm cho hàng được cấp nguồn VCC, dữ liệu xuất trên cột sẽ là mức 1 vì ULN2803 hoạt động như cổng đảo nên tín hiệu lái cột sẽ có điện áp là mức 0 (tức là gần GND) cho phép các led trên cột tương ứng được sáng. Hình 47 Sơ đồ mạch phía cột của khối led ma trận Hình 48 Sơ đồ mạch phía hàng của khối led ma trận 73/79
  19. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Để có thể hiển thị được chữ A lên led ma trận, trước tiên cần xác định địa chỉ của chốt hàng và cột bằng bản đồ bộ nhớ. Địa chỉ này sẽ được dùng để xuất các dữ liệu ra led. Bước kế tiếp là chuẩn bị dữ liệu để xuất. Vì phương pháp quét là quét cột nên dữ liệu xuất ra cột sẽ lần lượt là 10000000B, 01000000B, 00100000B, 00010000B, 00001000B, 00000100B, 00000010B, 00000001B (mức tích cực của 1 cột là mức cao). Mỗi lần xuất cách nhau 1ms, sau khi đã chuẩn bị dữ liệu trên hàng. Dữ liệu xuất trên hàng sẽ được lấy ra bằng phương pháp tra bảng. Nhìn vào hình ảnh của chữ A dự định hiển thị, ta có thể xác định được các mã xuất ra 8 hàng của 1 cột lần lượt là 03h, 0EDh, 0EEh, 0EEh, 0EDh, 03h, 0FFh, 0FFh (đây chính là font của chữ A). Dùng dẫn xuất DB để khai báo chuỗi dữ liệu này như sau CharA: DB 03h, 0EDh, 0EEh, 0EEh, 0EDh, 03h, 0FFh, 0FFh Dẫn xuất DB không phải là một lệnh của MCU. Đó là một hướng dẫn để trình biên dịch ghi sẵn các giá trị cho từng byte vào trong bộ nhớ chương trình tại địa chỉ có nhãn là CharA. Dẫn xuất này nên được đặt trong phân đoạn dữ liệu hoặc cuối của chương trình chính. MCU sẽ dùng chuỗi lệnh sau để thực hiện tra bảng (look-up table) MOV A, #n ; n = cột cần hiển thị MOV DPTR, #CharA MOVC A, @A+DPTR Để đọc được mã của chữ A cần hiển thị tại cột thứ n. Lúc này n sẽ thay đổi từ 0 (cho cột đầu tiên) đến 7 (cho cột cuối cùng). Quá trình này sẽ được lặp liên tục. 75/79
  20. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ Hình 50 Điều khiển động cơ với PWM Điều khiển độ rộng của xung được làm bằng cách tắt bật nhanh nguồn điện đặt lên động cơ. Nguồn áp DC sẽ chuyển thành tín hiệu xung vuông, thay đổi từ nguồn xuống 0V, tạo cho động cơ một loạt các cú sốc điện. Nếu tần số bật tắt đủ cao, thực tế trong khoảng 1kHz – 3kHz, động cơ sẽ chạy ở một tốc độ ổn định nhờ mômen quay. Bằng cách thay đổi chu kỳ hoạt động của tín hiệu (thay đổi độ rộng xung – PWM), tức là khoảng thời gian “Bật”, nguồn điện trung bình đặt lên động coư sẽ thay đổi và dẫn đến thay đổi tốc độ. 13.2 THIẾT KẾ PHẦN CỨNG Như đã biết để điều khiển hướng quay cần đặt được điện áp lên động cơ. Mạch phổ biến dùng để điều khiển động cơ gọi là mạch cầu H. Một trong những khả năng cực hay của mạch này là nó cho phép điều khiển động cơ chạy thuận hoặc ngược ở bất kỳ tốc độ nào. Ngoài ra nó còn cho phép dùng nguồn điện độc lập với mạch điều khiển. 77/79
  21. HƯỚNG DẪN THÍ NGHIỆM VI XỬ LÝ !!! Chú ý: Trước khi đảo chiều động cơ đang quay ta cần phải chờ động cơ dừng lại hẳn bằng cách cho AB = 00, sau đó mới xuất lệnh đảo chiều, Điều này giúp tránh moment hãm đột ngột có thể làm hỏng mạch lái và động cơ. Vì được thiết kế để hoạt động với cơ chế 3 bus, nên người lập trình chỉ cần truy xuất đến hai bit thứ 4 và 5 của ngoại vi tại địa chỉ của vi mạch ‘573. Như vậy, người lập trình cần xác định địa chỉ ‘573 từ bản đồ địa chỉ. Dùng các lệnh thao tác trên bit như SETB, CLR để xác định giá trị của các bit thứ 0 và 1 mà không làm ảnh hưởng đến các bit khác và xuất ra ngoại vi SETB ACC.4 ; cài đặt hai bit điều khiển CLR ACC.5 MOV DPTR, #IC573B MOVX @DPTR, A ; xuất ra ngoại vi điều khiển 79/79