CHƯƠNG 3 BUS i2c

65 186 0
CHƯƠNG 3   BUS i2c

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương III : BUS I2C I Hoạt Động Của Bus I2C : Bus I2C (viết tắt từ Inter-Ic-Bus) mối liên kết liệu dây nhiều xử lý (Master) khối ngoại vi cụ thể (slave).Tất vi mạch liên kết trực tiếp với bus trao đổi đòa vi mạch Các đòa liệu truyền đường dẫn Bus I2C cho phép hình thành mối liên kết đơn giản nhiều vi mạch cho phép dễ dàngù mở rộng thêm Tất vi mạch tham gia bus, khống chế giao thức theo cách riêng Bên cạnh nhớ RAM, EEPROM, vi mạch mở rộng cổng, biến dổi A/D D/A vi mạch đồng hồ có nhiều vi mạch chuyên dụng, chẳng hạn đệm hiển thò vi mạch dùng kỹ thuật truyền hình Tất vi mạch có thểû điều khiển dễ dàng trực tiếp qua hai đường dẫn dao diện song song với máy tính PC Chỉ cần bổ sung thêm vi mạch, cổng nối tiếp sử dụng II Truyền Dữ Liệu Đònh Đòa Chỉ : Bus I2C sử dụng đường dẫn:  Đường dẫn liệu nối tiếp SDA  Đøng dẫn giữ nhòp SCL Giống ghi dòch, liệu đòa truyền theo nhòp Cả hai đường dẫn sử dụng theo hướng liệu Mỗi đường dẫn có điện trở nối lên nguồn(Pull-up) thành viên kéo xuống mức LOW qua lối cực góp hở cực máng hở Thành viên bus không kích hoạt trạng thái có điện trở cao, giám sát tín hiệu truyền bus Khi có vi mạch chủ sử dụng, vi mạch tự xuất tín hiệu giữ nhòp để sủ dụng Dữ liệu đến từ vi mạch chủ từ vi mạch tớ Giao thức bus I2C nhận biết dẵy tình đẵ đònh nghóa xác, tình giới thiệu thành viên bus, để nhận dạng chỗ bắt dầu kết thúc truyền cách đònh đòa có  Trạng thái yên tónh: SDA SCL mức HIGH không kích hoạt  Điều kiện bắt đầu( Start): SDA vi mạch master chuyển sang mức thấp, SCL giữ nguyên mức HIGH  Điều kiện dừng (Stop) : SDA chuyển từ trạng thái LOW sang HIGH, SCL giữ nguyên mức HIGH  Truyền liệu : Mỗi truyền xếp tám bít liệu lên đường dẫn liệu SDA, xung giữ nhòp bít vi mạch chủ(master) đẩy tiếp lên đường giữ nhòp SCL Việc truyền liệu bắt đầu với bít có giá trò lớn  Xác nhận (Acknowledge):Mỗi nhận kết thúc qúa trình nhận môït byte mức LOW đường dẫn SDA, vi mạch chủ tạo xung đồng hồ thứ chín đường dẫn SCL Việc xác nhận đồng thời có nghóa byte cần nhận Việc kết thúc truyền theo mong muốn cần phải báo trước việc không xuất xác nhận Sự kết thúc thật truyền đạt tới điều kiện dừng(Stop) Các đòa truyền kết thúc giống hệt liệu Trong trường hợp đơn giản truyền liệu từ vi mạch chủ tới vi mạch tớ(slave) chẳng hạn tới cổng lối ra, qúa trình diễn sau: Vi mạch chủ (master) tạo diều kiện bắt đầu truyền đòa vi mạch cổng vào bit đến hướng mong muốn truyền liệu vào bit 0, cụ thể trường hợp "ghi" trường hợp "đọc" Việc truyền đòa kết thúc vi mạch tớ (slave) cần trao đổi Sau vi mạch chủ (master) gửi byte liệu để kết thúc qúa trình truyền Vi mạch chủ chấm dứt mối liên kết điều kiện Stop gửi byte tới vi mạch Các đòa chỉ vi mạch có độ dài bit,trong bit hướng liệu truyền bổ sung sau Thông thương đòa vi mạch qui đònh để rõ loại bit cao lựa chọn tự bit thấp (A0 - A2) mạch điện bên Nhiều vi mạch loại hoạt động bus Tổng cộng có đến 128 vi mạch sử dụng bus Đòa bus I2C với hướng liệu A A A A A A A R/ W Khi cần đọc liệu từ vi mạch tớ (slave), đòa cần phải truyền bit hướng liệu đẵ đặt Vi mạch chủ xuất nhóm tám xung đồng hồ nhận tám bit liệu Cho đến xác nhận nhận liệu Acknowledge, xung đồng hồ thú chín, vi mạch nhận byte tiếp theo.Cuối cùng, truyền vi mạch chủ kết thúc việc không đưa tín hiệu xác nhận (Nacknowledge ) kèm theo điều kiện dừng Mỗi mạch I2C có đòa đẵ quy đònh, đòa phần quy đònh để đặc trưng cho loại phần khác thay đổi qua đường dẫn đòa dẫn Điều có nghóa là,chẳng hạn với ba đường đòa dẫn có tới tám vi mạch loại đấu nối vào bus Tốùc độ giữ nhòp cực đại dùng cho bus I2C 100 KHz Các chương trình giới thiệu sử dụng thời gian chờ 10ms, để tránh tình trạng vượt qúa tốc độ cưc đại cho chạy máy tính nhanh III Bus I2C Dùng SEEPROM AT24C0X Đây nhớ cố đònh (permanent),có thể xoá ghi điện mà không cần cung cấp điện áp làm việc phụ thêm  24C01 128 bytes  24C02 256 bytes  24C03 512 bytes  24C04 1024 bytes  24C08 2048 bytes Các nhớ SEEPROM có dung lượng nhỏ thường sử dụng để thiết lập liệu đònh chuẩn lương liệu không đáng kể khác cách độc lập với nguồn cung cấp vào hệ thống Các vi mạch bảo đảm việc lưu trữ liệu 10 năm Một ưu điểm khác việc thiết kế mạch đơn giản,đồng nghóa với việc không cần đến điện áp bổ sung dùng cho nạp chương trình,bởi điện áp cao tạo chip Vcc AT24C02 WP VCC A2 A1 A0 SDA SCLK GND 39 38 37 36 35 34 33 32 8 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 19 18 31 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 XTAL1 XTAL2 RST EA/VPP AT89C51 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD PSEN ALE/PROG 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 29 30 Viết AT24C0X : Xóa ghi EEPROM,max bytes S Đòa Slave A Đòa nhớ Viết A Viết byte Ack Slave A Viết byte A S Đọc AT24C0X : S Đòa Slave A Đòa nhớ Viết Đọc byte A Đọc A byte Ack Master A S Đòa Slave A Ack Slave Đọc NAC S byte n K NACK Khi đọc ra,sau đòa vi mạch,trước hết đòa byte byte mong muốn phải đònh Sau đó,điều kiện ngừng cần phải xuất để trao đổ với vi mạch theo hướng đọc Trên nhiều byte đïc đọc cách tùy ý Một đệm đòa bên tự động tăng thêm Khi lập trình (viết) cấn ý sau đòa vi mạch,đòa byte mong muốn cần chuyển giao Sau đó,tiếp theo byte liệu cần lập trình.Cũng xảy trường hợp hai byte truyền Khi đó,quá trình lập trình xoá thực tế bắt đầu sau điều kiện ngừng III CHƯƠNG TRÌNH VIẾT EEPROM AT24C0X TỪ PC : Chương trình vi xử lí : ORG 0000H MEM1 EQU 30H MEM2 EQU 31H MEM19 EQU 50H MEM20 EQU 51H MAIN: MOV SCON,#01010010B CLR TR1 MOV TMOD,#21H MOV TH1,# -3 SETB TR1 LOOP: ;Nhan tin hieu tu PC ACALL INCHAR CJNE A,#79,NEXT ;CT write a byte ACALL INCHAR MOV MEM1,A ; Address 24C02 ACALL INCHAR MOV MEM2,A ; Data 24C02 ACALL VIETROM ;Delay thoi gian de nap Rom ACALL DELAY100MS ;Goi CT docrom NEXT: CJNE A,#79,LOOP ;CT Read a byte ;Khai bao cac CT ACALL INCHAR MOV MEM1,A ; Address 24C02 ACALL DOCROM ;Phat len PC gia tri rom doc duoc ACALL OUTCHAR ;Xuat P2 de kiem tra MOV P2,A SJMP LOOP INCHAR: JNB RI,$ CLR RI MOV A,SBUF RET OUTCHAR: JNB TI,$ CLR TI MOV SBUF,A RET I2CINIT: SETB P1.6 ;SDA = SETB P1.7 ;SCL = RET I2CSTART: CLR P1.6 ;SDA = SETB P1.7 ;SCL = CLR P1.7 ;SCL = RET I2CSTOP: CLR P1.6 ;SDA = CLR P1.7 ;SCL = SETB P1.7 ;SCL = SETB P1.6 ;SDA = RET ACK: CLR P1.6 ;SDA = CLR P1.7 SETB P1.7 CLR P1.7 NACK: SETB P1.6 CLR P1.7 SETB P1.7 CLR P1.7 RET ;SCL = ;SCL = ;SCL = ;SDA = ;SCL = ;SCL = ;SCL = XUATRA: MOV MEM20,A ;BO NHO TRUNG GIAN MOV A,#8 MOV MEM19,A ;BO DEM DUNG CHO BIT LAP: MOV A,MEM20 ANL A,#128 ;CHE BIT RR A ;SAU BIT (SDA) ADD A,#3FH MOV P1,A SETB P1.7 CLR P1.7 MOV A,MEM20 RL A ;BIT TIEP THEO MOV MEM20,A DJNZ MEM19,LAP ;BO DEM GIAM SETB P1.6 CLR P1.7 SETB P1.6 SETB P1.7 CLR P1.7 RET DOCVAO: SETB P1.6 ;SDA = CLR P1.7 ;SCL = MOV MEM20,#0 MOV MEM19,#8 LAP1: SETB P1.7 ;SCL = MOV A,MEM20 RL A MOV B,A MOV A,P1 ANL A,#64 ;DOC SDA RL A RL A ;BIT ADD A,B MOV MEM20,A ;LUU TRU CLR P1.7 ;SCL = DJNZ MEM19,LAP1 ;8 LAN RET VIETROM: ACALL I2CSTART MOV A,#10100000B ACALL XUATRA MOV A,#0 ACALL XUATRA MOV A,MEM2 ACALL XUATRA ACALL I2CSTOP ACALL DELAY100MS RET DOCROM: ACALL I2CSTART MOV A,#10100000B ;DIA CHI AT24C02,VIET ACALL XUATRA MOV A,#0 ;DIA CHI BAT DAU ACALL XUATRA ACALL I2CSTOP ACALL I2CSTART MOV A,#10100001B ;DIA CHI AT24C02,DOC ACALL XUATRA ACALL DOCVAO ACALL NACK ACALL I2CSTOP RET DELAY100MS: PUSH B MOV B,#2 LAP2: MOV TL0,#LOW(-50000) MOV TH0,#HIGH(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ B,LAP2 POP B RET END Chương trình Visual Basic : Dim Dataout(0) As Byte Dim Datain() As Byte Dim Transfer As Byte Dim Timeout As Boolean Dim str As String Dim Buffer As Variant Private Sub CmdRead_Click() 'Phat tin hieu read a byte Dataout(0) = 80 Buffer = Dataout() SETB P1.7 ;SCL = CLR P1.7 ;SCL = RET I2CSTOP: CLR P1.6 ;SDA = CLR P1.7 ;SCL = SETB P1.7 ;SCL = SETB P1.6 ;SDA = RET ACK: CLR P1.6 ;SDA = CLR P1.7 ;SCL = SETB P1.7 ;SCL = CLR P1.7 ;SCL = NACK: SETB P1.6 ;SDA = CLR P1.7 ;SCL = SETB P1.7 ;SCL = CLR P1.7 ;SCL = RET XUATRA: MOV MEM20,A ;BO NHO TRUNG GIAN MOV A,#8 MOV MEM19,A ;BO DEM DUNG CHO BIT LAP: MOV A,MEM20 ANL A,#128 ;CHE BIT RR A ;SAU BIT (SDA) ADD A,#3FH MOV P1,A SETB P1.7 CLR P1.7 MOV A,MEM20 RL A ;BIT TIEP THEO MOV MEM20,A DJNZ MEM19,LAP ;BO DEM GIAM SETB P1.6 CLR P1.7 SETB P1.6 SETB P1.7 CLR P1.7 RET DOCVAO: SETB P1.6 ;SDA = CLR P1.7 ;SCL = MOV MEM20,#0 MOV MEM19,#8 LAP1: SETB P1.7 ;SCL = MOV A,MEM20 RL A MOV B,A MOV A,P1 ANL A,#64 ;DOC SDA RL A RL A ;BIT ADD A,B MOV MEM20,A ;LUU TRU CLR P1.7 ;SCL = DJNZ MEM19,LAP1 ;8 LAN RET DOCROM: ACALL I2CSTART MOV A,#10100000B ;DIA CHI AT24C02,VIET ACALL XUATRA MOV A,#0 ;DIA CHI BAT DAU ACALL XUATRA ACALL I2CSTOP ACALL I2CSTART MOV A,#10100001B ;DIA CHI AT24C02,DOC ACALL XUATRA ACALL DOCVAO ACALL NACK ACALL I2CSTOP RET DELAY100MS: PUSH B MOV B,#2 LAP2: MOV TL0,#LOW(-50000) MOV TH0,#HIGH(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ B,LAP2 POP B RET END CHƯƠNG TRÌNH VISUAL BASIC Option Explicit Dim data(1 To 12) As Byte Dim Memout(1 To 4) As Byte Dim Memin(1 To 4) As Byte Dim Mem(1 To 12) As Byte Dim Datain() As Byte Dim Dataout(0) As Byte Dim Bufferin As Variant Dim Bufferout As Variant Dim lap As Boolean Private Sub cmddisplay_Click() Load Form2 Form2.Show End Sub Private Sub cmdStart_Click() Dim i, j, k As Integer Dim x, y, z As Integer Dim CY As Boolean For i = To 12 Mem(i) = i Next i For i = To 12 data(i) = Datacd(i) = Next i x=0 y=0 z=0 'Vong lap chuong trinh chinh lap = True Do 'Cho tin hieu co bang tai tu VXL4 Do CY = False DoEvents If (MSComm1.InBufferCount >= 1) Then Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) = &H44 Then CY = True End If End If Loop Until CY = True Beep For i = To 12 Mem(i) = Mem(i) - If Mem(i) = Then Mem(i) = 12 End If Next i Memin(1) = Mem(1) Memout(1) = Mem(2) Memin(2) = Mem(4) Memout(2) = Mem(5) Memin(3) = Mem(7) Memout(3) = Mem(8) Memin(4) = Mem(10) Memout(4) = Mem(11) 'Hien thi 12 san pham For i = To 12 If data(Mem(i)) Then Frame1(i - 1).Visible = True Text1(i - 1).Text = Mem(i) Text2(i - 1).Text = data(Mem(i)) If (Datacd(data(Mem(i))) And &H1) = &H1 Then Check1(i - 1).Value = Else: Check1(i - 1).Value = End If If (Datacd(data(Mem(i))) And &H2) = &H2 Then Check2(i - 1).Value = Else: Check2(i - 1).Value = End If If (Datacd(data(Mem(i))) And &H4) = &H4 Then Check3(i - 1).Value = Else: Check3(i - 1).Value = End If Else: Frame1(i - 1).Visible = False End If Next i For i = To 12 If data(Mem(i)) Then Shape3(i - 1).Visible = True Else: Shape3(i - 1).Visible = False End If Next i 'Dieu khien vao cong doan If data(Memin(1)) Then 'Co san pham 'Cong doan lam chua If (Datacd(data(Memin(1))) And &H1) &H1 Then Dataout(0) = &H11 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) &H41 Then data(Memin(1)) = x=x+1 If x > Then x=4 End If End If End If End If 'Dieu khien vao cong doan If data(Memin(2)) Then 'Co san pham 'Cong doan lam chua If (Datacd(data(Memin(2))) And &H2) &H2 Then Dataout(0) = &H12 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) &H42 Then data(Memin(2)) = y=y+1 If y > Then y=4 End If End If End If End If 'Dieu khien vao cong doan If data(Memin(3)) Then 'Co san pham 'Cong doan lam chua If (Datacd(data(Memin(3))) And &H4) &H4 Then Dataout(0) = &H13 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) &H43 Then data(Memin(3)) = z=z+1 If z > Then z=4 End If End If End If End If 'Dieu khien vao cong doan If data(Memin(4)) Then 'Co san pham 'San pham lam xong cong dan chua ? If (Datacd(data(Memin(4))) And &H7) = &H7 Then Dataout(0) = &H14 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = data(Memin(4)) = End If End If 'Dieu khien cong doan If data(Memout(1)) = Then 'Khong co san pham Dataout(0) = &H21 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) = &H31 Then data(Memout(1)) = Datain(2) Datacd(data(Memout(1))) = Datacd(data(Memout(1))) Or &H1 x=x-1 If x < Then x=0 End If End If End If 'Dieu khien cong doan If data(Memout(2)) = Then 'Khong co san pham Dataout(0) = &H22 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) = &H32 Then data(Memout(2)) = Datain(2) Datacd(data(Memout(2))) = Datacd(data(Memout(2))) Or &H2 y=y-1 If y < Then y=0 End If End If End If 'Dieu khien cong doan If data(Memout(3)) = Then 'Khong co san pham Dataout(0) = &H23 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) = &H33 Then data(Memout(3)) = Datain(2) Datacd(data(Memout(3))) = Datacd(data(Memout(3))) Or &H4 z=z-1 If z < Then z=0 End If End If End If 'Dieu khien cong doan If data(Memout(4)) Then 'Co san pham Dataout(0) = 79 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Else: 'Khong co san pham Dataout(0) = &H24 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = Do DoEvents Loop Until MSComm1.InBufferCount >= Bufferin = MSComm1.Input Datain() = Bufferin MSComm1.InBufferCount = If Datain(0) = &H34 Then data(Memout(4)) = Datain(2) Datacd(data(Memout(4))) = End If Dataout(0) = 79 Bufferout = Dataout() MSComm1.Output = Bufferout MSComm1.OutBufferCount = End If 'Hien thi 12 san pham sau da dieu khien Vao va Ra For i = To 12 If data(Mem(i)) Then Frame1(i - 1).Visible = True Text1(i - 1).Text = Mem(i) Text2(i - 1).Text = data(Mem(i)) If (Datacd(data(Mem(i))) And &H1) = &H1 Then Check1(i - 1).Value = Else: Check1(i - 1).Value = End If If (Datacd(data(Mem(i))) And &H2) = &H2 Then Check2(i - 1).Value = Else: Check2(i - 1).Value = End If If (Datacd(data(Mem(i))) And &H4) = &H4 Then Check3(i - 1).Value = Else: Check3(i - 1).Value = End If Else: Frame1(i - 1).Visible = False End If Next i For i = To 12 If data(Mem(i)) Then Shape3(i - 1).Visible = True Else: Shape3(i - 1).Visible = False End If Next i 'Hien thi so san pham tai cong doan Select Case x Case For i = To Shape4(i).Visible = False Next i Case Shape4(0).Visible = True Shape4(1).Visible = False Shape4(2).Visible = False Shape4(3).Visible = False Case Shape4(0).Visible = True Shape4(1).Visible = True Shape4(2).Visible = False Shape4(3).Visible = False Case For i = To Shape4(i).Visible = True Next i Shape4(3).Visible = False Case For i = To Shape4(i).Visible = True Next i End Select 'Hien thi so san pham tai cong doan Select Case y Case For i = To Shape5(i).Visible = False Next i Case Shape5(0).Visible = True Shape5(1).Visible = False Shape5(2).Visible = False Shape5(3).Visible = False Case Shape5(0).Visible = True Shape5(1).Visible = True Shape5(2).Visible = False Shape5(3).Visible = False Case For i = To Shape5(i).Visible = True Next i Shape5(3).Visible = False Case For i = To Shape5(i).Visible = True Next i End Select 'Hien thi so san pham tai cong doan Select Case z Case For i = To Shape6(i).Visible = False Next i Case Shape6(0).Visible = True Shape6(1).Visible = False Shape6(2).Visible = False Shape6(3).Visible = False Case Shape6(0).Visible = True Shape6(1).Visible = True Shape6(2).Visible = False Shape6(3).Visible = False Case For i = To Shape6(i).Visible = True Next i Shape6(3).Visible = False Case For i = To Shape6(i).Visible = True Next i End Select 'Kiem tra Error (neu co nhieu san pham cung ma Rom tren bang tai) k=2 For i = To 11 For j = k To 12 If (data(i) = data(j)) And data(i) Then MsgBox "Co san pham cung ma Rom", , "Error" End If Next j k=k+1 Next i Loop Until lap = False End Sub Private Sub cmdStop_Click() lap = False Unload Form1 End Sub Private Sub Form_Load() MSComm1.Settings = "9600,n,8,1" MSComm1.InputLen = MSComm1.InputMode = comInputModeText MSComm1.CommPort = MSComm1.PortOpen = True End Sub Private Sub Unload_form() MSComm1.PortOpen = False End Sub [...]... C3C2C1C0 = 0011 : Mã ROM  C3C2C1C0 = 0100 : Bận (VXL1,2 ,3) ,Cờ BT (VXL4) Sơ Đồ Mạch Nguyên Lý 5V 33 p 1U 12MHZ T1OUT T2OUT R1IN R2IN 7 13 8 11 10 12 9 15 T1IN T2IN R1OUT R2OUT GND VCC 20 GND 10 11 8.2k MAX 232 /SO P3.0/RXD P3.1/TXD 5V 100 JP1 1 2 3 4 RST P1.0 P1.1 P1.2 P1 .3 P1.4 P1.5 P1.6 P1.7 PSEN 1 5V RESET 21 22 23 24 25 26 27 28 39 38 37 36 35 34 33 32 12 13 14 15 16 17 30 2 3 4 5 6 7 8 9 1 5V C 33 0... 33 0 33 0 -Busy ( CĐ1,2 ,3 ) -Cờ BT (CĐ4 ) 1 2 SP_Wait (CĐ1,2 ,3) 2 1 5V AT89C51 33 00 29 5 9 4 8 3 7 2 6 1 2 CONNECTOR DB9 10u 9 1 2 3 4 5 6 7 8 P2.0/A8 P2.1/A9 P2.2/A10 P2 .3/ A11 P2.4/A12 P2.5/A 13 P2.6/A14 P2.7/A15 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0 .3/ AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P3.2/INTO P3 .3/ INT1 P3.4/T O P3.5/T1 P3.6/WR P3.7/RD ALE/PROG ĐK_Ra 40 1U 14 5V 18 EA/V PP RESISTOR SIP 9 V+ V- 31 ĐK_Vào...  bit 2 : CĐ 3 bit x = 0 : CĐ chưa làm bit x = 1 : CĐ đã làm • Để nhận và phát với mạng VXL,PC qui đònh cách đònh đòa chỉ và mã lệnh như sau : dùng 1 byte để nhận biết đòa chỉ và mã lệnh : C3C2C1C0 A3A2A1A0 Đòa chỉ :  A3A2A1A0 = 0001 : Đòa chỉ VXL1  A3A2A1A0 = 0010 : Đòa chỉ VXL2  A3A2A1A0 = 0011 : Đòa chỉ VXL3  A3A2A1A0 = 0100 : Đòa chỉ VXL4 Mã lệnh :  C3C2C1C0 = 0001 : ĐK Vào  C3C2C1C0 = 0010... Đánh dấu CĐ2 đã làm DATACD[DATA(MEMOUT( 2))] OR 02H Y N Y Vò trí ra C 3 có SP ? DATA[MEM OUT (3) ] #0? Truyền tín hiệu ĐK ra xuống VXL3 DATAOUT = 23H Có tín hiệu đọc ROM từ VXL3? N DATAIN(1) = 33 H ? Gán mã ROM nhận được vào ô nhớ cho phép ĐK ra DATA[MEMOUT (3) ] = DATAIN(2) (Mã ROM = DATAIN(2) ) Đánh dấu C 3 đã làm DATACD[DATA(MEMOUT( 3) )] OR 04H Y N Y Vò trí ra CĐ4 có SP ? DATA[MEM OUT(4)] #0? Truyền tín... ROM từ N 34 H ? VXL3? Gán mã ROM DATAIN(1) nhận được = vào ô nhớ cho 33 H phép?ĐK ra DATA[MEMOUT(4)] Gán mã ROM =vào ô nhớ DATAIN(2) cho phép ĐK ra (Mã ROM = DATAIN(2)] DATA[MEMOUT (3) ] = N Đưa SPDATAIN(2) mới vào (chưa làm CĐ nào) (Mã ROM = DATAIN(2) ) DATACD[DATA(MEMOUT Đánh dấu C 3 đã (4))] = 0làm DATACD[DATA(MEMOUT LOOP (3) ] OR 04H Y VXL1,2 ,3 LOOP Nhận tín hiệu ĐK từ PC T CỦA CÁC VXL 1,2 ,3 LƯU ĐỒ... DAT[MEMIN(2) ]=0 Vò trí vào C 3 có SP? DATA[MEMI N (3) #0? C 3 làm N chưa ? DATACD[DATA(MEM IN (3) )] AND 04H = 04H ? Phát tín hiệu ĐK vào xuống VXL3 Y = 13H N Y Y N Có tín hiệu báo Busy N? từ VXL3 DATAIN = 43H ? Xoá ô nhớ vừa cho SP vào DATA[MEMIN( 3) ] = 0 Vò trí vào CĐ4 có SP? DATA[MEMI N(4)#0? Y Cả ba CĐ1,CĐ2,C 3 làm chưa ? DATACD[DATA(MEM N IN(4))] AND 07H = 07H ? Phát tín hiệu ĐK vào xuống VXL4 DATAOUT... ra đến các VXL CHƯƠNG V : SƠ ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH ĐỂ ĐIỀU KHIỂN DÂY CHUYỀN SẢN XUẤT (DCSX) TỔNG QUÁT TRÊN GỒM n CÔNG ĐOẠN (CĐ),CHƯƠNG TRÌNH MINH HỌA SAU ĐÂY SẼ TRÌNH BÀY DÂY CHUYỀN SẢN XUẤT ĐƠN GIẢN NHƯ SAU : SẢN PHẨM (SP) PHẢI LÀM 3 CĐ VÀ CĐ CUỐI CÙNG LÀ CĐ 4 ĐỂ LẤY SP ĐÃ LÀM XONG 3 CĐ RA VÀ ĐƯA SP MỚI VÀO (CHƯƠNG TRÌNH HOÀN TOÀN CÓ THỂ MỞ RỘNG CHO DCSX GỒM n CĐ) CÁC CĐ 1,2 ,3, 4 ỨNG VỚI VỊ... 1,2 ,3, 4 * Giả sử băng tải của DCSX có 12 rãnh (ô) ,do đó có thể chứa tối đa 12 bánh xe (SP) mỗi bánh xe có gắn 1 con seeprom AT24C0X,các con seeprom được nạp các giá trò từ 1 - 12 (1 byte) * Các VXL 1,2 ,3 : • Nhận từ PC tín hiệu :  ĐK Vào (xuất xung ra P3.4 để kiểm tra)  ĐK Ra (xuất xung ra P3.5 để kiểm tra) • Phát lên PC tín hiệu :  Báo bận ( Swich P3.2 = 0 : bận )  Mã ROM đọc được ( Swich P3 .3. .. :  ĐK Vào (xuất xung ra P3.4 để kiểm tra)  ĐK Ra (xuất xung ra P3.5 để kiểm tra) • Phát lên PC tín hiệu :  Cờ báo băng tải chuyển động ( Swich P3.2 = 0 )  Mã ROM đọc được (Swich P3 .3 = 0 : có sản phẩm làm xong đang chờ để vào DCSX ) * PC : • Dùng mảng MEMIN(1-4) để xét các vò trí ĐK Vào tại các VXL 1,2 ,3, 4 • Dùng mảng MEMOUT(1-4) để xét các vò trí ĐK Ra tại các VXL 1,2 ,3, 4 • Dùng mảng DATA(1-12)... P3 .3/ INT1 P3.4/T O P3.5/T1 P3.6/WR P3.7/RD ALE/PROG ĐK_Ra 40 1U 14 5V 18 EA/V PP RESISTOR SIP 9 V+ V- 31 ĐK_Vào 2 6 1U 1 3 4 5 C+ C1C2+ C2- XTAL2 VCC XTAL1 16 19 5V 1U JP2 4 3 2 1 Vcc JP3 4 3 2 1 VCC 5 6 4 SDA SCLK A0 A1 A2 GND WP 8 1 2 3 7 AT24C02 PC LOOP tín hiệuTỔ cờ NG QUÁT PC CHƯƠNGCó TRÌNH BT từ XL4? CT ĐK Vào - CT ĐK Ra - Đọc mã Rom từ các VXL LOOP N Y START - SET MEMOUT (i) - SET MEMIN (i) LOOP ... MAX 232 /SO P3.0/RXD P3.1/TXD 5V 100 JP1 RST P1.0 P1.1 P1.2 P1 .3 P1.4 P1.5 P1.6 P1.7 PSEN 5V RESET 21 22 23 24 25 26 27 28 39 38 37 36 35 34 33 32 12 13 14 15 16 17 30 5V C 33 0 33 0 -Busy ( CĐ1,2 ,3. .. nạp chương trình,bởi điện áp cao tạo chip Vcc AT24C02 WP VCC A2 A1 A0 SDA SCLK GND 39 38 37 36 35 34 33 32 8 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0 .3/ AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 19 18 31 P1.0... P1 .3 P1.4 P1.5 P1.6 P1.7 XTAL1 XTAL2 RST EA/VPP AT89C51 P2.0/A8 P2.1/A9 P2.2/A10 P2 .3/ A11 P2.4/A12 P2.5/A 13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3 .3/ INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD

Ngày đăng: 20/11/2015, 00:12

Tài liệu cùng người dùng

Tài liệu liên quan