MỤC LỤC 1 DANH MỤC HÌNH VẼ 4 DANH MỤC BẢNG 4 LỜI MỞ ĐẦU 5 CẢM ƠN 6 CHƯƠNG 1 – TỔNG QUAN VỀ ĐÈN GIAO THÔNG 7 1.1 Giới thiệu đề tài. 7 1.2 Phương pháp nghiên cứu. 8 1.3 Nguyên lý hoạt động. 8 1.4 Vấn đề điều khiển hệ thống đèn tín hiệu. 8 1.5 Một số linh kiện khác. 9 1.5.1 Led 7 thanh. 9 1.5.2 Thạch anh12MHz: 12 1.5.3 Transistor. 13 1.5.4 Led đơn: 13 1.5.5 Điện trở: 14 1.5.6 Tụ. 14 1.5.7 Công tắc Reset. 15 1.5.8 Diot 15 CHƯƠNG 2 – KHẢO SÁT VI ĐIỀU KHIỂN AT89C51 16 2.1 Tổng quát 16 2.1.1 Các đặc điểm của họ vi điều khiển 8051 được tóm tắt như sau : 17 2.1.2 Sơ đồ khối và các chân: 18 2.2 Một số thanh ghi đặc biệt của AT89X52. 24 2.3 Hoạt động định thời 25 2.3.1 Giới thiệu 25 2.3.2 Các thanh ghi của bộ định thời 25 2.3.3 Các chế độ của bộ định thời 29 2.3.4 Các nguồn xung Clock 32 2.4 Cổng nối tiếp 33 2.4.1 Giới thiệu 33 2.4.2 Các thanh ghi của cổng nối tiếp 34 2.4.3 Các chế độ hoạt động 35 2.4.4 Tốc độ baud của Port nối tiếp 39 2.5 Ngắt và xử lý ngắt 39 2.5.1 Giới thiệu 40 2.5.2 Tổ chức ngắt 41 2.5.3 Xử lý ngắt 43 CHƯƠNG 3: XÂY DỰNG MÔ HÌNH ĐIỀU KHIỂN ĐÈN TÍN HIỆU GIAO THÔNG 45 3.1.1 ISISS. 45 3.1.2 ARES. 45 3.2 Phần mềm Keil C. 46 3.3 Sơ đồ khối và hoạt động của hệ thống. 47 3.3.1 Sơ đồ khối. 47 3.3.2 Hoạt động của hệ thống. 47 3.3.3 Phương pháp quét led: 47 3.3.4 Lưu đồ giải thuật: 48 2.4 Sơ đồ mạch mô phỏng. 51 3.5 Chương trình điều khiển. 53 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57 1. Thành quả đạt được 57 2. Nhược điểm 57 3. Hướng phát triển 57 TÀI LIỆU THAM KHẢO: 58
Trang 1ĐẠI HỌC THÁI NGUYÊN TRUỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
& TRUYỀN THÔNG
KHOA: CÔNG NGHỆ ĐIỆN TỬ & TRUYỀN THÔNG
BỘ MÔN: CÔNG NGHỆ KỸ THUẬT MÁY TÍNH
ĐỒ ÁN TỐT NGHIỆP TÌM HIỂU HỌ VI ĐIỀU KHIỂN 8051, XÂY DỰNG HỆ THỐNG ĐIỀU KHIỂN
ĐÈN GIAO THÔNG
Sinh viên thực hiện : Phạm Văn Hưng
Giảng viên hướng dẫn: Nguyễn Ngọc Hoan
Trang 2MỤC LỤC
1.5.2 Thạch anh12MHz: 132.3.3 Các chế độ của bộ định thời 32CHƯƠNG 3: XÂY DỰNG MÔ HÌNH ĐIỀU KHIỂN ĐÈN TÍN HIỆU GIAO THÔNG 49
3.1 Giới thiệu phần mềm mô phỏng mạch điện proteus 7.0 493.3.3 Phương pháp quét led: 54
Trang 3DANH MỤC HÌNH VẼ
Hình 1.1 Giao tiếp vi điều khiển với led 7 đoạn(1) Error: Reference source not found Hình 1.2 Giao tiếp vi điều khiển với led 7 đoạn (2) Error: Reference source not found Hình 2.1 Hình dạng và sơ đồ AT89C51 Error: Reference source not found Hình 2.2 Sơ đồ khối của họ vi điều khiển 8051 Error: Reference source not found Hình 2.3 Mạch thiết lập lại cho 8051 Error: Reference source not found Hình 2.4 Mạch tạo dao động cho bộ dao động trên chip của AT89C51 Error: Reference source not found Hình 2.5 Bộ nhớ dữ liệu trên chip Error: Reference source not found Hình 2.6 Hoạt động của Timer 0 và Timer 1 ở chế độ 0 Error: Reference source not found Hình 2.7 Hoạt động của Timer 0 và Timer 1 ở chế độ 1 Error: Reference source not found Hình 2.8 Hoạt động của Timer 0 và Timer 1 ở chế độ 2 Error: Reference source not found Hình 2.9 Hoạt động của Timer 0 ở chế độ 3 Error: Reference source not found Hình 2.10 Sơ đồ khối cổng nối tiếp của 8051 Error: Reference source not found Hình 2.14Dùng Timer 1 và Timer 2 cung cấp tốc độ baud cho cổng nối tiếp Error: Reference source not found Hình 2.15 Tốc độ baud ở chế độ 1 Error: Reference source not found Hình 2.16 Tốc độ baud ở chế độ 2 Error: Reference source not found Hình 2.17 Tốc độ baud ở chế độ 3 Error: Reference source not found Hình 2.11 Giản đồ truyền nhận dữ liệu ở chế độ 0 Error: Reference source not found Hình 2.12 Tốc độ baud ở chế độ 0 Error: Reference source not found Hình 2.13 Giản đồ truyền nhận dữ liệu của chế độ 1 Error: Reference source not found Hình 2.18 Chương trình trước (a) và sau (b) khi có ngắt xảy ra Error: Reference source not found
DANH MỤC BẢNG
Bảng 1 Thanh ghi chức năng TMOD Error: Reference source not found Bảng 2 Thanh ghi chức năng TCON Error: Reference source not found Bảng 3 Thanh ghi chức năng T2CON Error: Reference source not found Bảng 4 Thanh ghi chức năng T2MOD Error: Reference source not found Bảng 5 Vị trí và ý nghĩa các bit của thanh ghi SCON Error: Reference source not found Bảng 6 Các chế độ của cổng nối tiếp phụ thuộc SM1, SM0 Error: Reference source not found Bảng 7 Bảng tốc độ baud khác nhau Error: Reference source not found Bảng 8 Các giá trị của thanh ghi TH1 tạo tốc độ baud Error: Reference source not found Bảng 9 Vị trí và công dụng các bit của thanh ghi IE Error: Reference source not found Bảng 10 Vị trí và công dụng các bit của thanh ghi IP Error: Reference source not found
Trang 4Bảng 11 Các cờ gây ngắt Error: Reference source not found Bảng 12 Các Vector ngắt Error: Reference source not found
LỜI MỞ ĐẦU
Ngày nay cùng với sự phát triển của khoa học kỹ thuật, xã hội ngày càng văn minh, hiện đại và mạnh mẽ của kinh tế như hiện nay Các hệ thống điện tử rất đa dạng
và đang thay thế các công việc hàng ngày của con người từ những công việc đơn giản đến phức tạp
Vấn đề điều khiển giao thông tại các ngã ba, ngã tư mà không cần đến sự có mặt thường trực của cảnh sát giao thông, người ta sử dụng các đèn giao thông báo hiệu: đèn xanh là được phép đi tiếp, đèn vàng là giảm tốc độ và đèn đỏ là dừng lại Việc sử dụng đèn giao thông như vậy đã giảm thiểu được rất nhiều các vụ tai nạn không mong muốn Nhận thấy đây là vấn đề sát thực với những kiến thức đã trang bị trong quá trình học
tập và nghiên cứu, em đã lựa chọn đề tài : “Nghiên cứu họ vi điều khiển 8051, xây dựng hệ thống điều khiển đèn giao thông” để làm đồ án tốt nghiệp.
Đồ án gồm 3 chương :
Trang 5Chương 1 : Tổng quan về đèn giao thông.
Chương 2 : Họ vi điều khiển 8051 (AT89C51)
Chương 3 : Xây dựng mô hình điều khiển đèn tín hiệu giao thông.
Dù em đã có nhiều cố gắng để hoàn thành tốt đề tài nhưng vẫn không tránh khỏi những thiếu sót, mong các thầy cô thông cảm Em mong được đón nhận những ý kiến đóng góp của các thầy cô
điểm thiếu sót và yếu kém Rất mong sự đóng góp của quý thầy cô cũng như các bạn
để em có thể hoàn thiện hơn đồ án này Em xin chân thành cảm ơn
Trang 6CHƯƠNG 1 – TỔNG QUAN VỀ ĐÈN GIAO THÔNG 1.1 Giới thiệu đề tài.
Hiện nay khoa học rất phát triển, việc thiết kế được một sản phẩm có tính hữu dụng
và mang tính thực tiễn cao là việc làm hết sức cần thiết Kết quả thực hiện không chỉ ảnh hường trực tiếp tới doanh nghiệp mà còn tác động tới người sử dụng Trong học tập và nghiên cứu của sinh viên cũng không ngoại lệ, và một đề tài có thể đáp ứng được yêu cầu trên đó là “mạch điều khiển đèn giao thông” ứng dụng vi điều khiển 8051
Đèn tín hiệu giao thông đường bộ là một thiết bị được dùng để điều khiển giao thông ở những giao lộ có lượng phương tiện lưu thông lớn (thường là ngã ba, ngã tư
Trang 7đông xe qua lại) Đây là một thiết bị quan trọng không những an toàn cho các phương tiện mà còn giúp giảm ùn tắc giao thông vào giờ cao điểm Nó được lắp ở tâm giao lộ hoặc trên vỉa hè Đèn tín hiệu có thể hoạt động tự động hay cảnh sát giao thông điều khiển.
1.2 Phương pháp nghiên cứu.
Cách thức tiến hành nghiên cứu dựa trên sự hiểu biết về vi điều khiển 8051, các kiến thức đã học từ môn “ kỹ thuật lập trình nhúng” Cùng với sự hướng dẫn của GVHD và tận dụng những nguồn thông tin trên Internet
Đèn tín hiệu là một thiết bị quan trọng không những đảm bảo an toàn cho người và phương tiện tham gia giao thông mà còn giúp giảm thiểu ách tắc giao thông tại những nơi có mật độ giao thông cao vào những giờ cao điểm
1.3 Nguyên lý hoạt động.
Mạch đèn giao thông hoạt động dựa trên nội dung đã lập trình cho AT89C51, khi có tác động từ các nút điều khiển mạch hoạt động theo đúng thời gian yêu cầu AT89C51 đưa dữ liệu đến các LED xanh, đỏ, vàng để điều khiển các LED này đóng,
mở Ngoài ra, nó còn xuất dữ liệu đến các bit để điều khiển các LED 7 đoạn LED 7 đoạn còn nhận dữ liệu từ vi điều khiển trung tâm để thực hiện việc đếm lùi thời gian Chúng ta sử dụng ngắt ngoài 0 và ngắt ngoài 1 để điều khiển đèn tín hiệu giao thông bằng tay và cài đặt thời gian cho các đèn(Xanh, đỏ, vàng)
Như vậy mỗi khi mạch bắt đầu thực hiện đếm lùi, nếu trục lộ bên này đèn xanh hoặc vàng sáng thì trục lộ bên kia đèn đỏ sáng và ngược lại Bộ phận điều khiển AT89C51 là các nút nhấn Tùy theo thời gian yêu cầu mà ta điều khiển các trục giao thông sáng AT89C51 sẽ xuất ra các cổng I/O những xung ở mức cao hoặc mức thấp
để điều khiển các bit từ đó điều khiển các đèn hiện thị Khi AT89C51 nhận tín hiệu
Trang 8điều khiển từ các phím nhấn, nó sẽ quét và tím ra chương trình được mã hóa phù hợp với tín hiệu điều khiển để hoạt động.
1.4 Vấn đề điều khiển hệ thống đèn tín hiệu.
Đèn tín hiệu thường hoạt động cả ngày, đến 0 giờ (12 giờ đêm) thì chuyển sang trạng thái nháy vàng hoặc ngừng hoạt động Khi nháy vàng, xe cộ được đi và phải chú
ý, người đi bộ được phép sang đường Đến 6 giờ sáng ngày hôm sau đèn lại hoạt động bình thường trở lại Đôi khi ở một vài ngã tư đông đúc, đèn tín hiệu có thể hoạt động 24/24 mà không nháy vàng Khi hoạt động, đèn thường sáng màu xanh, sau đó đến vàng và đỏ Sau một thời gian hoạt động nhất định, đèn lại chuyển xuống màu xanh.Mật độ giao thông phát triển mạnh mẽ ở các đô thị lớn đòi hỏi hệ thống điều khiển giao thông phải chính xác, đơn giản, nhưng hiệu quả cao Hệ thống đèn giao thông hai pha phần nào đã đáp ứng được những yêu cầu trên
Mỗi pha gồm các đèn: Xanh-Đỏ-Vàng điều khiển các phương tiện cơ giới
Hoạt động của từng pha như sau:
- Đèn xanh: cho phép các phương tiện tham giao giao thông được đi
- Đèn vàng: thông báo cho các phương tiện giảm tốc độ, và chuẩn bị dừng lại
- Đèn đỏ: các phương tiện phải dừng lại
Ngoài ra, vào giờ cao điểm ở những ngã tư giao nhau giữa hai làn đường trục chính
và trục phụ, mật độ phương tiện tham gia giao thông ở làn đường trục chính cao hơn ta
có thể điều chỉnh thời gian sáng của đèn xanh ở làn đường này tăng lên và giảm thời gian sang của đèn đỏ Và vào ban đêm (khoảng từ 23h 5h) lưu lượng phương tiện tham gia giao thông rất ít và hầu như không có, ta có thể điều chỉnh để đèn vàng nhấp nháy tại những ngã tư này
Trang 9Dựa trên những kiến thức cơ bản về họ vi điều khiển 8051, lập trình ghép nối giữa
vi điều khiển với thiết bị ngoại vi, cách sử dụng timer và phương pháp quét led để điều khiển đèn giao thông tại các ngã tư
1.5 Một số linh kiện khác.
1.5.1 Led 7 thanh.
LED 7 thanh được dùng nhiều trong các mạch hiện thị thông báo, hiện thị số, kí tự đơn giản LED 7 thanh được cấu tạo từ các LED đơn sắp xếp theo các thanh nét để có thể biểu diễn các chữ số hoặc các kí tự đơn giản như từ số 0 đến 9 và A đến F LED 7 thanh dùng để hiện số thì rất đẹp và dễ nhìn Tùy vào kích thước của số và kí tự mà mỗi thanh được cấu tạo bởi một hay nhiều LED đơn Các LED đơn đó được ghép và được đặt tên bằng các chữ cái a g và có một dấu chấm dot ( dấu chấm này có thể sáng
và tắt tùy theo yêu cầu) được cấu tạo bởi 1 LED đơn Qua đó người ta chỉ cần 8 bit tương ứng với 8 LED đơn để điều khiển được và hiện thị số từ 0 đến 9 và các kí tự từ
A đến F
Hiện nay trên thị trường có 2 loại LED 7 thanh đó là loại chung Anot và chung catot Cấu tạo của nó gồm 8 con LED đơn được ghép với nhau:
Trang 10- 1 là chung Anot.
- 2 là chung Catot
Có 1 chân cấp nguồn và 8 chân đầu ra hay vào tùy theo Anot chung hay catot chung
Tìm hiểu giao tiếp giữa vi điều khiển với led 7 thanh:
Nếu kết nối mỗi port của vi điều khiển với một led 7 đoạn thì tối đa kết nối được
4 led 7 đoạn Mặt khác nếu kết nối như trên sẽ hạn chế khả năng thực hiện các công việc khác của vi điều khiển Cho nên cần phải kết nối, điều khiển nhiều led 7 đoạn với
số lượng chân điều khiển từ vi điều khiển càng ít càng tốt Có 2 giải pháp: một là sử dụng IC chuyên dụng cho việc hiển thị led 7 đoạn; hai là kết nối
nhiều led 7 đoạn vào cùng một đường xuất tín hiệu hiển thị
• Giải pháp thứ nhất:
Trang 11Để kết nối nhiều led 7 đoạn ở đây ta dùng IC giải mã BCD đó là IC 74LS47 Sơ đồ
kết nối như sau:
Hình 1.1 Giao tiếp vi điều khiển với led 7 đoạn(1)
Sơ đồ trên sử dụng IC 74LS47 giải mã BCD ra led 7 đoạn Dữ liệu xuất ra từ các Port của vi điều khiển dạng mã BCD, led 7 đoạn được dùng là loại anod chung
Trang 12Ưu điểm: ta có thể dễ lập trình bằng ngôn ngữ lập trình ASM, cũng như ngôn ngữ lập trình C.
Nhược điểm: rất tốn kém vì cần sử dụng IC giải mã; mỗi Port của vi điều khiển chỉ
có thể điều khiển tối đa được 2led 7 đoạn Để khắc phục nhược điểm này ta có thể lựa chọn giải pháp thứ 2
• Giải pháp thứ 2:
Hình 1.2 Giao tiếp vi điều khiển với led 7 đoạn (2)
Giải pháp này dùng phương pháp quét led: dựa trên tính chất lưu ảnh trên võng mạc khi quan sát tín hiệu, ta biết rằng mắt con người có khả năng phân biệt sự thay đổi của hiện tượng là 24 hình/s Nếu ta thực hiện với tần số quét lớn hơn 24 hình/s thì mắt người sẽ có cảm giác là led sáng liên tục, nhưng thực tế tại một thời điểm chỉ có một led sáng
Trong sơ đồ trên, led 7 đoạn được sử dụng là loại có Anode chung, với tất cả các chân nhận tín hiệu được kết nối với Port 2 đã qua điện trở hạn dòng Để điều khiển ON/OFF cho các led 7 đoạn, sử dụng transitor loại NPN, transitor này nhận dòng điều khiển từ một ngõ ra của Vi điều khiển, led 7 đoạn sẽ được ON khi tín hiệu từ vi điều
Trang 13khiển đến transitor ở mức 1 Có thể sử transitor loại khác có thông số phù hợp Các điện trở khoảng 4,7K đảm bảo transitor luôn hoạt động ở chế độ ngắt/dẫn (đảm bảo khi led 7 đoạn đang ở trạng thái OFF sẽ bị tắt hoàn toàn, không bị sáng mờ mờ)
Ưu điểm: tốn ít cổng ra của vi điều khiển; mạch thiết kế đơn giản; một vi điều khiển
có thể điều khiển được rất nhiều led 7 đoạn khác nhau
Nhược điểm: khó lập trình, và thường dùng ngôn ngữ C để lập trình cho giải pháp này
=>Bởi vậy trong đề tài này, chúng em đã lựa chọn giải pháp thứ nhất để ghép nối
vi điều khiển 89C51 với led 7 đoạn để thiết kế mạch đèn giao thông
1.5.3 Transistor.
Bốn transistor nối với P1.0 -> P1.3 sử dụng như những chiếc khóa điện tử đóng mở rất nhanh, vừa có tác dụng đệm dòng cho các led đủ sáng vì dòng do vi điều khiển
Trang 14cung cấp không đủ để làm cho các led sáng đẹp được.Và một lý do nữa là nếu ta sử dụng trực tiếp các chân của vi điều khiển sẽ làm vi điều khiển hoạt động quá công suất, dẫn đến vi điều khiển rất nóng và hay bị treo khi hoạt động Sáu transistor nối với P2.0 -> P2.5 dùng để khuếch đại dòng vào các led đơn đồng thời ngăn dòng dò từ vi điều khiển vào các led.
1.5.4 Led đơn:
Các led được lập trình sáng theo thứ tự và thời gian khác nhau để điều khiển giao thông tại các đường giao nhau
1.5.5 Điện trở:
Trang 15Hạ dòng vào cực B của các transistor và dòng từ cực E của transistor ra các led.
1.5.6 Tụ.
- Tụ điện gồm hai bản cực đặt song song ở giữa có môt lớp cách điện gọi là điện môi Người ta thường dung giấy, gốm, mica, giấy tẩm hóa chất làm chất điện môi
- Tụ gốm là tụ không phân biệt âm dương và có điện dung nhỏ
- Tụ hóa là tụ có phân cực âm dương và có điện dung lớn
- Trong mạch giao thông ta sử dụng tụ gốm và tụ hóa
- Tụ điện trong mạch có tác dụng lọc cho điện áp một chiều sau khi dã chỉnh lưu bằng phẳng để cho tải tiêu thụ
1.5.7 Công tắc Reset.
Khởi động lại quá trình hoạt động của mạch
1.5.8 Diot
Ngoài ra mạch còn có thêm một con diot dùng để bảo vệ mạch khi người sử dụng
vô tình cắm ngược nguồn.Và LM7805 để mạch có thể hoạt động với dải điện áp lớn hơn và bảo vệ khi người sử dụng cắm nguồn điện áp lớn hơn đện áp cho phép.Vì qua
Trang 16kinh nghiệm thực tế mạch rất hay bị hỏng vi điều khiển khi ta cắm nhầm nguồn cung
cấp hoặc cắm ngược cực tính của nguồn
CHƯƠNG 2 – KHẢO SÁT VI ĐIỀU KHIỂN AT89C51 2.1 Tổng quát
H ình 2.1 Hình dạng và sơ đồ AT89C51
AT89C51 là một hệ vi tính 8 bit đơn chip CMOS có hiệu suất cao, công suất nguồn tiêu thụ thấp và có 4KB bộ nhớ ROM Flash xóa được/lập trình được Chip này được sản xuất dựa vào công nghệ bộ nhớ không mất nội dung có độ tích hợp cao của Atmel.
Trang 17Chip AT89C51 cũng tương thích với tập lệnh và các chân ra của chuẩn công nghiệp MCS-51 Flash chip này cho phép bộ nhớ chương trình được lập trình lại trên hệ thống Kết hợp một CPU linh hoạt 8 bit với Flash trên một chip đơn thế, Atmel 89C51 là một hệ vi tính 8 bit đơn chip mạnh cho ta một giải pháp có hiệu quả về chi phí và rất linh hoạt đối với các ứng dụng điều khiển.
AT89C51 có các đặc trưng chuẩn sau: 4KN Flash, 128 byte RAM, 32 đường xuất nhập, 2 bộ định thời/đếm 6 bit, một cấu trúc ngắt hai mức ưu tiên và 5 nguyên nhân ngắt, một port nốt tiếp song công, mạch dao động và tạo xung clock trên chip.
Ngoài ra AT89C51 được thiết kế với logic tĩnh cho hoạt đông có tần số giảm xuống 0 và hỗ trợ hai chế độ tiết kiệm năng lượng được lựa chọn bằng phần mềm.
Chế độ nghi dừng CPU trong khi vẫn cho phép RAM, các bộ định thời/đếm, port nối tiếp và hệ thống ngắt tiếp tục hoạt động.
2.1.1 Các đặc điểm của họ vi điều khiển 8051 được tóm tắt như sau :
4 KB EPROM bên trong.
128 Byte RAM nội.
4 Port xuất /nhập I/O 8 bít.
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 (hoạt động trên bít đơn).
210 vị trí nhớ có thể định vị bít.
4 chu kì máy (4 μs đối với thạch anh 12MHz) cho hoạt động nhân hoặc chia.
Có các chế độ nghỉ (Low – power Idle) và chế độ nguồn giảm (power down) Ngoài ra một số IC khác của họ MCS – 51 có thêm bộ định thời thứ 3 và 256 byte RAM nội.
Trang 182.1.2 Sơ đồ khối và các chân:
Hình 2.2 Sơ đồ khối của họ vi điều khiển 8051.
- CPU (Central Processing Unit): Đơn vị xử lý trung tâm tính toán và điều khiển quá trình hoạt động của hệ thống
- OSC (Oscillator): Mạch dao động tạo tín hiệu xung clock cung cấp cho các khối trong chip hoạt động
Trang 19- Interrupt control: Điều khiển ngắt nhận tín hiệu ngắt từ bên ngoài (INT0\, INT1\), từ
bộ định thời (Timer 0, Timer 1) và từ cổng nối tiếp (Serial port), lần luợt đua các tín hiệu ngắt này đến CPU để xử lý
- Other registers: Các thanh ghi khác : Lưu trữ dữ liệu của các port xuất/nhập, trạng thái làm việc của các khối trong chip trong suốt quá trình hoạt động của hệ thống
- RAM (Random Access Memory): Bộ nhớ dữ liệu trong chip lưu trữ các dữ liệu
- ROM (Read Only Memory): Bộ nhớ chương trình trong chip lưu trữ chương trình hoạt động của chip
- I/O ports (In/Out ports): Các port xuất/nhập điều khiển việc xuất nhập dữ liệu duới dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3
- Serial port: Port nối tiếp điều khiển việc xuất nhập dữ liệu dưới dạng nối tiếp giữa trong và ngoài chip thông qua các chân TxD, RxD
- Timer 0, Timer 1: Bộ định thời 0, 1 dùng để định thời gian hoặc đếm sự kiện (đếm xung) thông qua các chân T0, T1
- Bus control: Điều khiển bus điều khiển hoạt động của hệ thống bus và việc di chuyển thông tin trên hệ thống bus
- Bus system: Hệ thống busliên kết các khối trong chip lại với nhau
- Port0:
Là Port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡ nhỏ ( không dùng bộ nhớ mở rộng ) có hai chức năng như các đường I/O Đối với các thiết kế cỡ lớn (với bộ nhớ mở rộng) nó được kết hợp kênh giữa các bus
- Port1:
Port1 là một port I/O trên các chân 1-8 Các chân được ký hiệu P1.0, P1.1, P1.2…
có thể dùng cho các thiết bị ngoài nếu cần Port1 không có chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị ngoài
- Port2:
Trang 20Port2 là một port công dụng kép trên các chân 21 - 28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng.
- Port3:
Port3 là một port công dụng kép trên các chân 10 - 17 Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của
8051 / 8031 như sau :
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
- PSEN (Program Store Enable):
8051/8031 có 4 tín hiệu điều khiển
PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép bộ nhớ chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một EPROM để cho phép đọc các bytes mã lệnh
PSEN sẽ ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chương trình được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã
Trang 21lệnh Khi thi hành chương trình trong ROM nội (8051), PSEN sẽ ở mức thụ động (mức cao).
- ALE (Address Latch Enable)
Tín hiệu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với các xử lí 8085
8088, 8086, 8051 dùng ALE một cách tương tự cho làm việc giải các kênh các bus địa chỉ và dữ liệu Khi Port 0 được dùng trong chế độ chuyển đổi, vừa là bus dữ liệu vừa là bus thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ Sau đó, các đường Port 0 dùng để xuất hoặc nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng là nguồn xung nhịp cho các hệ thống Nếu xung trên 8051 là 12MHz thì ALE có tần số 2MHz Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị mất Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051
- EA (External Access)
Tín hiệu vào EA trên chân 31 thường được mắc lên mức cao (+5V) hoặc mức thấp (GND) Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K) Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng Khi dùng 8031, EA luôn được nối mức thấp vì không có bộ nhớ chương trình trên chip Nếu EA được nối mức thấp bộ nhớ bên trong, chương trình 8051 sẽ bị cấm và chương trình thi hành từ EPROM mở rộng
- RST (Reset)
Ngõ vào RST trên chân 9 là ngõ reset của 8051 Khi tín hiệu này được đưa lên mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi trong 8051 được tải những giá trị thích hợp để khởi động hệ thống Khi chân này đưa lên mức cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp lại những giá trị thích hợp để khởi động lại hệ thống RST
có thể được kích khi cấp điện dùng cho mạch R-C Mạch này như sau:
Trang 22Hình 2.3 Mạch thiết lập lại cho 8051
- Các ngõ vào bộ dao động trên chip
Như đã thấy trong các hình trên, 8051 có một bộ dao động trên chip Nó thường được nối với thạch anh giữa hai chân 18 và 19 Các tụ giữa cũng cần thiết như đã vẽ Tần số thạch anh thông thường là 12MHz
Các chân này (chân 18,19) nối với bộ tạo dao động trên chip Mạch tạo dao động như sau:
Hình 2.4 Mạch tạo dao động cho bộ dao động trên chip của AT89C51
- Các chân nguồn
8051 vận hành với nguồn đơn +5V Vcc được nối vào chân 40 và Vss (GND) được nối vào chân 20
Trang 23Hình 2 .5 Bộ nhớ dữ liệu trên chip
AT89C51 có 128 byte RAM ở bên trong chip RAM trong AT89C51 bao gồm nhiều thành phần: Phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt Họ 8051 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu
Trang 24Chương trình và dữ liệu có thể chứa bên trong AT89C51 vẫn có thể kết nối với 64K byte bộ nhớ chương trình và 64K byte dữ liệu.
RAM bên trong AT89S52 được phân chia như sau:
- Các bank thanh ghi có địa chỉ từ 00H đến 1FH
- RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
- RAM đa dụng từ 30H đến 7FH
- Các thanh ghi chức năng đặc biệt từ 80H đến FFH
Sau đây ta sẽ xét cụ thể địa chỉ truy xuất và chức năng từng vùng RAM nội của AT89C51
- RAM có thể định địa chỉ bit
Vùng địa chỉ từ 20h -2Fh gồm 16 byte có thể thực hiện như vùng RAM đa dụng (truy xuất mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử lý bit
Trang 25- Các bank thanh ghi
Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h – 07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18 – 1Fh Các bank thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7 Sau khi khởi động thì hệ thống bank 0 được chọn sử dụng
Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7 Việc thay đổi bank thanh ghi được thực hiện thông qua thanh ghi từ trạng thái chương trình (PSW)
2.2 Một số thanh ghi đặc biệt của AT89X52.
a Thanh ghi tích lũy.
Thanh ghi tích lũy là thanh ghi được sử dụng nhiều nhất trong AT89C51, được ký hiệu trong câu lệnh A Ngoài ra trong các lệnh xứ lý bit, thanh ghi tích lũy được ký hiệu là ACC
b Thanh ghi B.
Thanh ghi tích lũy có thể truy xuất trực tiếp thông qua địa chỉ E0H (byte) hay truy xuất từng bit thông qua địa chỉ bit từ E0H đến E7H
c Thanh ghi từ trạng thái chương trình.
Thanh ghi từ trạng thái chương trình PSW nằm tại địa chỉ D0H và có các địa chỉ bit
từ D0H đến D7H bao gồm 7 bit (1 bit không sử dụng) có các chức năng sau:
Chức
năng
Trang 26CY (Carry): cờ nhớ, thường được dùng cho các lệnh toán học (C=1 khi có nhớ trong phép cộng hay mượn trong phép trừ)
AC : Cờ nhớ phụ ( thường dùng trong các phép toán BCD)
F0: Được sử dụng tùy theo yêu cầu của người sử dụng
RS1, RS2: dùng để chọn bank thanh ghi sử dụng Khi reset bank 0 sẽ được sử dụng.Chọn bank thanh ghi:
AT89C51 có 3 bộ định thời 16 bit trong đó hai bộ Timer 0, Timer 1 có 4 chế độ hoạt động Timer 2 có 3 chế độ hoạt động Các bộ định thời dùng để định khoảng thời gian (hẹn giờ), đếm sự kiện xảy ra bên ngoài bộ vi điều khiển hoặc tạo tốc độ baud cho cổng nối tiếp
Trang 27Trong các ứng dụng định khoảng thời gian, Timer được lập trình sao cho sẽ tràn sau một khoảng thời gian và thiết lập cờ tràn bằng 1 Cờ tràn được sử dụng bởi chương trình để thực hiện một hành động tương ứng như kiểm tra trạng thái của các ngõ vào hoặc gửi các sự kiện ra các ngõ ra.
Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện Trong ứng dụng này người ta tìm cách quy các sự kiện thành sự chuyển mức từ 1 xuống 0 trên các chân T0 hoặc T1 hoặc T2 để dùng các Timer tương ứng đếm các sự kiện đó
2.3.2 Các thanh ghi của bộ định thời
2.3.2.1 Các thanh ghi của Timer 0, Timer 1
-Thanh ghi chế độ định thời (TMOD)Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0
và Timer 1
Thanh ghi TMOD
Trang 28Bảng 1 Thanh ghi chức năng TMOD
7 GATE1 1 Bit mở cổng cho timer 1, khi được đặt
bằng 1 thì Timer 1 chỉ chạy khi chânINT1 ở mức cao
6 C/#T1 1 Bit chọn chế độ Counter/Timer 1
1=bộ đếm sự kiện0=bộ định khoảng thời gian
00: chế độ 0-Timer 13 bit01: chế độ 1-Timer 16 bit10: chế độ 2-8 bit tự động nạp lại
3 GATE0 0 Bit mở cổng Timer 0, khi được đặt bằng
1 thì Timer 0 chỉ chạy khi chân INT0 ở
2 C/#T0 0 Bit chọn chế độ Counter/Timer của
Timer 0
TMOD không có bit định vị, nó thường load một lần bởi phần mềm ở đầu chương trình để khởi động mode Timer Sau đó sự định giờ có thể dừng lại, được khởi động lại như thế bởi truy xuất của các thanh ghi chức năng đặc biệt của Timer khác
-Thanh ghi điều khiển Timer (TCON)
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển Timer 0 và Timer 1 Bốn bit cao trong TCON ( TCON.4-TCON.7 ) được dùng để điều khiển các bộ định thời hoạt động hoặc ngưng ( TR0, TR1) hoặc để báo các bộ định thời tràn (TF0, TF1)
Trang 29Bốn bit thấp của TCON ( TCON.0-TCON.3 ) không dùng để điều khiển các bộ định thời, chúng được dùng để phát hiện và khởi động các ngắt ngoài.
TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0
Thanh ghi TCON
Bảng 2 Thanh ghi chức năng TCON
TCON.7 TF1 8F Cờ báo tràn của T1, được đặt bởi
phần cứng khi có tràn, được xóa bởiphần mềm hoặc bởi phần cứng khi
bộ VXL chỉ đến chương trình phụcTCON.6 TR1 8EH Bit điều khiển T1 hoạt động được
đặt xóa bởi phần mềm để điều khiểncho Timer chạy/dừng
- Các thanh ghi chứa giá trị của các bộ định thời
Các Timer 0 và Timer 1 đều là các Timer 16 bit, mỗi Timer có thanh ghi 8 bit dùng
để chứa giá trị khởi tạo hoặc giá trị hiện thời của các Timer
Cụ thể như sau :
Timer 0 có TH0 và TL0, Timer 1 có TH1 và TL1
Trang 30* Các thanh ghi này không được định địa chỉ bit.
Timer 1TH1(8bit) TL1(8bit)
Timer 0TH0(8bit) TL0(8bit)
2.3.2.2 Các thanh ghi của Timer 2
- Thanh ghi T2CON
T2CON.7 T2CON.6 T2CON.5 T2CON.4 T2CON.3 T2CON.2 T2CON.1 T2CON.0
Bảng 3 Thanh ghi chức năng T2CON
T2CON.7 TF2 CFH Cờ báo tràn của Timer 2, TF2 được đặt khi
Timer 2 tràn và được xóa bằng phần mềm, TF2không được thiết lập khi TCLK và RCLK đượcT2CON.6 EXF2 CEH Cờ ngắt ngoài Timer 2, TXF2=1 khi xảy ra sự
nạp lại hoặc thu nhận, EXF2=1 cũng gây ra ngắt
T2CON.5 RCLK CDH Bit chọn Timer cung cấp xung nhịp cho đường
nhận của cổng nối tiếp
- RCLK=1 thì Timer 2 sẽ cung cấp tốc độ baudcho cổng nối tiếp (ở chế độ 1 và 3)
T2CON.4 TCLK CCH Bit chọn Timer cung cấp xung nhịp cho đường
truyền của cổng nối tiếp
- TCLK=1 thì Timer 2 sẽ cung cấp tốc độ baudcho cổng nối tiếp ở đường truyền
- TCLK=0 thì Timer 1 sẽ cung cấp tốc độ baud
Trang 31T2CON.3 EXEN2 CBH Bit điều khiển hoạt động của Timer 2, khi
EXEN2=1 việc nạp lại hoặc thu nhận (capture)diễn ra khi có sự chuyển trạng thái từ 1 sang 0 ở
T2CON.2 TR2 CAH Bit điều khiển hoạt động của Timer 2 (tương tự
TR0, TR1)T2CON.1 C/#T2 C9H Bit chọn chế độ đếm hoặc định thời của Timer
2T2CON.0 CP/#RL2 C8H Bit chọn chế độ thu nhận hay nạp lại của Timer
- Khi CP/#RL2=0, việc nạp lại được thực hiện
- Thanh ghi T2MOD
T2MOD có địa chỉ 0C9H
Bảng 4 Thanh ghi chức năng T2MOD
T2MOD.1 T2OE Cho phép đầu ra khi sử dụng Timer 2 để tạo xung
T2MOD.0 DCEN Bit cho phép Timer 2 hoạt động như bộ đếm tiến/lùi
Trang 32* Thanh ghi này không định địa chỉ bit
- Thanh ghi TH2 và TL2, RCAP2H và RCAP2L
Cũng giống như TH0, TH1 và TL0, TL1, TH2 và TL2 chứa giá trị đếm của Timer 2, tuy nhiên khác nhau là Timer 0, Timer 1 có thể dùng THx để chứa giá trị nạp lại còn Timer 2 dùng RCAP2H và RCAP2L để chứa giá trị cần nạp lại
2.3.3 Các chế độ của bộ định thời
- Chế độ 0
Hình 2.6 Hoạt động của Timer 0 và Timer 1 ở chế độ 0
Chế độ 0 là chế độ định thời 13 bit, chế độ này tương thích với các bộ vi điều khiển trước đó, trong các ứng dụng hiện nay chế độ này không còn thích hợp
- Chế độ 1
Trong chế độ 1, bộ Timer dùng cả hai thanh ghi TH và TL để chứa giá trị đếm, vì vậy chế độ này còn được gọi là chế độ định thời 16 bit Bit MSB sẽ là bit D7 của TH còn bit LSB là D0 của TL
Trang 33Hình 2.7 Hoạt động của Timer 0 và Timer 1 ở chế độ 1
Hình 2.6 mô tả hoạt động của các Timer ở chế độ 1: Nguồn xung clock được đưa tới Timer từ một trong cách phụ thuộc vào bit C/#T trong thanh ghi TMOD
+ Nếu C/#T=1, xung clock sẽ được lấy từ bên ngoài qua chân Tx (T0, T1, T2).+ Nếu C/#T=0, xung clock sẽ được lấy từ bộ chia tần trong chip, tần số của xung ở đây là 1/12 tần số của dao động thạch anh
Nguồn xung clock trên sẽ được điều khiển để đưa tới các Timer bằng các bit: TR, GATE và mức logic trên các chân INTx
+ Nếu TRx= 0, các Timer sẽ bị cấm mà không cần quan tâm tới GATE và mức logic trên các chân INTx (thể hiện bằng cổng “AND”)
+ Nếu TRx= 1, các Timer sẽ hoạt động khi hoặc là bit GATE=0 hoặc là bit GATE=1 và trên chân /INTx có mức logic 1
Với chế độ 1, giá trị lớn nhất mà các Timer chứa được là 65535, khi đếm quá giá trị này sẽ xảy ra tràn, khi cờ tràn TF sẽ được đặt =1 Sau khi xảy ra tràn, nếu muốn Timer tiếp tục đếm, chương trình phải có câu lệnh nạp lại giá trị khởi tạo sau khi đã dừng Timer bằng cách xóa bit TR
- Chế độ 2
Trong chế độ 2, bộ Timer dùng TL để chứa giá trị đếm và TH để chứa giá trị nạp lại
vì vậy chế độ này được gọi là chế độ tự nạp lại 8 bit Sau khi đếm quá 255 sẽ xảy ra
Trang 34tràn, khi đó TF được đặt bằng 1 đồng thời giá trị của Timer tự động được nạp lại bằng nội dung của TH.
Hình 2.8 Hoạt động của Timer 0 và Timer 1 ở chế độ 2
- Chế độ 3
Hình 2.9 Hoạt động của Timer 0 ở chế độ 3
Trang 35Trong chế độ 3, Timer 0 được tách thành hai bộ Timer hoạt động độc lập (Hình 1.6), chế độ này sẽ cung cấp cho bộ vi điều khiển thêm bộ Timer nữa.
Bộ Timer thứ nhất với nguồn xung clock được lấy từ bộ chia tần trên chip hoặc từ bộ tạo xung bên ngoài qua chân T0 tùy thuộc vào giá trị của bit C-/T0 Việc điều khiển hoạt động của bộ thứ nhất do bit GATE, bit TR0 và mức logic trên chân INT0 ( giống chế độ 0, 1, 2)
Giá trị đếm của Timer được chứa trong TL0, khi xảy ra tràn, cờ TF0=1 và gây ra ngắt do Timer 0 (nếu được đặt)
Bộ Timer thứ hai với nguồn xung clock được lấy từ bộ chia tần trên chip Việc điều khiển hoạt động của bộ thứ hai chỉ là việc đặt giá trị của bit TR0 Giá trị đếm của Timer được chứa trong TH0, khi xảy ra tràn, cờ TF1=1 và gây ra ngắt do Timer 1 ( nếu được đặt)
Khi Timer 0 được tách thành hai Timer 8 bit thì Timer 1 vẫn có thể hoạt động bình thường ở các chế độ 0, 1, 2, tuy nhiên khi xảy ra tràn cờ TF1 không được thiết lập bằng
1 Như vậy trong trường hợp này Timer 1 chỉ có thể sử dụng cho các ứng dụng không cần đến ngắt (TF1=1), chẳng hạn như tạo tốc độ baud cho port nối tiếp
2.3.4 Các nguồn xung Clock
Có hai nguồn xung clock có thể đếm giờ là sự đếm giờ bên trong và sự đếm sự kiện bên ngoài Bit C/T trong TMOD cho phép chọn 1 trong 2 khi Timer khởi động
- Sự bấm giờ bên trong
Nếu bit C/T = 0 thì hoạt động của Timer liên tục được chọn vào bộ Timer được ghi giờ từ dao động trên chip Một bộ chia 12 được thêm vào để giảm tần số clock đến một giá trị phù hợp hầu hết các ứng dụng Các thanh ghi THx và TLx tăng tốc độ 1/12 lần tần số dao động trên chip Nếu dùng thạch anh 12MHz thì đưa đến tốc độ clock là 1MHz
Các sự tràn Timer sinh ra sau khi con số cố định của những xung clock, nó phụ thuộc vào giá trị khởi tạo được load vào các thanh ghi THx và TLx