Lời Nói Đầu Ngày nay, các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từ dân sự, quân sự đến an ninh quốc phòng, có mặt trong hầu hết các ứng dụng hàng ngày từ những thiết bị nhỏ như điện thoại di động, máy nhắn tin, trò chơi điện tử, các thiết bị gia dụng (máy giặt, điều hòa, tủ lạnh….) đến những thiết bị lớn như ôtô, tàu thủy, xe lửa, máy bay, hệ thống mạng điện thoại, các bộ điều khiển tự động trong nhà máy, các bộ điều chỉnh trong nhà máy điện hạt nhân, trong các hệ thống điều khiển ánh sáng… Với một loạt các ứng dụng thú vị trên, ở đây chúng em xin giới thiệu một ứng dụng nhỏ dùng vi điều khiển 8051 (cụ thể là vi điều khiển AT89S52) để thiết kế đồng hồ điện tử hiển thị bằng led 7 đoạn điều khiển bằng máy tinh. Do thời gian và trình độ còn hạn chế, còn thiếu kinh nghiệm thực tế nên không tránh khỏi những sai sót. Chúng em rất mong nhận được những ý kiến và đóng góp của các thầy cô và các bạn để chúng em có thể hoàn thiện thiết kế hơn nữa...
Bộ Công Thương Trường:Đại Học Công Nghiệp Hà Nội Khoa:Điện Tử ĐỒ ÁN MÔN HỌC ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH ĐỀ TÀI:THIẾT KẾ ĐỒNG HỒ ĐIÊN TỬ SỬ DỤNG CỔNG NỐI TIẾP HIỂN THỊ BẰNG LED ĐOẠN GVHD: VŨ THỊ THU HƯƠNG SVTH: PHAN XUÂN BẮC PHẠM TIẾN BÁCH NGUYỄN ĐỨC THƠNG NhËn xÐt cđa gi¸o viªn híng dÉn Lời Nói Đầu Ngày nay, vi điều khiển thâm nhập vào lĩnh vực vủa đời sống từ dân sự, quân đến an ninh quốc phịng, có mặt hầu hết ứng dụng hàng ngày từ thiết bị nhỏ điện thoại di động, máy nhắn tin, trò chơi điện tử, thiết bị gia dụng (máy giặt, điều hòa, tủ lạnh….) đến thiết bị lớn ôtô, tàu thủy, xe lửa, máy bay, hệ thống mạng điện thoại, điều khiển tự động nhà máy, điều chỉnh nhà máy điện hạt nhân, hệ thống điều khiển ánh sáng… Với loạt ứng dụng thú vị trên, chúng em xin giới thiệu ứng dụng nhỏ dùng vi điều khiển 8051 (cụ thể vi điều khiển AT89S52) để thiết kế đồng hồ điện tử hiển thị led đoạn điều khiển máy tinh Do thời gian trình độ hạn chế, thiếu kinh nghiệm thực tế nên khơng tránh khỏi sai sót Chúng em mong nhận ý kiến đóng góp thầy bạn để chúng em hoàn thiện thiết kế Xin chân thành cảm ơn ! PHẦN I,CẤU TRÚC VI ĐIỀU KHIỂN 8051 I-Giới thiệu tổng quan họ 8051 (AT 89S52) Họ vi điều khiển 8051 (còn gọi C51) họ vi điều khiển thông dụng Đây vi điều khiển bít sản xuất theo công nghệ CMOS Một số loại vi điều khiển thuộc họ 8051 thông dụng nhất: AT89C2051, AT89C4051, AT89C51, AT89S52… Trong AT89S52 vi điều khiển thơng dụng giá rẻ có nhiều chức đặc biệt có tích hợp sẵn nạp chíp Bộ vi điều khiển AT89S52 gồm khối chức sau đây: CPU (Central Processing Unit) bao gồm: - Thanh ghi tích luỹ A - Thanh ghi tích luỹ phụ B, dùng cho phép nhân phép chia - Đơn vị logic học (ALU: Arithmetic Logical Unit) - Thanh ghi từ trạng thái chương trình (PSW: Progam Status Word) - Bốn băng ghi - Con trỏ ngăn xếp Bộ nhớ chương trình (Bộ nhớ ROM) gồm 8Kb Flash Bộ nhớ liệu (Bộ nhớ RAM) gồm 256 bytes Bộ UART (Universal Ansynchronous Receiver and Tranmitter) làm chức truyền nhận nối tiếp, nhờ khối AT89S52 giao tiếp với máy tính qua cổng COM Timer /Counter 16 bít thực chức định thời đếm kiện WDM (Watch Dog Timer) dùng để phục hồi lại hoạt động CPU bị treo nguyên nhân WDM AT89S52 gồm Timer 14 bít, Timer bít, ghi WDTPRG (WDT programable) điều khiển Timer bit ghi chức WDTRST (WDM register) Bình thường WDT khơng hoạt động (bị cấm), phép WDT, giá trị 1EH E1H cần phải ghi liên tiếp vào ghi WDTRST Timer 14 bit WDT đếm tăng dần sau chu kỳ đồng hồ giá trị 16383 xảy tràn Khi xảy tràn, chân RTS đặt mức cao thời gian 96.Tosc (Tossc=1/Fosc) AT89S52 reset Khi WDT hoạt động, ngoại trừ reset phần cứng reset WDT tràn khơng có cách cấm WDT, sử dụng WDT đoạn mã chương trình phải đặt khe thời gian từ lần WDT khởi tạo lại II- Sơ đồ chân chức Port (P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm chân, ngồi chức xuất nhập ra, Port cịn Bus đa hợp liệu địa (AD0-AD7), chức sử dụng AT89S52 giao tiếp với thiết bị ngồi có kiến trúc Bus Hình 1: Cấu trúc chân Port Port (P1.0-P1,7 hay từ chân đến chân 8) : Có chức xuất nhập theo bit byte Ngoài ra, chân P1.5, P1.6, P1.7 dùng để nạp ROM theo chuẩn ISP, chân P1.0 P1.1 dùng cho Timer Hình 2: Cấu trúc chân Port Port 3 Port (P2.0- P2.7 hay từ chân 21 đến chân 28): Là Port có cơng dụng kép: đường xuất nhập byte cao bus địa thiết kế dùng nhớ mở rộng Hình 3: Cấu trúc chân Port Port (P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân Port chức xuất nhập cịn có chức riêng: Bit P3.0 P3.1 Tên RXD TXD Chức Dữ liệu nhận cho Port nối tiếp Dữ liệu truyền cho Port nối tiếp P3.2 P3.3 P3.4 P3.5 P3.6 INT0 INT1 T0 T1 WR P3.7 RD Ngắt bên Ngắt bên Ngõ vào Timer/Counter Ngõ vào Timer/Counter Xung ghi nhớ liệu bên Xung đọc nhớ liệu bên RST (Reset- chân 9): Mức tích cực chân mức 1, để reset ta phải đưa mức 1(5V) đến chân với thời gian tối thiểu chu kỳ máy( tương đương 2µs thạch anh 12MHz XTAL1, XTAL2: AT89S52 có dao động chip, thường nối với dao động thạch anh có tần số lớn 33MHz, thơng thường 12MHz EA (External Access): EA thường mắc lên mức cao (+5V) mức thấp (GND) Nếu mức cao, vi điều khiển thi hành chương trình từ ROM nội Nếu mức thấp, chương trình thi hành từ nhớ mở rộng ALE (Address Latch Enable): ALE tín hiệu để chốt địa vào ghi bên nửa đầu chu kỳ nhớ Sau đường port dùng để xuất nhập liệu nửa chu kỳ sau nhớ PSEN (Program Store Enable): PSEN điều khiển phép nhớ chương trình mở rộng trường nối đến chân /OE (Output Enable) EPROM phép đọc bytes mã lệnh PSEN mức thấp thời gian đọc lệnh Các mã nhị phân chương trình đọc từ EPROM qua Bus chốt vào ghi lệnh vi điều khiển để giải mã lệnh Khi thi hành chương trình ROM nội, PSEN mức thụ động (mức cao) 10 Vcc, GND: AT89S52 dùng nguồn chiều có dải điện áp từ 4V-5.5V cấp qua chân 40 (Vcc) chân 20 (GND) II,CẤU TRÚC IC MAX 232 Bộ vi điều khiển AT89s52 có khả giao tiếp với thiết bị qua cổng nối tiếp Vấn đề trở ngại giao tiếp với máy tính mức logic vi điều khiển cổng COM khác cụ thể sau: Đối tượng Mức logic Cổng COM (Mức RS232) Mức điện áp tương ứng -12 V đến -3V +3V đến +12V Vi Điều khiển (Mức TTL) +5V 0V Khắc phục vấn đề này, người ta sử dụng vi mạch MAX 232 để chuyển đổi mức điện áp chuẩn Vi mạch có chứa hai chuyển đổi mức logic từ TTL sang RS232 ngược lại Hình mạch giao tiếp vi điều khiển với máy tính qua cổng RS232C sử dụng vi mạch đổi mức MAX232 Hình 6: Truyền thông qua cổng nối tiếp Như thực chất việc truyền thông qua cổng nối tiếp thực chất việc truyền mã ASCII ký tự.Để gửi cho máy tính kí tự từ ‘0’ đến ‘9’ ta phải truyền mã ASCII chúng từ 0x30 đến 0x39 Để kiểm tra xem máy tính có nhận kí tự mà vi điều khiển truyền tới chưa, ta phải cho máy tính thi hành Chương trình nhận số liệu qua cổng nối tiếp chương trình viết ngơn ngữ lập trình Basic, Pascal, C, C++ Trong Windows có cung cấp sẵn cho công cụ truyền tin qua cổng nối tiếp Hyper Terminal PHẦN 2: THIẾT KẾ PHẦN CỨNG I,SƠ ĐỒ NGUYÊN LÝ VCC R11 10K 33 C2 Vin 33 C3 GND GND Y1 18 19 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 RXD/P3.0 TXD/P3.1 INT0/P3.2 INT1/P3.3 T0/P3.4 T1/P3.5 WR/P3.6 RD/P3.7 10 11 12 13 14 15 16 17 GND JP2 T2/P1.0 T2 EX/P1.1 P1.2 P1.3 P1.4 P1.5/MOSI P1.6/MISO P1.7/SCK P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 RESET EA/VPP XTAL1 XTAL2 AT89S52 +5V 100uF ALE/PROG PSEN VCC 21 22 23 24 25 26 27 28 C8 1k C9 R5 R6 R7 R8 R9 R10 R12 31 30 29 a b c d e f g a b c d e f g VCC RxD 13 TxD 14 10uF C6 GND IC2 R1IN T1OUT R2IN T2OUT R1OUT T1IN R2OUT T2IN C1+ C1VS- C2+ GND GND DS1 7SEGQ C4 10uF LED1 LED JP1 JP9 D0 D1 D2 D3 151 R13 U1 II,SƠ ĐỒ MẠCH IN 39 38 37 36 35 34 33 32 VCC C1 IC1 16 RX TX VCC GND COM 12 Q4 A1015 15 SW1 SW Q3 D3 R4 A1015 1k 2 VCC 1k J1 TxD R3 Q2 D2 A1015 1k a b c d e f g h 1k GND RxD R2 Q1 D1 A1015 11 10 R1 D0 VCC C2VS+ 12 11 10 RX TX 10uF C5 10uF C7 VCC III,CHƯƠNG TRÌNH ĐIỀU KHIỂN 1,PHẦN VISUA BASIC Dim gio As Integer Dim phut As Integer Dim giay As Integer Dim As Integer Dim thang As Integer Dim nam As Integer Dim N1 As Integer Dim N2 As Integer Dim N3 As Integer Dim N4 As Integer Private Sub Command1_Click() Text2.Text = Format(Now, "dd/mm/yyyy") End Sub Private Sub Command2_Click() If IsDate(Text2.Text) Then Date = Format(Text2.Text, "dd/mm/yyyy") Else MsgBox "LOI NHAP SAI NGAY" Text2.SetFocus Exit Sub End If End Sub Private Sub Command3_Click() Text4.Text = Format(Now, "hh:nn:ss ") End Sub Private Sub Command4_Click() If IsDate(Text4.Text) Then Time = Format(Text4.Text, "hh:nn:ss") Else MsgBox "LOI NHAP SAI GIO" Text4.SetFocus Exit Sub End If End Sub Private Sub Command6_Click() End End Sub Private Sub Form_Load() MSComm1.CommPort = MSComm1.Settings = "9600,N,8,1" MSComm1.InputLen = MSComm1.RThreshold = MSComm1.SThreshold = MSComm1.PortOpen = True Timer1.Enabled = True Timer2.Enabled = True End Sub Private Sub Timer1_Timer() Text3.Text = Format(Now, " hh:nn:ss") Text1.Text = Format(Now, " dd/mm/yyyy") If (Option1.Value = True) Then N4 = (Format(Now, "HH") \ 10) N3 = (Format(Now, "HH") Mod 10) N2 = (Format(Now, "nn") \ 10) N1 = (Format(Now, "nn") Mod 10) End If If (Option2.Value = True) Then N4 = (Format(Now, "nn") \ 10) N3 = (Format(Now, "nn") Mod 10) N2 = (Format(Now, "ss") \ 10) N1 = (Format(Now, "ss") Mod 10) End If If (Option3.Value = True) Then N4 = (Format(Now, "dd") \ 10) N3 = (Format(Now, "dd") Mod 10) N2 = (Format(Now, "mm") \ 10) N1 = (Format(Now, "mm") Mod 10) End If If (Option4.Value = True) Then N4 = (Format(Now, "mm") \ 10) N3 = (Format(Now, "mm") Mod 10) N2 = (Format(Now, "yy") \ 10) N1 = (Format(Now, "yy") Mod 10) End If End Sub Private Sub Timer2_Timer() dd1 = Val(N1) dd2 = Val(N2) dd3 = Val(N3) dd4 = Val(N4) 'bien doi cac so nguyen ve kieu ky tu X1 = Chr(dd1) X2 = Chr(dd2) X3 = Chr(dd3) X4 = Chr(dd4) 'truyen xuong mach MSComm1.Output = "@" MSComm1.Output = X1 MSComm1.Output = X2 MSComm1.Output = X3 MSComm1.Output = X4 End Sub 2,CODE C #include #include #include sbit LED1=P1^0; // quet led hang nghin sbit LED2=P1^1; // quet led hang tram sbit LED3=P1^2; // quet led hang chuc sbit LED4=P1^3; // quet led hang don vi int so4, so3,so2,so1,i,j,tg; unsigned char dem=0; unsigned char M[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // ma led void timer0 (void) interrupt { TH0=0xF8; TL0=0x40; switch(dem) { case 0: LED2=LED3=LED1=0; P0=M[so1]; LED4=1; // LED hang don vi break; case 1: LED1=LED2=LED4=0; P0=M[so2]; LED3=1; // LED hang chuc break; case 2: LED1=LED3=LED4=0; P0=M[so3]; LED2=1; // led hang tram break; case 3: LED4=LED2=LED3=0; P0=M[so4];; LED1=1; // led hang nghin break; } if(++dem==4)dem=0; } void main() { SCON=0x52; TMOD=0x20; TH1=TL1=-3; TR1=1; TH0=0xf8; TL0=0x30; TR0=1; ET0=EA=1; PT0=1; tg =10; while(1) { { tg =_getkey(); } while(tg!='@'); so1=_getkey(); so2=_getkey(); so3=_getkey(); so4=_getkey(); } } PHẦN KẾT LUẬN 1,ƯU ĐIỂM : - Mạch hiển thị đầy đủ giá trị ngày, giờ, phút, giây, tháng, năm - Mạch hiển thị rõ ràng giá trị led đoạn - Thiết kế mạch nhỏ gọn dễ sử dụng 2,NHƯỢC ĐIỂM : - Mạch hiển thi giá trị lúc nên muốn xem giá trị lại ta phải điều khiển 3,ỨNG DỤNG : - Mạch thiết kế đơn giản hiển thị rõ ràng nên ứng dụng làm đồng hồ điện tử thực tế - Cơ cấu hiển thị số mạch giúp nâng cao độ xác đọc giá trị - Có thể nói khn khổ mạch đồng hồ điện tử sử dụng hiệu làm việc linh kiện có mạch, để mạch điện ứng dụng rộng rãi thực tế ta tích hợp thêm nhiều tính khác cho mạch, để mạch điện có hiệu làm việc cao có nhiều ứng dụng - Bằng cách nâng cấp phần cứng thay đổi phần mềm, mạch điện hồn tồn tích hợp thêm tính hiển thị lịch vạn niên giá trị giờ, phút, giây, ngày, tháng âm lịch dương lịch diện tích Tài liệu tham khảo 1.Vi điều khiển cấu trúc lập trình ứng dụng (Kiều Xuân Thực – Vũ Thị Thu Hương – Vũ Trung Kiên) 2.Giáo trình đo lường điều khiển máy tính(Vũ Thị Thu Hương) Họ vi điều khiển 8051 (Tống Văn On – Hoàng Đức Hải) Internet: dientuvietnam.net diendandientu.com dientuvienthong.net ... ánh sáng… Với loạt ứng dụng thú vị trên, chúng em xin giới thiệu ứng dụng nhỏ dùng vi điều khiển 8051 (cụ thể vi điều khiển AT89S52) để thiết kế đồng hồ điện tử hiển thị led đo? ??n điều khiển máy. .. (Vcc) chân 20 (GND) II,CẤU TRÚC IC MAX 232 Bộ vi điều khiển AT89s52 có khả giao tiếp với thiết bị qua cổng nối tiếp Vấn đề trở ngại giao tiếp với máy tính mức logic vi điều khiển cổng COM khác... Mạch hiển thị rõ ràng giá trị led đo? ??n - Thiết kế mạch nhỏ gọn dễ sử dụng 2,NHƯỢC ĐIỂM : - Mạch hiển thi giá trị lúc nên muốn xem giá trị lại ta phải điều khiển 3,ỨNG DỤNG : - Mạch thiết kế đơn