intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Phần I: Cơ sở lý thuyết

Chia sẻ: La Tuan Hao | Ngày: | Loại File: DOC | Số trang:22

14.330
lượt xem
24
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

1.1. CPU ( Central Processing Unit): - Thanh ghi tích lũy A. - Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia. - Đơn vị logic học ( ALU: Arithmetic Logical Unit) - Từ trạng thái chương trình (PSW: Program Status Word) - Bốn băng thanh ghi - Con trỏ ngăn xếp 1.2. Bộ nhớ chương trình (Bộ nhớ ROM) gồm 8Kb Flash. 1.3. Bộ nhớ dữ liệu (Bộ nhớ RAM) gồm 256 bytes. 1.4. Bộ UART (Universal Ansynchronous Receiver and Transmitter) làm chức năng truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với cổng COM của máy tính....

Chủ đề:
Lưu

Nội dung Text: Phần I: Cơ sở lý thuyết

  1. PHẦN I : CƠ SỞ LÝ THUYẾ T I. Sơ đồ khối và chức năng các khối của AT89S52: Bộ vi điều khiển AT89S52 gồ m các khố i: 1.1. CPU ( Central Processing Unit): - Thanh ghi tích lũy A. - Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia. - Đơ n vị logic học ( ALU: Arithmetic Logical Unit) - Từ trạng thái chương trình (PSW: Program Status Word) - Bốn băng thanh ghi - Con trỏ ngăn xếp 1.2. Bộ nhớ chương trình (Bộ nhớ ROM) gồm 8Kb Flash. 1.3. Bộ nhớ dữ liệu (Bộ nhớ RAM) gồm 256 bytes. 1.4. Bộ UART (Universal Ansynchronous Receiver and Transmitter) làm chức năng truyề n nhậ n nố i tiếp, nhờ khố i này, AT89S52 có thể giao tiếp vớ i cổng COM của máy tính. 1.5. 3 bộ Timer/Counter 16 bit thực hiện các chức năng đ ịnh thờ i và đ ếm sự kiện. 1.6. WDT (Watch Dog Timer): đ ược dùng để hồi phục lạ i hoạt động của CPU khi nó bị treo bở i 1 nguyên nhân nào đó. Gồ m có mộ t bộ Timer 14 bit, mộ t bộ Timer 7 bit, thanh g hi WDTPRG (WDT programable) điều khiển Timer 7 bit và một thanh ghi chức năng WDTRST (WDT resister). 1
  2. 2
  3. 2.1 Port 0 (P0.0 – P0.7) Port 0 gồ m 8 chân, ngoài chức năng xuất nhậ p ra, Port 0 còn là Bus đa hợp dữ liệ u và địa chỉ (AD0-AD7), chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với các thiế t bị ngoài có kiến trúc Bus. 2.2 Port 1 (P1.0 – P1.7) Đố i vớ i 8051, chức năng duy nhấ t của Port 1 là chức năng xuất nhập, cũng như các Port khác, Port 1 có thể xuất nhập theo bit và theo byte. 2.3 Port 2 (P2.0 – P2.7) Port 2 là mộ t Port công dụng kép: là 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. 2.4 Port 3 (P3.0 – P3.7) Mỗi chân trên Port 3 ngoài các chức năng xuất nhậ p thì còn một chức năng riêng cụ thể như sau: Bit Tên Chức năng 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 P3.2 INT0 Ngắ t 0 bên ngoài P3.3 INT1 Ngắ t 1 bên ngoài P3.4 T0 Ngõ vào của Timer/Counter 0 P3.5 T1 Ngõ vào của Timer/Counter 1 P3.6 WR Xung ghi bộ nhớ dữ liệu ngoài P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài 2.5 PSEN (Program Store Enable) : điều khiển đọc bộ nhớ ngoài. 2.6 ALE (Address Latch Enable) : dùng để cho phép mạch chốt bên ngoài. 2.7 EA (External Access) : chọn bộ nhớ chương trình. Khi ở mức cao thì chọn ROM trong, ngược lạ i ở mức thấp chọn ROM ngoài. 3. Các thiết kế sử dụng ngắt AT89s52 có 6 nguồn ngắ t: • Ngắt ngoài 0. • Ngắt ngoài 1. • Ngắt do bộ timer 0. • Ngắt do bộ timer 1. • Ngắt do bộ timer 2. • Ngắt do port nối tiếp. 6 nguồn ngắt này đ ược xoá khi Reset và đ ược đặ t riêng bằng phầ n mềm bởi các bit trong các thanh ghi cho phép ngắt(IE), thanh ghi ưu tiên ngắ t (IP). Thanh ghi cho phép ngắt IE. 3
  4. Bit Ký hiệ u Mô tả ( 1cho phép , o cấm) IE.7 EA Cho phép hoặc cấ m toàn bộ. IE.6 - Không được địng nghĩa. IE.5 ET5 Cho phép ngắ t từ timer 2. IE.4 ES Cho phép ngắ t từ port nối tiếp. IE.3 ET1 Cho phép ngắ t từ timer 1. IE.2 EX1 Cho phép ngắ t ngoài 1. IE.1 ET0 Cho phép ngắ t từ timer 0. IE.0 EX0 Cho phép ngắ t ngoài 0. Thanh ghi ưu tiên ngắt IP. II.VI MẠ CH 8253 (PROGRAMABLE COUNTER AND TIMER) U 2 24 1 D 7 VC C 2 11 3 D 6 G 0 14 4 D 5 G 1 16 5 D 4 G 2 6 D 3 7 D 2 9 8 D 1 C L K0 1 0 D 0 O U T0 1 5 19 C L K1 1 3 20 A0 O U T1 1 8 A1 C L K2 1 7 22 O U T2 R D G N D 23 C S W R 8253 12 21 4
  5. Vi mạch 8253 là một bộ đ ếm và định thờ i được ứng dụng rộng rãi. Một số ứng dụng thực tế : bộ đếm tần số, bộ phát xung lập trình đ ược, bộ đ ếm tần số…. .8253 chứa 3 bộ đ ếm lùi 16 bit độ c lập với nhau. Mỗi bộ đ ếm có 3 chân tươ ng ứng : lối vào giữ nhịp CLK, lối vào điề u khiể n GATE và lối ra tín hiệu OUT. Sơ đồ khối của 8253 Hệ thống mạch ghép nối 8253 5
  6. Bả ng logic ghi đọc của 8253: __ __ __ CS RD WR A1 A0 0 1 0 0 0 Load Counter No. 0 0 1 0 0 1 Load Counter No. 1 0 1 0 1 0 Load Counter No. 2 0 1 0 1 1 Write Mode Word 0 0 1 0 0 Read Counter No. 0 0 0 1 0 1 Read Counter No. 1 0 0 1 1 0 Read Counter No. 2 0 0 1 1 1 No Operation 3-State 1 X X X X Disable 3 State 0 1 1 X X No Operation 3-State Bộ đ ếm của 8253 là 16 bit, trong khi bus dữ liệu là 8 bit, vì vậy khi khở i tạ o tạo bộ đếm bằng một số lớn hơn 255 ta phải truy ền byte thấp trước, byte cao sau. Program format A1 A0 No. MODE Control Word 1 1 1 Counter 0 No. MODE Control Word 1 1 2 Counter 1 No. MODE Control Word 1 1 3 Counter 2 6
  7. No. LSB Count Register Byte 0 1 4 Counter 1 No. MSB Count Register Byte 0 1 5 Counter 1 No. LSB Count Register Byte 1 0 6 Counter 2 No. MSB Count Register Byte 1 0 7 Counter 2 No. LSB Count Register Byte 0 0 8 Counter 0 No. MSB Count Register Byte 0 0 9 Counter 0 8253 có 6 chế độ hoạ t động : Kiể u hoạt độ ng mode 0 sườn dương bị làm trễ : lố i ra OUT của bộ đ ếm ở mức logic thấp ngay sau khi chọn chế độ và giữ nguyên trạng thái trong n chu kỳ giữ nhịp của xung CLK, sau đó chuyển sang mức cao khi bộ dế m đạ t giá trị 0. Kiể u hoạt độ ng mode 1 tươ ng tư mode 0 nhưng đầu ra bắ t đầu ở mức logic cao. Quá trình đ ếm đ ược bắ t đầu bằng sườ n dương chân điều khiển GATE. Kiể u hoạt độ ng mode 2 bộ chia tần 1/n : lố i ra OUT ở mức logic th ấp trong 1 xung nhịp và ở mức cao ở (n-1) xung nhip còn lại. Bộ đếm đ ược 7
  8. khở i độ ng mớ i bằng mỗi sườn dương ở lối vào GATE. Vì vậy có thể tận dụng đ ể đồ ng bộ bộ đếm. Bộ đếm có thể tự động nạp lại. Kiể u hoạt độ ng mode 3 bộ phát xung vuông lập trình đ ược : lối ra OUT có mức cao ở n/2 ((n+1)/2 nế u n lẻ ) xung nhịp và ở mức thấp trong nửa còn lại của xung nhịp. Bộ đếm có thể tự động nạp lại. Kiể u hoạ t độ ng mode 4 : lố i ra đ ược giữ mức cao trong suố t n chu kỳ giữ nhịp của CLK và ở mức thấp sau khi bộ đếm đ ạt giá trị 0. Bộ đ ếm không có khả năng nạp lạ i. Kiể u hoạ t độ ng mode 5 : bộ đế m được bắ t đầu bằ ng sườ n dươ ng củ a xung ở lố i vào GATE nếu có xung dương GATE thì bộ đếm lại đ ếm lại từ đầ u. Còn dạng xung ra OUT tương tự như chế độ mode 4. 8
  9. III.IC MAX232 U 5 13 12 8 R 1 IN R 1O U T 9 R 2 IN R 2O U T 11 14 10 T 1 IN T1O U T 7 T 2 IN T2O U T 1 3 C 1 + 4 C 1 - 5 C 2 + 2 C 2 - 6 V + V - M A X232 Bả ng so sánh điệ n áp của các mức logic giữa RS232 va TTL Đ ỐI TƯỢNG MỨC LOGICMỨ C ĐIỆ N ÁP TƯƠ NG ỨNG Cổng Com 1 -12V đến -3V (Mức RS232) 0 +3V đến +12V Vi điề u khiển 1 +5V (Mức TTL) 0 0V Khắc phục vấn đề này, người ta sử dụng vi mạch MAX232 đ ể chuyển đổ i mức điện áp giữa hai chuẩn. Vi mạch này có chứa hai bộ chuyển đổi mức logic từ TTL sang RS232 va ngược lại . IV.IC 7400 7400 tạo xung dùng thạch anh 4M theo sơ đồ nguyên lý. 9
  10. V.CÔNG NỐI TIẾP Cổng nố i tiếp là mộ t giao diện rấ t phổ biến trên máy tính, cổng này còn có một số tên gọ i thông dụng như Com, RS232.. Sự trao đổ i của các đ ường dẫn tín hiệu Trên máy tính có 1 vi mach UART (Universal Asynchronous Receiver/ Transmitter) đả m trách việc truyền nhận dữ liệu thông qua cổng nối tiếp . UART phổ biến nhất là vi mạch 8250cuar hãng Intel và các phiên bản cao hơn của vi mạch này như 16450,16660,16750…Vi mạch này thườ ng được hàn cố đ ịnh trên main gần giao diện cổng nố i tiếp. Việc trao đổ i dữ liệu qua cổng nố i tiếp thực chất là việc truy xuấ t các thanh ghi của vi mach này. Và điề u đầ u tiên khi lậ p trình với cổng Com là phải tìm hiểu các thanh ghi của bộ UART tương ứng trên máy tính. Tên các thanh ghi Địa chỉ Thanh ghi điều khiển modem 3F8+4 Thanh ghi trạ ng thái modem 3F8 +6 Thanh ghi điều khiển đ ường truyền 3F8 +3 Thanh ghi trang thái đương truyền 3F8 + 5 Thanh ghi đệm đọc / ghi 3F8 Thanh ghi chứa số chia tốc độ baud (byte thấp) 3F8 Thanh ghi chứa số chia tốc độ baud (byte cao) 3F8+1 Thanh ghi cho phép ngắ t 3F8+1 10
  11. PHẦN II : NỘI DUNG THIẾT KẾ VÀ LẬP TRÌNH CHO MẠCH GHÉP NỐI I.Mạ ch nguyên lý 11
  12. II .Mạch in III. Hoạt độ ng c ủa m ạch đồ án : Nhập tần số từ bàn phím máy tính (chương trình VB thực hiệ n phép tính đ ể đ ưa ra giá trị nạp cho 8253) và nhấn truyền khi kêt thúc truyền timer2 thì 8253 thực hiện phát xung. Trong khi ch ương trình VB truyền giá trị nạp cho 8253 qua cổng Com thì VĐK AT89s52 nhận giá trị và thực hiện chương trình nạp giá trị cho 8253 theo tần số yêu cầu. 12
  13. Lập trình cho mạch đồ án VB : Private Timer0, Timer1, Timer2, Run As Integer Private ByteCao, ByteThap, ValT0, ValT1, ValT2 As Long Private Sub Form_Load() Timer0 = 0 Timer1 = 1 Timer2 = 2 Run = 4 ValTimer0.Enabled = False ValTimer1.Enabled = False ValTimer2.Enabled = False SetTimer0.Enabled = False SetTimer1.Enabled = False SetTimer2.Enabled = False End Sub Private Sub SetTimer0_Click() ' Dat gia tri cho Timer0 If Val(ValTimer0.Text) < 62 Then MsgBox "Gia tri nho nhat cua TIMER0 > 61 (4M/65535)", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer0.Text) > 2000000) Then MsgBox "Gia tri nap phai nho hon 2M", vbOKOnly, "Thong bao" Exit Sub End If ValT0 = 4000000 \ Val(ValTimer0.Text) ' lay gia tri de nap vao timer 0 ByteCao = ValT0 \ 256 ByteThap = ValT0 Mod 256 With MSComm .Output = Chr(&HDB) .Output = Chr(&HBD) .Output = Chr(Timer0) .Output = Chr(ByteCao) .Output = Chr(ByteThap) .Output = Chr(Run) End With Hthi.Caption = "Nap gia tri cho Timer0 la: " Hthi2.Caption = ValT0 13
  14. End Sub Private Sub SetTimer1_Click() ' Dat gia tri cho Timer1 If Val(ValTimer1.Text) = 0 Then MsgBox "Gia tri nap phai > 0", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer1.Text) > Val(ValTimer0.Text)) Then MsgBox "Gia tri nap phai nho hon gia tri Tan so cua TIMER0", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer0.Text) / Val(ValTimer1.Text) < 2) Then MsgBox "Gia tri tan so phai nho hon 1/2 lan gia tri Tan so cua TIMER0", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer0.Text) / Val(ValTimer1.Text) > 65535) Then MsgBox "Gia tri tan so phai lon hon 1/65535 lan gia tri Tan so cua TIMER0", vbOKOnly, "Thong bao" Exit Sub End If ValT1 = Val(ValTimer0.Text) \ Val(ValTimer1.Text) ' lay gia tri de nap vao timer1 ByteCao = ValT1 \ 256 ByteThap = ValT1 Mod 256 With MSComm .Output = Chr(&HDB) .Output = Chr(&HBD) .Output = Chr(Timer1) .Output = Chr(ByteCao) .Output = Chr(ByteThap) .Output = Chr(Run) End With Hthi.Caption = "Nap gia tri cho Timer1 la: " Hthi2.Caption = ValT1 End Sub Private Sub SetTimer2_Click() ' Dat gia tri cho Timer2 If Val(ValTimer2.Text) = 0 Then MsgBox "Gia tri nap phai > 0", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer2.Text) > Val(ValTimer1.Text)) Then 14
  15. MsgBox "Gia tri nap phai nho hon gia tri Tan so cua TIMER1", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer1.Text) / Val(ValTimer2.Text) < 2) Then MsgBox "Gia tri tan so phai nho hon 1/2 lan gia tri Tan so cua TIMER1", vbOKOnly, "Thong bao" Exit Sub ElseIf (Val(ValTimer1.Text) / Val(ValTimer2.Text) > 65535) Then MsgBox "Gia tri tan so phai lon hon 1/65535 lan gia tri Tan so cua TIMER1", vbOKOnly, "Thong bao" Exit Sub End If ValT2 = Val(ValTimer1.Text) \ Val(ValTimer2.Text) ' lay gia tri de nap vao timer2 ByteCao = ValT2 \ 256 ByteThap = ValT2 Mod 256 With MSComm .Output = Chr(&HDB) .Output = Chr(&HBD) .Output = Chr(Timer2) .Output = Chr(ByteCao) .Output = Chr(ByteThap) .Output = Chr(Run) End With Hthi.Caption = "Nap gia tri cho Timer2 la: " Hthi2.Caption = ValT2 End Sub Private Sub Start_Click() If MSComm.PortOpen = False Then With MSComm .CommPort = 1 .Settings = "9600,N,8,1" .PortOpen = True End With ValTimer0.Enabled = True ValTimer1.Enabled = True ValTimer2.Enabled = True SetTimer0.Enabled = True SetTimer1.Enabled = True SetTimer2.Enabled = True 15
  16. Hthi.Caption = "Nap gia tri cho cac Timer" Hthi2.Caption = "" TimerCOM.Enabled = True End If End Sub Private Sub Stop_Click() If MSComm.PortOpen = True Then ValTimer0.Text = "0" ValTimer1.Text = "0" ValTimer2.Text = "0" ValTimer0.Enabled = False ValTimer1.Enabled = False ValTimer2.Enabled = False SetTimer0.Enabled = False SetTimer1.Enabled = False SetTimer2.Enabled = False MSComm.PortOpen = False Hthi.Caption = "Nhan Start de tiep tuc chuong trinh" Hthi2.Caption = "" TimerCOM.Enabled = False End If End Sub Private Sub Timer_Timer() NgayGio.Caption = "Ngay : " & Format(Now, "dd/mm/yyyy") & " - Gio : " & Format(Now, "hh:nn:ss") End Sub Private Sub ValTimer0_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57, 8 Case Else KeyAscii = 0 End Select End Sub 16
  17. Private Sub ValTimer1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57, 8 Case Else KeyAscii = 0 End Select End Sub Private Sub ValTimer2_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57, 8 Case Else KeyAscii = 0 End Select End Sub Private Sub Exit_Click() End End Sub Lập trình cho Vi điề u khiể n // De tai so 18 : Tao xung voi 8253 // Giao tiep voi may tinh qua cong noi tiep #include #include sbit WR8253 = P0^0; sbit RD8253 = P0^1; sbit A1 = P0^2; sbit A0 = P0^3; sbit GATE2 = P0^5; sbit GATE1 = P0^6; sbit GATE0 = P0^7; unsigned int i, n, dk, run, timer, bytecao, bytethap; unsigned char sbuff[8]; void delay(unsigned int kd) { for(n=0;n
  18. void Init_8253(void) //thiet lap cho 8253 { A0 = A1 = 1; WR8253 = RD8253 = 1; // Chon dia chi cho tu dieu khien //Che do mode 3 dem thap phan truyen byte thap truoc byte cao sau P2 = 0x37; // Dat che do cho bo dem 0 WR8253 = 0; // Ghi vao tu dieu khien delay(10); WR8253 = 1; P2 = 0x77; // Dat che do cho bo dem 1 WR8253 = 0; // Ghi vao tu dieu khien delay(10); WR8253 = 1; P2 = 0xB7; // Dat che do cho bo dem 2 WR8253 = 0; // Ghi vao tu dieu khien delay(10); WR8253 = 1; } void nhan(void) { if(RI) { RI=0; // Start - dong bo voi may tinh (Start = 0xDB & 0xBD) sbuff[dk] = SBUF; if ((dk>0)&&(sbuff[dk-1]==0xDB)&&(sbuff[dk]==0xBD)) { sbuff[0] = 0XDB; sbuff[1] = 0xBD; dk = 2; } else { dk++; if(dk>4) { if((sbuff[0]==0xDB)&(sbuff[1]==0xBD)) { 18
  19. timer = (unsigned int)(sbuff[2]); bytecao = (unsigned int)(sbuff[3]); bytethap = (unsigned int)(sbuff[4]); } dk = 0; } } } } void main() { EA = 1; SCON = 0x52; // cai dat cong COM 8bit,n,1 TMOD = 0x20; // Timer1 che do 2 TH1 = -3; // Toc do baud 9600 TR1 = 1; Init_8253(); // thiet lap 8253 while(1) { nhan(); //nhan gia tri duoc gui tu may tinh if(timer == 0) { A0 = 0;A1 = 0; // Chon bo dem 0 P2 = bytethap; // Gui gia tri byte thap cho Timer0 WR8253 = 0; delay(10); WR8253 = 1; P2 = bytecao; // Gui gia tri byte cao cho Timer0 WR8253 = 0; delay(10); WR8253 = 1; GATE0 = 1; delay(10); GATE0 = 0; WR8253 = 0; delay(10); GATE0 = 1; timer = 4; } if(timer == 1) 19
  20. { A0 = 1;A1 = 0; // Chon bo dem 1 P2 = bytethap; // Gui gia tri byte thap cho Timer1 WR8253 = 0; delay(10); WR8253 = 1; P2 = bytecao; // Gui gia tri byte cao cho Timer1 WR8253 = 0; delay(10); WR8253 = 1; GATE1 = 1; delay(10); GATE1 = 0; WR8253 = 0; delay(10); GATE1 = 1; timer = 4; } if(timer == 2) { A0 = 0;A1 = 1; // Chon bo dem 2 P2 = bytethap; // Gui gia tri byte thap cho Timer2 WR8253 = 0; // Ghi vao tu dieu khien delay(10); WR8253 = 1; P2 = bytecao; // Gui gia tri byte cao cho Timer2 WR8253 = 0; delay(10); WR8253 = 1; GATE2 = 1; delay(10); GATE2 = 0; WR8253 = 0; delay(10); GATE2 = 1; timer = 4; } } } 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2