Kiểm soát lượng nước trong bình hiển thị trên LCD

  • Số trang: 66 |
  • Loại file: DOCX |
  • Lượt xem: 92 |
  • Lượt tải: 0
hoang

Đã đăng 4066 tài liệu

Mô tả:

MỤC LỤC PHẦN I : MỞ ĐẦU Trang 1 ĐẶT VẤN ĐỀ 1. Tổng quan. Có thể nói, hiện nay vi điều khiển đã rất phổ biến ở Việt Nam, và được ứng dụng rất nhiều. Những sinh viên ngành Điện, Điện tử, Cơ điện tử, Tin Học, Viễn thông... Hầu như ai cũng biết cách để làm việc với vi điều khiển. Ngày nay, những tiến bộ trong công nghệ bán dẫn đã thúc đẩy sự phát triển không ngừng của ngành công nghiệp tự động, các quá trình điều khiển tự đông hoá và điều khiển thời gian thực đã đặt ra yêu cầu rất lớn về việc trao đổi dữ liệu giữa các hệ thống hay giữa các bộ phận trong cùng một hệ thống. Trong đời sống của con người hiện nay những nghiên cứu để tạo ra những sản phẩm, dịch vụ tự động, nhằm giảm bớt sức người trong lao động, sản xuất là vấn đề thiết yếu. Cùng với sự phát triển của khoa học kĩ thuật thì những sản phẩm công nghệ càng trở nên phổ biến và gần gũi hơn với chúng ta. Khi cuộc sống càng ngày càng được nâng cao cùng với sự phát triển của các công nghệ thì chất lượng cuộc sống của con người cải thiện. Trong cuộc sống con người sử dụng các bình kín đựng nhiên liệu mà con người chúng ta không thể biết là khi nào chúng đầy khi nào chúng hết để có thể thêm vào hoặc lấy bớt. Chính vì điều này, trong đề tài nghiên cứu tốt nghiệp của chúng em lần này chúng em đã lựa chọn đề tài “Kiểm soát lượng nước trong bình hiển thị trên LCD” để nhằm đáp ứng nhu cầu cần thiết trong cuộc sống của con người nhằm nâng cao chất lượng cuộc sống. 2. Tính cấp thiết của đề tài. Kiểm soát lượng nước trong bình là một ứng dụng khoa học công nghệ mà chúng ta chắc hẳn đã từng được nhìn hay quan sát, và không thể phủ nhận được công dụng mà nó mang lại, nó là một công việc tưởng chừng là đơn giản nhưng lại vô cùng khó khăn. Không phải lúc nào chúng ta cũng có thể kiểm tra trong những chiếc bể bình kín để xem lượng dung dịch trong đó bây giờ là bao nhiêu được điều đó sẽ làm mất rất nhiều thời gian và công sức của con người. Đồ án Trang 2 được nghiên cứu, khảo sát và thực hiện với mục đích áp dụng những kiến thức đã được học trong nhà trường để thiết kế, tạo ra một sản phẩm giúp con người có thể giải quyết những vấn đề trên một cách dễ dàng hơn mà không hề tốn nhiều thời gian và công sức. Không chỉ áp dụng cho các kiểm soát nước mà nó còn kiểm soát lượng xăng dầu trong các phương tiện mà con người sử dụng hàng ngày giúp con người chủ động hơn trong cuộc sống. 3. Ý nghĩa khoa học và thực tiễn của đề tài. Quyển đồ án bao gồm nhiều phần nghiên cứu từ lý thuyết đến thực hành, từ dễ đến khó sẽ dẫn dắt người đọc tìm hiểu và lập trình thiết kế hệ thống dễ dàng hơn với những linh kiện điện tử cơ bản trên thị trường. Vì vậy nhóm thực hiện đề tài hy vọng quyển đồ án này sẽ là nguồn tài liệu tham khảo lý thuyết và thực hành trong ứng dụng của đồ án. Trang 3 PHẦN 2 : NỘI DUNG BÁO CÁO CHƯƠNG I : CƠ SỞ LÝ THUYẾT VÀ GIỚI THIỆU CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH. I. CƠ SỞ LÝ THUYẾT. 1. Các phương pháp kiểm soát chất lỏng.  Sử dụng phao đo  Sử dụng cảm biến áp suất.  Sử dụng cảm biến điện dung.  Sử dụng cảm biến siêu âm. 2. Các phương pháp xử lý tín hiệu.  Sử dụng IC số.  Vi xử lý.  Vi điều khiển. 3. Hiển thị.  Dùng phao tác động lên thước đo.  Chỉ thị kim (ví dụ: kim xăng xe máy).  Hiển thị trên Led 7 thanh.  Hiển thị trên Led ma trận.  Hiển thị trên LCD. II. GIỚI THIỆU CÁC LINH KIỆN CHÍNH SỬ DỤNG TRONG MẠCH. 1. Giới thiệu về LCD. - Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc số trong bảng mã ASCII. Không giống các loại LCD lớn, Text LCD được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII. Cũng vì lý do chỉ hiện thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (để phân biệt với Graphic LCD có thể hiển thị hình ảnh). Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các Text LCD, các mẫu ký tự được định nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự. Một số kích thước Text LCD thông thường gồm 16x1, 16x2, 16x4, 20x2, 20x4…. Trang 4 Hình 1.1 Hình ảnh thực tế của LCD16x2 - Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và song song. Trong phạm vi nghiên cứu này tôi chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD 16x2 điều khiển bởi chip HD44780U của hãng Hitachi. Đối với các LCD khác bạn cần tham khảo datasheet riêng của từng loại. Tuy nhiên, HD44780U cũng được coi là chuẩn chung cho các loại Text LCD, vì thế bạn có thể dùng chương trình ví dụ trong bài này để test trên các LCD khác với rất ít hoặc không cần chỉnh sửa. HD44780U là bộ điều khiển cho các Text LCD dạng ma trận điểm (dotmatrix), chip này có thể được dùng cho các LCD có 1 hoặc 2 dòng hiển thị. HD44780U có 2 mode giao tiếp là 4 bit và 8 bit. Nó chứa sẵn 208 ký tự mẫu kích thước font 5x8 và 32 ký tự mẫu font 5x10 (tổng cộng là 240 ký tự mẫu khác nhau). 1.1. Sơ đồ chân của LCD. - Các Text LCD theo chuẩn HD44780U thường có 16 chân trong đó 14 chân kết nối với bộ điều khiển và 2 chân nguồn cho “đèn LED nền”. Thứ tự các chân thường được sắp xếp như sau: Bảng 1 sơ đồ chân Chức năng Ground Số thứ tự chân 1 Tên Vss(GND) Trạng thái logic - Trang 5 Mô tả 0V Nguồn cho LCD Tương phản 2 Vdd(VCC) - +5V 0-Vdd Vee 0 1 RS 0 1 D0 – D7 : lệnh D0 – D7 : lệnh Ghi Đọc Vô hiệu hóa LCD LCD hoạt động Bắt đầu ghi/đọc LCD Bit 0 LSB 3 4 Điều khiển LCD Dữ liệu / lệnh 5 R/W 6 E 7 D0 0 1 0 1 Từ 1 xuống 0/1 8 D1 0/1 Bit 1 9 10 11 12 13 D2 D3 D4 D5 D6 0/1 0/1 0/1 0/1 0/1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 14 D7 0/1 Bit 7 Bảng 1 Bảng sơ đồ chân của LCD 1.2. Kết nối LCD với vi điều khiển - Trong một số LCD 2 chân LED nền được đánh số 15 và 16 nhưng trong một số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode). Hình 1.2 mô tả cách kết nối LCD với nguồn và mạch điều khiển. Trang 6 Hì nh 1.2 .Sơ đồ kết nối LCD với vi điều khiển - Chân 1 và chân 2 là các chân nguồn, được nối với GND và nguồn 5 V. Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với 1 biến trở chia áp như trong hình 2. Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở này. Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4 bit hay 8 bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển, chúng ta sẽ khảo sát kỹ càng hơn trong các phần sau. - Thanh ghi và tổ chức bộ nhớ. HD44780U có 2 thanh ghi 8 bits là INSTRUCTION REGISTER (IR) và DATA REGISTER (DR). Thanh ghi IR chứa mã lệnh điều khiển LCD và là thanh ghi “chỉ ghi” (chỉ có thể ghi vào thanh ghi này mà không đọc được nó). Thanh ghi DR chứa các các loại dữ liệu như ký tự cần hiển thị hoặc dữ liệu đọc ra từ bộ nhớ LCD…Cả 2 thanh ghi đều được nối với các đường dữ liệu D0:7 Trang 7 của Text LCD và được lựa chọn tùy theo các chân điều khiển RS, RW. Thực tế để điều khiển Text LCD chúng ta không cần quan tâm đến cách thức hoạt động của 2 thanh ghi này, vì thế cũng không cần khảo sát chi tiết chúng. HD44780U có 3 loại bộ nhớ, đó là bộ nhớ RAM dữ liệu cần hiển thị DDRAM (Didplay Data RAM), bộ nhớ chứa ROM chứa bộ font tạo ra ký tự CGROM (Character Generator ROM) và bộ nhớ RAM chứa bộ font tạo ra các symbol tùy chọn CGRAM (Character Generator RAM). Để điều khiển hiển thị Text LCD chúng ta cần hiểu tổ chức và cách thức hoạt động của các bộ nhớ này. 1.3. DDRAM DDRAM là bộ nhớ tạm chứa các ký tự cần hiển thị lên LCD, bộ nhớ này gồm có 80 ô được chia thành 2 hàng, mỗi ô có độ rộng 8 bit và được đánh số từ 0 đến 39 cho dòng 1; từ 64 đến 103 cho dòng 2. Mỗi ô nhớ tương ứng với 1 ô trên màn hình LCD. Như chúng ta biết LCD loại 16x2 có thể hiển thị tối đa 32 ký tự (có 32 ô hiển thị), vì thế có một số ô nhớ của DDRAM không được sử dụng làm các ô hiển thị. Để hiểu rõ hơn chúng ta tham khảo hình 1.3 bên dưới. Hình 1.3. Tổ chức của DDRAM 1.4. CGROM CGROM là vùng nhớ cố định chứa định nghĩa font cho các ký tự. Chúng ta không trực tiếp truy xuất vùng nhớ này mà chip HD44780U sẽ tự thực hiện khi có yêu cầu đọc font để hiện thị. Một điều đáng lưu ý là địa chỉ font của mỗi ký tự vùng nhớ CGROM chính là mã ASCII của ký tự đó. Ví dụ ký tự ‘a’ có mã ASCII là 97, tham khảo tổ chức của vùng nhớ CGROM trong hình 4 bạn sẽ nhận thấy địa chỉ font của ‘a’ có 4 bit thấp là 0001 và 4 bit cao là 0110, địa chỉ tổng hợp là 01100001 = 97. Trang 8 CGROM và DDRAM được tự động phối hợp trong quá trình hiển thị của LCD. Giả sử chúng ta muốn hiển thị ký tự ‘a’ tại vị trí đầu tiên, dòng thứ 2 của LCD thì các bước thực hiện sẽ như sau: trước hết chúng ta biết rằng vị trí đầu tiên của dòng 2 có địa chỉ là 64 trong bộ nhớ DDRAM, vì thế chúng ta sẽ ghi vào ô nhớ có địa chỉ 64 một giá trị là 97 (mã ASCII của ký tự ‘a’). Tiếp theo, chip HD44780U đọc giá trị 97 này và coi như là địa chỉ của vùng nhớ CGROM, nó sẽ tìm đến vùng nhớ CGROM có địa chỉ 97 và đọc bảng font đã được định nghĩa sẵn ở đây, sau đó xuất bản font này ra các “chấm” trên màn hình LCD tại vị trí đầu tiên của dòng 2 trên LCD. Đây chính là cách mà 2 bộ nhớ DDRAM và CGROM phối hợp với nhau để hiển thị các ký tự. Như mô tả, công việc của người lập trình điều khiển LCD tương đối đơn giản, đó là viết mã ASCII vào bộ nhớ DDRAM tại đúng vị trí được yêu cầu, bước tiếp theo sẽ do HD44780U đảm nhiệm. 1.5. CGRAM CGRAM là vùng nhớ chứa các symbol do người dùng tự định nghĩa, mỗi symbol được có kích thước 5x8 và được dành cho 8 ô nhớ 8 bit. Các symbol thường được định nghĩa trước và được gọi hiển thị khi cần thiết. Vùng này có tất cả 64 ô nhớ nên có tối đa 8 symbol có thể được định nghĩa. Tài liệu này không đề cập đến sử dụng bộ nhớ CGRAM nên tôi sẽ không đi chi tiết phần này, bạn có thể tham khảo datasheet của HD44780U để biết thêm. 1.6. Các chân điều khiển của LCD Các chân điều khiển việc đọc và ghi LCD bao gồm RS, R/W và EN. RS (chân số 3): Chân lựa chọn thanh ghi (Select Register), chân này cho phép lựa chọn 1 trong 2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được chọn và nếu RS=1 thanh ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gởi 1 mã lệnh đến LCD thì chân RS phải được reset về 0. Ngược lại, khi Trang 9 muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả trong hình 1.4. Hình 1.4. Hoạt động của chân RS R/W (chân số 4): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag – BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài này tôi hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2 bạn chỉ cần Trang 10 một thay đổi nhỏ trong chương trình wait_LCD và kết nối chân R/W của LCD xuống GND. EN (chân số 5): Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một “xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0:7, sau đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống. 1.7. Các mã lệnh của LCD Mã(Hex) 0x01 0x02 0x04 0x06 0x05 0x07 0x08 0x0A 0x0C 0x0E 0x0F 0x10 0x14 0x18 0x1C 0x80 0xC0 0x38 Lệnh đến thanh ghi của LCD Xóa màn hình hiển thị Trở về đầu dòng Giảm con trỏ ( dịch con trỏ sang trái) Tăng con trỏ (dịch con trỏ sang phải) Dịch hiển thị sang phải Dịch hiển thị sang trái Tắt con trỏ, tắt hiển thị Tắt hiển thị, bật con trỏ Bật hiển thị, tắt con trỏ Bật hiển thị, nhấp nháy con trỏ Tắt con trỏ, nhấp nháy con trỏ Dịch con trỏ sang trái Dịch con trỏ sang phải Dịch toàn bộ hiển thị sang trái Dịch toàn bộ hiển thị sang phải Ép con trỏ về đầu dòng thứ nhất Ép con trỏ về đầu dòng thứ hai Hai dòng ma trận Bảng 2. Mã lệnh của LCD Trang 11 2. Giới thiệu về IC AT89S52 Hình 1.5 . Hình ảnh thực tế của IC AT89S52 2.1. Cấu trúc chung của IC AT89S52  IC AT89S52 có những đặc điểm sau :  8kB ROM bên trong  256 Byte ngoài  4 Port xuất nhập dữ liệu I/O  Giao tiếp nối tiếp  64 kB vùng nhớ mã ngoài  64 kB vùng nhớ dữ liệu ngoài  Xử lý Boolean  Cấu trúc của AT89S52 ở dạng sơ đồ khối tổng quát Trang 12 Hình 1.6 Sơ đồ khối tổng quát của IC AT89S52 - Cấu trúc bus: + Bus địa chỉ của họ vi điều khiển AT89S52 gồm 16 đường tín hiệu (thường gọi là bus địa chỉ 16 bit). Với số lượng bit địa chỉ như trên, không gian nhớ của chip được mở rộng tối đa là 216 = 65536 địa chỉ, tương đương 64kB. + Bus dữ liệu của họ vi điều khiển AT89S52 gồm 8 đường tín hiệu (thường gọi là bus dữ liệu 8 bit), đó là lý do tại sao nói AT89S52 là họ vi điều khiển 8 bit. Với độ rộng của bus dữ liệu như vậy, các chip họ AT89S52 có thể xử lý các toán hạng 8 bit trong một chu kỳ lệnh. - CPU (Central Processing Unit) CPU là đơn vị xử lý trung tâm, đó là bộ não của toàn bộ hệ thống vi điện tử được tích hợp trên chip vi điều khiển. CPU có cấu tạo chính gồm một đơn vị xử lý số học và • logic ALU (Arithmethic Logic Unit) – nơi thực hiện tất cả các phép toán số học và phép • logic cho quá trình xử lý. - Bộ nhớ chương trình (Program Memory) Trang 13 Không gian bộ nhớ chương trình của AT89 là 64kB, tuy nhiên hầu hết các vi điều khiển AT89 trên thị trường chỉ tích hợp sẵn trên chip một lượng bộ nhớ chương trình nhất định và chiếm dải địa chỉ từ 0000h trở đi trong không gian bộ nhớ chương trình. AT89C52/AT89S52 có 8kB bộ nhớ chương trình cùng loại. Bộ nhớ chương trình của các chip họ AT89S52 có thể thuộc một trong các loại: ROM, EPROM, Flash, hoặc không có bộ nhớ chương trình bên trong chip. Tên của từng chip thể hiện chính loại bộ nhớ chương trình mà nó mang bên trong, cụ thể là vài ví dụ sau: STT Tên chip ROM EPROM Flash 1 8051 4 Kbyte x x 2 8052 8 Kbyte x x 3 8031 x x x 4 8032 x x x 5 87C51 x 4 Kbyte x 6 87C52 x 8 Kbyte x 7 AT89C51/AT89S51 x x 4 Kbyte 8 AT89C52/AT89S52 x x 8 Kbyte Bảng 3 Bảng mô tả bộ nhớ chương trình của chíp AT89S52 Bộ nhớ chương trình dùng để chứa mã của chương trình nạp vào chip. Mỗi lệnh được mã hóa bởi 1 hay vài byte, dung lượng của bộ nhớ chương trình phản ánh số lượng lệnh mà bộ nhớ có thể chứa được. Địa chỉ đầu tiên của bộ nhớ chương trình (0x0000) chính là địa chỉ Reset của AT89S52. Ngay sau khi reset (do tắt bật nguồn, do mức điện áp tại chân RESET bị kéo lên 5V...), CPU sẽ nhảy đến thực hiện lệnh đặt tại địa chỉ này trước tiên, luôn luôn là như vậy. Phần còn trống trong không gian chương trình không dùng để làm gì cả. Nếu muốn mở rộng bộ nhớ chương trình, ta phải dùng bộ nhớ chương trình bên ngoài có dung lượng như ý muốn. Tuy nhiên khi dùng bộ nhớ chương trình ngoài, bộ nhớ chương trình onchip không dùng được nữa, bộ nhớ chương trình ngoài sẽ chiếm dải địa chỉ ngay từ địa chỉ 0x0000. Trang 14 - Bộ nhớ dữ liệu (Data Memory) Vi điều khiển họ AT89S52 có không gian bộ nhớ dữ liệu là 64kB địa chỉ, đó cũng là dung lượng bộ nhớ dữ liệu lớn nhất mà mỗi chip thuộc họ này có thể có được (nếu phối ghép một cách chính tắc, sử dụng các đường tín hiệu của bus địa chỉ và dữ liệu). Bộ nhớ dữ liệu của các chip họ AT89S52 có thể thuộc một hay hai loại: SRAM hoặc EEPROM. Bộ nhớ dữ liệu SRAM được tích hợp bên trong mọi chip thuộc họ vi điều khiển này, có dung lượng khác nhau tùy loại chip, nhưng thường chỉ khoảng vài trăm byte. Đây chính là nơi chứa các biến trung gian trong quá trình hoạt động của chip. khi mất điện, do bản chất của SRAM mà giá trị của các biến này cũng bị mất theo. Khi có điện trở lại, nội dung của các ô nhớ chứa các biến này cũng là bất kỳ, không thể xác định trước. Bên cạnh bộ nhớ loại SRAM, một số chip thuộc họ AT89S52 còn có thêm bộ nhớ dữ liệu loại EEPROM với dung lượng tối đa vài kB, tùy từng loại chip cụ thể. Tổng quát về bộ nhớ của AT89S52, ta có thể thấy mỗi chip AT89S52 gồm có những bộ nhớ sau: Hình 1.7 Bộ nhớ của chíp AT89S52 Đối với các chip có bộ nhớ SRAM 128 byte thì địa chỉ của các byte SRAM này được đánh số từ 00h đến 7Fh. Đối với các chip có bộ nhớ SRAM Trang 15 256 byte thì địa chỉ của các byte SRAM được đánh số từ 00h đến FFh. Ở cả hai loại chip, SRAM có địa chỉ từ 00h đến 7Fh được gọi là vùng RAM thấp, phần có địa chỉ từ 80h đến FFh (nếu có) được gọi là vùng RAM cao. Bên cạnh các bộ nhớ, bên trong mỗi chip AT89S52 còn có một tập hợp các thanh ghi chức năng đặc biệt (SFR – Special Function Register). Các thanh ghi này liên quan đến hoạt động của các ngoại vi onchip (các cổng vào ra, timer, ngắt ...). Địa chỉ của chúng trùng với dải địa chỉ của vùng SRAM cao, tức là cũng có địa chỉ từ 80h đến FFh. Hình 1.8 Địa chỉ vùng RAM Vậy khi truy cập vào một địa chỉ thuộc dải từ 00h đến 7Fh thì sẽ truy cập đến ô nhớ thuộc vùng RAM thấp. Tuy nhiên khi truy cập đến một địa chỉ x thuộc dải từ 80h đến FFh thì xảy ra vấn đề cần giải quyết: sẽ truy cập đến thanh ghi SFR ở địa chỉ x hay truy cập đến ô nhớ ở địa chỉ x của vùng RAM cao? Nhà sản xuất quy định rằng, trong trường hợp này, nếu kiểu truy cập sử dụng chế độ địa chỉ trực tiếp thì sẽ truy cập vào vùng SFR, ngược lại nếu kiểu truy cập sử dụng chế độ địa chỉ gián tiếp thì sẽ truy cập vào vùng RAM cao. Bộ nhớ dữ liệu RAM onchip thường dùng để chứa các biến tạm thời trong quá trình vi điều khiển hoạt động, đó cũng là nơi dành cho ngăn xếp hoạt động. Trang 16 Không gian dữ liệu 64kB được để trống hoàn toàn và chỉ dùng được khi ghép nối với bộ nhớ dữ liệu bên ngoài. Khi ghép nối thêm bộ nhớ dữ liệu bên ngoài, dung lượng của các bộ nhớ này sẽ chiếm dần các vị trí trong không gian, tuy nhiên không hề ảnh hưởng đến 128 byte RAM onchip. Ngăn xếp trong AT89S52 liên quan đến một thanh ghi tên là con trỏ ngăn xếp SP (Stack Pointer). Thanh ghi này luôn trỏ vào đỉnh của ngăn xếp, tức là nó chứa địa chỉ của vị trí ngay sát vị trí có thể lưu địa chỉ/dữ liệu tiếp theo vào. Khi cất 1 byte địa chỉ/dữ liệu vào ngăn xếp, SP tự động tăng lên 1 đơn vị sau đó mới cất địa chỉ/dữ liệu vào ô nhớ có địa chỉ bằng với giá trị của SP sau khi đã tăng. Khi lấy 1 byte địa chỉ/dữ liệu ra khỏi ngăn xếp, giá trị sẽ được lấy ra sau đó SP mới tự động trừ đi 1 đơn vị. Giá trị sau khi reset của SP là 0x07, do đó quy định ngăn xếp sẽ cất dữ liệu từ địa chỉ 0x08 trở đi. Tuy nhiên do đặc tính hoạt động bành trướng theo chiều tăng địa chỉ mà ngăn xếp thường được bố trí lên vùng trên cùng của bộ nhớ RAM onchip để tránh tranh chấp với các biến lưu trong RAM. - Cổng vào ra song song (I/O Port) AT89S52 có 4 cổng vào ra song song, có tên lần lượt là P0, P1, P2 và P3. Tất cả các cổng này đều là cổng vào ra hai chiều 8bit. Các bit của mỗi cổng là một chân trên chip, như vậy mỗi cổng sẽ có 8 chân trên chip. Hướng dữ liệu (dùng cổng đó làm cổng ra hay cổng vào) là độc lập giữa các cổng và giữa các chân (các bit) trong cùng một cổng. Ví dụ, ta có thể định nghĩa cổng P0 là cổng ra, P1 là cổng vào hoặc ngược lại một cách tùy ý, với cả 2 cổng P2 và P3 còn lại cũng vậy. Trong cùng một cổng P0, ta cũng có thể định nghĩa chân P0.0 là cổng vào, P0.1 lại là cổng ra tùy ý. Liên quan đến mỗi cổng vào/ra song song của 8051 chỉ có một thanh ghi SFR ( thanh ghi chức năng đặc biệt) có tên trùng với tên của cổng. Ta có các thanh ghi P0 dùng cho cổng P0, thanh ghi P1 dùng cho cổng P1 … Đây là các thanh ghi đánh địa chỉ đến từng bit (bit addressable), do đó ta có thể dùng các lệnh tác động bit đối với các bit của các thanh ghi này. Mỗi thanh ghi này Trang 17 gồm 8 bit tương ứng với các chân (bit) của cổng đó. Khi một chân (bit) cổng nào đó được dùng làm cổng vào thì trước đó bit tương ứng trong thanh ghi SFR phải được đặt ở mức 1. Nếu một chân (bit) cổng nào đó được dùng làm cổng ra thì giá trị của bit tương ứng trong thanh ghi SFR sẽ là giá trị lôgic muốn đưa ra chân cổng đó. Nếu muốn đưa ra mức lôgic cao (điện áp gần 5 V), bit tương ứng trong thanh ghi phải được đặt bằng 1, hiển nhiên nếu muốn đưa ra mức lôgic thấp (điện áp gần 0 V) thì bit tương ứng trong thanh ghi phải được đặt bằng 0. Như đã nói ở trên, các bit trong thanh ghi cổng có thể được đặt bằng 1/0 mà không làm ảnh hưởng đến các bit còn lại trong cổng đó bằng cách dùng các lệnh setb (đặt lên 1) hay clr (đặt về 0). Sau khi đặt một chân cổng làm cổng vào, ta có thể dùng các lệnh kiểm tra bit để đọc vào và kiểm tra các mức lôgic của mạch ngoài đang áp vào là mức 0 hay mức 1. Các lệnh này là jb (nhảy nếu bit bằng 1), jnb (nhảy nếu bit bằng 0). Mỗi cổng có cấu trúc gồm một latch (chính là các bit của thanh ghi cổng), mạch lái đầu ra (output driver) và mạch đệm đầu vào (input buffer). Ngoài chức năng vào/ra thông thường, một số cổng còn được tích hợp thêm chức năng của một số ngoại vi khác. Xem bảng liệt kê sau: Bảng 4 Bảng liệt kê chức năng 1 số cổng IC AT89S52 Các chân cổng P1.0 và P1.1 được tích hợp với các tín hiệu của timer2 trong trường hợp chip là AT89S52 Khi dùng với các chức năng của các ngoại vi, chân cổng tương ứng phải được đặt lên 1. Nếu không các tín hiệu sẽ luôn bị ghim ở mức 0. Trang 18 Cổng P0 không có điện trở treo cao (pullup resistor) bên trong, mạch lái tạo mức cao chỉ có khi sử dụng cổng này với tính năng là bus dồn kênh địa chỉ/dữ liệu. Như vậy với chức năng ra thông thường, P0 là cổng ra open drain, với chức năng vào, P0 là cổng vào cao trở (high impedance). Nếu muốn sử dụng cổng P0 làm cổng vào/ra thông thường, ta phải thêm điện trở pullup bên ngoài. Giá trị điện trở pullup bên ngoài thường từ 4.7K đến 10K. Các cổng P1, P2 và P3 đều có điện trở pullup bên trong, do đó có thể dùng với chức năng cổng vào/ra thông thường mà không cần có thêm điện trở pullup bên ngoài. Thực chất, điện trở pullup bên trong là các FET, không phải điện trở tuyến tính thông thường, tuy vậy nhưng khả năng phun dòng ra của mạch lái khi đầu ra ở mức cao (hoặc khi là đầu vào) rất nhỏ, chỉ khoảng 100 µA. - Cổng vào ra nối tiếp (Serial Port) + Cổng nối tiếp trong AT89S52 chủ yếu được dùng trong các ứng dụng có yêu cầu truyền thông với máy tính, hoặc với một vi điều khiển khác. Liên quan đến cổng nối tiếp chủ yếu có 2 thanh ghi: SCON và SBUF. Ngoài ra, một thanh ghi khác là thanh ghi PCON (không đánh địa chỉ bit) có bit 7 tên là SMOD quy định tốc độ truyền của cổng nối tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD = 0). + Dữ liệu được truyền nhận nối tiếp thông qua hai chân cổng P3.0 (RxD) và P3.1 (TxD). + Thanh ghi SBUF là thanh ghi 8 bit chứa dữ liệu truyền hoặc nhận. Về thực chất có hai thanh ghi dữ liệu khác nhau, một dành để chứa dữ liệu truyền đi, một để chứa dữ liệ nhận được. Cả hai thanh ghi này đều có chung một tên là SBUF, tuy nhiên CPU hoàn toàn phân biệt được một cách dễ dàng. Khi ta muốn truyền dữ liệu đi, ta phải ghi vào thanh ghi SBUF (ví dụ viết lệnh mov SBUF,a), còn khi muốn đọc kiểm tra dữ liệu nhận về ta phải đọc thanh ghi SBUF (ví dụ viết lệnh mov a,SBUF). CPU sẽ căn cứ vào việc thanh ghi SBUF nằm ở vị trí toán hạng đích (toán hạng bên trái) hay toán hạng nguồn (toán hạng bên phải) để quyết định sẽ truy nhập (đọc/ghi) Trang 19 thanh ghi SBUF nào. Người lập trình không cần phải quan tâm xử lý vấn đề này. Thanh ghi quy định chế độ hoạt động và điều khiển cổng nối tiếp là thanh ghi SCON (đánh địa chỉ bit). SM0 SM1 SM2 REN TB8 RB8 TI RI Hình 1.9 Thanh ghi SCON của AT89S52 Bit SM0, SM1, SM2 quy định chế độ hoạt động của cổng nối tiếp. Thông thường để truyền thông giữa 2 vi điều khiển hoặc giữa 1 vi điều khiển và 1 máy tính, giá trị của bit SM2 được đặt bằng 0. Khi truyền thông theo kiểu mạng đa vi xử lý (multiprocessor communication), SM2 được đặt bằng 1. Hai bit SM0 và SM1 thực sự là các bit quy định chế độ hoạt động của cổng nối tiếp, chúng tạo ra 4 tổ hợp (00,01,10 và 11) ứng với 4 chế độ hoạt động mô tả trong bảng sau. SM0 0 0 1 1 SM1 0 1 0 1 Chế độ 0 – Đồng bộ 1 – Dị bộ 2 – Dị bộ 3 – Dị bộ Khung dữ liệu 8 bit SBUF 8 bit SBUF 8bit SBUF + RB8/TB8 8bit SBUF + RB8/TB8 Baud rate Fosc/12 Thay đổi được Fosc/32 hoặc Fosc/64 Thay đổi được Bảng 5. Bit SM0 và SM1 của AT89S52 Chế độ 0: là chế độ truyền đồng bộ duy nhất. Chân RxD sẽ là tín hiệu truyền/nhận dữ liệu, chân TxD là tín hiệu xung nhịp. Bit LSB (bit 0) của dữ liệu được truyền đi trước tiên. Tốc độ truyền cố định và bằng 1/12 giá trị thạch anh. Chế độ 1: là chế độ truyền dị bộ 8 bit. Dữ liệu 8 bit được đóng khung bởi một bit Start (= 0) ở đầu và một bit Stop (=1) ở cuối trước khi được truyền đi. Tốc độ truyền thay đổi được theo ý người lập trình. Chếđộ 2: là chế độ truyền dị bộ 9 bit. Dữ liệu 9 bit được ghép thành bởi 8bit trong thanh ghi SBUF và bit RB8 (trường hợp nhận về) hoặc TB8 (trường hợp truyền đi) Trang 20
- Xem thêm -