Đề tài Vi xử lý 8051

pdf 54 trang phuongnguyen 6330
Bạn đang xem 20 trang mẫu của tài liệu "Đề tài Vi xử lý 8051", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfde_tai_vi_xu_ly_8051.pdf

Nội dung text: Đề tài Vi xử lý 8051

  1. TRƯỜNG KHOA Đề tài Vi xử lý 8051
  2. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Mở Đầu Trong những năm gần đây trên thế giới cùng với sự phát triển mạnh mẽ của nghành cơng nghệ chế tạo linh kiện bán dẫn và vi mạch tổng hợp,một hướng phát triển mới của các vi xử lý đã hình thành đĩ là các vi điều khiển. Ngồi khối xử lý trung tâm, vi điều khiển cịn bao gồm các ngoại vi được tích hợp sẵn để thực hiện được các yêu cầu đặt ra. Bên cạnh đĩ, vi điều khiển cịn cho phép chúng ta lập trình điều khiển chúng một cách phong phú đặc biệt là chúng tiêu thụ cơng suất rất thấp. Với những ưu điểm trên, vi điều khiển đã được sử dụng rộng rãi trên nhiều lĩnh vực khác nhau. Bằng cách áp dụng vi điều khiển trong quá trình sản xuất và xử lý,vi điều khiển đã thực sự thể hiện được ưu thế của mình so với các thiết bị điều khiển thơng thường. Vì những lý do trên, trong nhiều trường Đại học kỹ thuật, vi xử lý thực sự trở thành một mơn học hết sức là quan trọng, vi xử lý 8051 gần như là một mơn học sử dụng để trang bị cho chúng ta những kiến thức cơ bản về vi xử lý, từ đĩ mở rộng ra các loại vi xử lý khác cĩ cấu trúc phức tạp hơn như AVR,PIC, Qua đồ án này, đã giúp chúng em cĩ được hình dung thực tế vi xử lý được áp dụng như thế nào trong cuộc sống hiện tại, chúng em xin chân thành cảm ơn thầy giáo đã nhiệt tình giúp đỡ chỉ bảo chúng em trong quá trình nghiên cứu và học tập, trong quá trình thiết kế và thực hiện khơng thể tránh khỏi những sai sĩt, chúng em mong thầy bỏ qua. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 1
  3. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần I Tổng quan về vi điều khiển 8051 Vi điều khiển 8051 là một trong những vi điều khiển 8 bit thơng dụng nhất hiện nay. Bắt đầu xuất hiện vào năm 1980, trải qua gần 30 năm, hiện đã cĩ tới hàng trăm biến thể Tại Việt Nam, các biến thể của hãng ATMEL là AT89C51, AT89C52, AT89S51, AT89S52 . Chương này sẽ tập trung mơ tả tương đối chi tiết cấu trúc bên trong của các biến thể nĩi trên (tạm gọi chung là AT89) của hãng ATMEL Cấu trúc của AT89 ở dạng sơ đồ khối tổng quát CPU Bộ nhớ Bộ nhớ Vào/ra Vào/ra Ngắt Bộ định chương dữ liệu song nối tiếp thời / bộ trình song đếm P1 Timer0 P2 Timer1 P3 P4 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 2
  4. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Cấu trúc bus Bus địa chỉ của họ vi điều khiển 8051 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 64K. Bus dữ liệu của họ vi điều khiển 8051 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 8051 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ọ 8051 cĩ thể xử lý các tố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 tồ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à lơgic ALU (Arithmethic Logic Unit) – nơi thực hiện tất cả các phép tốn số học và phép lơgic cho quá trình xử lý. Bộ nhớ chương trình (Program Memory) Khơng gian bộ nhớ chương trình của AT89 là 64K byte, 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. AT89C51/AT89S51 cĩ 4K byte bộ nhớ chương trình loại Flash tích hợp sẵn bên trong chip. Đây là bộ nhớ cho phép ghi/xĩa nhiều lần bằng điện, chính vì thế cho phép người sử dụng thay đổi chương trình nhiều lần. Số lần ghi/xĩa được thường lên tới hàng vạn lần. AT89C52/AT89S52 cĩ 8K byte bộ nhớ chương trình cùng loại. Bộ nhớ chương trình của các chip họ 8051 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. 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 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 3
  5. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự 8051. 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 ngồi cĩ dung lượng như ý muốn. Tuy nhiên khi dùng bộ nhớ chương trình ngồi, bộ nhớ chương trình onchip khơng dùng được nữa, bộ nhớ chương trình ngồi sẽ chiếm dải địa chỉ ngay từ địa chỉ 0x0000. Hình ảnh minh họa bộ nhớ chương trình 0x0FFF Thân chương trình (chương trình chính, chương trình con, chương trình xử lý ngắt, bảng các hằng số ) 0x0030 Vector ngắt thứ n Vector ngắt thứ 0x0003 1 địa chỉ reset 0x0000 Bộ nhớ dữ liệu (Data Memory) Vi điều khiển họ 8051 cĩ khơng gian bộ nhớ dữ liệu là 64K đị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 Bộ nhớ dữ liệu của các chip họ 8051 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ỳ, Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 4
  6. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự khơng thể xác định trước. Bên cạnh bộ nhớ loại SRAM, một số chip thuộc họ 8051 cịn cĩ thêm bộ nhớ dữ liệu loại EEPROM với dung lượng tối đa vài Kbyte, tùy từng loại chip cụ thể. Tổng quát về bộ nhớ của 8051, ta cĩ thể thấy mỗi chip 8051 gồm cĩ những bộ nhớ sau: Phần khơng gian Phần khơng gian địa chỉ cho bộ nhớ địa chỉ cho bộ nhớ 64 chương trình cịn dữ liệu (hồn tồn Kbyte trống, bằng 64 trống rỗng 64K Kbyte trừ đi lượng byte, dành cho bộ bộ nhớ onchip nhớ dữ liệu ghép thêm bên ngồi nếu cĩ) Bộ nhớ chương trình onchip Bộ nhớ SRAM Dung lượng tùy loại chip Đố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 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 8051 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. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 5
  7. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Vùng RAM cao, cĩ địa chỉ từ 80h đến FFh Vùng SFR, cũng cĩ địa chỉ từ 80h đến FFh Vùng RAM thấp cĩ địa chỉ từ 00h đến 7Fh 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. Khơng gian dữ liệu 64Kbyte được để trống hồn tồn và chỉ dùng được khi ghép nối với bộ nhớ dữ liệu bên ngồi. Khi ghép nối thêm bộ nhớ dữ liệu bên ngồ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 128byte RAM onchip. Ngăn xếp trong 8051 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 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 6
  8. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự 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. Hình ảnh minh họa bộ nhớ dữ liệu 8052 cĩ 0x7F thêm vùng RAM cao Vùng RAM (địa chỉ Đây là vùng các thường (khơng cũng từ thanh ghi chức đánh địa chỉ bit 0x80 đến năng đặc biệt SFR được) 0xFF) (Special Function nhưng truy Register) cĩ ở cả 0x30 nhập phải 8051 và 8052. Truy nhập (ghi/đọc) Vùng RAM 16 0x2F theo chế độ địa chỉ vùng này là truy byte cĩ thể đánh gián tiếp nhập vào các địa địa chỉ bit từ 0x00 chỉ từ 0x80 đến đ ến 0x7F 0x20 để phân biệt với 0xFF nhưng phải 4 băng thanh ghi 0x1F vùng SFR theo chế độ địa chỉ mỗi băng cĩ 8 trực tiếp thanh ghi R0 7 0x00 Cổng vào ra song song (I/O Port) 8051 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 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 7
  9. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự 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 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 5V), 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 0V) 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). Ngồ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: 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à 8052. 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. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 8
  10. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Sơ đồ của mạch của một chân cổng: 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 ngồi. Giá trị điện trở pullup bên ngồi thường từ 4K7 đến 10K. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 9
  11. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Cổng vào ra nối tiếp (Serial Port) Cổng nối tiếp trong 8051 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. Ngồ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 8bit 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ệu nhận được. Cả hai thanh ghi này đều cĩ chung một tên là SBUF, tuy nhiên CPU hồn tồ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í tốn hạng đích (tốn hạng bên trái) hay tốn hạng nguồn (tốn hạng bên phải) để quyết định sẽ truy nhập (đọc/ghi) 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 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 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 10
  12. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự 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 SM1 Chế độ Khung dữ liệu Baud rate 0 0 0 – Đồng bộ 8 bit SBUF Fosc/12 0 1 1 – Dị bộ 8 bit SBUF Thay đổi được 1 0 2 – Dị bộ 8bit SBUF + Fosc/32 hoặc RB8/TB8 Fosc/64 1 1 3 – Dị bộ 8bit SBUF + Thay đổi được RB8/TB8 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) trong thanh ghi SCON. Ngồi ra các bit Start và Stop vẫn được gắn bình ở đầu và cuối khung truyền. Trong chế độ này, tốc độ truyền chỉ cĩ thể chọn được ở 1 trong 2 mức: 1/32 hoặc 1/64 giá trị của thạch anh (tùy thuộc vào giá trị của bit SMOD trong thanh ghi PCON đã nĩi ở trên). Chế độ 3: cũng là chế độ truyền dị bộ 9 bit, khác với chế độ 2 ở chỗ tốc độ truyền cĩ thể thay đổi được theo ý người lập trình như trong chế độ 1. Bit REN trong thanh ghi SCON là bit cho phép nhận dữ liệu. Dữ liệu chỉ được nhận qua cổng nối tiếp khi bit này = 1. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 11
  13. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Bit TB8 là bit dữ liệu thứ 9 trong trường hợp truyền đi 9 bit (8 bit kia trong thanh ghi SBUF). Bit RB8 là bit dữ liệu thứ 9 trong trường hợp nhận về 9 bit (8 bit kia trong thanh ghi SBUF). Bit TI là cờ ngắt truyền, báo hiệu việc truyền 1 khung dữ liệu đã hồn tất. Bit RI là cờ ngắt nhận, báo hiệu việc nhận 1 khung dữ liệu đã hồn tất. Tĩm lại để sử dụng cổng nối tiếp của 8051, hãy thực hiện các bước sau: - Chọn chế độ cho cổng nối tiếp (đồng bộ/dị bộ, 8bit/9bit ), từ đĩ chọn được giá trị cho các bit trong thanh ghi SCON. Lưu ý xĩa các bit TI và RI. - Chọn tốc độ truyền mong muốn, từ đĩ tính ra giá trị của thanh ghi TH1. Cho timer1 chạy ở chế độ Auto Reload 8bit (khơng dùng ngắt tràn timer1). - Đặt mức ưu tiên ngắt và cho phép ngắt cổng nối tiếp nếu muốn. - Bắt đầu quá trình truyền dữ liệu bằng một lệnh ghi dữ liệu muốn truyền vào thanh ghi SBUF. Quá trình truyền kết thúc thì cờ TI sẽ tự động đặt lên 1. - Khi một khung dữ liệu đã được nhận đầy đủ, cờ RI sẽ tự động đặt lên 1 và người lập trình lúc này cĩ thể dùng lệnh đọc thanh ghi SBUF để lấy dữ liệu nhận được ra xử lý. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 12
  14. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Ngắt (Interrupt) 8051 chỉ cĩ một số lượng khá ít các nguồn ngắt (interrupt source) hoặc cĩ thể gọi là các nguyên nhân ngắt. Mỗi ngắt cĩ một vector ngắt riêng, đĩ là một địa chỉ cố định nằm trong bộ nhớ chương trình, khi ngắt xảy ra, CPU sẽ tự động nhảy đến thực hiện lệnh nằm tại địa chỉ này. Bảng tĩm tắt các STT Tên ngắt Mơ tả Cờ Thanh Vector ngắt ghi chứa ngắt cờ 1 INT0 Ngắt ngồi 0 khi IE0 TCON 0x0003 cĩ tín hiệu tích cực theo kiểu đã chọn ở chân P3.2 2 Timer0 Ngắt tràn timer0 TF0 TCON 0x000B khi giá trị timer0 tràn từ giá trị max về giá trị min 3 INT1 Ngắt ngồi 1 khi IE1 TCON 0x0013 cĩ tín hiệu tích cực theo kiểu đã chọn ở chân P3.3 4 Timer1 Ngắt tràn timer1 TF1 TCON 0x001B khi giá trị timer1 tràn từ giá trị max về giá trị min 5 Serial Port Ngắt cổng nối tiếp TI, RI SCON 0x0023 khi vi điều khiển nhận hoặc truyền xong một byte bằng cổng nối tiếp Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 13
  15. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự ngắt trong 8051 như sau: Với 8052, ngồi các ngắt trên cịn cĩ thêm ngắt của timer2 (do vi điều khiển này cĩ thêm timer2 trong số các ngoại vi onchip). Liên quan đến ngắt chủ yếu cĩ hai thanh ghi là thanh ghi IE và thanh ghi IP. Để cho phép một ngắt, bit tương ứng với ngắt đĩ và bit EA phải được đặt bằng 1. Thanh ghi IE là thanh ghi đánh địa chỉ bit, do đĩ cĩ thể dùng các lệnh tác động bit để tác động riêng rẽ lên từng bit mà khơng làm ảnh hưởng đến giá trị các bit khác. Cờ ngắt hoạt động độc lập với việc cho phép ngắt, điều đĩ cĩ nghĩa là cờ ngắt sẽ tự động đặt lên bằng 1 khi cĩ sự kiện gây ngắt xảy ra, bất kể sự kiện đĩ cĩ được cho phép ngắt hay khơng. Do vậy, trước khi cho phép một ngắt, ta nên xĩa cờ của ngắt đĩ để đảm bảo sau khi cho phép, các sự kiện gây ngắt trong quá khứ khơng thể gây ngắt nữa. Ngoại trừ cờ của của ngắt nối tiếp (và cờ của ngắt timer2 trong 8052), các cờ ngắt khác đều tự động được xĩa khi CPU thực hiện chương trình phục vụ ngắt. Lý do là ngắt cổng nối tiếp (và ngắt timer2 trong 8052) được gây ra bởi 2 nguyên nhân (cĩ 2 cờ cho mỗi ngắt), khi xảy ra ngắt, người lập trình cần phải kiểm tra xem cờ nào được đặt bằng 1 để phân biệt nguyên nhân gây ra ngắt đĩ là nguyên nhân nào để xử lý thích hợp. Trong chương trình xử lý ngắt, người lập trình phải kiểm tra cờ TI hay cờ RI bằng 1 để quyết định xử lý ngắt truyền hay xử lý ngắt nhận. Sau khi kiểm tra, người lập trình phải viết lệnh xĩa cờ đĩ vì việc này khơng được CPU thực hiện tự động như các cờ ngắt khác. Nĩi đến ngắt khơng thể khơng nĩi đến mức ưu tiên của ngắt. Mức ưu tiên của ngắt ở đây cĩ thể được hiểu là sự phân bậc, quyết định xử lý ngắt nào khi hai hay nhiều ngắt xảy ra. Cĩ 2 cơ chế phân bậc ưu tiên. Thứ nhất là cơ chế phân bậc dành cho các ngắt xảy ra đồng thời, hai ngắt A và B xảy ra cùng một thời điểm nhìn từ phía vi điều khiển. Thứ hai là cơ chế phân bậc dành cho các ngắt xảy ra xen kẽ nhau, trong khi đang xử lý Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 14
  16. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự ngắt A thì ngắt B xảy ra, vậy thì trong từng trường hợp, CPU sẽ xử lý ra sao? Hãy xem dưới đây. Với trường hợp các ngắt xảy ra đồng thời, CPU sẽ xem xét mức ưu tiên của các ngắt đĩ, từ đĩ quyết định xử lý ngắt cĩ mức ưu tiên cao hơn trước. Mức ưu tiên trong trường hợp này là mức ưu tiên cứng (được quy định bởi nhà sản xuất, bởi cấu trúc sẵn cĩ của 8051 và người lập trình khơng thể thay đổi được). Nhìn vào bảng trên ta thấy ngắt INT0 là ngắt cĩ mức ưu tiên cao nhất và ngắt timer2 là ngắt cĩ mức ưu tiên thấp nhất trong số các ngắt. Như vậy nếu ngắt ngồi 1 và ngắt timer0 cùng xảy ra một lúc, ngắt timer0 sẽ được CPU xử lý trước, sau đĩ mới xử lý ngắt ngồi 1. Với trường hợp xảy ra ngắt xen kẽ, khi CPU đang xử lý ngắt A mà ngắt B xảy ra, CPU sẽ giải quyết theo 2 hướng: tiếp tục xử lý ngắt A nếu mức ưu tiên của ngắt B khơng cao hơn mức ưu tiên của ngắt A, hoặc sẽ dừng việc xử lý ngắt A lại, chuyển sang xử lý ngắt B nếu mức ưu tiên của ngắt B cao hơn mức ưu tiên của ngắt A. Mức ưu tiên cho các ngắt trong trường hợp này khơng phải là mức ưu tiên cứng do nhà sản xuất quy định (tức là khơng căn cứ vào bảng trên) mà là do người lập trình đặt. Lập trình viên cĩ thể dùng thanh ghi IP để quy định mức ưu tiên cho các ngắt ở một trong hai mức: mức cao và mức thấp. Để đặt mức ưu tiên của một ngắt (trong trường hợp xảy ra xen kẽ) ở mức cao, ta đặt bit tương ứng với ngắt đĩ trong thanh ghi IP bằng 1, mức thấp ứng với giá trị bit = 0. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 15
  17. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Thanh ghi IP (Interrupt Priority) - - PT2 PS PT1 PX1 PT0 PX0 Các bit trong thanh ghi IP tương ứng với các ngắt đúng như trong thanh ghi IE (bit PX0 dành cho ngắt ngồi 0, bit PT0 dành cho ngắt timer 0 ) Một điều dễ nhận ra là nếu một ngắt được đặt mức ưu tiên cao (bit tương ứng trong thanh ghi IP bằng 1) thì sẽ chẳng cĩ ngắt nào cĩ thể xen vào quá trình xử lý nĩ được nữa. Nĩi về mức ưu tiên ngắt, cĩ thể dùng một ví dụ tổng quát sau, giả sử hai ngắt timer0 và ngắt cổng nối tiếp cùng được cho phép (các bit tương ứng và bit EA trong thanh ghi IE được đặt bằng 1), bit PT0 = 0, bit PS = 1 thì: - Nếu hai ngắt cùng xảy ra, ngắt timer0 sẽ thắng thế và được phục vụ trước. - Nếu ngắt cổng nối tiếp xảy ra trước và đang được xử lý thì ngắt timer0 nếu cĩ xảy ra cũng khơng thể chen vào, làm dừng quá trình xử lý ngắt cổng nối tiếp được. - Nếu ngắt timer0 xảy ra trước và đang được xử lý mà ngắt cổng nối tiếp xảy ra thì CPU sẽ phải dừng việc xử lý ngắt timer0 lại, chuyển sang xử lý ngắt cổng nối tiếp, xử lý xong mới quay lại xử lý tiếp ngắt timer0. Như đã nĩi ở trên, 8051 cĩ 2 ngắt ngồi là INT0 và INT1. Ngắt ngồi được hiểu là ngắt được gây ra bởi sự kiện mức lơgic 0 (mức điện áp thấp, gần 0V) hoặc sườn xuống (sự chuyển mức điện áp từ mức cao về mức thấp) xảy ra ở chân ngắt tương ứng (P3.2 với ngắt ngồi 0 và P3.3 với ngắt ngồi 1). Việc lựa chọn kiểu ngắt được thực hiện bằng các Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 16
  18. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự bit IT (Interrupt Type) nằm trong thanh ghi TCON. Đây là thanh ghi điều khiển timer nhưng 4 bit LSB (bit0 3) được dùng cho các ngắt ngồi. Khi bit Itx = 1 thì ngắt ngồi tương ứng được chọn kiểu là ngắt theo sườn xuống, ngược lại nếu bit Itx = 0 thì ngắt ngồi tương ứng được sẽ cĩ kiểu ngắt là ngắt theo mức thấp. Các bit IE là các bit cờ ngắt ngồi, chỉ cĩ tác dụng trong trường hợp kiểu ngắt được chọn là ngắt theo sườn xuống. Khi kiểu ngắt theo sườn xuống được chọn thì ngắt sẽ xảy ra duy nhất một lần khi cĩ sườn xuống của tín hiệu, sau đĩ khi tín hiệu ở mức thấp, hoặc cĩ sườn lên, hoặc ở mức cao thì cũng khơng cĩ ngắt xảy ra nữa cho đến khi cĩ sườn xuống tiếp theo. Cờ ngắt IE sẽ dựng lên khi cĩ sườn xuống và tự động bị xĩa khi CPU bắt đầu xử lý ngắt. Khi kiểu ngắt theo mức thấp được chọn thì ngắt sẽ xảy ra bất cứ khi nào tín hiệu tại chân ngắt ở mức thấp. Nếu sau khi xử lý xong ngắt mà tín hiệu vẫn ở mức thấp thì lại ngắt tiếp, cứ như vậy cho đến khi xử lý xong ngắt lần thứ n , tín hiệu đã lên mức cao rồi thì thơi khơng ngắt nữa. Cờ ngắt IE trong trường hợp này khơng cĩ ý nghĩa gì cả. Thơng thường kiểu ngắt hay được chọn là ngắt theo sườn xuống. Bộ định thời/Bộ đếm (Timer/Counter) 8051 cĩ 2 timer tên là timer0 và timer1. Các timer này đều là timer 16bit, giá trị đếm max do đĩ bằng 216 = 65536 (đếm từ 0 đến 65535). Hai timer cĩ nguyên lý hoạt động hồn tồn giống nhau và độc lập. Sau khi cho phép chạy, mỗi khi cĩ thêm một xung tại đầu vào đếm, giá trị của timer sẽ tự động được tăng lên 1 đơn vị, cứ như vậy cho đến khi giá trị tăng lên vượt quá giá trị max mà thanh ghi đếm cĩ thể biểu diễn thì giá trị đếm lại được đưa trở về giá trị min (thơng thường min = 0). Sự kiện này được hiểu là sự kiện tràn timer (overflow) và cĩ thể gây ra ngắt nếu ngắt tràn timer được cho phép (bit Etx trong thanh ghi IE = 1). Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 17
  19. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Việc cho timer chạy/dừng được thực hiện bởi các bit TR trong thanh ghi TCON (đánh địa chỉ đến từng bit). Khi bit TRx = 1, timerx sẽ đếm, ngược lại khi TRx = 0, timerx sẽ khơng đếm mặc dù vẫn cĩ xung đưa vào. Khi dừng khơng đếm, giá trị của timer được giữ nguyên. Các bit TFx là các cờ báo tràn timer, khi sự kiện tràn timer xảy ra, cờ sẽ được tự động đặt lên bằng 1 và nếu ngắt tràn timer được cho phép, ngắt sẽ xảy ra. Khi CPU xử lý ngắt tràn timerx, cờ ngắt TFx tương ứng sẽ tự động được xĩa về 0. Giá trị đếm 16bit của timerx được lưu trong hai thanh ghi THx (byte cao) và TLx (byte thấp). Hai thanh ghi này cĩ thể ghi/đọc được bất kỳ lúc nào. Tuy nhiên nhà sản xuất khuyến cáo rằng nên dừng timer (cho bit TRx = 0) trước khi ghi/đọc các thanh ghi chứa giá trị đếm. Các timer cĩ thể hoạt động theo nhiều chế độ, được quy định bởi các bit trong thanh ghi TMOD (khơng đánh địa chỉ đến từng bit). Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 18
  20. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Để xác định thời gian, người ta chọn nguồn xung nhịp (clock) đưa vào đếm trong timer là xung nhịp bên trong (dành cho CPU). Nguồn xung nhịp này thường rất đều đặn (cĩ tần số ổn định), do đĩ từ số đếm của timer người ta cĩ thể nhân với chu kỳ xung nhịp để tính ra thời gian trơi qua. Timer lúc này được gọi chính xác với cái tên “timer”, tức bộ định thời. Để đếm các sự kiện bên ngồi, người ta chọn nguồn xung nhịp đưa vào đếm trong timer là tín hiệu từ bên ngồi (đã được chuẩn hĩa về dạng xung vuơng 0V/5V). Các tín hiệu này sẽ được nối với các bit cổng cĩ dồn kênh thêm các tính năng T0/T1/T2. Khi cĩ sự kiện bên ngồi gây ra thay đổi mức xung ở đầu vào đếm, timer sẽ tự động tăng lên 1 đơn vị giống như trường hợp đếm xung nhịp bên trong. Lúc này, timer được gọi chính xác với cái tên khác: “counter”, tức bộ đếm (sự kiện). Nhìn vào bảng mơ tả thanh ghi TMOD bên trên, ta cĩ thể nhận thấy cĩ 2 bộ 4 bit giống nhau (gồm GATEx, C/Tx, Mx0 và Mx1) dành cho 2 timer0 và 1. Ý nghĩa các bit là như nhau đối với mỗi timer. Bit GATEx quy định việc cho phép timer đếm (run timer). Nếu GATEx = 0, timerx sẽ đếm khi bit TRx bằng 1, dừng khi bit TRx bằng 0. Nếu GATEx = 1, timerx sẽ chỉ đếm khi bit TRx = 1 và tín hiệu tại chân INTx = 1, dừng khi một trong hai điều kiện trên khơng cịn thỏa mãn. Thơng thường người ta dùng timer với GATE = 0, chỉ dùng timer với GATE = 1 trong trường hợp muốn đo độ rộng xung vì lúc đĩ timer sẽ chỉ đếm thời gian khi xung đưa vào chân INTx ở mức cao. Bit C/Tx quy định nguồn clock đưa vào đếm trong timer. Nếu C/Tx = 0, timer sẽ được cấu hình là bộ định thời, nếu C/Tx = 1, timer sẽ được cấu hình là bộ đếm sự kiện. Hai bit cịn lại (Mx0 và Mx1) tạo ra 4 tổ hợp các giá trị (00,01,10 và 11) ứng với 4 chế độ hoạt động khác nhau của timerx. Trong 4 chế độ đĩ thường chỉ dùng chế độ timer/counter 16bit (Mx1 = 0, Mx0 = 1) và chế độ Auto Reload 8bit timer/counter (Mx1 = 1, Mx0 = 0). Trong chế độ timer/counter 16bit, giá trị đếm (chứa trong hai thanh ghi THx và TLx) tự động được tăng lên 1 đơn vị mỗi lần nhận được thêm Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 19
  21. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự một xung nhịp. Khi giá trị đếm tăng vượt quá giá trị max = 65535 thì sẽ tràn về 0, cờ ngắt TFx được tự động đặt = 1. Chế độ này được dùng trong các ứng dụng đếm thời gian và đếm sự kiện. Trong chế độ Auto Reload 8bit, giá trị đếm sẽ chỉ được chứa trong thanh ghi TLx, cịn giá trị của thanh ghi THx bằng một số n (từ 0 đến 255) do người lập trình đưa vào. Khi cĩ thêm 1 xung nhịp, giá trị đếm trong TLx đương nhiên cũng tăng lên 1 đơn vị như bình thường. Tuy nhiên trong trường hợp này, giá trị đếm lớn nhất là 255 chứ khơng phải 65535 như trường hợp trên vì timer/counter chỉ cịn 8bit. Do vậy sự kiện tràn lúc này xảy ra nhanh hơn, chỉ cần vượt quá 255 là giá trị đếm sẽ tràn. Cờ ngắt TFx vẫn được tự động đặt = 1 như trong trường hợp tràn 16bit. Điểm khác biệt là thay vì tràn về 0, giá trị THx sẽ được tự động nạp lại (Auto Reload) vào thanh ghi TLx, do đĩ timer/counter sau khi tràn sẽ cĩ giá trị bằng n (giá trị chứa trong THx) và sẽ đếm từ giá trị n trở đi. Chế độ này được dùng trong việc tạo Baud rate cho truyền thơng qua cổng nối tiếp. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 20
  22. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần II IC ĐỒNG HỒ THỜI GIAN THỰC DS12C887 1. Khảo sát sơ đồ chân của DS12C887 – Chức năng từng chân. AD0-AD7 – Bus đa hợp địa chỉ/ dữ liệu NC – Bỏ trống MOT - Lựa chọn loại bus CS – Ngõ vào lựa chọn RT C AS – Chốt địa chỉ R/W – Ngõ vào đọc/ghi DS – Chốt dữ liệu RESET\ - Ngõ vàoReset IRQ\ - Ngõ ra yêu cầu ngắt SQW – Ngõ ra sóng vuông VCC – Nguồn cung cấp +5 Volt GND – Mass Chức năng của các chân : GND, VCC: Nguồn cung cấp cho thiết bị ở những chân trên. VCC là điện áp ngõ vào +5 volt . Khi điện áp 5 volts được cung cấp đúng chuẩn, thiết bị được truy cập đầy đủ và dữ liệu có thể đọc và ghi. Khi Vcc thấp hơn 4.25 volts, qúa trình đọc và ghi bị cấm. Tuy nhhiên, chức năng giữ thời gian vẫn được tiếp tục không bị ảnh hưởng bởi điện áp bị sụt giảm bên ngoài. Khi VCC rớt xuống thấp hơn 3V, RAM và bộ giữ giờ được chuyển sang nguồn năng lượng bên trong. Chức năng giữ thời gian duy trì độ chính xác vào khoảng ±1 phút/tháng ở nhiệt độ 250 C bất chấp điện áp ở ngõ vào chân Vcc. MOT (Mode Select): Chân MOT là chân có tính linh hoạt để lựa chọn giữa hai loại bus. Khi được nối lên VCC, bus định thời Motorola được chọn lựa. Khi được nối xuống GND hoặc không nối, bus định thời Intel được lựa chọn. Chân có điện trở kéo xuống bên trong có giá trị vào khoảng 20K. SQW (Square Wave Output): Chân SQW có thể xuất tín hiệu ra từ 1 trong 13 loại được cung cấp từ 15 trạng thái được chia bên trong của Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 21
  23. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Real Time Clock. Tần số của chân SQW có thể thay đổi bằng cách lập trình thanh ghi A như đã trình bày ở bảng 2.1. Tín hiệu SQW có thể mở hoặc tắt sử dụng bit SQWE trong Register B. Tín hiệu SQW không xuất hiện khi Vcc thấp hơn 4.25 volts. AD0-AD7 (Multiplexed Bidirectional Address/Data Bus): Bus đa hợp tiết kiệm chân bởi vì thông tin địa chỉ và thông tin dữ liệu được dùng chung đường tín hiệu. Cùng tại những chân, địa chỉ được xuất trong suốt phần thứ nhất của chu kỳ bus và được dùng cho dữ liệu trong phần thứ 2 của chu kỳ. đa hợp địa chỉ/dữ liệu không làm chậm thời gian truy cập của DS12C887 khi bus chuyển từ địa chỉ sang dữ liệu xảy ra trong suốt thời gian truy cập RAM nội. Địa chỉ phải có giá trị trước khi xuất hiện sườn xuống của AS/ALE, tại thời điểm mà DS12C887 chốt địa chỉ từ AD0 tới AD6. Dữ liệu ghi phải được hiển thị và giữ ổn định trong suốt phần sau của DS hoặc xung WR. Trong chu kỳ đọc của DS12C887 ngõ ra 8 bits của dữ liệu trong suốt phần sau của DS hoặc xung RD. Chu kỳ đọc được thực hiên xong và bus trở về trạng thái tổng trở cao cũng như khi DS bắt đầu chuyển xuống thấp trong trường hợp định thời Motorola hoặc khi RD chuyển lên cao trong trường hợp định thời Intel. AS (Address Strobe Input): Xung dương cung cấp xung chốt địa chỉ trong việc phức hợp bus. Sườn xuống của AS/ALE làm cho địa chỉ bị chốt lại bên trong của DS12C887. Sườn lên tiếp theo khi xuất hiện trên bus AS sẽ xoá địa chỉ bất chấp chân CS có được chọn hay không. Lệnh truy cập có thể gửi tới bằng cả hai cách. DS (Data Strobe or Read Input): Chân DS/RD có 2 kiểu sử dụng tuỳ thuộc vào mức của chân MOT. Khi chân MOT được kết nối lên Vcc, bus định thời Motorola được lựa chọn. Trong kiểu này DS là xung dương trong suốt phần sau của chu kỳ bus và được gọi là Data Strobe. Trong suốt chu kỳ đọc, DS báo hiệu thời gian mà DS12C887 được điều khiển bus đôi. Trong chu kỳ đọc, xung quét của DS là nguyên nhân làm DS12C887 chốt dữ liệu được ghi. Khi chân MOT được nối xuống GND, bus định thời Intel được lựa chọn. Trong kiểu này, chân DS được gọi là Read(RD). RD xác định chu kỳ thời gian khi DS12C887 điều khiển bus đọc dữ liệu. Tín hiệu RD có cùng định nghĩa (same definition) với tín hiệu Output Enable (OE) trong một bộ nhớ riêng. R/ W\ (Read/Write Input): Chân R/ W\ cũng có 2 cách hoạt động. Khi chân MOT được kết nối lên Vcc cho chế độ định thời Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 22
  24. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Motorola, R/W\ đang ở chế độ mà chỉ ra hoặc là chu kỳ hiện tại là chu kỳ đọc hoặc ghi. Chu kỳ đọc đòi hỏi chân R/W\ phải ở mức cao khi chân DS ở mức cao. Chu kỳ ghi đòi hỏi chân R/ W\ phải ở mức thấp trong suốt quá trình chốt tín hiệu của DS. Khi chân MOT được nối GND cho chế độ định thời Intel, tín hiệu R/ W\ là tín hiệu hoạt động mức thấp (an active low signal) được gọi là WR. Trong chế độ này, chân R/ W\ được định nghĩa như tín hiệu Write Enable (WE) trong RAMs chung. CS (Chip Select Input): Tín hiệu chọn lựa phải được xác định ở mức thấp ở chu kỳ bus để DS12C887 được sử dụng. CS phải được giữ trong trạng thái hoạt động trong suốt DS và AS của chế độ định thời Motorola và trong suốt RD và WR của chế độ định thời Intel. Chu kỳ Bus khi chọn vị trí mà không chọn CS sẽ chốt địa chỉ nhưng sẽ không có bất kỳ sự truy cập nào. Khi Vcc thấp hơn 4.25 volts, chức năng bên trong của DS12C887 ngăn chặn sự truy cập bằng cách không cho phép chọn lựa ngõ vào CS. Hành động này nhằm bảo vệ cả dữ liệu của đồng hồ thời gian thực bên trong cũng như dữ liệu RAM trong suốt quá trình mất nguồn. IRQ (Interrupt Request Output): Chân IRQ\ là ngõ ra hoạt động mức thấp của DS12C887 mà có thể sử dụng như ngõ vào ngắt tới bộ xử lý. Ngõ ra IRQ\ ở mức thấp khi bit là nguyên nhân làm ngắt và phù hợp với bit cho phép ngắt được đặt (set). Để xoá chân IRQ\ chương trình của bộ vi xử lý thông thường được đọc ở thanh ghi C. Chân RESET\ cũng bị xoá trong lúc ngắt. Khi không có trạng thái ngắt nào được sử dụng, trạng thái IRQ\ ở trong tình trạng tổng trở cao. Nhiều thiết bị ngắt có thể nối tới một IRQ\ bus. IRQ\ bus là một ngõ ra mở và yêu cầu 1 điện trở kéo lên bên ngoài. RESET\ (Reset Input): Chân RESET\ không có hiệu lực đối với đồng hồ, lịch, hoặc là RAM. Ở chế độ cấp nguồn, chân RESET có thể bị kéo xuống trong thời gian cho phép để ổn định nguồn cung cấp. Thời gian mà chân RESET\ bị kéo xuống mức thấp phụ thuộc vào ứng dụng. Tuy nhiên nếu chân RESET\ được sử dụng ở chế độ cấp nguồn, thời gian RESET\ ở mức thấp có thể vượt quá 200ms để chắc chắn rằng bộ định thời bên trong mà điều khiển DS12C887 ở chế độ power-up đã hết. Khi RESET\ ở mức thấp và VCC ở trên 4.25 volts, những điều sau diễn ra: A. Bit cho phép ngắt định kỳ ((Periodic Interrupt Enable (PEI)) được đặt ở mức 0 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 23
  25. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự B. Bit cho phép ngắt chuông (Alarm Interrupt Enable (AIE)) được đặt ở mức 0. C. Bit cờ cho phép ngắt kết thúc cập nhật ((Update Ended Interrupt Flag (UF)) được xoá về 0 zero. D. Bit cờ trạng thái yêu cầu ngắt (Interrupt Request Status Flag (IRQF)) được đặt ở mức 0. E. Bit cờ cho phép ngắt định kỳ (Periodic Interrupt Flag (PF)) được đặt ở mức 0. F. Thiết bị không sử dụng được cho tới khi chân RESET\ trở lại mức logic 1. G. Bit cờ cho phép ngắt chuông (Alarm Interrupt Flag (AF)) được đặt ở mức 0. H. Chân IRQ\ ở trong trạng thái tổng trở cao. I. Bit cho phép xuất sóng vuông (Square Wave Output Enable (SQWE)) được đặt ở mức 0. J. Bit cho phép ngắt kết thúc cập nhật (Update Ended Interrupt Enable (UIE)) bị xoá về mức 0. Trong các ứng dụng thông thường chân RESET\ có thể được nối lên VCC. Kết nối như vậy sẽ cho phép DS12C887 hoạt động và khi mất nguồn sẽ không làm ảnh hưởng đến bất kỳ thanh ghi điều khiển nào. Hoạt động của Real Time Clock khi được cấp nguồn hoặc mất nguồn. Chức năng của đồng hồ thời gian thực sẽ tiếp tục hoạt động và tất cả RAM, thời gian, lịch và vị trí bộ nhớ báo giờ và những vùng nhớ không mất dữ liệu còn lại bất chấp điện áp ngõ vào VCC. Khi điện áp VCC được cung cấp cho DS12C887 và đạt tới điện áp lớn hơn 4.25 volts, thiết bị có thể sử dụng được sau 200 ms, dao động được cung cấp, nó cho phép bộ dao động hoạt động và quá trình dao động không ảnh hưởng bởi chân reset. Tính đến giai đoạn này hệ thống đã đi vào ổn định sau khi nguồn được cung cấp. Khi VCC rớt xuống dưới 4.25 volts, ngõ vào lựa chọn chip bị bắt buộc chuyển sang trạng thái không hoạt động bất chấp giá trị tại ngõ vào chân CS. Vì vậy DS12C887 được hoạt động ở chế độ chống ghi. Khi DS12C887 đang ở trạng thái chống ghi, mọi ngõ vào đều bị bỏ qua còn các ngõ ra đều ở trạng thái tổng trở cao. Khi VCC rớt xuống điện áp khoảng 3 volts, điện áp VCC cung cấp bên ngoài được cắt đi và nguồn pin lithium ở bên trong DS12C887 sẽ cung cấp nguồn cho Real Time Clock và bộ nhớ RAM. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 24
  26. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự 2. Cấu trúc bên trong Real Time Clock DS12C887 a. Sơ đồ địa chỉ của Real Time Clock Sơ đồ địa chỉ của DS12C887 được trình bày ở hình 2.2. Sơ đồ địa chỉ bao gồm 113 bytes RAM thông dụng, 11 bytes RAM mà thành phần bao gồm đồng hồ thời gian thực, lịch, dữ liệu báo giờ và 4 bytes được sử dụng cho việc điều khiển và thông báo tình trạng. Tất cả 128 bytes có thể được ghi hoặc đọc tực tiếp trừ những trường hợp sau : 1. Thanh ghi C and D là hai thanh ghi chỉ đọc. 2. Bit thứ 7 của thanh ghi A là bit chỉ đọc. 3. Bit cao của byte thứ 2 là bit chỉ đọc. Hình 2.2 Sơ đồ địa chỉ của DS12C887 Thời gian và lịch đã có bằng cách đọc các bytes bộ nhớ hiện có. Thời gian, lịch và báo giờ được đặt hoặc gán giá trị bằng cách ghi giá trị bytes RAM thích hợp. Nội dung của 10 bytes chứa thời gian, lịch và báo giờ đều có thể hiển thị ở cả 2 dạng nhị phân (Binary) hoặc BCD (Binary- Coded Decimal). Trước khi ghi lên các thanh ghi thời gian, lịch, và các thanh ghi báo giờ bên trong, bit SET ở thanh ghi B phải được đặt ở mức logic 1 để ngăn ngừa sự cập nhật có thể xảy ra trong quá trình ghi đè. Thêm vào nữa để ghi lên 10 thanh ghi chỉ thời gian, lịch, và thanh ghi báo giờ ở một định dạng đã lựa chọn (BCD hay nhị phân), bit chọn kiểu dữ liệu (Data mode (DM)) của thanh ghi B phải được đặt ở mức logic thích hợp. Tất cả 10 bytes thời gian, lịch và báo giờ phải sử dụng cùng Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 25
  27. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự kiểu dữ liệu. Bit được đặt ở thanh ghi B nên được xoá sau khi bit kiểu dữ liệu đã được ghi để cho phép đồng hồ thời gian thực cập nhật bytes thời gian và lịch. Vào lúc đầu, đồng hồ thời gian thực cập nhật ở một kiểu đã được lựa chọn. Kiểu dữ liệu không thể thay đổi mà không khởi động lại 10 bytes dữ liệu. Bảng 2 trình bày định dạng nhị phân và BCD của cả thời gian , lịch, và báo giờ. Bit lựa chọn kiểu hiển thị 24–12 không thiể thay đổi mà không khởi động lại thanh ghi giờ. Khi định dạng 12 giờ được lựa chọn, bit cao của bytes giờ tương ứng với PM khi nó được đặt ở mức logic 1. Bytes thời gian, lịch, và bytes báo giờ luôn được truy cập bởi vì chúng được đệm gấp đôi. Mỗi giây một lần, 11 bytes được nâng cấp và được kiểm tra tình trạng báo giờ. Nếu lệnh đọc dữ liệu thời gian và lịch điễn ra trong quá trình cập nhật, một vấn đề phát sinh là giờ, phút, giây, có thể không chính xác. Xác xuất đọc không chính xác dữ liệu thời gian và lịch là rất thấp. Có vài phương pháp tránh một số sai số có thể xảy ra khi đọc thời gian và lịch được đề cập sau trong bài viết. 3 bytes báo giờ có thể sử dụng bằng 2 cách. Cách thứ nhất, khi thời gian báo giờ thược ghi vào vị trí của các thanh ghi giờ, phút, giây, tác động báo giờ được bắt đầu tại thời gian chính xác trong ngày khi bit cho phép báo chuông được đặt ở mức cao. Cách thứ hai sử dụng để đặt trạng thái bất chấp vào một hoặc nhiều bytes báo chuông. Mã bất chấp là bất kỳ mã số hex nào nằm trong giá trị từ C0 đến FF. Hai bit có trọng số lớn nhất của những byte trên đặt vào trạng thái bất chấp khi ở mức logic 1. Báo giờ sẽ được sinh ra mỗi giờ khi bit bất chấp được đặt vào bytes giờ. Tương tự, báo giờ sẽ sinh ra mỗi phút nếu mã bất chấp có ở bytes giờ và bytes phút. Nếu mã bất chấp có ở trong cả 3 bytes báo giờ thì nó sẽ tạo ra tín hiệu ngắt mỗi giây. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 26
  28. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Bảng 1 : Kiểu dữ liệu thời gian, lịch và báo giờ b. Các thanh ghi điều khiển DS12C887 có 4 thanh ghi điều khiển được sử dụng vào mọi lúc kể cả trong quá trình cập nhật. Thanh ghi A MSB LSB BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0 UIP - Update In Progress (UIP) là bit trạng thái mà có thể theo dõi được. Khi bit UIP ở mức 1, quá trình cập nhật sẽ sớm xảy ra. Khi bit UIP ở mức 0, quá trình cập nhật sẽ không xảy ra ít nhất là 244 ms. Những thông tin về thời gian, lịch, và báo giờ ở trong RAM có đầy đủ cho việc truy cập khi bit UIP ở mức 0. Bit UIP là bit chỉ đọc và không bị ảnh hưởng của chân RESET\. Khi ghi bit SET ở thanh ghi B lên 1 để ngăn chặn mọi quá trình cập nhật và xoá bit trạng thái UIP. DV2, DV1, DV0 – 3 bit trên được sử dụng để bật hoặc tắt bộ dao động và cài đặt lại quá trình đếm xuống. Khi được đặt 010 thì đó là sự kết hợp duy nhất để bật bộ dao động lên và cho phép RTC giữ thời gian. Khi được đặt 11X sẽ cho phép dao động nhưng giữ quá trình đếm xuống ở mức reset. Quá trình cập nhật tiếp theo sẽ sớm diễn ra sau 500ms sau khi kiểu 010 được ghi vào DV0, DV1 và DV2. RS3, RS2, RS1, RS0 - 4 bit loại lựa chọn để lựa chọn một trong 13 loại của bộ chia 15 trạng thái hoặc không cho phép xuất tín hiệu chia ra Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 27
  29. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự ngoài. Loại được lựa chọn có thể phát ra sóng vuông (chân SQW) và/hoặc ngắt theo chu kỳ. Người sử dụng có thể sử dụng 1 trong những cách sau : Cho phép ngắt với bit PIE Cho phép xuất ngõ ra chân SQW với bit SQWE Cho phép cả hai hoạt động cùng một lúc và cùng một loại. Không kích hoạt cả 2 Bảng 1 liệt kê chu kỳ ngắt và tần số sóng vuông mà có thể chọn lựa với bit RS. Cả 4 bit đọc/ ghi đều không bị ảnh hưởng bởi chân RESET. THANH GHI B MSB LSB BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 SET PIE AIE UIE SQWE DM 24/12 DSE SET – Khi bit SET ở mức 0, thông thường quá trình cập nhật bằng cách tăng biến đếm 1 lần 1 giây. Khi bit SET được ghi vào mức 1, mọi quá trình cập nhật đều bị cấm, và chương trình có thể bắt đầu (khởi động) bytes thời gian và lịch mà không có quá trình cập nhật nào xảy ra trong quá trình khởi động. Chu kỳ đọc có thể thực thi ở cùng một kiểu. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 28
  30. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự SET là bit đọc/ghi và không chịu ảnh hưởng của nút RESET hoặc các chức năng bên trong của DS12C887. PIE – Bit cho phép ngắt theo chu kỳ (Periodic Interrupt Enable) là bit đọc/ghi, nó cho phép bit cờ ngắt theo chu kỳ (Periodic Interrupt Flag (PF)) trong thanh ghi C để điều khiển chân IRQ\ xuống mức thấp. Khi bit PIE được đặt lên mức 1, chu kỳ ngắt được tạo ra bằng cách điều khiển chân IRQ\ xuống mức thấp tuỳ thuộc vào tỉ lệ phân bố của bit RS3-RS0 ở thanh ghi A. . A 0 in the PIE bit blocks the IRQ\ output from being driven by a periodic interrupt, but the Periodic Flag (PF) bit is still set at the periodic rate. PIE is not modified by any internal DS12C887 functions but is cleared to 0 on RESET\ . AIE – Bit cho phép ngắt báo giờ (Alarm Interrupt Enable (AIE)) là bit đọc/ghi mà khi được đặt lên 1 nó cho phép bit cờ báo giờ(Alarm Flag (AF)) ở thanh ghi C để cho phép ngắt IRQ\. Tín hiệu ngắt báo giờ diễn ra ở tất cả các giây khi cả 3 bytes báo giờ chứa mã báo giờ “don’t care” được thể hiện ở nhị phân như sau 11XXXXXX. Các chức năng bên trong của DS12C887 không bị ảnh hưởng bởi bit AIE. UIE – Bit cho phép kết thúc quá trình ngắt cập nhật (Update Ended Interrupt Enable (UIE)) là bit đọc/ghi mà cho phép bit cờ kết thúc quá trình cập nhật ở thanh ghi C để cho phép ngắt IRQ\. Chân RESET\ ở mức 0 hoặc chân SET ở mức 1 sẽ xóa bit UIE. SQWE – Khi bit cho phép xuất sóng vuông (Square Wave Enable (SQWE)) được đặt lên mức 1, một tín hiệu sóng vuông có tần số được đặt bởi vị trí được lựa chọn của bit RS3 đến RS0 sẽ điều khiển sóng ra tại chân SQW. Khi bit SQWE được đặt ở mức thấp, chân SQW sẽ được giữ ở mức thấp. SQWE là bit đọc\ghi và được xóa khi RESET. SQWE được đặt lên 1 khi được cấp VCC. DM – Bit kiểu dữ liệu (Data Mode (DM)) quy định khi nào thì thông tin lịch và thời gian ở định dạng nhị phân hoặc BCD. Bit DM được đặt bởi chương trình để có định dạng thích hợp và có thể đọc khi được yêu cầu. Bit này không bị thay đổi bởi các chức năng bên trong hoặc chân RESET\. Mức 1 của DM sẽ hiển thị dữ liệu nhị phân còn mức 0 hiển thị dữ liệu Binary Coded Decimal (BCD). 24/12 – Bit điều khiển 24/12 xác định kiểu bytes giờ. Khi ở mức 1 thì nó chỉ chế độ hiển thị 24 giờ, còn ở mức 0 thì chỉ chế độ hiển thị 12 giờ. Bit này là bit đọc ghi và không bị ảnh hưởng bởi các chức năng bên trong cũng như chân RESET\. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 29
  31. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự DSE – Bit cho phép nhớ công khai (Daylight Savings Enable (DSE)) là bit đọc\ghi, nó cho phép 2 cập nhật đặc biệt khi DSE được đặt lên 1. Vào chủ nhật đầu tiên của tháng 4, thời gian sẽ tăng từ 1:59:59 AM lên 3:00:00 AM. Vào chủ nhật cuối cùng của tháng 10, khi thời gian lần đầu tiên đạt được 1:59:59 AM thì nó sẽ đổi thành 1:00:00 AM. Chức năng đặc biệt này sẽ không được thực thi nếu bit DSE ở mức 0. Bit này không bị ảnh hưởng bởi các chức năng bên trong cũng như chân RESET\. Thanh ghi C MSB LSB BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 IRQF PF AF UF 0 0 0 0 9 of 19 IRQF – Bit cờ yêu cầu ngắt (Interrupt Request Flag (IRQF)) được đặt lên 1 khi một trong những điều dưới đây đúng : PF = PIE = 1 AF = AIE = 1 UF = UIE = 1 Điều đó có nghĩa là IRQF = (PF . PIE) + (AF . AIE) + (UF . UIE) Bất cứ lúc nào bit IRQF được đặt lên 1, chân IRQ\ được đặt xuống mức thấp. Bit cờ PF, AF và UF được xoá khi thanh ghi C được chương trình đọc hoặc chân RESET\ ở mức thấp. PF – Bit cờ ngắt theo chu kỳ (Periodic Interrupt Flag (PF)) là bit chỉ đọc, nó được đặt lên mức 1 khi có 1 sườn xung được phát hiện ở tín hiệu lựa chọn của bộ chia. Từ bit RS3 đến RS0 xác định chu kỳ. PF được đặt lên 1 bất chấp trạng thái của bit PIE. Khi cả PF và PIE đều ở mức 1, tín hiệu IRQ\ được kích hoạt và sẽ đặt bit IRQF lên mức 1. Bit PF sẽ bị xoá bằng phần mềm đọc thanh ghi C hoặc chân RESET\. AF - Mức 1 của bit cờ cho phép ngắt báo giờ (Alarm Interrupt Flag (AF)) chỉ ra rằng thời gian hiện tại được so sánh với thời gian báo giờ. Nếu bit AIE còn ở mức 1, chân IRQ\ sẽ xuống mức thấp và 1 sẽ được đặt vào bit IRQF. Khi RESET\ hoặc đọc thanh ghi C sẽ xoá AF. UF – Bit cờ ngắt kết thúc cập nhật (Update Ended Interrupt Flag (UF)) được đặt sau mỗi chu kỳ cập nhật. Khi bit UIE được đặt lên 1, mức 1 ở UF sẽ làm cho bit IRQF lên mức 1, nó sẽ xác định trạng thái chân IRQ\. UF sẽ bị xoá khi thanh ghi C được đọc hoặc có tín hiệu RESET. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 30
  32. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Từ bit 3 đến bit 0- Đây là những bit không sử dụng của thanh ghi trạng thái C. Những bit này luôn luôn ở mức 0 và không thể ghi đè. REGISTER D MSB LSB BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 VRT 0 0 0 0 0 0 0 VRT – Bit thời gian và RAM hợp lệ (Valid RAM and Time (VRT)) biểu thị tình tạng của của pin được kết nối chân VBAT. Bit này không phải là bit ghi được và luôn có giá trị bằng 1 khi đọc. Nếu hiển thị mức 0, nguồn năng lượng lithium bên trong đã cạn và cả hai mục dữ liệu thời gian thực lẫn dữ liệu RAM đều bị nghi ngờ. Bit này không chịu ảnh hưởng bởi chân RESET. BIT 6 ĐẾN BIT 0 – Những bit được đề cập ở trên của thanh ghi D không được sử dụng. Chúng không ghi được và khi đọc thì luôn có giá trị bằng 0. 3 Chu kỳ cập nhật DS12C887 thực hiện một chu kỳ cập nhật mỗi lần một giây bất chấp bit SET ở thanh ghi B. Khi bit SET ở thanh ghi B được đặt lên 1, bộ phận sao chép từ bộ đệm các bytes thời gian, lịch, báo giờ sẽ không hoạt động và sẽ không cập nhật thời gian khi thời gian tăng lên. Tuy nhiên, quá trình đếm giờ vẫn tiếp tục để cập nhật bộ nhớ nội để sao chép vào bộ đệm. Hành động này cho phép thời gian vẫn duy trì độ chính xác mà không phụ thuộc quá trình đọc hoặc ghi bộ đệm thời gian, lịch và báo giờ và cũng chắc chắn rằng những thông tin về thời gian và lịch là phù hợp. Chu kỳ cập nhật cũng so sánh những bytes báo giờ với những bytes thời gian tương ứng và kết quả là có báo giờ nếu giống nhau hoặc là mã “don’t care” được đặt cho tất cả 3 vị trí. Có 3 cách có thể điều khiển truy cập đồng hồ thời gian thực mà có thể tránh được bất kỳ khả năng truy cập các dữ liệu về thời gian và lịch mâu thuẫ với nhau. Cách thứ nhất sử dụng ngắt kết thúc cập nhật. Nếu được kích hoạt, một tín hiệu ngắt sẽ xảy ra sau mỗi chu kỳ cập nhật mà chỉ ra rằng có hơn 999ms để đọc những thông tin về thời gian và ngày tháng thực. Nếu ngắt này được sử dụng, bit IRQF ở thanh ghi C phải được xóa trước khi bỏ những ngắt thường lệ. Cách thứ 2 sử dụng bit đang cập nhật (Update-In-Progress (UIP)) ở thanh ghi A để xác nhận răng chu kỳ cập nhật đang được tiến hành. Bit UIP sẽ phát xung mỗi lần một giây. Sau khi bit UIP lên mức cao, quá trình cập nhật tiến hành sau 244ms. Nếu bit UIP ở mức thấp, nó Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 31
  33. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự cần ít nhất 244ms trước khi dữ liệu thời gian/lịch thay đổi. Chính vì vậy, người sử dụng có thể tránh được những phục vụ ngắt thông thường mà có thể làm thời gian cần thiết để đọc đúng dữ liệu thời gian/lịch vượt quá 244ms. Cách thứ 3 sử dụng ngắt theo chu kỳ để xác định khi có một chu kỳ cập nhật. Bit UIP ở thanh ghi A được đặt lên mức 1 trong khi đặt bit PF ở thanh ghi C. Ngắt theo chu kỳ xuất hiện làm cho một phần lớn của hơn của tBUC cho phép thông tin thực về thời gian và lịch có thể đạt được tại tất cả nơi xảy ra của chu kỳ ngắt. Việc đọc chỉ có thể hoàn tất khi 1 ( tPI/2 + tBUC ) để chắc chắn rằng dữ liệu không được đọc trong suốt quá trình cập nhật. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 32
  34. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần III Sơ đồ khối tổng quát và sơ đồ nguyên lý RTC Bàn phím 8051 Cịi chít Led 7 thanh Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 33
  35. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Sơ đồ nguyên lý I.Khối nguồn J4 CON3 1 VCC J2 1 2 3 D7 1A POWER U7 7805 R23 1K 1 2 - + 4 1 3 2 VIN VOUT 3 GND D8 C7 C8 LED 1000uF/25V 2 100uF/16V 3 II.Khối vi xử lý VCC R13 10K 1 C1 33p XTAL1 Y 1 12MHz XTAL2 9 8 7 6 5 4 3 2 U5 C2 33p AT89C51 AD0 39 21 a AD1 38 P0.0/AD0 P2.0/A8 22 b AD2 37 P0.1/AD1 P2.1/A9 23 c J3 AD3 36 P0.2/AD2 P2.2/A10 24 d STK500 - ISP AD4 35 P0.3/AD3 P2.3/A11 25 e AD5 34 P0.4/AD4 P2.4/A12 26 f MOSI 1 2 VCC AD6 33 P0.5/AD5 P2.5/A13 27 g 3 4 AD7 32 P0.6/AD6 P2.6/A14 28 dot RESET 5 6 P0.7/AD7 P2.7/A15 SCK 7 8 DOWN 1 10 H1 MISO 9 10 GND CANCEL 2 P1.0 P3.0/RXD 11 H2 MODE 3 P1.1 P3.1/TXD 12 M1 UP 4 P1.2 P3.2/INT0 13 M2 R15 1K D5 LED ALARM 5 P1.3 P3.3/INT1 14 S1 MOSI 6 P1.4 P3.4/T0 15 S2 VCC MISO 7 P1.5 P3.5/T1 16 RW SCK 8 P1.6 P3.6/WR 17 DS VCC P1.7 P3.7/RD U6 XTAL1 19 30 AS DS12887 VCC XTAL2 18 XTAL1 ALE/PROG 29 AD0 4 14 AS R16 XTAL2 PSEN AD1 5 AD0 AS 17 DS 100 31 AD2 6 AD1 DS 1 9 EA/VPP AD3 7 AD2 MOT 18 RST AD4 8 AD3 RST 15 RW SW1 C4 AD5 9 AD4 R/W 13 1uF/16V AD6 10 AD5 CS RESET AD7 11 AD6 R19 10K AD7 RESET 23 SQW 19 R20 IRQ 10K III.Khối hiển thị VCC VCC VCC VCC VCC VCC R1 1K Q2 R2 1K R3 1K Q4 R4 1K R5 1K Q6 R6 1K LED 7 SEG H1 Q1 H2 M1 Q3 M2 S1 Q5 S2 A564 A564 A564 A564 A564 A564 VCC VCC R7 R9 U8 5 6 U9 5 6 U10 5 6 1K 1K a 3 AN1 AN2 8 a a 3 AN1 AN2 8 a a 3 AN1 AN2 8 a b 4 a1 a2 9 b b 4 a1 a2 9 b b 4 a1 a2 9 b c 16 b1 b2 11 c c 16 b1 b2 11 c c 16 b1 b2 11 c d 17 c1 c2 13 d d 17 c1 c2 13 d d 17 c1 c2 13 d D1 D2 D3 D4 e 18 d1 d2 14 e e 18 d1 d2 14 e e 18 d1 d2 14 e f 1 e1 e2 7 f f 1 e1 e2 7 f f 1 e1 e2 7 f LED LED LED LED g 2 f 1 f 2 12 g g 2 f 1 f 2 12 g g 2 f 1 f 2 12 g dot 15 g1 g2 10 dot dot 15 g1 g2 10 dot dot 15 g1 g2 10 dot dot1 dot2 dot1 dot2 dot1 dot2 7seg module2 7seg module2 7seg module2 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 34
  36. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự IV.Khối bàn phím VCC VCC R21 SW2 R22 SW3 10K UP 10K DOWN UP DOWN C5 104 C6 104 VCC VCC R24 SW4 R25 SW5 10K MODE 10K CANCEL MODE CANCEL C9 104 C10 104 POWER V.Khối rơle và cịi chít NE1 R12 U4 NE555 8 4 10K RST 7 VCC DSCHG 5 LS1 CV SPEAKER R14 6 THR 3 100K 2 OUT TRG GND 1 NE2 C3 10uF/50V LS2 RELAY DPDT 4 3 VCC VCC 5 NE1 8 6 7 NE2 1 2 D6 1N4007 R17 1K ALARM Q7 C564 R18 1K SPEAKER Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 35
  37. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần IV Thuật tốn I.Lưu đồ thuật tốn START - Khởi tạo hệ thống - Khởi tạo RTC - Đọc RTC - Kiểm tra phím bấm - Kiểm tra hẹn giờ Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 36
  38. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự · Kiểm tra phím bấm: Check_button Kiểm tra phím bấm SET N mode == 0 ? Y - Cho phép RTC hoạt động - Hiển thị giờ phút giây chính N mode == 1 ? Y - Kiểm tra phím OK - Cài đặt thời gian chính Y mode == 2 ? - Kiểm tra phím OK - Cài đặt hẹn giờ N mode == 3 ? Y - Kiểm tra phím OK END Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 37
  39. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự · Cài đặt thời gian chính: Mode_time Dừng RTC Biến ok == 0? Hiển thị 6 led bình thường Biến ok == 1? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 1,2 (giờ) Biến ok == 2? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 3,4 (phút) Biến ok == 3? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 5,6 (giây) END Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 38
  40. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự · Cài đặt thời gian chính: Mode_timea Cho RTC hoạt động Biến ok == 0? Hiển thị 6 led bình thường Biến ok == 1? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 1,2 (giờ) Biến ok == 2? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 3,4 (phút) Biến ok == 3? - Kiểm tra phím bấm tăng - Kiểm tra phím bấm giảm - Hiển thị led 5,6 (giây) END Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 39
  41. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự · Hiển thị led: Disp numb == 1 ? Quét led 1,2 numb == 2 ? Quét led 3,4 numb == 3 ? Quét led 5,6 numb == 4 ? Quét 6 led END Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 40
  42. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần V Hướng dẫn sử dụng 1.Các phím chức năng - Phím SET : Phím cĩ hai chức năng, cho phép truy cập vào các chế độ cài đặt, hoặc thốt ra. - Phím MODE : Phím cĩ một chức năng, khi truy cập vào chế độ cài đặt cho phép lựa chọn các thơng số cần cài đặt - Phím UP : Phím cĩ hai chức năng. Sử dụng để tăng giá trị cần cài đặt. Chức năng thứ hai là kích hoạt chức năng hẹn giờ. - Phím DOWN : Phím cĩ hai chức năng, sử dụng để giảm giá trị cần cài đặt trong chế độ cài đặt. Chức năng thứ hai là tắt chức năng hẹn giờ. 2.Sử dụng Khi đồng hồ hoạt động ở chế độ bình thường (hiển thị thời gian chính), ban đầu khi ta nhấn phím SET thì sẽ cho phép truy cập vào chế độ cài đặt thời gian chính, sau đĩ ta sử dụng phím MODE để chọn giá trị cài đặt là giờ, phút hoặc là giây. Nếu nhấn phím SET tiếp tục thì sẽ cho phép truy cập vào chế độ cài đặt thời gian hẹn, sau đĩ ta cũng sử dụng phím MODE để chọn giá trị cần cài đặt. Nhấn phím SET lần nữa sẽ quay về trạng thái ban đầu là hiển thị thời gian chính. Trên sản phẩm cĩ sử dụng một đèn led đơn để hiển thị trạng thái khi cĩ kích hoạt chế độ hẹn giờ hay khơng. Nếu đèn sáng thì chế độ hẹn giờ được kích hoạt, nếu khơng thì cĩ nghĩa là chế độ hẹn giờ được tắt. Để cho phép chế độ hẹn giờ được hoạt động ta nhấn phím UP ( chỉ hoạt động trong chế độ hiển thị thời gian chính ) hoặc nếu muốn ngắt chế độ báo giờ ta sử dụng phím DOWN. Khi đến thời gian hẹn giờ, thì hệ thống chuơng sẽ hoạt động. Hệ thống chuơng báo động sẽ kêu liên tục trong thời gian 30s rồi tắt, sau thời Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 41
  43. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự gian 3 phút hệ thống báo động lại hoạt động, hệ thống chuơng báo động sẽ hoạt động với 5 lần kêu như trên, sau đĩ tắt hệ thống báo động và ngắt chức năng hẹn giờ. Ngồi ra ta cũng cĩ thể tắt hệ thống báo động trong khi hệ thống báo động đang hoạt động bằng phím DOWN. Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 42
  44. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Phần VI Chương trình #include / Project : RTC DS12887 MCU : AT89S52 Crystal : 12MHz Date start : Be late Date end : Be late Comments : This program was by KEIL C version 8.05a Led 7 seg : data > P2 ; hour1 -> P3_0 ; hour2 -> P3_1 ; DS12887 : AD0 7 -> P0.0 7 ; RW -> P3_6 ; DS -> P3_7 ; AS -> ALE Speaker -> P1_4 / //Phim bam #define BUT_DOWN P1_0 #define BUT_UP P1_3 #define BUT_OK P1_1 #define BUT_SET P1_2 //Coi chit #define SPEAKER P1_4 //Led bao che do kich hoat hen gio #define LEDA P1_5 //Led 7 seg Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 43
  45. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự #define DIG1 P3_0 //HOUR1 #define DIG2 P3_1 //HOUR2 #define DIG3 P3_2 //MIN1 #define DIG4 P3_3 //MIN2 #define DIG5 P3_4 //SEC1 #define DIG6 P3_5 //SEC2 #define DATA_LED P2 #define BASE 0 #define OFF 1 #define ON 0 //Thoi gian bao dong (dc tinh bang giay) #define TIMEA 30 //Thoi gian keu cach biet nhau dc tinh bang phut #define M1 3 //So lan chuong keu #define M2 4 //Dia chi cac thanh ghi cua RTC #define REGSECOND BASE+0 #define REGSECONDA BASE+1 #define REGMINUTE BASE+2 #define REGMINUTEA BASE+3 #define REGHOUR BASE+4 #define REGHOURA BASE+5 #define REGA BASE+10 #define REGB BASE+11 #define REGC BASE+12 #define REGD BASE+13 #define MA BASE+15 //Ram luu trang thai kich hoat che do hen gio //Khai bao de truy cap theo kieu ram ngoai voi con tro p char xdata *p; //Bang ma led bay thanh char data code_led[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //Cac bien luu gia tri hen gio char hour,min,sec,houra,mina,seca; char mode,ok,n=1; bit func = 0; // //Khai bao cac ham void Init_sys(); void Init_rtc(); void Delay(unsigned char n); void Read_rtc(); void Disp(char var1,char var2,char var3,char var4); void Scan_button(); void Check_setting(); void Check_ok(); void Mode_time(); void Mode_timea(); Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 44
  46. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự void Run_rtc(); void Stop_rtc(); void Check_up(char x,char y); void Check_down(char x,char y); void Check_alarm(); // //Chuong trinh chinh void main() { Init_sys(); Init_rtc(); while(1) { Read_rtc(); Scan_button(); Check_alarm(); } } // //Khoi tao cho he thong void Init_sys() { SPEAKER = OFF; Delay(200); //Dau vao BUT_SET = 1; BUT_OK = 1; BUT_UP = 1; BUT_DOWN = 1; mode = 0; ok = 0; } // //Khoi tao cho RTC void Init_rtc() { //Che do 24h, ma BCD, p[REGB] = 0x20; //Tat che do bao gio p[REGB] = p[MA]; /* //Chi su dung khi can khoi tao lai cho RTC p[REGHOUR] = 0x00; p[REGMINUTE] = 0x01; p[REGSECOND] = 0x02; p[REGDATE] = 0x03; p[REGMONTH] = 0X04; p[REGYEAR] = 0X05; p[REGHOURA] = 0X06; p[REGMINUTEA] = 0X07; p[REGSECOND] = 0X08; */ } // //Chuong trinh doc gia tri tu cac thanh ghi cua RTC void Read_rtc() { Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 45
  47. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự hour = p[REGHOUR]; min = p[REGMINUTE]; sec = p[REGSECOND]; houra = p[REGHOURA]; mina = p[REGMINUTEA]; seca = p[REGSECONDA]; } // //Chuong trinh hien thi tren led bay thanh void Disp(char var1,char var2,char var3,char var4) { char temp1,temp2; switch(var4) { //Chi hien thi led1,2 case 1: temp1 = var1/10; temp2 = var1%10; DATA_LED = code_led[temp1]; DIG1 = 0; Delay(1); DIG1 = 1; DATA_LED = code_led[temp2]; DIG2 = 0; Delay(1); DIG2 = 1; break; //Chi hien thi led3,4 case 2: temp1 = var2/10; temp2 = var2%10; DATA_LED = code_led[temp1]; DIG3 = 0; Delay(1); DIG3 = 1; DATA_LED = code_led[temp2]; DIG4 = 0; Delay(1); DIG4 = 1; break; //Chi hien thi led5,6 case 3: temp1 = var3/10; temp2 = var3%10; DATA_LED = code_led[temp1]; DIG5 = 0; Delay(1); DIG5 = 1; DATA_LED = code_led[temp2]; Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 46
  48. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự DIG6 = 0; Delay(1); DIG6 = 1; break; //Hien thi ca 6 led case 4: temp1 = var1/10; temp2 = var1%10; DATA_LED = code_led[temp1]; DIG1 = 0; Delay(1); DIG1 = 1; DATA_LED = code_led[temp2]; DIG2 = 0; Delay(1); DIG2 = 1; temp1 = var2/10; temp2 = var2%10; DATA_LED = code_led[temp1]; DIG3 = 0; Delay(1); DIG3 = 1; DATA_LED = code_led[temp2]; DIG4 = 0; Delay(1); DIG4 = 1; temp1 = var3/10; temp2 = var3%10; DATA_LED = code_led[temp1]; DIG5 = 0; Delay(1); DIG5 = 1; DATA_LED = code_led[temp2]; DIG6 = 0; Delay(1); DIG6 = 1; break; } } // //Chuong trinh tao tre quet led void Delay(unsigned char n) { unsigned char i,j; for (i=0;i<100;i++) for (j=0;j<n;j++); } // Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 47
  49. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự //Kiem tra phim bam void Scan_button() { //Kiem tra phim bam SETTING Check_setting(); switch(mode) { //Che do 0 hien thi binh thuong case 0: //Cho phep rtc hoat dong Run_rtc(); Disp(hour,min,sec,4); //Cho phep che do bao gio if (BUT_UP == 0) { p[MA] = 0x26; p[REGB] = p[MA]; } //Tat che do bao gio if (BUT_DOWN == 0) { p[MA] = 0x06; p[REGB] = p[MA]; SPEAKER = OFF; func = 0; n = 1; } break; //Che do 1 cai dat gio,phut case 1: //Kiem tra phim bam ok/cancel Check_ok(); //Trong che do cai dat gio Mode_time(); break; //Che do 2 cai dat gio,phut hen case 2: Check_ok(); //Trong che do cai dat gio hen Mode_timea(); break; } } // //Phim bam che do setting void Check_setting() { //Neu co phim an if (BUT_SET == 0) { ++mode; ok = 0; //Chong rung ban phim Delay(200); if (mode == 3) Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 48
  50. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự { mode = 0; } } } // //Phim bam OK/CANCEL void Check_ok() { //Neu co phim an if (BUT_OK == 0) { ++ok; //Chong rung phim Delay(200); if (ok == 4) { ok = 0; } } } // //Cai dat trong che do thoi gian chinh void Mode_time() { //Dung hoat dong cua rtc Stop_rtc(); switch(ok) { case 0: //Hien thi binh thuong Disp(hour,min,sec,4); break; //Che do cai gio case 1: //Kiem tra cac phim an tang giam Check_up(REGHOUR,23); Check_down(REGHOUR,23); Disp(hour,min,sec,1); break; //Che do cai phut case 2: Check_up(REGMINUTE,59); Check_down(REGMINUTE,59); Disp(hour,min,sec,2); break; case 3: Check_up(REGSECOND,59); Check_down(REGSECOND,59); Disp(hour,min,sec,3); break; } } Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 49
  51. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự // //Cai dat trong che do hen gio void Mode_timea() { //Cho phep rtc hoat dong tro lai Run_rtc(); switch(ok) { //Hien thi binh thuong case 0: Disp(houra,mina,seca,4); break; //Che do cai gio hen case 1: Check_up(REGHOURA,23); Check_down(REGHOURA,23); Disp(houra,mina,seca,1); break; //Che do cai phut hen case 2: Check_up(REGMINUTEA,59); Check_down(REGMINUTEA,59); Disp(houra,mina,seca,2); break; //Che do cai giay hen case 3: Check_up(REGSECONDA,59); Check_down(REGSECONDA,59); Disp(houra,mina,seca,3); break; } } // //Phim bam tang void Check_up(char x,char y) { char temp; temp = p[x]; //Neu co phim an if (BUT_UP == 0) { temp++; //Chong rung phim Delay(200); if (temp == (y+1)) { //Tra lai gia tri ban dau neu tang den x temp = 0; } } //Tra lai gia tri p[x] = temp; } Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 50
  52. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự // //Phim bam giam void Check_down(char x,char y) { char temp; temp = p[x]; if (BUT_DOWN == 0) { temp ; //Chong rung phim Delay(200); if (temp == (0-1)) { //Tra lai gia tri ban dau neu giam ve 0 temp = y; } } //Nap lai gia tri moi cho rtc p[x] = temp; } // //Cho phep dung hoat dong cua rtc void Stop_rtc() { //Thay doi bit 7 (=1) cua thanh ghi B , 0x80 = 1000 0000b p[REGB] = p[REGB]|0x80; } // //Cho phep rtc hoat dong void Run_rtc() { //Thay doi bit 7 (=0) cua thanh ghi B , 0x70 = 0111 1111b p[REGB] = p[REGB]&0x7F; } // //Chuong trinh kiem tra bao gio void Check_alarm() { unsigned char temp,buff; temp = p[REGC]&0x80; //Loc lay bit thiet lap bao gio buff = p[REGB]&0x20; //Neu co thiet lap bao gio thi bat led alarm LEDA = buff^0x20; //XOR //Neu co bao gio xay ra if (temp == 0x80) { //Kich loa bao dong SPEAKER = ON; } //Het bao gio,tat loa sau thoi gian TIMEA(s) if (((temp == 0)&&(SPEAKER == ON)&&((sec-TIMEA) == 0))) { //Tat loa SPEAKER = OFF; func = 1; } Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 51
  53. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự if ((func == 1)&&(p[REGB]!= 0x06)) { //Keu tiep tuc trong thoi gian M1 phut if ((min - mina) == n*M1) { //Bat loa SPEAKER = ON; ++n; //Keu M2 lan if (n == (M2+1)) { n = 1; func = 0; SPEAKER = OFF; //Xoa trang thai bao gio p[MA] = 0x06; p[REGB] = p[MA]; } } } } Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 52
  54. Điều Khiển Tự Động 4 - Học Viện Kỹ Thuật Quân Sự Mục Lục Phần I : Tổng quan về vi điều khiển 8051 2 Phần II : Đồng hồ thời gian thực DS 12C877 21 Phần III : Sơ đồ khối và sơ đồ nguyên lý 33 Phần IV : Thuật tốn 36 Phần V : Hướng dẫn sử dụng 39 Phấn VI: Chương trình 43 Đồ án mơn thiết bị hệ thống điều khiển và xử lý tin 53