Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
1,69 MB
Nội dung
TRƯỜNG ĐẠI HỌC KHOA HỌC KHOA CÔNG NGHỆ THÔNG TIN ****** TIỂU LUẬN VI ĐIỀU KHIỂN 8051 VÀ LẬP TRÌNH ĐỒNG HỒ SỐ ĐƠN GIẢN GVHD: LÊ VĂN THANH VŨ SVTH: TRẦN ĐỨC KHÁNH MSV: 18T1021142 Tháng 08 – Năm 2021 TIỂU LUẬN KIẾN TRÚC MÁY TÍNH MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN 8051 1.1 Kiến trúc vi điều khiển 8051 1.1.1 Chuẩn 8051 1.1.2 Các chân vi điều khiển 8051 1.1.3 Tổ chức nhớ .9 1.1.3.1 Bộ nhớ 10 1.1.3.1.1 Bộ nhớ chương trình(ROM): .11 1.1.3.1.2 Bộ nhớ liệu (RAM): .11 1.1.3.1.3 Thanh ghi chức đặc biệt (SFR) 12 1.1.3.2 Bộ nhớ 16 1.1.4 Tập lệnh 8051 chế độ đánh địa 17 1.1.4 Timer/Counter .22 1.1.4.1 Tổng quan 22 1.1.4.2 Các ghi Timer .22 1.1.4.3 Các chế độ đếm/ định thời 24 CHƯƠNG 2: LẬP TRÌNH ĐỒNG HỒ SỐ 26 2.1 Sơ đồ vẽ mạch mô 26 2.2 Lập trình 26 2.3 Kết 28 2.4 Biên dịch assembly .30 Đề tài “Vi Điều Khiển 8051 Và Ứng Dụng Timer Lập Trình Đồ Hồ Số Đơn Giản” Trang LỜI MỞ ĐẦU Ngày ngành kỹ thuật điện tử có vai trị quan trọng sống người Các hệ thống điện tử ngày đa dạng thay công việc hàng ngày người từ công việc đơn giản đến phức tạp điều khiển tín hiệu đèn giao thông, biển quảng cáo, đo tốc độ động hay đồng hồ số… Các hệ thống thiết kế theo hệ thống tương tự, hệ thống số dùng vi điều khiển Tuy nhiên hệ thống điện tử thông minh người ta thường sử dụng vi điều khiển hệ thống tương tự hay hệ thống số số ưu điểm vượt trội mà vi điều khiển mang lại là: độ tin cậy cao, giá thành thấp, dễ dàng thiết kế, lắp đặt vận hành… Để làm điều phải có kiến thức vi điều khiển, hiểu cấu trúc chức Sau q trình học tập, với giảng day thầy Lê Văn Thanh Tú, em chọn đề tài: “Vi điều khiển 8051 lập trình đồng hồ số đơn giản” Nội dung đề tài gồm chương: + Chương 1: Tìm hiểu vi điều khiển 8051 + Chương 2: Lập trình đồng hồ số đơn giản Do kiến thức trình độ lực hạn hẹp nên việc thực đề tài khơng thể tránh thiếu sót, kính mong nhận thơng cảm góp ý tất thầy, cô giáo bạn để đề tài hoàn thiện Em xin chân thành cảm ơn Em xin chân thành cảm ơn! TRƯỜNG ĐẠI HỌC KHOA HỌC KHOA… CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc PHIẾU ĐÁNH GIÁ TIỂU LUẬN HỌC KỲ: NĂM HỌC: … Cán chấm thi Cán chấm thi Nhận xét: Nhận xét: Điểm đánh giá CBChT1: Điểm đánh giá CBChT2: Bằng số: Bằng số: Bằng chữ: Bằng chữ: Điểm kết luận: Bằng số .Bằng chữ: CBChT1 (Ký ghi rõ họ tên) Thừa Thiên Huế, ngày …… tháng năm 20… CBChT2 (Ký ghi rõ họ tên) CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN 8051 1.1 Kiến trúc vi điều khiển 8051 1.1.1 Chuẩn 8051 Họ vi điều khiển MCS-51 Intel sản xuất vào năm 1980 IC thiết kế cho ứng dụng hướng điều khiển Các IC hệ thống vi xử lý hồn chỉnh bao gồm các thành phần hệ vi xử lý: CPU, nhớ, mạch giao tiếp, điều khiển ngắt MCS-51 họ vi điều khiển sử dụng chế CISC (Complex Instruction Set Computer), có độ dài thời gian thực thi lệnh khác Tập lệnh cung cấp cho MCS-51 có lệnh dùng cho điều khiển xuất/nhập tác động đến bit MCS-51 bao gồm nhiều vi điều khiển khác nhau, vi điều khiển 8051 có 4KB ROM, 128 byte RAM 8031, khơng có ROM nội, phải sử dụng nhớ Sau này, nhà sản xuất khác Siemens, Fujitsu, … cấp phép làm nhà cung cấp thứ hai MCS-51 bao gồm nhiều phiên khác nhau, phiên sau tăng thêm số ghi điều khiển hoạt động MCS-51 Hình 1-1 Kiến trúc vi điều khiển 8051 AT89C51 vi điều khiển Atmel sản xuất, chế tạo theo công nghệ CMOS có đặc tính sau: - KB PEROM (Flash Programmable and Erasable Read Only Memory), có khả tới 1000 chu kỳ ghi xoá - Tần số hoạt động từ: 0Hz đến 24 MHz - mức khóa nhớ lập trình - 128 Byte RAM nội - Port xuất /nhập I/O bit - Timer/counter 16 Bit - nguồn ngắt - Giao tiếp nối tiếp điều khiển phần cứng - 64 KB vùng nhớ mã - 64 KB vùng nhớ liệu - Cho phép xử lý bit - 210 vị trí nhớ định vị bit - chu kỳ máy (4 µs thạch anh 12MHz) cho hoạt động nhân chia - Có chế độ nghỉ (Low-power Idle) chế độ nguồn giảm (Power-down) - Ngoài ra, số IC khác họ MCS-51 có thêm định thời thứ 256 byte RAM nội 1.1.2 Các chân vi điều khiển 8051 Hình 1-2 Sơ đồ chân VĐK AT89C51 Như AT89C51 có tất 40 chân Mỗi chân có chức đường I/O (Xuất/Nhập), 24 chân có cơng dụng kép: đường hoạt động đường I/O đường điều kiện thành phần bus địa bus liệu Mô tả chân: VCC (chân 40) Chân cấp nguồn GND (chân 20) Chân nối đất Port Port port xuất/nhập song hướng cực máng hở bit Nếu sử dụng ngõ xuất chân kéo ngõ vào TTL Khi mức viết vào chân port 0, chân dùng ngõ nhập tổng trở cao Port định cấu hình để hợp kênh bus địa bus liệu (Phần byte thấp) truy cập đến nhớ liệu nhớ chương trình ngồi Ở chế độ này, PO có điện trở pullup bên Port nhận byte code (byte mã chương trình) lập trình flash, xuất byte code kiểm tra chương trình Cần có điện trở pullup bên ngồi thực việc kiểm tra chương trình Port Port1 (chân – 8) có chức I/O, khơng dùng cho mục đích khác (chỉ 8032/8052/8952 dùng thêm P1.0 P1.1 cho định thời thứ 3) Tại Port có điện trở kéo lên nên không cần thêm điện trở ngồi Port có khả kéo ngõ TTL dùng làm bit địa thấp trình lập trình hay kiểm tra Khi dùng làm ngõ vào, Port phải set mức logic trước Port Port (chân 21 – 28) port có chức năng: - Chức I/O (xuất / nhập) - Chức địa chỉ: dùng làm bit địa cao cần nhớ ngồi có địa 16 bit Khi đó, Port khơng dùng cho mục đích I/O - Khi dùng làm ngõ vào, Port phải set mức logic trước - Khi lập trình, Port dùng làm bit địa cao hay số tín hiệu điều khiển Port Port (chân 10 – 17) port có chức năng: - Chức I/O Khi dùng làm ngõ vào, Port phải set mức logic trước - Chức khác: Bit Tên Chức P3.0 RxD Ngõ vào port nối tiếp P3.1 TxD Ngõ port nối tiếp P3.2 INT0 Ngắt P3.3 INT1 Ngắt P3.4 T0 Ngõ vào định thời P3.5 T1 Ngõ vào định thời P3.6 WR Tín hiệu điều khiển ghi liệu lên nhớ ngồi P3.7 RD Tín hiệu điều khiển đọc từ nhớ liệu /PSEN /PSEN (chân 29) cho phép đọc nhớ chương trình mở rộng ứng dụng sử dụng ROM ngoài, thường nối đến chân /OC (Output Control) ROM để đọc byte mã lệnh /PSEN mức logic thời gian AT89C51 lấy lệnh.Trong trình này, / PSEN tích cực lần chu kỳ máy Mã lệnh chương trình đọc từ ROM thơng qua bus liệu (Port0) bus địa (Port0 + Port2) Khi 8051 thi hành chương trình ROM nội, PSEN mức logic ALE/PROG ALE/ PROG (chân 30) cho phép tách đường địa liệu Port truy xuất nhớ ALE thường nối với chân Clock IC chốt (74373, 74573) Các xung tín hiệu ALE có tốc độ 1/6 lần tần số dao động chip dùng làm tín hiệu clock cho phần khác hệ thống Xung cấm cách set bit SFR địa 8Eh lên Khi đó, ALE có tác dụng dùng lệnh MOVX hay MOVC Ngoài ra, chân cịn dùng làm ngõ vào xung lập trình cho ROM nội ( /PROG ) EA/VPP EA (chân 31) dùng phép thực thi chương trình từ ROM Khi nối chân 31 với Vcc, AT89C51 thực thi chương trình từ ROM nội (tối đa 8KB), ngược lại thực thi từ ROM ngồi (tối đa 64KB) Ngoài ra, chân /EA lấy làm chân cấp nguồn 12V lập trình cho ROM RST Ngõ vào reset Một mức cao chân khoảng chu kỳ máy dao dộng chạy reset thiết bị XTAL1 XTAL2 Ngõ vào ngõ dao động, sử dụng cần kết nối thêm thạch anh tụ hình vẽ sơ đồ Tần số thạch anh thường sử dụng cho AT89C51 12Mhz Hình 1-3 Sơ đồ kết nối thạch anh 1.1.3 Tổ chức nhớ - Tổ chức nhớ 8051: Hình 1-4 Khơng gian vùng nhớ 8051 Hình 1-5 Bộ nhớ liệu 8051 1.1.3.1 Bộ nhớ 1.1.4 Timer/Counter 1.1.4.1 Tổng quan + Chức Timer/Counter, tên gọi, định thời (tạo thời gian, đo thời gian), đếm kiện bên + 8051 có Timer/Counter T0 T1, Timer 16 bit Chúng hoạt động với tần số bên (lấy từ thạch anh), hoạt động với tần số bên ngồi, đưa vào đầu vào Timer 1.1.4.2 Các ghi Timer Thanh ghi vân hành TH0 TL0, TH1, TL1 Đây ghi chứa giá trị vận hành Timer Dùng kết hợp ghi bit giống ghi 16 bit với byte: byte thấp byte cao Thanh ghi byte thấp Timer gọi TL0 (Timer bow byte), ghi byte cao gọi TH0 (Timer high byte), tương tự Timer Hình 1.6 Thanh ghi Timer Hình 1.7 Thanh ghi Timer Thanh ghi TMOD Đây ghi thiết lập chế độ hoạt động Timer Thanh ghi TMOD ghi bit, bit thấp dùng để thiết lập cho Timer 0, bit cao dành cho Timer Hình 1.8 Thanh ghi TMOD bit M1, M0 Đây bit cài đặt chế độ hoạt động cho Timer, bảng đây: Bit C/T Bit định xem định thời dùng máy tạo độ trễ đếm kiện Nếu bit C/T=0 định thời dùng tạo độ trễ thời gian Khi nguồn xung clock cấp cho Timer hoạt động 1/12 tần số thạch anh mạch Nếu bit C/T=1 định thời dùng đếm kiện bên ngồi Khi dùng nguồn clock để vận hành Bit GATE Một Timer tự động hoạt động hay dừng, mà ta phải thực lệnh Một số định thời thực điều phần cứng, số thực phần mềm, số thực cách Các định thời 8051 thực cách Bit GATE dùng để định việc khởi động hay dừng Timer phần cứng hay phần mềm Nếu bit GATE=0 tức ta cần khởi động dừng Timer phần mềm Việc điều khiển bit TR ghi TCON Nếu bit GATE=1 tức ta cần khởi động dừng Timer phần cứng Khi chân P2.3 điều khiển cho Timer P3.3 điều khiển cho Timer Khi đưa chân tương ứng lên (sử dụng cơng tắc chuyển mạch) Timer tương ứng chạy, đưa xuống Timer dừng Thanh ghi TCON Đây ghi điều khiển hoạt động Timer/Counter Hình 1.9 Thanh ghi TCON bit thấp để phục vụ cho ngắt ngoài, không cần quan tâm Bit TR0: bit dùng để điều khiển việc chạy/dừng Timer (1 chạy, dừng) Bit TF0: bit cờ báo hiệu tràn Timer Khi có tượng tràn xảy bit tự động lên Bit TR1 TF1: bit dùng cho Timer 1, hoạt động tương tự TR0, TF0 1.1.4.3 Các chế độ đếm/ định thời Chế độ Chế độ Chế độ Chế độ CHƯƠNG 2: LẬP TRÌNH ĐỒNG HỒ SỐ 2.1 Sơ đồ vẽ mạch mô Mạch mô sử dụng linh kiện gồm: IC AT89C51, Led thanh, Led đơn, điện trở, điện trở băng, nút bấm 2.2 Lập trình Code #include #define hour P3_6 #define P3_7 #define led1 P2_0 #define led2 P2_1 #define led3 P2_2 #define led4 P2_3 #define sang #define tat char so[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; void delay(int ms) { while(ms ) { TMOD = 0x01; TH0 = 0xfc; TL0 = 0x18; TR0 = 1; while(!TF0); TF0 = 0; TR0 = 0; } } void hienthi(unsigned char gio, unsigned char phut) { unsigned char chuc0, donVi0, chuc1, donVi1, i; chuc0 = gio/10; donVi0 = gio%10; chuc1 = phut/10; donVi1 = phut % 10; for(i=0;i59) phut=0; // } } } 2.3 Kết Sau lập trình xong chuyển đổi để lấy file hex phục vụ cho việc chạy mô phỏng: Khi ta bấm nút tính vi điều khiển bắt đầu hoạt động việc đếm thời gian: + Hai đèn led đơn sáng màu vàng 1s tắt vòng 1s + Dựa đếm thời gian sau phút, đồng hồ phút nhảy lên + Khi ta bấm giữ cài đặt đồng hồ tự nhảy +1 23 chuyển + Khi ta bấm giữ cài đặt phút đồng hồ tự nhảy phút 59 phút đồng hồ phút chuyển đẩy đồng hồ +1 2.4 Biên dịch assembly 37: void main() 38: { 39: unsigned char gio, phut, giay; 40: P3_0=0; C:0x088C C2B0 CLR P3_0(0xB0.0) //gán p3 =0 41: gio = 1; phut = 0; giay = 0; C:0x088E 751201 MOV 0x12,#0x01 //gán nội dung ô nhớ trỏ giá trị 0x12 giá trị 0x01 C:0x0891 E4 CLR C:0x0892 F513 A MOV //gán a = 0x13,A //chép liệu ghi 0x14,A //chép liệu gi a a vào ô nhớ với giá trị 0x13 C:0x0894 F514 MOV vào ô nhớ với giá trị 0x14 42: while(1) 43: { 44: 45: // while(giay23) gio=1; //Nhảy đến nhãn //tăng giá trị ghi lên C:0x08BE E512 MOV A,0x12 //chép giá trị 0x12 vào ghi a C:0x08C0 D3 SETB C C:0x08C1 9417 SUBB //Gán cờ C =1 A,#0x17 //Cộng nội dung ghi A 0x17 + cờ nhớ c, kq cất vào A C:0x08C3 4003 JC C:08C8 C:0x08C5 751201 MOV //Nhảy đến nhãn cờ C =1 0x12,#0x01 //gán nội dung ô nhớ trỏ giá trị 0x12 giá trị 0x01 58: if(min==0) C:0x08C8 20B70C JB 59: P3_7(0xB0.7),C:08D7 //nhảy đến nhãn { 60: delay(1); C:0x08CB 7F01 MOV R7,#0x01 //gán giá trị 0x01 vào ghi MOV R6,#0x00 //gán giá trị 0x00 vào ghi r7 C:0x08CD 7E00 r6 C:0x08CF 120936 LCALL delay(C:0936) 61: //Gọi chương trình if(min == 0) phut++; C:0x08D2 20B702 JB P3_7(0xB0.7),C:08D7 C:0x08D5 0513 0x13 INC 62: } 63: if(phut>59) phut=0; 64: // //Nhảy đến p3_7 //tăng giá trị ghi lên } C:0x08D7 E513 MOV A,0x13 //chép giá trị 0x13 vào ghi A C:0x08D9 D3 C:0x08DA 943B SETB C SUBB //gán cờ C =1 A,#0x3B //Cộng nội dung ghi a 0x3B+ cờ nhớ c, kết nhét vào ghi a C:0x08DC 40B8 C:0x08DE E4 JC CLR C:0896 // nhảy đến nhãn c=1 A //gán a =0 C:0x08DF F513 MOV 0x13,A SJMP C:0896 //gán liệu ghi A với giá trị 0x13 65: } C:0x08E1 80B3 24: void hienthi(unsigned char gio, unsigned char phut) 25: { 26: unsigned char chuc0, donVi0, chuc1, donVi1, i; 27: chuc0 = gio/10; donVi0 = gio%10; C:0x08E3 EF MOV A,R7 //chép giá trị ghi r7 vào ghi a C:0x08E4 75F00A MOV C:0x08E7 84 C:0x08E8 F515 DIV B(0xF0),#0x0A AB //gán 0x0A vào giá trị b //chia a cho b MOV 0x15,A //gán ghi a với giá trị MOV A,R7 //chép giá trị ghi r7 vào 0x15 C:0x08EA EF ghi a C:0x08EB 75F00A MOV B(0xF0),#0x0A //gán 0x0A vào giá trị b C:0x08EE 84 C:0x08EF A9F0 DIV AB MOV //chia a cho b R1,B(0xF0) //chép giá trị b vào ghi r1 28: chuc1 = phut/10; donVi1 = phut % 10; C:0x08F1 ED MOV A,R5 //chép giá trị ghi r5 vào ghi a C:0x08F2 75F00A MOV B(0xF0),#0x0A AB //gán 0x0A vào giá trị b C:0x08F5 84 DIV //chia a cho b C:0x08F6 FB MOV R3,A //gán liệu ghi a MOV A,R5 //chép giá trị ghi r5 vào với ghi r3 C:0x08F7 ED ghi a C:0x08F8 75F00A MOV B(0xF0),#0x0A //gán 0x0A vào giá trị b C:0x08FB 84 DIV C:0x08FC ADF0 AB MOV //chia a cho b R5,B(0xF0) //chép giá trị b vào ghi r1 29: for(i=0;i