CHƯƠNG II :
CHUẨNTRUYỀNTHÔNG RS485 VÀ ADAPTER CHUYỂN ĐỔI RS232 - RS485
I. Giới thiệu:
Những tổ chức tiêu chuẩn quốc tế chính cho truyền thông là ITU ( International Communication Union) , EIA (Electronic Industry Association ) và ISO ( International Standards Organisaton) . Những tiêu chuẩn của ITU liên quan tới truyền thông nối tiếp được định nghĩa trong đặc điểm kỹ thuật của V-series . Sau đây là một số chuẩn truyền thông thường dùng trong công nghiệp
• RS-232C
• RS-449 , RS-422A , RS-423A
• RS-485
II. RS-232c :
Chuẩn RS-232C lần đầu tiên được giới thiệu vào năm 1962 do hiệp hội kỹ thuật điện tử EIA như là chuỗi giao tiếp truyền thong giữa máy tính và một thiết bị ngoại vi ( modem , máy tính khác , máy vẽ , mouse )
Cổng giao tiếp RS-232C là giao diện phổ biến rộng rãi nhất . Máy tính PC thường dùng chuột cho cổng COM1 , COM2 để trống cho các ứng dụng khác . Cùng với cổng máy in , cổng nối tiếp RS-232C được sử dụng rất thuận tiện cho mục đích đo lường và điều khiển .
Việc truyền dữ liệu qua RS-232C được tiến hành theo cách nối tiếp , nghĩa là các bit dữ liệu được gửi nối tiếp nhau trên một đường truyền dẫn . Trước hết , vì loại truyền này có thể dùng cho những khoảng cách lớn hơn do khả năng gây nhiễu nhỏ đáng kể so với dùng cổng song song. Mặt khác , việc dùng cổng song song có một nhược điểm đáng kể là cáp truyền dùng quá nhiều sợi và vì vậy làm tăng chi phí . Hơn nữa , tín hiệu nằm trong khoảng 0-5V không thích hợp với khoảng cách lớn.
Tốc độ baud thông thường có giá trị : 300, 1200 , 4800 , 9600 , 19200 baud
65 trang |
Chia sẻ: lethao | Lượt xem: 2044 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Mạng vi xử lý điều khiển dây chuyền sản xuất, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ch tớ (slave), địa chỉ cần phải được truyền bằng bit hướng dữ liệu đẵ được đặt. Vi mạch chủ xuất ra từng nhóm tám xung đồng hồ và nhận được tám bit dữ liệu. Cho đến khi nó xác nhận cuộc nhận dữ liệu bằng Acknowledge, ở xung đồng hồ thú chín, vi mạch này có thể nhận các byte tiếp theo.Cuối cùng, cuộc truyền được vi mạch chủ kết thúc bằng việc không đưa ra tín hiệu xác nhận (Nacknowledge ) và kèm theo là điều kiện dừng.
Mỗi mạch I2C đều có một địa chỉ đẵ được quy định, địa chỉ này một phần được quy định để đặc trưng cho từng loại còn một phần khác được thay đổi qua các đường dẫn địa chỉ được dẫn ra ngoài. Điều đó có nghĩa là,chẳng hạn với ba đường địa chỉ được dẫn ra ngoài có tới tám vi mạch cùng loại có thể được đấu nối vào bus.
Tốc độ giữ nhịp cực đại dùng cho bus I2C bằng 100 KHz. Các chương trình được giới thiệu dưới đây sử dụng thời gian chờ bằng 10ms, để tránh tình trạng vượt qúa tốc độ cưc đại khi cho chạy trên các máy tính nhanh.
III. Bus I2C Dùng SEEPROM AT24C0X
Đây là 1 bộ nhớ cố định (permanent),có thể được xoá và ghi bằng đ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 bộ nhớ SEEPROM có dung lượng nhỏ thường được sử dụng để thiết lập các dữ liệu định chuẩn hoặc một lương dữ liệu không đáng kể khác một cách độc lập với nguồn cung cấp vào một hệ thống. Các vi mạch này bảo đảm việc lưu trữ dữ liệu được trên 10 năm. Một ưu điểm khác là 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 bộ nạp chương trình,bởi vì một điện áp cao hơn đã được tạo ra ngay trên chip.
Viết AT24C0X : Xóa ghi EEPROM,max 2 bytes
S
Địa chỉ Slave
0
A
A
Địa chỉ bộ nhớ
Viết byte 1
A
Viết byte 2
A
S
S
Địa chỉ Slave
0
A
A
Địa chỉ bộ nhớ
A
Đọc byte 1
A
S
Địa chỉ Slave
1
Đọc byte 2
A
Đọc byte n
NACK
S
Viết Ack của Slave
Đọc AT24C0X :
Viết Ack của Slave
Ack của Master không có NACK
Khi đọc ra,sau địa chỉ vi mạch,trước hết là địa chỉ byte của byte đầu tiên mong muốn phải được chỉ định . Sau đó,điều kiện ngừng cần phải được xuất ra để trao đổ với vi mạch theo hướng đọc ra. Trên đó nhiều byte có thể đuợc đọc ra một cách tùy ý. Một bộ đệm địa chỉ bên trong tự động tăng thêm một.
Khi lập trình (viết) cấn chú ý là sau địa chỉ vi mạch,địa chỉ byte mong muốn cần được chuyển giao. Sau đó,tiếp theo là byte dữ liệu cần được lập trình.Cũng có thể xảy ra trường hợp hai byte được truyền kế tiếp nhau. Khi đó,quá trình lập trình và xoá thực tế bắt đầu ngay sau điều kiện ngừng.
III. CHƯƠNG TRÌNH VIẾT EEPROM AT24C0X TỪ PC :
1. 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 con docrom
NEXT:
CJNE A,#79,LOOP
;CT Read a byte
;Khai bao cac CT con
ACALL INCHAR
MOV MEM1,A ; Address 24C02
ACALL DOCROM
;Phat len PC gia tri rom doc duoc
ACALL OUTCHAR
;Xuat ra 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 = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A
;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A
;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128
;CHE BIT 7
RR A
;SAU BIT 6 (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 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
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 0
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
2. 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()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
'Truyen dia chi
str = Text2.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
tmrError.Enabled = True
Timeout = False
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1 Or Timeout = True
If Timeout = False Then
Buffer = MSComm1.Input
Datain() = Buffer
Text3.Text = Datain(0)
Text4.Text = "Data read successfully !"
Else
Text4.Text = "Not response from 89C51"
End If
End Sub
Private Sub cmdWrite_Click()
'Phat tin hieu write a byte
Dataout(0) = 79
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
''Truyen dia chi
str = Text2.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
'Truyen data
str = Text1.Text
Transfer = Val(str)
Dataout(0) = Transfer
Buffer = Dataout()
MSComm1.Output = Buffer
MSComm1.InBufferCount = 0
tmrError.Enabled = True
Timeout = False
Text4.Text = "Data and Address are transfering"
Do
DoEvents
Loop Until MSComm1.InBufferCount = 1 Or Timeout = True
If Timeout = False Then
Buffer = MSComm1.Input
Datain() = Buffer
If Datain(0) = Val(Text1.Text) Then
Text4.Text = "Data writed successfully !"
Else
Text4.Text = "Data Error"
End If
Else
Text4.Text = "Not response from 89C51"
End If
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 2
MSComm1.InputLen = 0
tmrError.Interval = 2000
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub tmrError_Timer()
tmrError.Enabled = False
Timeout = True
End Sub
Chương IV :
GIỚI THIỆU DÂY CHUYỀN SẢN XUẤT
I.Yêu Cầu Của Công Việc Đối Với Dây Chuyền Sản Xuất :
Sản phẩm sau khi qua giai đoạn cơ bản,nó phải qua các công đoạn phụ. Sau khi làm đã đủ các công đoạn phụ này,nó sẽ trở thành sản phẩm hoàn chỉnh để đưa đến người tiêu dùng. Các công đoạn phụ này có đặc điểm là chúng không phụ thuộc vào nhau,công đoạn này có thể làm trước hoặc làm sau bất kỳ công đoạn nào,không cần theo thứ tự. Trong dây chuyền sản xuất này có công đoạn cuối cùng để lấy sản phẩm hoàn chỉnh đã làm đủ các công đoạn phụ ra khỏi dây chuyền đồng thời cho phép đưa sản phẩm mới vào (sản phẩm chưa làm công đoạn phụ nào)
Mục đích sau cùng là làm sao phân bố đều công việc đến các công đoạn phụ,tại mỗi thời điểm ở các công đoạn đều có sản phẩm để làm. Khi đó dây chuyền sản xuất sẽ đạt năng suất và hiệu quả cao nhất.
* Em cũng xin giới thiệu dây chuyền sản xuất đang được ứng dụng tại xí nghiệp may Việt Tiến. Sản phẩm ở đây là áo quần các loại. Các công đoạn phụ bao gồm: vào cổ,đơm nút,may túi,may cánh tay...
II.Dây Chuyền Sản Xuất:
Dây chuỵền sản xuất ở đây có băng tải chuyển động tròn đều với vận tốc không đổi ( vận tốc của băng tải tương đối thấp khoảng10cm/s). Sau khi chuyển động được một vòng, nó sẽ trở về vị trí ban đầu.
Băng tải ở đây có nhiệm vụ chuyển động để đưa các sản phẩm sau khi đã hoàn thành bất kỳ công đoạn nào hoặc đưa sản phẩm mới vào dây chuyền sản xuất.
Vấn đề đặt ra là quản lý số sản phẩm có trên băng tải, đồng thời biết được các sản phẩm đó đã làm công đoạn nào và chưa làm công doạn nào. Từ đó cho phép điều khiển vào,ra tại các vị trí vào ra của các công đoạn.
Do đó cấu tạo của băng tải sẽ gồm một số rãnh cố định ( ký hiệu là n, n = const, n có thể lên đến hàng ngàn). Mỗi rãnh của băng tải có hai trạng thái: chứa một bánh xe dùng để treo sản phẩm hoặc trống ( không có sản phẩm).
Băng tải có thể cho phép các bánh xe( dùng để treo sản phẩm) vào hoặc ra tại các vị trí cho phép vào ra của các công đoạn. Khi có tín hiệu điều khiển vào thì ngay lập tức băng tải sẽ đẩy bánh xe ra khỏi dây chuyền, đồng thời khi có tín hiệu điều khiển ra thì băng tải sẽ cho phép bánh xe chứa sản phẩm đã làm xong công đoạn nào đó đang chờ vào dây chuyền tức thì.
10
1
2
3
6
9
7
8
5
4
CĐ1
CĐ2
CĐ4
CĐ3
11
Hình : Dây Chuyền Sản Xuất
1. Băng chuyền chính 4. Truyền động chính
2. Băng chuyền rẽ nhánh 5. Thiết bị rẽ nhánh phụ
3. Bàn làm việc 6. Thiết bị nhận dạng
7. Tủ điều khiển băng chuyền chính 10. Cột chính truyền động.
8. Tủ điều khiển băng chuyền rẽ nhánh 11. Sản phẩm chờ
9. Cột trung gian
Sp Sp Sp Mặt cắt ngang Băng Chuyền Bàn làm việc Cột trung gian Cột truyền động chính
III.Cách Nhận Biết Các Bánh Xe (các sản phẩm):
Vấn đề đặt ra làm thế nào để nhận biết được các bánh xe khi chúng vào và ra khỏi băng tải của dây chuyền không theo một thứ tự, quy định nào. Do đó để nhận biết các bánh xe ta sẽ gắn một con SEEPROM (AT24C0X). Mỗi một con AT24C0X sẽ được nạp một giá trị cố định ( mã ROM).
VÍ DỤ: giả sử băng tải của dây chuyền có 1000 rãnh thì ta sẽ dùng 1000 con ROM gắn trên 1000 bánh xe. Vì vậy để phân biệt được bánh xe (sản phẩm) này thì các con SEEPROM sẽ được nạp các giá trị từ 1 đến 1000 (2 bytes).
IV. Đọc Dữ Liệu Từ Serial EEPROM :
Như ta đã giới thiệu ở phần bus I2C để đọc dữ liệu từ SEEPROM tại mỗi công đoạn ta sẽ dùng 1 con VXL AT89C51
Nếu dây chuyền sản xuất có n công đoạn ,ta sẽ dùng (n+1) con VXL .Con VXL sau cùng dùng cho việc lấy sản phẩm đã làm xong n công đoạn ra và đưa sản phẩm mới vào.
V. Điều Khiển Vào và Điều Khiển Ra :
Tại mỗi công đoạn sẽ có 2 vị trí đặc biệt :
Vị trí cho phép vào (MEMIN) : Cho phép bánh xe chứa sản phẩm rẽ vào băng chuyền rẽ nhánh để làm.
Vị trí cho phép ra (MEMOUT) : Cho phép bánh xe chứa sản phẩm làm xong đang chờ chạy vào băng chuyền chính.
Các vị trí MEMIN & MEMOUT của cùng 1 công đoạn và giữa các công đoạn sẽ cách nhau 1 khoảng cách cố định do cấu tạo cơ khí và cách bố trí các công đoạn của dây chuyền sản xuất.
Điều khiển vào : điều kiện
MEMIN # 0 : có bánh xe (sản phẩm).
Không có tín hiệu báo đầy từ công đoạn đang xét
Điều khiển ra : điều kiện
MEMOUT # 0 :không có sản phẩm.
Có sản phẩm làm xong đang chờ
Ghi chú : Khi có sản phẩm làm xong đang chờ cho ra để vào băng tải. Khi có tín hiệu Điều Khiển ra thì bánh xe ( AT24C02 ) sẽ được cấp nguồn và 2 chân SDA và SCL tiếp xúc P1.6 và P1.7 , VXL sẽ đọc được dữ liệu từ AT24C02 được cấp nguồn và phát lên PC.
VI. Sơ Đồ Nguyên Lý Điều Khiển :
PC
VXL1
VXL2
VXL n
VXL n+1
ĐK Vào&Ra
Đọc EEPROM
ĐK Vào&Ra
Đọc EEPROM
ĐK Vào&Ra
Đọc EEPROM
ĐK Vào&Ra
Đọc EEPROM
VXL 1 đến n : có nhiệm vụ
Nhận từ PC tín hiệu :
Điều khiển vào
Điều khiển ra
Phát PC tín hiệu :
Báo bận tại các công đoạn
Mã SEEPROM
VXL (n+1) : có nhiệm vụ
Nhận từ PC tín hiệu :
Điều khiển vào (sản phẩm đã làm đủ n công đoạn)
Điều khiển ra (đưa sản phẩm mới vào)
Phát PC tín hiệu :
Cờ báo băng tải chuyển động (mỗi lần băng tải chuyển động được 1 ô (rãnh) thì cờ băng tải sẽ báo).
Mã SEEPROM
PC có nhiệm vụ thu thập,quản lý và xử lí dữ liệu
Set các vị trí MEMIN(i) và MEMOUT(i) (i = 1đến n+1)
Quản lí n rãnh băng tải của dây chuyền sản xuất :mỗi lần nhận được tín hiệu cờ băng tải từ VXL cuối (n+1),PC sẽ tăng các giá trị MEMIN(i) và MEMOUT(i) lên 1 đơn vị
Quản lí n sản phẩm (n bánh xe) đã làm công đoạn nào và chưa làm công đoạn nào hay là sản phẩ mới đưa vào
Phát tín hiệu Điều khiển vào và Điều khiển 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Ị TRÍ CỦA CÁC VXL 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 = 0 : có sản phẩm làm xong đang chờ vào dây chuyền sản xuất )
* VXL 4
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 :
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) để quản lí 12 ô BT, ô nào không có SP thì DATA(i) = 0,ô nào có SP thì giá trị DATA(i) = mã ROM chứa SP đó (i = 1-12)
Dùng mảng DATACD(1-12) để quản lí các CĐ đã làm hoặc chưa làm của 12 SP. Nếu SP trên bánh xe chứa ROM có mã là i thì DATACD(i) sẽ quản lí (i = 1-12) SP đó.
DATACD(i) = xxxxxxxx (8 bit)
bit 0 : CĐ 1
bit 1 : CĐ 2
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 : ĐK Rẵ
C3C2C1C0 = 0011 : Mã ROM
C3C2C1C0 = 0100 : Bận (VXL1,2,3),Cờ BT (VXL4)
Sơ Đồ Mạch Nguyên Lý
CHƯƠNG TRÌNH TỔNG QUÁT PC
LOOP
- CT ĐK Ra
- Đọc mã Rom từ các VXL
Có tín hiệu cờ BT từ XL4?
CT ĐK Vào
LOOP
PC
N
Y
LƯU ĐỒ GIẢI THUẬT CHI TIẾT :
- SET MEMOUT ( i )
- SET MEMIN ( i )
START
CT ĐK VÀO
Tín hiệu BT từ XL4?
DATAIN = 44H ?
- INC MEMOUT(i )
- INC MEMIN (i )
Vị trí vào CĐ1 có SP?
DATA[MEMIN(1)]#0
Phát tín hiệu ĐK vào xuống VXL1
DATAOUT = 11H
CĐ1 làm chưa ?
DATACD[DATA(MEMIN(1))] AND 01H = 01H ?
LOOP
N
Y
Y
N
Y
N
Y
N
N
Có tín hiệu báo Busy
từ VXL1 ?
DATAIN = 41H ?
Xoá ô nhớ vừa cho SP vào
DATA[MEMIN(1)] = 0
Vị trí vào CĐ2 có SP?
DATA[MEMIN(2)]#0?
Phát tín hiệu ĐK vào xuống VXL2
DATAOUT = 12H
CĐ2 làm chưa ?
DATACD[DATA(MEMIN(2))] AND 02H = 02H ?
Y
N
N
N
Y
Y
Y
N
N
N
Có tín hiệu báo Busy
từ VXL2 ?
DATAIN = 42H ?
Xoá ô nhớ vừa cho SP vào
DAT[MEMIN(2)] = 0
Vị trí vào CĐ3 có SP?
DATA[MEMIN(3)#0?
Phát tín hiệu ĐK vào xuống VXL3
DATAOUT = 13H
CĐ3 làm chưa ?
DATACD[DATA(MEMIN(3))] AND 04H = 04H ?
Y
N
N
Y
Y
N
N
Phát tín hiệu ĐK vào xuống VXL4
DATAOUT = 14H
Có tín hiệu báo Busy
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[MEMIN(4)#0?
Cả ba CĐ1,CĐ2,CĐ3 làm chưa ?
DATACD[DATA(MEMIN(4))] AND 07H = 07H ?
Xoá ô nhớ vừa cho SP vào
DATA[MEMIN(4)] = 0
Y
N
N
Y
N
Y
Y
CT ĐK RA
Vị trí ra CĐ1 có SP ?
DATA[MEMOUT(1)] #0 ?
Truyền tín hiệu ĐK ra xuống VXL1
DATAOUT = 21H
Có tín hiệu đọc ROM từ VXL1?
DATAIN(1) = 31H ?
Gán mã ROM nhận được vào ô nhớ cho phép ĐK ra
DATA[MEMOUT(1) = DATAIN(2)
(Mã ROM = DATAIN(2)]
Đánh dấu CĐ1 đã làm
DATACD[DATA(MEMOUT(1))] OR 01H
Y
N
N
Y
Vị trí ra CĐ2 có SP ?
DATA[MEMOUT(2)] # 0 ?
Truyền tín hiệu ĐK ra xuống VXL2
DATAOUT = 22H
Có tín hiệu đọc ROM từ VXL2?
DATAIN(1) = 32H ?
Gán mã ROM nhận được vào ô nhớ cho phép ĐK ra
DATA[MEMOUT(2)] = DATAIN(2)
(Mã ROM = DATAIN(2)]
Đánh dấu CĐ2 đã làm
DATACD[DATA(MEMOUT(2))] OR 02H
Y
N
N
Y
Vị trí ra CĐ3 có SP ?
DATA[MEMOUT(3)] # 0 ?
Truyền tín hiệu ĐK ra xuống VXL3
DATAOUT = 23H
Có tín hiệu đọc ROM từ VXL3?
DATAIN(1) = 33H ?
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
N
Y
Có tín hiệu đọc ROM từ VXL3?
DATAIN(1) = 33H ?
Gán mã ROM 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
Vị trí ra CĐ4 có SP ?
DATA[MEMOUT(4)] # 0 ?
Truyền tín hiệu ĐK ra xuống VXL4
DATAOUT = 24H
Có tín hiệu đọc ROM từ VXL4?
DATAIN(1) = 34H ?
Gán mã ROM nhận được vào ô nhớ cho phép ĐK ra
DATA[MEMOUT(4)] = DATAIN(2)
(Mã ROM = DATAIN(2)]
Đưa SP mới vào (chưa làm CĐ nào) DATACD[DATA(MEMOUT(4))] = 0
LOOP
Y
N
N
Y
LƯU ĐỒ GIẢI THUẬT CỦA CÁC VXL 1,2,3
VXL1,2,3
Có phải tín hiệu ĐK Vào
LOOP
Nhận tín hiệu ĐK từ
PC
Có phải tín hiệu ĐK Ra ?
ĐK Vào
Phát PC báo bận
Các CĐ có bận ?
Có SP làm xong đang chờ?
Đọc ROM & phát PC
ĐK Ra
LOOP
Y
Y
N
N Y
N N
Y
LƯU ĐỒ GIẢI THUẬT CHO VXL4 (CĐ CUỐI )
VXL1,2,3
LOOP
Có phải tín hiệu ĐK Vào
Có phải tín hiệu ĐK Ra ?
ĐK Vào
Có SP mới đang chờ?
Đọc ROM & phát PC
ĐK Ra
LOOP
Có tín hiệu cờ BT
N
Y
Y
N
Y
N N
Y
CHƯƠNG TRÌNH VXL1:
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:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#11H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#51H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#41H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#21H,LOOP
;CO SAN PHAM CHO ?
JB P3.3,NEXT1
;CO SP CHO ?
ACALL DKRA
WAIT:
;CHO DOC ROM
MOV A,#0
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV P2,A
MOV B,A
MOV A,#31H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#61H
ACALL OUTCHAR
MOV A,#71H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (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 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
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 0
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 VXL2:
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:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#12H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#52H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#42H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#22H,LOOP
;CO SAN PHAM CHO ?
JB P3.3,NEXT1
ACALL DKRA
WAIT:
;CHO DOC ROM
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
MOV P2,A
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV B,A
MOV A,#32H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#62H
ACALL OUTCHAR
MOV A,#72H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTOP:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
SETB P1.6 ;SDA = 1
RET
ACK:
CLR P1.6 ;SDA = 0
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
NACK:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
XUATRA:
MOV MEM20,A ;BO NHO TRUNG GIAN
MOV A,#8
MOV MEM19,A ;BO DEM DUNG CHO 8 BIT
LAP:
MOV A,MEM20
ANL A,#128 ;CHE BIT 7
RR A ;SAU BIT 6 (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 1
SETB P1.6
CLR P1.7
SETB P1.6
SETB P1.7
CLR P1.7
RET
DOCVAO:
SETB P1.6 ;SDA = 1
CLR P1.7 ;SCL = 0
MOV MEM20,#0
MOV MEM19,#8
LAP1:
SETB P1.7 ;SCL = 1
MOV A,MEM20
RL A
MOV B,A
MOV A,P1
ANL A,#64 ;DOC SDA
RL A
RL A ;BIT 0
ADD A,B
MOV MEM20,A ;LUU TRU
CLR P1.7 ;SCL = 0
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 0
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 VXL3:
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:
ACALL INCHAR
;CO PHAI TIN HIEU DIEU KHIEN VAO ?
CJNE A,#13H,NEXT
JNB P3.2,BUSY
;CO TIN HIEU BAO BAN ?
ACALL DKVAO
;PHAT TIN HIEU BAO KHONG BAN
MOV A,#53H
ACALL OUTCHAR
SJMP LOOP
BUSY:
;PHAT TIN HIEU BAO BAN
MOV A,#43H
ACALL OUTCHAR
SJMP LOOP
NEXT:
;CO PHAI TIN HIEU DIEU KHIEN RA ?
CJNE A,#23H,LOOP
JB P3.3,NEXT1
;CO SP CHO ?
ACALL DKRA
WAIT:
;CHO DOC ROM
MOV A,#0
ACALL DOCROM
CJNE A,#0FFH,NEXT2
;CO DOC DUOC MA ROM ?
SJMP WAIT
NEXT2:
MOV P2,A
;XUAT MA ROM DOC DUOC RA P2 DE KIEM TRA
MOV B,A
MOV A,#33H
ACALL OUTCHAR
MOV A,B
ACALL OUTCHAR
SJMP LOOP
NEXT1:
;PHAT TIN HIEU BAO KHONG CO SAN PHAM CHO
MOV A,#63H
ACALL OUTCHAR
MOV A,#73H
ACALL OUTCHAR
SJMP LOOP
;KHAI BAO CAC CHUONG TRINH CON
INCHAR:
JNB RI,$
CLR RI
MOV A,SBUF
RET
OUTCHAR:
JNB TI,$
CLR TI
MOV SBUF,A
RET
DKVAO:
;XUAT TIN HIEU DK VAO RA P3.4 DE KIEM TRA
CLR P3.4
ACALL DELAY100MS
SETB P3.4
RET
DKRA:
;XUAT TIN HIEU DKRA RA P3.5 DE KIEM TRA
CLR P3.5
ACALL DELAY100MS
SETB P3.5
RET
I2CINIT:
SETB P1.6 ;SDA = 1
SETB P1.7 ;SCL = 1
RET
I2CSTART:
CLR P1.6 ;SDA = 0
SETB P1.7 ;SCL = 1
CLR P1.7 ;SCL = 0
RET
I2CSTO
Các file đính kèm theo tài liệu này:
- Mạng vi xử lý điều khiển dây chuyền sản xuất.doc
- 89c51.doc