TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP KHOA ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH BÀI GIẢNG PHÁT CHO SINH VIÊN (LƯU HÀNH NỘI BỘ) Theo chương trình 150 TC thay 180 TC tương đương Sử dụng cho năm học 2009 – 2010 Tên giảng: Vi xử lý – Vi điều khiển Số tín chỉ: 03 BÀI GIẢNG PHÁT CHO SINH VIÊN (LƯU HÀNH NỘI BỘ) Theo chương trình 150 TC thay 180 TC tương đương Sử dụng cho năm học 2009 - 2010 Tên giảng: Vi xử lý – Vi điều khiển Số tín chỉ: 03 Trưởng môn Ths Nguyễn Tuấn Linh Thái Nguyên, ngày 25 tháng 03 năm 2009 Trưởng khoa Điện Tử PGS TS Nguyễn Hữu Công MỤC LỤC CHƯƠNG TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1 GIỚI THIỆU CHUNG VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1.1 Tổng quan 1.1.2 Lịch sử phát triển xử lý 1.1.3 Vi xử lý vi điều khiển 1.2 Cấu trúc chung hệ vi xử lý 1.2.1 Khối xử lý trung tâm (CPU) 1.2.2 Bộ nhớ (Memory) 1.2.3 Khối phối ghép vào/ra (I/O) 11 1.2.4 Hệ thống bus 12 1.3 Định dạng liệu biểu diễn thông tin hệ vi xử lý – vi điều khiển 13 1.3.1 Các hệ đếm 13 1.3.2 Biểu diễn số ký tự 14 1.3.3 Các phép toán số học hệ đếm nhị phân 15 CHƯƠNG HỌ VI XỬ LÝ INTEL 80x86 .16 2.1 Cấu trúc phần cứng vi xử lý 8086 17 2.1.1 Tổng quan 17 2.1.2 Cấu trúc bên hoạt động 17 2.1.3 Mô tả chức chân 21 2.2 Chế độ địa 21 2.2.1 Khái niệm chế độ địa 21 2.2.2 Các chế độ địa 24 2.2.3 Giải mã địa 27 2.3 Tập lệnh 30 2.3.1 Giới thiệu chung 30 2.3.2 Các nhóm lệnh 30 2.4 Biểu đồ thời gian ghi/đọc 57 2.4.1 Xung nhịp chu kỳ máy 57 2.4.2 Chu kỳ đọc/ghi vi xử lý 8086 58 2.5 Lập trình hợp ngữ (Assembly) cho vi xử lý 80x86 60 2.5.1 Giới thiệu chung hợp ngữ 60 2.5.2 Cấu trúc chung chương trình hợp ngữ 60 2.5.3 Các cấu trúc điều khiển 67 2.5.4 Các bước lập trình 68 2.5.5 Các tập ví dụ 70 2.6 Câu hỏi tập 84 CHƯƠNG GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN 86 3.1 Giới thiệu chung 87 3.1.1 Ứng dụng vi điều khiển 88 3.1.2 Hoạt động vi điều khiển 88 3.1.3 Cấu trúc chung vi điều khiển 89 3.2 Kiến trúc vi điều khiển 8051 93 3.2.1 Chuẩn 8051 93 3.2.2 Chân vi điều khiển 8051 95 3.2.3 Cổng vào/ra 96 3.2.4 Tổ chức nhớ 101 3.2.5 Tổ chức nhớ 103 Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 3.2.6 Các ghi chức đặc biệt (SFRs - Special Function Registers) 105 3.2.7 Bộ đếm định thời 108 3.2.8 Truyền thông không đồng (UART) 113 3.2.9 Ngắt vi điều khiển 8051 118 3.3 Tập lệnh 8051 lập trình hợp ngữ cho 8051 120 3.3.1 Tập lệnh 120 3.3.2 Lập trình Assembly 127 3.3.3 Câu hỏi tập 133 CHƯƠNG CÁC HỆ VI ĐIỀU KHIỂN TIÊN TIẾN VÀ ỨNG DỤNG 136 4.1 Các hệ vi điều khiển tiên tiến 137 4.1.1 Atmel AVR 137 4.1.2 Vi điều khiển PIC 142 4.1.3 ARM 144 4.2 Các ví dụ ứng dụng 148 4.2.1 Nhấp nháy dãy LED đơn 148 4.2.2 Timer T0 chế độ chia tách 149 4.2.3 Sử dụng Timer T2 150 4.2.4 Dùng ngắt 152 4.2.5 Lập trình ngắt ngồi theo sườn xuống 153 4.2.6 Sử dụng LED 154 4.2.7 Viết chữ số LED 154 4.2.8 Thông báo văn hình LCD 156 4.2.9 Nhận liệu qua UART 161 4.2.10 Truyền liệu qua UART 162 4.2.11 Chương trình phục vụ truyền thông nối tiếp 163 4.2.12 Truyền thông UART cho 8051 phần mềm 164 4.2.13 Ghép nối 8051 với ADC0804, chuyển đổi ADC 166 4.2.14 Chuyển đổi số nhị phân sang số thập phân 167 4.2.15 Ghép nối vi điều khiển với bàn phím 167 4.2.16 Ghép nối vi điều khiển với step motor 168 Tài liệu tham khảo 169 Bản mềm sách này, xuất trang web của: Nguyễn Tuấn Anh, BM Kỹ thuật Máy tính, khoa Điện Tử, ĐH KTCN, TN, VN http://picat.dieukhien.net Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển CHƯƠNG TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN Mục tiêu: Giúp sinh viên hiểu lịch sử đời hệ vi xử lý – vi điều khiển; khái niệm, cấu tạo nguyên lý hệ vi xử lý – vi điều khiển; ôn lại kiến thức hệ thống số đếm Tóm tắt chương: Chương chia làm phần: Giới thiệu chung vi xử lý – vi điều khiển Tổng quan Lịch sử phát triển xử lý Vi xử lý vi điều khiển Cấu trúc chung hệ vi xử lý Khối xử lý trung tâm (CPU) Bộ nhớ (Memory) Khối phối ghép vào/ra (I/O) Hệ thống bus Định dạng liệu biểu diễn thông tin hệ vi xử lý – vi điều khiển Các hệ đếm Biểu diễn số ký tự Các phép toán số học hệ đếm nhị phân Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển 1.1 GIỚI THIỆU CHUNG VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1.1 Tổng quan Vi xử lý (viết tắt µP hay uP), đơi cịn gọi vi xử lý, linh kiện điện tử máy tính chế tạo từ tranzito thu nhỏ tích hợp lên vi mạch tích hợp đơn Khối xử lý trung tâm (CPU) vi xử lý nhiều người biết đến nhiều thành phần khác máy tính có vi xử lý riêng nó, ví dụ cạc hình (video card) có vi xử lý Hình 1-1.Bộ vi xử lý Intel 80486DX2 Trước xuất vi xử lý, CPU xây dựng từ mạch tích hợp cỡ nhỏ riêng biệt, mạch tích hợp chứa khoảng vào chục tranzito Do đó, CPU bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp Ngày nay, cơng nghệ tích hợp phát triển, CPU tích hợp lên vài vi mạch tích hợp cỡ lớn, vi mạch tích hợp cỡ lớn chứa hàng ngàn hàng triệu tranzito Nhờ công suất tiêu thụ giá thành vi xử lý giảm đáng kể Vi điều khiển máy tính tích hợp chíp, thường sử dụng để điều khiển thiết bị điện tử Vi điều khiển, thực chất, hệ thống bao gồm vi xử lý có hiệu suất đủ dùng giá thành thấp (khác với vi xử lý đa dùng máy tính) kết hợp với khối ngoại vi nhớ, mô đun vào/ra, mô đun biến đổi số sang tương tự tương tự sang số, Ở máy tính mơ đun thường xây dựng chíp mạch ngồi Vi điều khiển thường dùng để xây dựng hệ thống nhúng Nó xuất nhiều dụng cụ điện tử, thiết bị điện, máy giặt, lị vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v Hầu hết vi điều khiển ngày xây dựng dựa kiến trúc Harvard, kiến trúc định nghĩa bốn thành phần cần thiết hệ thống nhúng Những thành phần lõi CPU, nhớ chương trình (thơng thường ROM nhớ Flash), nhớ liệu (RAM), vài định thời cổng vào/ra để giao tiếp với thiết bị ngoại vi môi trường bên - tất khối thiết kế vi mạch tích hợp Vi điều khiển khác với vi xử lý đa chỗ hoạt động với vài vi mạch hỗ trợ bên 1.1.2 Lịch sử phát triển xử lý - Thế hệ (1971 - 1973): vi xử lý bit, đại diện 4004, 4040, 8080 (Intel) hay IPM-16 (National Semiconductor) + Độ dài word thường bit (có thể lớn hơn) + Chế tạo công nghệ PMOS với mật độ phần tử nhỏ, tốc độ thấp, dòng tải thấp giá thành rẻ + Tốc độ 10 - 60 µs / lệnh với tần số xung nhịp 0.1 - 0.8 MHz + Tập lệnh đơn giản phải cần nhiều vi mạch phụ trợ Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển - Thế hệ (1974 - 1977): vi xử lý bit, đại diện 8080, 8085 (Intel) hay Z80 (Zilog) + Tập lệnh phong phú + Địa đến 64 KB Một số vi xử lý phân biệt 256 địa cho thiết bị ngoại vi + Sử dụng công nghệ NMOS hay CMOS + Tốc độ - µs / lệnh với tần số xung nhịp - MHz - Thế hệ (1978 - 1982): vi xử lý 16 bit, đại diện 68000/68010 (Motorola) hay 8086/ 80286/ 80386 (Intel) + Tập lệnh đa dạng với lệnh nhân, chia xử lý chuỗi + Địa nhớ từ - 16 MB phân biệt tới 64KB địa cho ngoại vi + Sử dụng công nghệ HMOS + Tốc độ 0.1 - µs / lệnh với tần số xung nhịp - 10 MHz - Thế hệ 4: vi xử lý 32 bit 68020/68030/68040/68060 (Motorola) hay 80386/80486 (Intel) vi xử lý 32 bit Pentium (Intel) + Bus địa 32 bit, phân biệt GB nhớ + Có thể dùng thêm đồng xử lý (coprocessor) + Có khả làm việc với nhớ ảo + Có chế pipeline, nhớ cache + Sử dụng công nghệ HCMOS - Thế hệ 5: vi xử lý 64 bit 1.1.3 Vi xử lý vi điều khiển Khái niệm “vi xử lý” (microprocessor) “vi điều khiển” (microcontroller) Về hai khái niệm không khác nhiều, “vi xử lý” thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng công nghệ vi điện tử, công nghệ tích hợp khả xử lý theo chương trình vào lĩnh vực khác Vào giai đoạn đầu q trình phát triển cơng nghệ vi xử lý, chip (hay vi xử lý) chế tạo tích hợp phần cứng thiết yếu CPU mạch giao tiếp CPU phần cứng khác Trong giai đoạn này, phần cứng khác (kể nhớ) thường khơng tích hợp chip mà phải ghép nối thêm bên Các phần cứng gọi ngoại vi (Peripherals) Về sau, nhờ phát triển vượt bậc cơng nghệ tích hợp, ngoại vi tích hợp vào bên IC người ta gọi vi xử lýđã tích hợp thêm ngoại vi “vi điều khiển” Việc tích hợp thêm ngoại vi vào IC với CPU tạo nhiều lợi ích làm giảm thiểu ghép nối bên ngoài, giảm thiểu số lượng linh kiện điện tử phụ, giảm chi phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất tính linh hoạt Trong tài liệu này, ranh giới hai khái niệm “vi xử lý” “vi điều khiển” thực không cần phải phân biệt rõ ràng Chúng dùng thuật ngữ “vi xử lý” đề cập đến khái niệm kỹ thuật vi xử lý nói chung dùng thuật ngữ “vi điều khiển” sâu nghiên cứu họ chip cụ thể 1.2 Cấu trúc chung hệ vi xử lý Về kiến trúc vi xử lý gồm phần cứng sau: - Đơn vị xử lý trung tâm CPU (Central Processing Unit) - Các nhớ (Memories) - Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O Ports)) Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển - Chương Tổng quan vi xử lý – vi điều khiển Các đếm/bộ định thời (Timers) - Hệ thống BUS (Địa chỉ, liệu, điều khiển) Ngoài với loại vi điều khiển cụ thể cịn có thêm số phần cứng khác biến đổi tương tự-số ADC, biến đổi số-tương tự DAC, mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não vi xử lý CPU, phần cứng khác quan chấp hành quyền CPU Mỗi quan có chế hoạt động định mà CPU phải tuân theo giao tiếp với chúng Hình 1-2 Cấu trúc chung hệ vi xử lý Để giao tiếp điều khiển quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu tín hiệu địa (Address), tín hiệu liệu (Data) tín hiệu điều khiển (Control) Về mặt vật lý tín hiệu đường nhỏ dẫn điện nối từ CPU đến ngoại vi chí ngoại vi với Tập hợp đường tín hiệu có chức gọi bus Như ta có bus địa chỉ, bus liệu bus điều khiển 1.2.1 Khối xử lý trung tâm (CPU) CPU có cấu tạo gồm có đơn vị xử lý số học lôgic (ALU), ghi, khối lôgic mạch giao tiếp Chức CPU tiến hành thao tác tính tốn xử lý, đưa tín hiệu địa chỉ, liệu điều khiển nhằm thực nhiệm vụ người lập trình đưa thơng qua lệnh (Instructions) Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển Hình 1-3 Khối xử lý trung tâm 1.2.2 Bộ nhớ (Memory) Với chu kỳ đọc: thời gian truy xuất thời gian tính từ lúc địa xuất nhớ có liệu ngõ nhớ Với chu kỳ ghi: thời gian truy xuất thời gian tính từ lúc địa xuất nhớ liệu đưa vào nhớ Thời gian chu kỳ (cycle time): thời gian từ lúc bắt đầu chu kỳ nhớ đến bắt đầu chu kỳ Ngồi ra, µP sử dụng thêm số trạng thái chờ đọc nhớ
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP KHOA ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH BÀI GIẢNG PHÁT CHO SINH VIÊN (LƯU HÀNH NỘI BỘ) Theo chương trình 150 TC thay 180 TC tương đương Sử dụng cho năm học 2009 – 2010 Tên giảng: Vi xử lý – Vi điều khiển Số tín chỉ: 03 BÀI GIẢNG PHÁT CHO SINH VIÊN (LƯU HÀNH NỘI BỘ) Theo chương trình 150 TC thay 180 TC tương đương Sử dụng cho năm học 2009 - 2010 Tên giảng: Vi xử lý – Vi điều khiển Số tín chỉ: 03 Trưởng môn Ths Nguyễn Tuấn Linh Thái Nguyên, ngày 25 tháng 03 năm 2009 Trưởng khoa Điện Tử PGS TS Nguyễn Hữu Công MỤC LỤC CHƯƠNG TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1 GIỚI THIỆU CHUNG VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1.1 Tổng quan 1.1.2 Lịch sử phát triển xử lý 1.1.3 Vi xử lý vi điều khiển 1.2 Cấu trúc chung hệ vi xử lý 1.2.1 Khối xử lý trung tâm (CPU) 1.2.2 Bộ nhớ (Memory) 1.2.3 Khối phối ghép vào/ra (I/O) 11 1.2.4 Hệ thống bus 12 1.3 Định dạng liệu biểu diễn thông tin hệ vi xử lý – vi điều khiển 13 1.3.1 Các hệ đếm 13 1.3.2 Biểu diễn số ký tự 14 1.3.3 Các phép toán số học hệ đếm nhị phân 15 CHƯƠNG HỌ VI XỬ LÝ INTEL 80x86 .16 2.1 Cấu trúc phần cứng vi xử lý 8086 17 2.1.1 Tổng quan 17 2.1.2 Cấu trúc bên hoạt động 17 2.1.3 Mô tả chức chân 21 2.2 Chế độ địa 21 2.2.1 Khái niệm chế độ địa 21 2.2.2 Các chế độ địa 24 2.2.3 Giải mã địa 27 2.3 Tập lệnh 30 2.3.1 Giới thiệu chung 30 2.3.2 Các nhóm lệnh 30 2.4 Biểu đồ thời gian ghi/đọc 57 2.4.1 Xung nhịp chu kỳ máy 57 2.4.2 Chu kỳ đọc/ghi vi xử lý 8086 58 2.5 Lập trình hợp ngữ (Assembly) cho vi xử lý 80x86 60 2.5.1 Giới thiệu chung hợp ngữ 60 2.5.2 Cấu trúc chung chương trình hợp ngữ 60 2.5.3 Các cấu trúc điều khiển 67 2.5.4 Các bước lập trình 68 2.5.5 Các tập ví dụ 70 2.6 Câu hỏi tập 84 CHƯƠNG GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN 86 3.1 Giới thiệu chung 87 3.1.1 Ứng dụng vi điều khiển 88 3.1.2 Hoạt động vi điều khiển 88 3.1.3 Cấu trúc chung vi điều khiển 89 3.2 Kiến trúc vi điều khiển 8051 93 3.2.1 Chuẩn 8051 93 3.2.2 Chân vi điều khiển 8051 95 3.2.3 Cổng vào/ra 96 3.2.4 Tổ chức nhớ 101 3.2.5 Tổ chức nhớ 103 Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 3.2.6 Các ghi chức đặc biệt (SFRs - Special Function Registers) 105 3.2.7 Bộ đếm định thời 108 3.2.8 Truyền thông không đồng (UART) 113 3.2.9 Ngắt vi điều khiển 8051 118 3.3 Tập lệnh 8051 lập trình hợp ngữ cho 8051 120 3.3.1 Tập lệnh 120 3.3.2 Lập trình Assembly 127 3.3.3 Câu hỏi tập 133 CHƯƠNG CÁC HỆ VI ĐIỀU KHIỂN TIÊN TIẾN VÀ ỨNG DỤNG 136 4.1 Các hệ vi điều khiển tiên tiến 137 4.1.1 Atmel AVR 137 4.1.2 Vi điều khiển PIC 142 4.1.3 ARM 144 4.2 Các ví dụ ứng dụng 148 4.2.1 Nhấp nháy dãy LED đơn 148 4.2.2 Timer T0 chế độ chia tách 149 4.2.3 Sử dụng Timer T2 150 4.2.4 Dùng ngắt 152 4.2.5 Lập trình ngắt ngồi theo sườn xuống 153 4.2.6 Sử dụng LED 154 4.2.7 Viết chữ số LED 154 4.2.8 Thông báo văn hình LCD 156 4.2.9 Nhận liệu qua UART 161 4.2.10 Truyền liệu qua UART 162 4.2.11 Chương trình phục vụ truyền thông nối tiếp 163 4.2.12 Truyền thông UART cho 8051 phần mềm 164 4.2.13 Ghép nối 8051 với ADC0804, chuyển đổi ADC 166 4.2.14 Chuyển đổi số nhị phân sang số thập phân 167 4.2.15 Ghép nối vi điều khiển với bàn phím 167 4.2.16 Ghép nối vi điều khiển với step motor 168 Tài liệu tham khảo 169 Bản mềm sách này, xuất trang web của: Nguyễn Tuấn Anh, BM Kỹ thuật Máy tính, khoa Điện Tử, ĐH KTCN, TN, VN http://picat.dieukhien.net Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển CHƯƠNG TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN Mục tiêu: Giúp sinh viên hiểu lịch sử đời hệ vi xử lý – vi điều khiển; khái niệm, cấu tạo nguyên lý hệ vi xử lý – vi điều khiển; ôn lại kiến thức hệ thống số đếm Tóm tắt chương: Chương chia làm phần: Giới thiệu chung vi xử lý – vi điều khiển Tổng quan Lịch sử phát triển xử lý Vi xử lý vi điều khiển Cấu trúc chung hệ vi xử lý Khối xử lý trung tâm (CPU) Bộ nhớ (Memory) Khối phối ghép vào/ra (I/O) Hệ thống bus Định dạng liệu biểu diễn thông tin hệ vi xử lý – vi điều khiển Các hệ đếm Biểu diễn số ký tự Các phép toán số học hệ đếm nhị phân Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển 1.1 GIỚI THIỆU CHUNG VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN 1.1.1 Tổng quan Vi xử lý (viết tắt µP hay uP), đơi cịn gọi vi xử lý, linh kiện điện tử máy tính chế tạo từ tranzito thu nhỏ tích hợp lên vi mạch tích hợp đơn Khối xử lý trung tâm (CPU) vi xử lý nhiều người biết đến nhiều thành phần khác máy tính có vi xử lý riêng nó, ví dụ cạc hình (video card) có vi xử lý Hình 1-1.Bộ vi xử lý Intel 80486DX2 Trước xuất vi xử lý, CPU xây dựng từ mạch tích hợp cỡ nhỏ riêng biệt, mạch tích hợp chứa khoảng vào chục tranzito Do đó, CPU bảng mạch gồm hàng ngàn hay hàng triệu vi mạch tích hợp Ngày nay, cơng nghệ tích hợp phát triển, CPU tích hợp lên vài vi mạch tích hợp cỡ lớn, vi mạch tích hợp cỡ lớn chứa hàng ngàn hàng triệu tranzito Nhờ công suất tiêu thụ giá thành vi xử lý giảm đáng kể Vi điều khiển máy tính tích hợp chíp, thường sử dụng để điều khiển thiết bị điện tử Vi điều khiển, thực chất, hệ thống bao gồm vi xử lý có hiệu suất đủ dùng giá thành thấp (khác với vi xử lý đa dùng máy tính) kết hợp với khối ngoại vi nhớ, mô đun vào/ra, mô đun biến đổi số sang tương tự tương tự sang số, Ở máy tính mơ đun thường xây dựng chíp mạch ngồi Vi điều khiển thường dùng để xây dựng hệ thống nhúng Nó xuất nhiều dụng cụ điện tử, thiết bị điện, máy giặt, lị vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v Hầu hết vi điều khiển ngày xây dựng dựa kiến trúc Harvard, kiến trúc định nghĩa bốn thành phần cần thiết hệ thống nhúng Những thành phần lõi CPU, nhớ chương trình (thơng thường ROM nhớ Flash), nhớ liệu (RAM), vài định thời cổng vào/ra để giao tiếp với thiết bị ngoại vi môi trường bên - tất khối thiết kế vi mạch tích hợp Vi điều khiển khác với vi xử lý đa chỗ hoạt động với vài vi mạch hỗ trợ bên 1.1.2 Lịch sử phát triển xử lý - Thế hệ (1971 - 1973): vi xử lý bit, đại diện 4004, 4040, 8080 (Intel) hay IPM-16 (National Semiconductor) + Độ dài word thường bit (có thể lớn hơn) + Chế tạo công nghệ PMOS với mật độ phần tử nhỏ, tốc độ thấp, dòng tải thấp giá thành rẻ + Tốc độ 10 - 60 µs / lệnh với tần số xung nhịp 0.1 - 0.8 MHz + Tập lệnh đơn giản phải cần nhiều vi mạch phụ trợ Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển - Thế hệ (1974 - 1977): vi xử lý bit, đại diện 8080, 8085 (Intel) hay Z80 (Zilog) + Tập lệnh phong phú + Địa đến 64 KB Một số vi xử lý phân biệt 256 địa cho thiết bị ngoại vi + Sử dụng công nghệ NMOS hay CMOS + Tốc độ - µs / lệnh với tần số xung nhịp - MHz - Thế hệ (1978 - 1982): vi xử lý 16 bit, đại diện 68000/68010 (Motorola) hay 8086/ 80286/ 80386 (Intel) + Tập lệnh đa dạng với lệnh nhân, chia xử lý chuỗi + Địa nhớ từ - 16 MB phân biệt tới 64KB địa cho ngoại vi + Sử dụng công nghệ HMOS + Tốc độ 0.1 - µs / lệnh với tần số xung nhịp - 10 MHz - Thế hệ 4: vi xử lý 32 bit 68020/68030/68040/68060 (Motorola) hay 80386/80486 (Intel) vi xử lý 32 bit Pentium (Intel) + Bus địa 32 bit, phân biệt GB nhớ + Có thể dùng thêm đồng xử lý (coprocessor) + Có khả làm việc với nhớ ảo + Có chế pipeline, nhớ cache + Sử dụng công nghệ HCMOS - Thế hệ 5: vi xử lý 64 bit 1.1.3 Vi xử lý vi điều khiển Khái niệm “vi xử lý” (microprocessor) “vi điều khiển” (microcontroller) Về hai khái niệm không khác nhiều, “vi xử lý” thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng công nghệ vi điện tử, công nghệ tích hợp khả xử lý theo chương trình vào lĩnh vực khác Vào giai đoạn đầu q trình phát triển cơng nghệ vi xử lý, chip (hay vi xử lý) chế tạo tích hợp phần cứng thiết yếu CPU mạch giao tiếp CPU phần cứng khác Trong giai đoạn này, phần cứng khác (kể nhớ) thường khơng tích hợp chip mà phải ghép nối thêm bên Các phần cứng gọi ngoại vi (Peripherals) Về sau, nhờ phát triển vượt bậc cơng nghệ tích hợp, ngoại vi tích hợp vào bên IC người ta gọi vi xử lýđã tích hợp thêm ngoại vi “vi điều khiển” Việc tích hợp thêm ngoại vi vào IC với CPU tạo nhiều lợi ích làm giảm thiểu ghép nối bên ngoài, giảm thiểu số lượng linh kiện điện tử phụ, giảm chi phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất tính linh hoạt Trong tài liệu này, ranh giới hai khái niệm “vi xử lý” “vi điều khiển” thực không cần phải phân biệt rõ ràng Chúng dùng thuật ngữ “vi xử lý” đề cập đến khái niệm kỹ thuật vi xử lý nói chung dùng thuật ngữ “vi điều khiển” sâu nghiên cứu họ chip cụ thể 1.2 Cấu trúc chung hệ vi xử lý Về kiến trúc vi xử lý gồm phần cứng sau: - Đơn vị xử lý trung tâm CPU (Central Processing Unit) - Các nhớ (Memories) - Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O Ports)) Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển - Chương Tổng quan vi xử lý – vi điều khiển Các đếm/bộ định thời (Timers) - Hệ thống BUS (Địa chỉ, liệu, điều khiển) Ngoài với loại vi điều khiển cụ thể cịn có thêm số phần cứng khác biến đổi tương tự-số ADC, biến đổi số-tương tự DAC, mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…Bộ não vi xử lý CPU, phần cứng khác quan chấp hành quyền CPU Mỗi quan có chế hoạt động định mà CPU phải tuân theo giao tiếp với chúng Hình 1-2 Cấu trúc chung hệ vi xử lý Để giao tiếp điều khiển quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu tín hiệu địa (Address), tín hiệu liệu (Data) tín hiệu điều khiển (Control) Về mặt vật lý tín hiệu đường nhỏ dẫn điện nối từ CPU đến ngoại vi chí ngoại vi với Tập hợp đường tín hiệu có chức gọi bus Như ta có bus địa chỉ, bus liệu bus điều khiển 1.2.1 Khối xử lý trung tâm (CPU) CPU có cấu tạo gồm có đơn vị xử lý số học lôgic (ALU), ghi, khối lôgic mạch giao tiếp Chức CPU tiến hành thao tác tính tốn xử lý, đưa tín hiệu địa chỉ, liệu điều khiển nhằm thực nhiệm vụ người lập trình đưa thơng qua lệnh (Instructions) Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển Chương Tổng quan vi xử lý – vi điều khiển Hình 1-3 Khối xử lý trung tâm 1.2.2 Bộ nhớ (Memory) Với chu kỳ đọc: thời gian truy xuất thời gian tính từ lúc địa xuất nhớ có liệu ngõ nhớ Với chu kỳ ghi: thời gian truy xuất thời gian tính từ lúc địa xuất nhớ liệu đưa vào nhớ Thời gian chu kỳ (cycle time): thời gian từ lúc bắt đầu chu kỳ nhớ đến bắt đầu chu kỳ Ngồi ra, µP sử dụng thêm số trạng thái chờ đọc nhớ - Hình 1-4 Các đường trì hỗn giao tiếp µP với nhớ tdbuf: thời gian trì hỗn đệm liệu (data buffer) tabuf: thời gian trì hỗn đệm địa (address buffer) Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp Bài giảng Vi xử lý - Vi điều khiển - Chương Tổng quan vi xử lý – vi điều khiển tOE: thời gian đáp ứng nhớ với tín hiệu cho phép ngõ (ouput enable) tCS: thời gian nhớ truy xuất từ Chip Select tACC: thời gian nhớ truy xuất từ địa chỉ, thông thường tACC = tcs tdec: thời gian trì hỗn giải mã (decoder) Định đọc nhớ: Thời gian truy xuất tổng cộng hệ thống nhớ tổng thời gian trì hỗn đệm thời gian truy xuất (access time) nhớ Hiệu thời gian truy xuất cần thiết µP với thời gian truy xuất thật nhớ gọi biên định (timing margin) - tDS (Data Setup): thời gian thiết lập liệu cung cấp hệ thống nhớ - tDH (Data Hold): thời gian giữ liệu cung cấp hệ thống nhớ Hình 1-5 Định đọc nhớ Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 10 Bài giảng Vi xử lý - Vi điều khiển DSEG STACK_START: ;RESET VECTORS CSEG JMP XRESET: AT DS Chương Các hệ vi điều khiển tiên tiến ứng dụng 03FH 040H AT XRESET ; Reset vector ORG 100H MOV MOV MOV SP,#STACK_START P1,#0 P3,#20h MOV LCALL MOV SJMP A,#03 Disp P1,A LOOP INC MOVC RET DB DB DB DB DB A A,@A+PC ; Define Stack pointer ; Turn off all segments on displays ; Activate display D4 LOOP: Disp: ; Send number “3” to display ; Perform appropriate masking for the number ; Subroutine for displaying digits 3FH 06H 5BH 4FH 66H ; ; ; ; ; Digit Digit Digit Digit Digit mask mask mask mask mask Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 155 Bài giảng Vi xử lý - Vi điều khiển DB DB DB DB DB END Chương Các hệ vi điều khiển tiên tiến ứng dụng 6DH 7DH 07H 7FH 6FH ; ; ; ; ; ; Digit mask Digit mask Digit mask Digit mask Digit mask End of program 4.2.8 Thông báo văn hình LCD Ví dụ sử dụng loại LCD phổ biến để hiển thị văn hai dòng với 16 ký tự dòng Để tiết kiệm chân IO vi điều khiển, có chân sử dụng cho giao tiếp liệu Bằng cách này, byte truyền theo hai bước: bit cao sau bit thấp LCD cần phải khởi tạo đầu chương trình (trước sử dụng tính ghi đọc LCD) Bên cạnh đó, phần chương trình lặp lặp lại chương trình tạo chương trình đặc biệt Tất điều phức tạp, tồn chương trình thực số hoạt động đơn giản hiển thị dòng chữ “LCD display” ************************************************************************* ;* PROGRAM NAME : Lcd.ASM ;* DESCRIPRTION : Program for testing LCD display 4-bit communication ;* is used Program does not check BUSY flag but uses program delay ;* between commands PORT1 is used for connection ;* to the microcontroller ;************************************************************************ ;BASIC DIRECTIVES $MOD53 $TITLE(LCD.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING ;Stack DSEG AT 0E0h Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 156 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng Stack_Start: DS 020h Start_address EQU 0000h ;Reset vectors Inic: CSEG ORG JMP AT Start_address Inic ORG Start_address+100h MOV MOV IE,#00 SP,#Stack_Start ; All interrupts are disabled CALL LCD_inic ; Initialize LCD ;************************************************* ;* MAIN PROGRAM ;************************************************* START: MOV CALL A,#80h LCD_status MOV CALL A,#' ' LCD_putc MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#'L' LCD_putc A,#'C' LCD_putc A,#'D' LCD_putc MOV A,#0c0h CALL LCD_status MOV CALL A,#' ' LCD_putc MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#'D' LCD_putc A,#'i' LCD_putc A,#'s' ; Next character will appear on the first ; location in the first line ;of LCD display ; Display character ‘ ’ ; Call subroutine for ;character transmission ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘L’ ; Display character ‘C’ ; Display character ‘D’ ; Next character will appear; ; on the first ; location in the second line ;of LCD display ; Display character ‘ ’ ; Call subroutine for ;character transmission ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘D’ ; Display character ‘i’ ; Display character ‘s’ Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 157 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng CALL MOV CALL MOV CALL MOV CALL MOV CALL LCD_putc A,#'p' LCD_putc A,#'l' LCD_putc A,#'a' LCD_putc A,#'y' LCD_putc MOV CALL MOV MOV CALL MOV CALL JMP R0,#20d Delay_10ms DPTR,#LCD_DB A,#6d LCD_inic_status R0,#10d Delay_10ms START ; Display character ‘p’ ; Display character ‘l’ ; Display character ‘a’ ; Display character ‘y’ ; Wait time (20x10ms) ; Clear display ; Wait time(10x10ms) ;********************************************* ;* Subroutine for wait time (T= r0 x 10ms) ;********************************************* Delay_10ms: MOV MOV MOV DJNZ DJNZ DJNZ RET R5,00h R6,#100d R7,#100d R7,$ R6,$-4 R5,$-6 ; 1+(1+(1+2*r7+2)*r6+2)*r5 approximately ; (if r7>10) ; 2*r5*r6*r7 ; $ indicates current instruction ;************************************************************************* ;* SUBROUTINE: LCD_inic ;* DESCRIPTION: Subroutine for LCD initialization ;* ;* (is used with 4-bit interface, under condition that pins DB4-7 on LCD ;* are connected to pins PX.4-7 on microcontroller’s ports, ; i.e four higher ;* bits on the port are used) ;* ;* NOTE: It is necessary to define port pins for controlling LCD operation: ;* LCD_enable, LCD_read_write, ; LCD_reg_select,similar to port for connection to LCD ;* It is also necessary to define addresses for the first character in each ;* line ;************************************************************************* LCD_enable LCD_read_write LCD_reg_select LCD_port Busy LCD_Start_I_red BIT BIT BIT SET BIT P1.3 P1.1 P1.2 P1 P1.7 EQU 00h LCD_Start_II_red EQU 40h LCD_DB: DB DB DB ; ; ; ; Bit for activating pin E on LCD Bit for activating pin RW on LCD Bit for activating pin RS on LCD Port for connection to LCD ; Port pin on which Busy flag appears ; Address ; in the ; Address ; in the 00111100b 00101100b 00011000b of the first message character first line of LCD display of the first message character second line of LCD display ; -8b, 2/1 lines, 5x10/5x7 format ; -4b, 2/1 lines, 5x10/5x7 format ; -Display/cursor shift, right/left Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 158 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng DB 00001100b DB DB DB DB 00000110b 00000010b 00000001b 00001000b ; -Display ON, cursor OFF, ;cursor blink off ; -Increment mode, display shift off ; -Display/cursor home ; -Clear display ; -Display OFF, cursor OFF, ; cursor blink off LCD_inic: ;***************************************** MOV MOV CALL MOV CALL MOV lcall DPTR,#LCD_DB A,#00d LCD_inic_status_8 A,#00d LCD_inic_status_8 A,#00d LCD_inic_status_8 MOV CALL MOV CALL A,#1d ; Change from 8-bit into LCD_inic_status_8 ; 4-bit mode A,#1d LCD_inic_status MOV A,#3d CALL MOV CALL MOV CALL ; Triple initialization in 8-bit ; mode is performed at the beginning ; (in case of slow increment of ; power supply when the power supply is on ; As from this point the program executes in ;4-bit mode LCD_inic_status A,#6d LCD_inic_status A,#4d LCD_inic_status RET LCD_inic_status_8: ;****************************************** PUSH B MOVC CLR CLR A,@A+DPTR LCD_reg_select LCD_read_write MOV ORL ORL ANL B,LCD_port B,#11110000b A,#00001111b A,B MOV SETB LCD_port,A LCD_enable CLR LCD_enable MOV B,#255d DJNZ B,$ DJNZ B,$ DJNZ B,$ ; RS=0 - Write command ; R/W=0 - Write data on LCD ; Lower bits from LCD port are memorized ; Data is moved from A to LCD port ; high-to-low transition signal ; is generated on the LCD's EN pin ; Time delay in case of improper reset ; during initialization POP B RET LCD_inic_status: Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 159 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng ;************************************************************************* MOVC A,@A+DPTR CALL LCD_status RET ;************************************************************************* ;* SUBROUTINE: LCD_status ;* DESCRIPTION: Subroutine for defining LCD status ;************************************************************************* LCD_status: MOV DJNZ DJNZ DJNZ CLR CALL PUSH B B,#255d B,$ B,$ B,$ LCD_reg_select LCD_port_out SWAP A DJNZ DJNZ DJNZ CLR CALL B,$ B,$ B,$ LCD_reg_select LCD_port_out ; RS=O: Command is sent to LCD ; Nibles are swapped in accumulator ; RS=0: Command is sent to LCD POP B RET ;************************************************************************ ;* SUBROUTINE: LCD_putc ;* DESCRIPTION: Sending character to be displayed on LCD ;************************************************************************ LCD_putc: MOV DJNZ SETB CALL PUSH B B,#255d B,$ LCD_reg_select LCD_port_out SWAP A DJNZ SETB B,$ LCD_reg_select CALL POP RET LCD_port_out B ; RS=1: Character is sent to LCD ; Nibles are swapped in accumulator ; RS=1: Character is sent to LCD ;************************************************************************* ;* SUBROUTINE: LCD_port_out ;* DESCRIPTION: Sending commands or characters on LCD display ;************************************************************************* LCD_port_out: PUSH MOV ORL ORL ANL MOV PUSH ACC B B,LCD_port B,#11110000b A,#00001111b A,B LCD_port,A ; Lower bits of LCD port are memorized ; Data is copied from A to LCD port Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 160 Bài giảng Vi xử lý - Vi điều khiển SETB LCD_enable CLR LCD_enable POP POP RET B ACC END Chương Các hệ vi điều khiển tiên tiến ứng dụng ; high-to-low transition signal ; is generated on the LCD's EN pin ; End of program 4.2.9 Nhận liệu qua UART Để kích hoạt tính giao tiếp nối tiếp UART thành cơng, điều cần thiết để đáp ứng quy định cụ thể chuẩn RS232 Nó chủ yếu đề cập đến cấp điện áp theo yêu cầu chuẩn Theo đó,-10V đến -3V mức logic (1) thơng điệp, 3V đến 10 V mức logic khơng (0) Các vi điều khiển chuyển đổi xác liệu định dạng nối tiếp, nguồn cung cấp điện áp 5V Từ đó, khơng phải dễ dàng để chuyển đổi 0V thành 10V 5V thành -10V, Hoạt động đường truyền đường nhận liệu Ở đây, MAX232 Maxim sử dụng phổ biến rộng rãi, rẻ đáng tin cậy Ví dụ cho thấy làm để nhận thông điệp gửi từ PC Timer T1 tạo tốc độ baud Từ thạch anh 11,0592 MHz sử dụng, dễ dàng để có tiêu chuẩn tốc độ truyền mà tốc độ baud 9600 bps Mỗi liệu nhận chuyển P1 ;************************************************************************ ;* PROGRAM NAME : UartR.ASM ;* DESCRIPTION: Each data received from PC via UART appears on the port ;* P1 ;* ;************************************************************************ Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 161 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng ;BASIC DIRECTIVES $MOD53 $TITLE(UARTR.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING ;STACK DSEG STACK_START: AT DS 03FH 040H ;RESET VECTORS CSEG JMP ORG AT XRESET 023H ; Reset vector ; Starting address of ;UART interrupt routine JMP IR_SER ORG 100H MOV MOV MOV MOV IE,#00 SP,#STACK_START TMOD,#20H TH1,#0FDH MOV MOV CLR CLR SETB SCON,#50H IE,#10010000B TI RI TR1 ; ; ; ; ; ; ; ; ; ; LOOP: SJMP LOOP ; Remain here IR_SER: JNB RI,OUTPUT A,SBUF P1,A RI OUTPUT: MOV MOV CLR RETI ; If any data is received, ; move it to the port ; P1 XRESET: END All interrupts are disabled Initialization of Stack pointer Timer1 in mode2 9600 baud rate at the frequency of 11.0592MHz Receiving enabled, 8-bit UART UART interrupt enabled Clear transmit flag Clear receive flag Start Timer1 ; Clear receive flag ; End of program 4.2.10 Truyền liệu qua UART Chương trình mơ tả cách sử dụng UART để truyền liệu Một dãy số (0-255) truyền đến máy PC tốc độ truyền 9600 baud MAX 232 sử dụng điều áp ;************************************************************************ ;* PROGRAM NAME : UartS.ASM ;* DESCRIPTION: Sends values 0-255 to PC ;************************************************************************ ;BASIC DIRECTIVES $MOD53 $TITLE(UARTS.ASM) $PAGEWIDTH(132) $DEBUG Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 162 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng $OBJECT $NOPAGING ;STACK DSEG STACK_START: AT DS ;RESET VECTORS CSEG JMP AT XRESET XRESET: START: LOOP1: LOOP: 03FH 040H ; Reset vector ORG 100H MOV MOV MOV MOV IE,#00 SP,#STACK_START TMOD,#20H TH1,#0FDH MOV CLR CLR MOV SETB SCON,#40H TI RI R3,#00H TR1 MOV JNB SBUF,R3 TI,LOOP1 CLR INC TI R3 CJNE R3,#00H,START ; If 255 bytes are not sent return to the ; label START SJMP LOOP ; Remain here END ; ; ; ; ; ; ; ; ; ; All interrupts are disabled Initialization of Stack pointer Timer1 in mode 9600 baud rate at the frequency of 11.0592MHz 8-bit UART Clear transmit bit Clear receive flag Reset caunter Start Timer ; ; ; ; ; Move number from counter to a PC Wait here until byte transmission is complete Clear transmit bit Increment the counter value by ; End of program 4.2.11 Chương trình phục vụ truyền thơng nối tiếp Serial_Init: ;Kh i t o: ;Set timer mode to 8-bit Auto-Reload mov TMOD,#20H ;Enable reception ;Set Serial port mode to 8-bit UART mov SCON,#50H ;Set baudrate to 9600 at 11.0592MHz mov TH1,#0FDH mov TL1,#0FDH ;Start Timer setb TR1 ret Serial_Send: ; truy n n i dung ghi A UART ;wait for last data to be ;sent completely jnb TI,Serial_Send ;clear the transmit interrupt flag Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 163 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng clr TI ;Then move the data to send in SBUF mov SBUF,A ret Serial_Read: ; nh n t UART v ghi A ;Wait for Receive interrupt flag jnb RI,Serial_Read ;If falg is set then clear it clr RI ;Then read data from SBUF mov A,SBUF ret 4.2.12 Truyền thông UART cho 8051 phần mềm Để thực thành công UART cần phải biết giao thức truyền thông UART Sơ đồ cho thấy dạng sóng frame truyền Đầu tiên bit bắt đầu sau 8-bit liệu bit dừng cuối Có cơng thức bí mật để tính tốn thời gian trì hỗn có baudrate xác bit Dưới phần mềm triển khai UART, sử dụng chương trình C ASM Nó viết cho phần mềm Keil Nhưng với vài thay đổi nhỏ bạn dùng chương trình bạn ?SU?PUTC SEGMENT CODE ?SU?GETC SEGMENT CODE PUBLIC _putc PUBLIC getc txd_pin EQU rxd_pin EQU P3.1 P3.0 ;Transmit on this pin ;Receive on this pin ;Formula to calculate the bit time delay constant ;This constant is calculated as: (((crystal/baud)/12) - 5) / ;crystal is the frequency of crystal in Hz ;baud is required baudrate ;Please try to keep baudrate below 9600 ;to get best results :) BITTIM EQU 45; (((11059200/9600)/12) - 5) / ; -;To send data serially ;For C programs Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 164 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng ;Protype definition: ; void putc(unsigned char); ;Usage: ; putc(data); ;Return: ; This function returns nothing ; ;For Assembly Programs: ; ;Usage: ; data to be send has to be moved to R7 ; for example: ; mov R7,#'a' ; lcall _putc ; -RSEG ?SU?PUTC _putc: push ACC Push PSW mov a,r7 CLR txd_pin ;Drop line for start bit MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For START bit MOV R1,#8 ;Send bits putc1: RRC A ;Move next bit into carry MOV txd_pin,C ;Write next bit MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For DATA bit DJNZ R1,putc1 ;write bits SETB txd_pin ;Set line high RRC A ;Restore ACC contents MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For STOP bit POP PSW pop ACC RET ; -;To receive data Serially ;If you want to use this routine in your ;C program then define function prototype ; as: ; unsigned char getc(void); ; ; Usage: ; data = getc(); ; Return value: ; Returns data received ;If you are using it in assembly program ; Usage: ; lcall getc ; Return: ; data received is stored in R7 ; Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 165 Bài giảng Vi xử lý - Vi điều khiển RSEG ?SU?GETC getc: Push ACC Push PSW JB rxd_pin,$ MOV R0,#BITTIM/2 DJNZ R0,$ JB rxd_pin,getc MOV R1,#8 getc1: MOV R0,#BITTIM DJNZ R0,$ MOV C,rxd_pin RRC A DJNZ R1,getc1 mov r7,a POP PSW pop ACC RET Chương Các hệ vi điều khiển tiên tiến ứng dụng ;Wait for start bit ;Wait 1/2 bit-time ;To sample in middle ;Insure valid ;Read bits ;Wait full bit-time ;For DATA bit ;Read bit ;Shift it into ACC ;read bits ;go home 4.2.13 Ghép nối 8051 với ADC0804, chuyển đổi ADC rd equ P1.0 wr equ P1.1 cs equ P1.2 intr equ P1.3 adc_port equ P2 adc_val equ 30H ;Read signal P1.0 ;Write signal P1.1 ;Chip Select P1.2 ;INTR signal P1.3 ;ADC data pins P2 ;ADC read value stored here org 0H start: acall conv acall read mov P3,adc_val sjmp start conv: clr cs clr wr nop setb wr setb cs ;Start of Program ;Start ADC conversion ;Read converted value ;Move the value to Port ;Do it again ;Start of Conversion ;Make CS low ;Make WR Low ;Make WR High ;Make CS high wait: jb intr,wait ret ;Wait for INTR signal ;Conversion done clr cs clr rd mov a,adc_port mov adc_val,a setb rd setb cs ret ;Read ADC value ;Make CS Low ;Make RD Low ;Read the converted value ;Store it in local variable ;Make RD High ;Make CS High ;Reading done read: Bộ môn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 166 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng 4.2.14 Chuyển đổi số nhị phân sang số thập phân Khi sử dụng đèn LED hình LCD, thường cần thiết phải chuyển đổi số từ nhị phân sang số thập phân Ví dụ, vài ghi có chứa số dạng nhị phân, cần hiển thị số hình LED ba chữ số, cần thiết phải chuyển sang dạng thập phân Nói cách khác, cần thiết để xác định hiển thị hình hiển thị bên phải (đơn vị), hiển thị (hàng chục) hiển thị trái (hàng trăm) Các chương trình thực chuyển đổi byte Số nhị phân lưu trữ accumulator, số định dạng thập phân lưu ghi R3, R2 accumulator (đơn vị, hàng chục hàng trăm, tương ứng) ;************************************************************************ ;* SUBROUTINE NAME : BinDec.ASM ;* DESCRIPTION : Content of accumulator is converted into ;* three decimal digits ;************************************************************************ BINDEC: MOV DIV MOV MOV DIV MOV MOV DIV MOV RET B,#10d AB R3,B B,#10d AB R2,B B,#10d AB A,B ; ; ; ; ; ; ; ; ; ; Store decimal number 10 in B A:B Remainder remains in B Move units to register R3 Store decimal number 10 in B A:B Remainder remains in B Move tens to register R2 Store decimal number 10 in B A:B Remainder remains in B Move hundreds to accumulator Return to the main program 4.2.15 Ghép nối vi điều khiển với bàn phím Hình 4-1.Ma trận bàn phím Hình 4-2.Cách ghép nối bàn phím Đoạn chương trình gửi mã ASCII bấm phím P0.1 Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 167 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng 4.2.16 Ghép nối vi điều khiển với step motor Bài toán thực việc điều khiển động bước quay, thay đổi tốc độ, đảo chiều, dừng động Chương trình sử dụng đầu tạo xung vào động để làm thay đổi trạng thái động bước Thường cuộn dây động bước xác định theo màu dây, nhiên động bất kỳ, ta dùng đồng hồ để xác định dây hình vẽ, trình bày cách xác định động có 5, đầu dây Hình 4-3 Cấu tạo động bước dùng đồng hồ để xác định đầu chung (common) dùng đồng hồ để thang đo trở, đo trở cặp dây, đầu chung đầu có trở đầu khác ½ điện trở đầu khác với Khi biết thứ tự cuộn dây, ta kích xung theo thứ tự động chạy Ví dụ đoạn chương trình sau, giả sử đầu động bước đấu vào bit: P1.0 – P1.3 8051 ORG 0000H MOV R3, MOV A, BACK: MOV P1,A RL A ACALL SJMP BACK DELAY: MOV R1, H1: MOV R2 , H2: DJNZ R2, DJNZ R1, RET END #00000011B R3 ;Quay ghi A DELAY #50 #255 H2 H1 Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 168 Bài giảng Vi xử lý - Vi điều khiển Chương Các hệ vi điều khiển tiên tiến ứng dụng Tài liệu tham khảo Tống Văn On, Hoàng Đức Hải, Họ vi điều khiển 8051, NXB Lao động xã hội, năm 2001 Nguyễn Tăng Cường, Cấu trúc lập trình họ vi điều khiển 8051, NXB Khoa học kỹ thuật, năm 2004 Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 1, ĐHKHTN, 2002 Randal Hyde, The art of assembly language programming – Chapter Norton Guide Dan Rollins, TechHelp v.6.0 http://picat.dieukhien.net http://wapedia.mobi/vi/Hợp_ngữ http://www.emu8086.com/ 10 http://www.daniweb.com/code/ 11 http://www.freewebs.com/maheshwankhede/adcdac.html Bộ mơn Kỹ thuật máy tính – Khoa Điện tử - Trường ĐH Kỹ thuật Công nghiệp 169