Trong thời gian làm đồ án tốt nghiệp chúng em được sự hướng dẫn tận tình của thầy giáo T.S NGUYỄN TRỌNG THUẤN, T.S LÊ DUY THẠC, các thầy cô trong bộ môn, cùng tập thể các cán bộ, kỹ sư tại công ty THUẬN QUỐC, chúng em đã hoàn thành bản đồ án “Thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng trong dây chuyền gạch ốp lát” với công việc như sau:
- Khảo sát các công nghệ điển hình trong dây chuyền sản xuất gạch ốp lát Hà Nội.
- Trên cơ sở đó đề xuất một phương án thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng của dây chuyền sản xuất.
- Ứng dụng Vi xử lí với bộ vi xử lý 80C31 và kĩ thuật số để thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng.
 Phần thực nghiệm được chạy thử trên bộ mô phỏng Emulator- MICE 51, chương trình được viết bằng ngôn ngữ assembler.
 Do thời gian có hạn, và còn thiếu kinh nghiệm thực tế nên trong quá trình thiết kế không tránh khỏi những sai sót, vì vậy em rất mong sự đóng góp giúp đỡ của các thầy cô giáo và các bạn để bản đồ án này được ứng dụng vào thực tế.
 Một lần nữa em xin chân thành cảm ơn các thầy cô đã tận tình giúp đỡ bọn em hoàn thành bản đồ án này.
                
              
                                            
                                
            
 
            
                
87 trang | 
Chia sẻ: oanh_nt | Lượt xem: 1647 | Lượt tải: 0
              
            Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng trong dây chuyền gạch ốp lát, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
0, trong mode 0 SM2 sẽ có giá trị bằng 0.
SM0, SM1 ( bit 6 và 7 ): Là hai bit lựa chọn các mode hoạt động, được chỉ rõ trong bảng dưới đây:
SM0
SM1
Mode
Operation
Baud rate
0
0
0
Shift Register
Fosc/ 12
0
1
1
8 bit UART
Variable (xác định qua Timer 1)
1
0
2
8bit UART
(1/ 32 hoặc 1/ 64) Fosc
1
1
3
9 bit UART
Variable (xác định qua Timer 1)
+	Mode 0: Dùng để điều khiển các cổng vào/ ra tuần tự, đơn giản như một thanh ghi dịch với tốc độ dịch bằng một chu kỳ máy hay bằng (1/ 12) tần số thạch anh.
+	Mode 1: Dùng cho Timer1 để phát tốc độ truyền và nhận 8 bit dữ liệu 
+	Mode 2: Thực hiện một cổng truyền tuần tự 9 bit với tốc độ truyền bằng 1/32 hoặc 1/ 64 tần số của thạch anh.
+	Mode 3: Thực hiện một cổng truyền tuần tự với tốc độ có thể đặt được nhờ Timer 1.
*) Thanh ghi từ trạng thái chương trình PSW( Program Status Word); Có địa chỉ là 0D0h, làm việc theo từng bit cho phép chọn bốn dải thanh ghi
CY
AC
F0
RS1
RS0
OV
F1
P
Bảng dưới đây đưa ra các chức năng của từng bit tương ứng trong thanh ghi PSW:
Bit
Function
CY
Carry flag
AC
Auxiliary carry flag ( for BCD operations)
F0
General purpose user flag
RS1 RS0
Register bank select control bits
0 0
Bank 0 selected, data address 00H- 07H
0 1
Bank 1 selected, data address 08 H- 0F H
1 0
Bank 2 selected, data address 10 H- 17 H
1 1
Bank 3 selected, data address 18 H- 1F H
OV
Overflow flag
F1
General purpose userflag
P
Parity flag
*) Thanh ghi điều khiển nguồn PCON( Power Control Register); Có địa chỉ là 87 H
SMOD
-
-
-
GF1
GD0
PDE
IDLE
Bit
Chức năng
SMOD
Khi đặt tốc độ truyền của giao diện tuần tự trong mode 1, 2,3 được gấp đôi lên
*) Thanh ghi cho phép ngắt IE( Interrupt Enable Register); Thanh ghi này có thể làm việc theo địa chỉ từng bit, với mục đích cho phép ngắt nào được phép làm việc. Nếu bit bằng 0 thì vector ngắt tương ứng sẽ không được phép và ngược lại.
EA
-
ET2
ES
ET1
EX1
ET0
EX0
EA: Enable All. Nếu EA= 0 thì không có vector ngắt nào được phép hoạt động. Khi EA= 1 thì mỗi một nguồn ngắt được phép hay không được phép tuỳ thuộc vào bit tương ứng trong thanh ghi được đặt hay xoá.
ET2: Enable or Disable the Timer 2 Overflow
ES: Enable Serial Port Interrupt. Được đặt bởi phần mềm để cho phép ngắt 0 ngoài, phải xoá bằng phần cứng.
ET1: Enable Timer/ Counter Interrupt 1. Được đặt bởi phần mềm để cho phép Timer/ Counter 1 ngắt khi tràn, phải được xoá bằng phần cứng.
EX1: Enable External Interrupt 1. Được đặt bởi phần mềm cho phép ngắt ngoài 1, phải được xoá bằng phần cứng.
ET0: Enable Timer/ Counter Interrupt 0. Được đặt bởi phần mềm để cho phép ngắt ngoài 0 khi tràn, phải được xoá bằng phần cứng.
EX0: Enable External Interrupt 0. Được đặt bởi phần mềm để cho phép ngắt ngoài 0, phải được xoá bằng phần cứng.
*) Thanh ghi ưu tiên ngắt IP( Interrupt Prioty Register); Cho phép ngắt ưu tiên ở mức cao và mức thấp đối với năm nguồn ngắt.
-
-
PT2
PS
PT1
PX1
PT0
PX0
PT2: Ngắt Timer 2 ở mức ưu tiên.
PS: Ngắt cổng nối tiếp ở mức ưu tiên.
PT1: Ngắt Timer 1 ở mức ưu tiên.
PX1: Ngắt ngoài 1 ở mức ưu tiên.
PT0: Ngắt Timer 0 ở mức ưu tiên.
PX0: Ngắt ngoài 0 ở mức ưu tiên.
Bên trong bộ vi xử lý 8051 có hai bộ định thời Timer/ Counter 16 bit. Mỗi bộ có hai thanh ghi có chức năng đặc biệt SFR là:
*) Thanh ghi điều khiển Timer/ Counter TCON:( Timer/ Counter Control Register)
	Có thể làm việc tới từng bit địa chỉ, nó dùng để điều khiển hoạt động của Timer/ Counter.
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1: Timer 1 Overflow Flag; Cờ tràn Timer 1. Được đặt bằng phần cứng khi Timer/ Counter tràn. Bị xoá bằng phần cứng khi bộ vi xử lý phát ra vector thực hiện dịch vụ ngắt.
TR1: Timer 1 run control bit. Được đặt xoá bằng phần mềm để bật tắt Timer/ Counter 1 ON/ OFF.
TF0: Timer 0 overflow flag. Được đặt bằng phần cứng khi Timer/ Counter 0 tràn, phải được xoá bằng phần cứng khi bộ vi xử lý phát vector thực hiện dịch vụ ngắt.
TR0: Timer 0 run control bit. Được đặt xoá bằng phần mềm để bật tắt Timer/ Counter 0 ON/ OFF.
IE1: Intertupt 1 Edge Flag. Được đặt bởi phần cứng khi mà sườn ngắt ngoài được ghi nhận. Được xoá khi lệnh RETI được thực hiện.
IT1: Interrupt 1 Type. Phục vụ cho ngắt ngoài số một
+ Nếu IT1= 1: Nó quy định ngắt theo sườn xuống
	+ Nếu IT1= 0: Tương ứng với việc xuất hiện một xung thấp thì có yêu cầu ngắt
IE0: Interrupt 0 Edge Flag. Được đặt bởi phần cứng khi mà một sườn ngắt ngoài được phát hiện. Được xoá khi lệnh RETI được thực hiện.
IT0: Interrupt 0 Type. Được đặt/ xoá bằng phần mềm để chỉ rõ ngắt ngoài theo sườn hay theo mức.
*) Thanh ghi điều khiển chế độ Timer/ Counter TMOD( Timer/ Counter 0/ 1 Mode control register)
GATE
C/ T
M1
M0
GATE
C/ T
M1
M0
Timer/ Counter 1
Timer/ Counter 0
GATE: Khi mà TRx (trong TCON) được đặt và GATE= 1 thì Timer/ Counter sẽ hoạt động khi chân INTx ở mức cao. Khi GATE= 0 Timer/ Counter sẽ hoạt động khi TRx= 1.
C/ T: Chọn mode hoạt động là Timer hay Counter.
+ Nếu C/ T= 0- Chế độ hoạt động là Timer
 + Nếu C/ T= 1- Chế độ hoạt động là Counter
M1, M0- Dùng để quy định chế độ làm việc cho các Timer	
M1
M0
Mode
Operating
0
0
0
13 bit Timer
0
1
1
16 bit Timer/ Counter
1
0
2
8 bit Timer/ Counter Auto- reload
1
1
3
Timer 0 hoạt động như là hai bộ Timer 8 bit TL0, TH0. Timer/ Counter 1 stops
c- Các cổng vào ra song song 
	Theo như sơ đồ hình vẽ ta thấy bộ vi xử lý 8031 ( 8032) có 4 cổng vào ra song song. Khi một cổng được sử dụng như một cổng ra, dữ liệu được đưa vào thanh ghi SFR tương ứng, và giá trị của một cổng bị thay đổi khi một giá trị mới được chốt.
	Khi một cổng được sử dụng như một cổng vào, thì giá trị FFh phải được ghi vào cổng, sau đó bất cứ đầu nào mà đưa điện áp của chân đó xuống mức thấp sẽ được coi như bằng 0, và sau đó cổng đó có thể được đọc dữ liệu ra từ các thanh ghi SFR tương ứng.
Mặc dù tất cả các lệnh đọc giá trị từ các chân tương ứng của cổng, nhưng một số lệnh đọc thì được ngầm hiểu là đọc giá trị của các cổng chốt. Loại lệnh này được gọi là read- modify- write tức là đọc dữ liệu từ cổng sau đó thực hiện theo yêu cầu của câu lệnh, được kết quả thì ghi kết quả đó trở lại cổng.
	Các cổng 0, 2, và 3 có những chức năng thay đổi, các chân riêng rẽ của những cổng này có thể được sử dụng như các đầu vào/ ra số chung hoặc có thể được sử dụng chức năng thứ hai là:
Các cổng 0 và 2 được sử dụng để giao tiếp với bộ nhớ ngoài.
Khi bộ nhớ chương trình hoặc dữ liệu được truy nhập, cổng 2 ( P2) sẽ đưa ra những byte cao của địa chỉ 16 bit cổng 0 ( P0) đưa ra những byte thấp của 16 bit địa chỉ, sau đó thì gửi hoặc nhận byte dữ liệu. Những byte địa chỉ thấp phải được chốt khi truy nhập bộ nhớ ngoài. Bộ vi xử lý sẽ phát một địa chỉ giá trị bằng cách làm tích cực chân ALE, chân này được sử dụng để chốt địa chỉ byte thấp.
Chức năng của cổng 3 ( P3) gồm những chân đặt tín hiệu ngắt, đầu vào Timer,các cổng vào/ ra tuần tự, và tín hiệu điều khiển khi có giao diện với bộ nhớ ngoài, điều này sẽ được mô tả bằng bảng dưới đây:
Bit
Alternate Function
Mnemonic/ Designation
0
Serial Input Port
RxD
1
Serial Output Port
TxD
2
External Interrupt 0
INT0#
3
External Interrupt 1
INT1#
4
Timer/ Counter 0 External Input
T0
5
Timer/ Counter 1 External Input
T1
6
External Memory Write Strobe
WR#
7
External Memory Read Strobe
RD#
Để thực hiện các chức năng thay đổi như bảng trên trình bày thì các bit tương ứng của thanh ghi SFR phải được đặt lên bằng 1.
Các ngắt của 80C31
Bộ vi xử lý 80C31 có năm nguồn ngắt: TF0, TF1, INT0, INT1, và ngắt cổng nối tiếp. TF0, TF1 của thanh ghi TCON tạo ra hai ngắt Timer/ Counter, chúng được phát ra khi bộ đếm đếm tràn. INT0, INT1 là hai nguồn ngắt ngoài. Các ngắt này xuất hiện khi có tín hiệu ngoài yêu cầu ngắt nối qua bit 2 và 3 của cổng 3 (P3). Vector ngắt điều khiển phần cứng có thể thực hiện để đáp ứng mỗi một sườn xuống của tín hiệu ngoài hoặc mức thấp của tín hiệu ngoài. Sự lựa chọn đó quyết định bởi bit điều khiển IT0 và IT1 của thanh ghi đặc biệt TCON.
	Có hai thanh ghi đặc biệt kết hợp với ngắt điều khiển là thanh ghi cho phép ngắt IE và thanh ghi ưu tiên ngắt IP. Khi mà hai nguồn ngắt được thực hiện với hai mức ưu tiên như nhau thì sự ưu tiên được quyết định bởi thứ tự từ trên xuống theo như bảng dưới đây:
Interrupt
Service Routine Address
Default Priority
IE0
3 H
1( Highest)
TF0
B H
2
IE1
13 H
3
TF1
1B H
4
RI- or- TI
23 H
5( Lowest)
4- Các chế độ địa chỉ
a- Chế độ địa chỉ hằng số tức thì (The Immediate Addressing Mode)
Trong chế độ địa chỉ này, giá trị hằng số có thể là ở sau mã thao tác trong bộ nhớ chương trình.
	Ví dụ: 	mov a, # 100; a= 100
b- Chế độ địa chỉ trực tiếp (The Direct Addressing Mode)
	Trong chế độ này toán hạng được xác định bởi một trường địa chỉ 8 bit địa chỉ trong lệnh, toán hạng trong chế độ này có thể là các thanh ghi đặc biệt SFR hoặc là bộ nhớ dữ liệu trong.
	Ví dụ 	mov a, 70h; đưa nội dung thanh ghi có địa chỉ 70h vào a.
c- Chế độ địa chỉ thanh ghi (The Register Addressing Mode)
	Các băng thanh ghi có chứa các thanh ghi từ R0 đến R7 có thể truy nhập bằng các lệnh nhất định mà chúng được chỉ định thông qua một thanh ghi. Theo cách này có khả năng là mã lệnh, vì chế độ này đưa ra một byte địa chỉ. Khi thực hiện lệnh một trong 8 thanh ghi ở băng được chọn để truy nhập đến.
Việc lựa chọn dải băng thanh ghi là do hai bit trong thanh ghi PSW.
	Vi dụ: 	mov PSW, # 0	; chọn băng 0
	Mov R0, # 2	; đưa hằng số 2 vào thanh ghi R0 
d- Chế độ địa chỉ thanh ghi chức năng (The Register- Specific Addressing Mode)
	Một số lệnh được xác định bởi một thanh ghi nhất định. Một số lệnh luôn làm việc với thanh ghi ACC hoặc con trỏ lệnh. Vì vậy không có byte địa chỉ cần thiết để trỏ tới nó. Mã lệnh của chính nó làm việc đó. 
	Ví dụ:	mov a, # 1	; a= 1
	Mov 0E0h, # 1	; chuyển 1 vào SFR có địa chỉ E0h
e- Chế độ địa chỉ gián tiếp qua thanh ghi (The Register Indirect Addressing Mode)
	Trong chế độ này lệnh xác định một thanh ghi chứa địa chỉ của toán hạng, cả RAM trong và RAM ngoài đều có thể là địa chỉ gián tiếp thanh ghi. Thanh ghi 8 bit có thể là R0, R1 của băng thanh ghi được chọn, hoặc con trỏ ngăn xếp . Thanh ghi địa chỉ 16 bit chỉ có thể là thanh ghi con trỏ số hiệu 16 bit là DPTR.
	Ví dụ	 	 mov PSW, # 0	; chọn băng ghi 0
	mov R0, 90h	
	mov @ R0, # 1
	Hoặc mov a, # 1
	mov DPTR, # 900h
	mov @ DPTR, A
	mov DPTR, # 9001h
	mov a, @ DPTR
f- Chế độ địa chỉ chỉ số thanh ghi (The Register Indexed Addressing Mode)
	Trong chế độ này chỉ có bộ nhớ chương trình là có thể truy nhập, nó chỉ có thể đọc được. Chế độ địa chỉ này được xác định sẵn cho các bảng look- up để đọc trong bộ nhớ chương trình một thanh ghi cơ sở 16 bit, hoặc DPTR, hoặc bộ đếm chương trình (PC) trỏ tới đoạn cơ sở của bảng, và ACC được xây dựng với số đưa vào bảng.
	Ví dụ 	mov DPTR, 8100h	; địa chỉ cơ sở của bảng
	mov a, # 0	; gán giá trị 0 cho a
	mov a, @ a+ DPTR
B- Chức năng hoạt động của bộ vi xử lí 8031. 
Trong module điều khiển trung tâm của hệ thống điều khiển nhiệt độ thì vi xử lý 8031 có chức năng điều khiển toàn bộ hệ thống theo chương trình định sẵn do người điều khiển, kết hợp với các mạch điều khiển logic, mạch giải mã, các mạch giao diện và bộ nhớ chương trình của vi xử lý 8031 như sau:
	+ Thu nhận tín hiệu nhiệt độ từ các module thu nhận ( tín hiệu được lấy từ đầu đo là các cặp nhiệt điện). Tín hiệu được đưa vào vi xử lý để xử lý và cất vào vùng đệm.
	+ Đưa giá trị đo được hiển thị ra LED để cho người điều hành biết để có những tác động thích hợp.
	+ Giá trị đo được đem so sánh với giá trị đặt trước theo yêu cầu để đưa ra giá trị điều khiển thông qua cơ cấu điều chỉnh. Tín hiệu điều khiển phụ thuộc vào giá trị sai lệch giữa giá trị đo được với giá trị đặt.
	+ Kiểm tra các thông số trạng thái làm việc của hệ thống bao gồm trạng thái kết thúc chu trình làm việc và trạng thái sự cố như khi nhiệt độ vượt quá mức thấp so với mức quy định khi đó có thể đưa ra tín hiệu báo động, và có thể dừng hệ thống nếu cần.
C- Bộ nhớ chương trình ngoài ( EPROM) 
Bộ nhớ chương trình ngoài EPROM ( Erasable Programable Read Only Memory) có chức năng chứa chương trình điều khiển của hệ thống điều khiển nhiệt độ của lò sấy được viết bằng ngôn ngữ Assembler của 8031. Chương trình được viết trên máy tính sau đó được nạp vào EPROM thông qua thiết bị nạp ROM. Chương trình có thể bị xoá bằng tia cực tím sau đó có thể nạp lại chương trình khác. Do đó việc sử dụng EPROM có rất nhiều ưu điểm so với bộ nhớ ROM.
Việc chọn lối ra cho bộ nhớ được thực hiện qua chân chọn chip OE, chân này được nối với chân PSEN của vi xử lý.
	Việc lựa chọn lối ra của bộ nhớ EPROM thường phụ thuộc vào kích thước của chương trình điều khiển cần được nạp vào. Đối với hệ thống điều khiển nhiệt độ lò sấy ta phải chọn loại bộ nhớ EPROM có dung lượng lớn ( 27HC256) để đáp ứng đủ cho hệ thống điều khiển đa kênh nhiệt độ.
3-2- Thiết kế phần cứng
.3.2.1- Sơ đồ thiết kế phần cứng được mô tả như sau:
3.2.2- Các vi mạch khác sử dụng trong hệ thống.
 a- Bộ khuếch đại tín hiệu Thermocouple( bộ khuếch đại tín hiệu)
Tín hiệu nhận được từ Thermocouple có điện áp nhiệt điện thay đổi từ
0á 6mV tương ứng với nhiệt độ từ 0á 1400 C trong lò sấy. Các tín hiệu này có thể coi là tín hiệu vi sai. Do tín hiệu này là rất nhỏ nên cần phải đưa qua bộ khuếch đại tín hiệu trước khi đưa vào bộ biến đổi ADC.
Để khuếch đại tín hiệu ta dùng bộ khuếch đại đo lường. Nó được dùng để khuếch đại chính xác các tín hiệu vi sai AC hay DC đồng thời loại bỏ được các phần tử nhiễu đồng pha lớn. Đặc điểm của bộ khuếch đại này là có trở kháng vào cao, độ trôi thấp, phù hợp với yêu cầu hệ thống.
Theo sơ đồ ta thấy rằng hai đầu vào của op- amp không đảo, dẫn đến trở kháng vào cao đối với hai tín hiệu, tầng ra là khuếch đại vi sai vòng đóng. Như vậy ta thấy hai hệ khuếch đại đối với các đường tín hiệu tách riêng đều được hiệu chỉnh bởi điện trở R1.
Hình 3.1: Sơ đồ mạch khuếch đại tín hiệu
Điện áp ra của bộ khuếch đại đo lường có giá trị bằng:
ở đây ta thấy hai mạch khuếch đại thuật toán đầu vào cho điện trở rất cao vì dòng điện vào của đầu vào thuận pha ở đây rất nhỏ. Độ khuếch đại toàn mạch có thể hiệu chỉnh một cách đơn giản bằng điện trở R1. Mạch điện này có thể xây dựng từ một vi mạch và một điện trở mắc bên ngoài, thí dụ mạch LH0036 của hãng National Semiconductor.
Như vậy ta thấy điện áp ra bằng hệ số khuếch đại không đổi nhân với hiệu giữa hai điện áp vào và do đó nó được gọi là bộ khuếch đại hiệu.
Trong thực tiễn không thể đạt được những mạch điện lý tưởng kiểu này. Nhưng ta hoàn toàn có thể xây dựng được những mạch phù hợp với từng ứng dụng cụ thể 
	Do tín hiệu đầu ra từ cặp nhiệt điện là rất nhỏ từ 0 đến 40mV tương ứng với nhiệt độ đo được từ 00 C đến 12000 C. Do tín hiệu vào AD có giải từ 0V đến 5V nên tín hiệu cần được khuếch đại từ 0á 40mV thành 0á 5V.
	ở đây do đặc tính của cặp nhiệt điện là tuyến tính nên ta có thể tính toán hệ số khuếch đại là :
b- Bộ lọc thông tích cực Butterworth.
Tại module thu nhận tín hiệu nhiệt độ trước khi tín hiệu tương tự được đưa vào bộ biến đổi AD cần có các biện pháp lọc nhiễu để tăng độ chính xác cho hệ thống. Các nguồn nhiễu chủ yếu tác động lên tín hiệu của hệ thốnglà:
+ Nhiễu do nguồn điện lưới
+ Nhiễu do từ trường
+ Nhiễu do dung cơ khí
Để xử lý lọc nhiễu tuỳ từng loại nhiễu cụ thể mà ta dùng các phương pháp lọc nhiễu khác nhau. Chẳng hạn đối với nhiễu từ trường ta phải dùng các hộp bọc có tác dụng cản từ trường. Đặc biệt có một loại nhiễu mà ta đặc biệt quan tâm là nhiễu do nguồn điện lưới 50Hz gây lên. Để lọc nhiễu này ta thường sử dụng bộ lọc tích cực Butterworth. Bộ lọc này gồm một tổ hợp điện trở, điện dung và một hoặc nhiều phần tử tích cực (như op- amp) có sử dụng nguồn hồi tiếp. Các bộ lọc tích cực RC có thể chế tạo dễ dàng với kích thước vật lí và đặc tuyến tần số của chúng tiến sát tới dạng lý tưởng. Bộ lọc được sử dụng ở đây là bộ lọc thông tích cực thấp Butterworth, bộ lọc này có đặc tuyến biên độ và đặc tuyến pha phù hợp với lọc nhiễu do nguồn điện lưới gây lên.
Sơ đồ bộ lọc thông tích cực thấp:
c- Bộ khuếch đại đệm:
Sơ đồ mạch khuếch đại đệm:
Hình 3.2: Sơ đồ mạch khuếch đại đệm:
Sau hai tầng khuếch đại lọc nhiễu, tín hiệu được đưa tới bộ khuếch đại đệm, bộ khuếch đại này có chiết áp cho phép điều chỉnh hệ số khuếch đại, đảm bảo điện áp đưa vào đầu vào A/D có giá trị thích hợp.
d- Bộ biến đổi tương tự số:
	Do nhiệt độ không yêu cầu cao về độ chính xác nên độ phân giải của nhiệt độ không cần cao. Do vậy ở đây ta sử dụng ADC 0809 có độ phân giải 8 bit. Sơ đồ thiết kế mạch có dạng như sau:
Hình 3.3: Sơ đồ mạch biến đổi tương tự số ADC 0809
* ưu điểm của việc sử dụng bộ biến đổi tương tự số ADC 0809:
+	Không cần đòi hỏi điều chỉnh điểm không.
+	Quét động 8 kênh bằng lôgic địa chỉ.
+	Dải tín hiệu lối vào analog khi điện áp nguồn nuôi là +5V.
+	Tất cả tín hiệu tương thích TTl.
+	Độ phân dải 8 bít.
+	Thời gian biến đổi 100 ms.
+	Dòng tiêu thụ của vi mạch hầu như không đáng kể 0,3mA.
	Tín hiệu giữ nhịp dùng cho bộ biến đổi A/ D cần phải được tạo ra ở bên ngoài được dẫn đến chân CLOCK.
	Tám kênh lối vào analog được dẫn đến các chân IN0 đến IN7. Mẫu bít ở các lối vào địa chỉ A, B, C sẽ xác định xem kênh nào phải được lựa chọn.
	Nguyên tắc hoạt động của bộ biến đổi ADC 0809 cũng không có gì phức tạp. Một xung dương ở chân START được kích hoạt sự biến đổi. Qua đó mẫu bít vào địa chỉ A, B, và C cũng đồng thời được chốt và xác định kênh biến đổi. Trong quá trình biến đổi chân ra EOC ở mức Low, sau cỡ 100 ms mức này sẽ chuuyển sang mức High và báo hiệu sự kết thúc quá trình biến đổi. Sau đó kết quả của quá trình biến đổi sẽ xếp hàng ở đường dẫn dữ liệu D0... D7. Khi OE= 1 các đường dẫn có thể được đọc tiếp. 
3.2.3- Module chỉ thị, nguồn,mạch đánh lửa, van và phím điều khiển
A- Mạch chỉ thị:
Mạch chỉ thị sử dụng mạch hiển thị 7 thanh (7 segment) nối anôt chung bao gồm có 5 đèn LED để hiển thị thông số nhiệt độ của hệ thống. Việ sử dụng các bộ chỉ thị số có tác dụng tăng độ chính xác của hệ thống so với các bộ chỉ thị kim ( vì tránh được tình trạng vị trí nhìn khác nhau dẫn đến các kết quả khác nhau, và cũng như tránh được các lỗi về cơ khí như chạm hay kẹt kim). Mạch chỉ thị thu nhận tín hiệu từ vùng đệm , đưa ra hiển thị LED theo nguyên tắc quét hoặc ngắt Timer. Trong đó:
Các thông số chỉ thị bao gồm:
+ Giá trị nhiệt độ đo được tại thời điểm hoạt động
+ Giá trị nhiệt độ đặt trước
Các LED trạng thái bao gồm :
+ LED chỉ thị trạng thái ngắt (mở) cơ cấu điều chỉnh nhiệt độ khi nhiệt độ lò tăng quá mức quy định
+ LED báo động dừng hẳn hệ thống khi có sự cố nghiêm trọng
+ LED báo trạng thái làm việc bình thường của hệ thống
ở đây mạch sử dụng 2 chốt 74LS373: Trong đó một chốt số liệu cần hiển thị trong vùng đệm ra hiển thị 7 thanh, và một để giải mã địa chỉ cho digit cần hiển thị.
B- Các phím điều khiển hệ thống: 
	Hệ thống điều khiển nhiệt độ của lò sấy đứng được hoạt động thông qua các phím điều khiển, mỗi phím có những chức năng riêng thông qua thiết kế phần cứng cũng như trong chương trình phần mềm. Hệ thống bao gồm các phím điều khiển sau:
	+ Ba phím để thay đổi giá trị đặt: Phím vào chương trình đặt và thiết kế chương trình đặt (PROG), phím chọn digit cần thay đổi (SELECT), phím thay đổi giá trị tại digit được chọn( INC).
	+ Một phím có chức năng RESET lại hệ thống (RESET).
	+ Một phím cho phép hệ thống hoạt động (START).
	+ Một phím chọn kênh đo nhiệt độ (CH1, CH2).
C- Module cung cấp nguồn cho hệ thống:
	Module này có nhiệm vụ tạo ra điện áp một chiều ổn định có các dải điện áp là ± 5V và ± 12V cung cấp cho các vi mạch hệ thống.
*	Mạch nguồn :
	Nguồn cung cấp là một yếu tố quan trọng đối với các thiết bị điện tử nói chung. Trong hệ thống điều khiển nhiệt độ lò sấy trong dây chuyền sản xuất gạch ốp lát, nó đóng vai trò rất lớn đảm bảo cho hệ thống làm việc ổn định , đồng thời cũng góp phần làm giảm sai số trong khi đo lường và điều khiển các đại lượng và các thiết bị của hệ thống.
	Nguồn nuôi nhận điện lưới xoay chiều 220V, tần số 50Hz đưa qua biến áp (hạ áp) lấy ra các tín hiệu xoay chiều 9V, 12V, 15V.... Giá trị điện áp đầu ra của biến áp tuỳ theo yêu cầu của từng loại thiết bị trong hệ thống. Các điện áp xoay chiều được đưa vào bộ chỉnh lưu cầu để tạo ra điện áp một chiều tương ứng. Các tụ lọc và điện trở có tác dụng làm phẳng điện áp trước khi đưa vào các vi mạch ổn áp 7805, 7812, 7905, 7912 để có điện áp ± 5V và ± 12V cung cấp cho các vi mạch hoạt động, các vi mạch ổn áp đều được gắn tản nhiệt bằng hợp kim nhôm để giảm bớt nhiệt độ sinh ra trong quá trình làm việc đồng thời cũng làm tăng tuổi thọ của các vi mạch. Tại đầu ra của các vi mạch có các tụ bù.
Sơ đồ biến áp nguồn của hệ thống:
Hình 3.4: Sơ đồ biến áp nguồn của hệ thống:
Trong đó :
+ Cuộn sơ cấp có điện áp đầu vào là 220V ~.
+ Cuộn thứ cấp: Gồm 2 cuộn thứ cấp riêng biệt. Điện áp tổng cộng trên cuộn thứ cấp thú nhất là 9V ~, cuộn thứ hai là 15V ~. Tại mỗi cuộn đều có chung điểm không để tạo điện áp âm. 
Hình 3.5: Sơ đồ nguồn cung cấp 
D- Van điều khiển dòng chảy của khí gas
	ở đây ta sử dụng loại van 2 cửa (2- way ) có cuộn hút thuộc chủng loại 8030, 8031 của hãng ASCO ( Automatic Switch Company) có kí hiệu là V- 5304R2. Loại van này được làm bằng đồng thau hoặc thép không gỉ, phù hợp với loại có áp suất thấp.
	Nguyên tắc làm việc của van là: Van được đóng khi cuộn dây không được cấp điện và mở khi cuộn dây được cung cấp điện.
	Bảng dưới đây mô tả một số thông số của van:
Construction
Coi Class
Catalog Number Prefix
Maximum Ambient Temp. 0F
Maximum Fluid
Temp. 0F
Watt Rating
A-C Construction
(Alternating Current)
A
None
77
180
10.5
A
None
77
200
15.4
F
FT
122
200
10.5 or 15.4
H
HT
140
200
10.5 or 15.4
D-C Construction
(Direct Current)
A, F or H
None, FT or HT
77
150
11.2
A, F or H
None, FT
or HT
77
180
16.8
Sơ đồ cung cấp gas cho buồng đốt
Hình 3.6: Sơ đồ tổng thể mô tả đường đi của gas tới mỏ đốt
E- Mạch đánh lửa
-	Biến áp mồi: Thực chất đây là biến áp cao áp 220V/ 10KV. Khi đóng, điện điện áp 220V được tăng thành 10KV, điện áp này cấp cho cực điện ở trong buồng đốt tạo ra trường điện tích cực mạnh trong môi trường hỗn hợp khí gas nên gây đánh lửa và đốt cháy. Quá trình này kéo dài trong khoảng 30s- 60s. Sau đó biến thế mồi bị đưa ra khỏi mạch, tức là bị cắt nguồn cung cấp.
3.3-Thiết kế phần mềm.
Nguyên tắc làm việc của hệ thống: Tín hiệu được lấy ra từ cặp nhiệt điện dưới dạng áp là mV. Sau đó tín hiệu được đưa qua bộ khuếch đại và lọc nhiễu để đạt được giá trị điện áp trong khoảng từ 0á 5V tương ứng với giá trị đầu vào của ADC. Tín hiệu sau khi biến đổi từ tương tự sang số được đưa vào vi xử lí. Vi xử lí có nhiệm vụ xử lí sau đó đưa ra tín hiệu điều khiển, đồng thời cũng đưa ra giá trị tương ứng trên LED để thông báo cho người điều khiển biết.
	Dựa trên nguyên tắc đó chúng tôi thiết kế một phần mềm điều khiển, được phân chia thành nhiều chương trình con.
	Sau đây là lưu đồ thuật toán của từng phần:
+ Lưu đồ điều khiển trung tâm (Chương trình chính ) đưa ra tổng thể trình tự làm việc của hệ thống, ban đầu xoá các biến điều khiển như Rơle, báo động, các giá trị đặt, các cờ trạng thái của hệ thống. Sau đó kiểm tra phím Start, khi phím Start kích hoạt hệ thống bắt đầu làm việc cho phép đặt giá trị vào, chuyển đổi từ dạng BCD sang dạng nhị phân, sau đó đọc dữ liệu từ ADC về Vi xử lí, chuyển đổi giá trị này từ dạng nhị phân (BIN) sang dạng BCD để có thể đưa ra LED hiển thị 7 thanh, số liệu này được so sánh với giá trị yêu cầu để đưa ra tín hiệu điều khiển phù hợp cho hệ thống, sau đó kiểm tra trạng thái làm việc của hệ thống, nếu cờ END_ FLAG= 0 thì quay lại từ đầu ngược lại thì tiếp tục đọc dữ liệu từ ADC về Vi xử lí. 
+ Chương trình con sử dụng ngắt Timer0 phục vụ cho việc thay đổi giá trị yêu cầu có thể được diễn giả như sau: khi hai giá trị Scount1 và Scount2 giảm đến không thì ngắt xảy ra thực hiện nhiệm vụ thay đổi giá trị yêu cầu.
+ Chương trình con thay đổi giá trị yêu cầu có nguyên tắc làm việc như sau: So sánh giá trị yêu cầu ở từng thời điểm và giá trị đã được đặt trước, nếu khác nhau thì có nhu cầu thay đổi là tăng hoặc giảm.
+ Chương trình con đọc giá trị từ ADC về Vi xử lí có nhiệm vụ thu thập giá trị nhiệt độ từ kênh 0 để đưa về Vi xử lí việc này chỉ cho phép khi BIT_ EOC bằng 1 vì theo nguyên tắc làm việc của ADC này thì một xung dương ở chân START được kích hoạt sự biến đổi. Qua đó mẫu bít vào địa chỉ A, B, và C cũng đồng thời được chốt và xác định kênh biến đổi. Trong quá trình biến đổi chân ra EOC ở mức Low, sau cỡ 100 ms mức này sẽ chuyển sang mức High và báo hiệu sự kết thúc quá trình biến đổi. Sau đó kết quả của quá trình biến đổi sẽ xếp hàng ở đường dẫn dữ liệu D0... D7. Khi OE= 1 các đường dẫn có thể được đọc tiếp.
+ Chương trình con điều khiển Rơle (đưa tín hiệu ra ): So sánh giá trị đo được với giá trị đặt,nếu giá trị đo được lớn hơn giá trị đặt thì ngắt Rơle,ngược lại thì đóng Rơle.
+ Chương trình con kiểm tra trạng thái làm việc của hệ thống: So sánh giá trị đo được và giá trị đặt, nếu sai lệch lớn hơn giá trị cho phép thì đưa ra tín hiệu báo động.
Lưu đồ điều khiển trung tâm
Lưu đồ phục vụ ngắt timer0 để thay đổi giá trị yêu cầu
Lưu đồ thuật toán để thay đổi giá trị yêu cầu
Lưu đồ đọc giá trị từ adc
Lưu đồ phục vụ ngắt int_0 để thay đổi giá trị đặt
Quá trình điều chỉnh rơle tại một điểm
Lưu đồ kiểm tra trạng thái làm việc của hệ thống
CHƯƠNGIV
THựC NGHIệM trên hệ mô phỏng mice- 51
Từ việc phân tích các đặc điểm ở trên phần này ta đi vào thiết kế phần mềm và thử nghiệm trên hệ mô phỏng MICE- 51.
4.1- Giới thiệu về hệ phát triển MICE- 51.
	Đây là một hệ thống mô phỏng của hãng MANLEY dùng để thiết kế, phát triển phần cứng và phần mềm cho họ vi điều khiển MCS- 51.
	Bộ mô phỏng này sử dụng phần mềm MBUG để dịch và nạp chương trình của người thiết kế xuống bộ mô phỏng để kiểm tra và sửa lỗi.
a) Bộ mô phỏng MICE- 51.
Hệ phát triển MICE- 51 sử dụng nguồn cung cấp 5V một chiềuvới dòng tương ứng là 1ampe.
Hệ thống này sử dụng chip vi xử lí 8031 được gắn sẵn trên mạch.
Hệ phát triển sử dụng tần số dao động của thạch anh là 6MHz được gắn sẵn trên mạch, ngoài ra hệ thống có thể sử dụng tần số thạch anh do người sử dụng nếu có yêu cầu về tần số cao hơn hoặc thấp hơn.
Trên hệ thống này được cung cấp một bộ nhớ RAM 8K, giúp cho người sử dụng có thể dịch và nạp chương trình xuống để chạy thử nghiệm, kiểm tra và sửa lỗi, nó có thể coi là một ROM giả, đồng thời RAM này còn được nuôi bằng một pin có thể kéo dài việc lưu chương trình tới 1 năm. 
Tuy nhiên chúng ta cũng có thể mở rộng bộ nhớ RAM lên tới 48K bằng cách gắn thêm RAM vào những rãnh cắm có sẵn trên mạch.
Hệ thống này được nối với cổng COM máy tính thông qua cáp RS-232 
Hệ phát triển này có một bàn phím nhỏ ( key- pad) bao gồm 32 phím trong đó có cả phím Reset phần cứng, trong đó có 15 phím chức năng và 16 phím số:
Bảng dưới đây mô tả vị trí các phím:
MICE- 51 key boad layout
7
R7
8
DPTR
9
IE IP
A
A PSW
FUNC
FFIS
USER
FFNO
MODE
FILL
RESET
4
R4
5
R5
6
R6
B
B SP
DEC
COMP
HEX
MOV
HIST
OFST
MOV
1
R1
2
R2
3
R3
C
TN TC
BTOP
BP
BEND
BT
EXEC
SCAL
0
R0
F
SC SB
E
TIMER1
D
TIMER0
-
LAST
+
NEXT
TRAC
STEP
Bảng mô tả chức năng của từng phím
Key name
Key function
RESET
System hardware reset key
MON
Monitor key
LAST/ -
Last location address/ Minus key
NEXT/ +
Next location address/ Plus key
TRACE
Trace key
STEP
Sing- step key
SCAL
Scalar single step key
EXEC
Execute key
BP/ BTOP
Break point/ Block top key
BT/ BEND
Break times/ Block end key
COMP/ DEC
Block compare/ Decimal key
MOV/ HEX
Block move/ Hexadecimal key
OFST/ HIST
Calculate offset key/ Trace history
FILL/ MODE
Block fill/ Emulation mode key
FISS/ FUNC
Find matching byte key / user function key
FFNO/ USER
Find non- matching byte key/ user command key
	Tuy nhiên ở đây ta cần nói rõ hơn chức năng của một số phím:
+ Phím MON: nó có thể được coi như một phím khởi động nóng ( warm boot), khi phím này được ấn nó có nhiệm vụ buộc MICE- 51 thoát khỏi nhiệm vụ hiện tại mình đang thực hiện và quay trở về trạng thái ban đầu là hiển thị chữ P trên hiển thị 7 thanh. Đồng thời người lập trình có thể sử dụng phím này để thoát khỏi chương trình khi nó chạy vào một vòng lặp không kết thúc được sinh ra bởi lỗi của chương trình.
+ Phím STEP: Ngay bản thân tên gọi của phím cũng cho ta biết về chức năng của phím này, khi ấn phím này ta có thể thực hiện chương trình một lệnh tại thời điểm làm việc (ngay tại vị trí con trỏ nếu ta vừa nạp chương trình vào). Đồng thời khi ấn phím này lần đầu tiên sẽ đưa ra nội dung hiện tại của bộ đếm chương trình (PC) l à địa chỉ của lệnh hiện tại và byte đầu của mã lệnh, và khi ấn Ctrl+ F8 (trên bàn phím máy tính) thì nó sẽ thực hiện chương trình theo từng câu lệnh theo kiểu step- by -step.
+ Phím EXEC: phím này có chức năng thực hiện chương trình một cách liện tục từ đầu cho đến hết và dừng chương trình lại, tuy nhiên ở đây chúng ta cần lưu ý khi thực hiện phím này cần phải đặt điểm ngắt ( Break point) vì đề phòng khi thực hiện chương trình nó nhẩy vào một vòng lặp không kết thúc sẽ gây lỗi chương trình.
b) Phần mềm MBUG.
MBUG là 1 phần mềm ứng dụng nó điều khiển và giao tiếp với bộ mô phỏng MICE_51 qua cổng COM của máy tính .Phần mềm này tạo ra các cửa sổ phục vụ việc dịch, phát triển và sửa lỗi chương trình assembler hoặc ngôn ngữ bậc cao. 
Bảng danh sách chương trình và các lệnh tương ứng được hiển thị trên màn hình khi ấn F10:
Main Menu
Help(Alt-F):F3-file ^find ^Next
Os Shell:
DOS Screen
Programming:
Read Verify Type
Write Blank Lock
Load Program:
Load Program
Step MBUG:
Save Update Restore
Assemble:
Cross Assembler
Disassemble:
Go Clear Symbol
BP DW Output
Run and Debug:
Asml Step Compare
NewPC Excute Move
BP/BT Auto Fill
Display Seve Memory
Zoom Select Print
Goto Here Symbol
Quit(Alt-X):
Exit MBUG
 Màn hình được chia ra 6 phần ( cửa sổ): 
Dòng trạng thái hệ thống.
Cửa sổ làm việc.
Cửa sổ thanh ghi.
Cửa sổ Từ trạng thái chương trình.
Cửa sổ bộ nhớ.
Dòng dịch vụ lệnh và lỗi.
Ngoài ra còn có các cửa sổ chỉ thể hiện khi được yêu cầu như cửa sổ tên file dùng để lạp file,v.v.. 
Chương trình sửa lỗi MBUG: MBUG có thể thể hiện và biến đổi tất cả các thanh ghi.Có 2 loại đặt điểm ngắt (Có thể lên dến 255 lần); 2 lệnh dịch (single_step và auto_step) ;các khối dữ liệu có thể được so sánh ,di chuyển, làm đầy, tìm kiếm.v.v..
Chương trình dịch chéo MBUG : MBUG có thể dịch 1 chương trình nguồn chuyển sang 1 chương trình gồm các mã Intel_Hex cùng với các ký tự thông tin cho việc sửa lỗi .Chương trình này đựơc dùng để nạp chương trình hoạt động xuống MICE_51. 
4.2- Chương trình điều khiển
ở đây do yêu cầu bài toán là khống chế nhiệt độ của lò theo đường đặc tính cho trước, nên chương trình điều khiển là ứng với mỗi một thời điểm ta có giá trị yêu cầu khác nhau và sẽ khống chế nhiệt độ dao động quanh giá trị yêu cầu đó.
	Để đáp ứng các yêu cầu đã đặt ra, ở đây chúng tôi đã viết chương trình điều khiển bằng ngôn ngữ assembler được trình bày ở phụ lục I.
	Chương trình này đã được chạy thử nghiệm từng phần và toàn bộ trên hệ mô phỏng MICE- 51 và thấy nó đáp ứng được yêu cầu đặt ra.
Phụ lục I: Chương trình điều khiển lò nhiệt
;*************************************************************
;	KHAI BAO HANG SO VA CAC BIEN
;*************************************************************
start	equ	P1.0
prog	equ	P1.1
SL_DG	equ	P1.2
inc_temp	equ	P1.3
role	equ	P1.4
led_start	equ	P1.5
bao_dong	equ	P1.6
role_1	equ	P1.7
motor_1	equ	P0.0
port_ale	equ	0000h
port_start	equ	2000h
port_digit	equ	4000h
port_led	equ	6000h
port_elable	equ	8000h
;gia tri nap vao de tao thoi gian
byte_1	equ 0ffH
byte_2	equ	0ffh
byte_3	equ	3Ch
byte_4	equ	03h
;gia tri nhiet do dat vao ban dau
begin_L	equ	19h
begin_H	equ	00h
;gia tri nhiet do ket thuc
end_L	equ	32h
end_H	equ	00h
digit_d	equ	7Eh
digit_do	equ	63h
;port select digit
digit_1	equ	0FEh
digit_2	equ	0FDh
digit_3	equ	0FBh
digit_4	equ	0F7h
digit_5	equ	0EFh
chophep_L	equ 100
chophep_H	equ	00h
reload	equ	0Fh
set_time	equ	0Ah
tang_request	equ	100
giam_request	equ	100 
hund	equ	21h
tenone	equ	22h
AD_Buf	equ	2fh
;khai bao bien
;bien tao thoi gian chu trinh lam viec
scount_1	data	30h
scount_2	data	31h
scount_3	data	32h
scount_4	data	33h
;bien gia tri yeu cau o tung thoi diem
request_L	data	34h
request_H	data	35h
;bien gia tri dat
;dang BCD
temp_1	data	36h
temp_2	data	37h
temp_3	data	38h
temp_4	data	39h
;dang BIN
temp_L	data	3Ah
temp_H	data	3Bh
digit_s	data	3Ch
;bien chua du lieu dang BIN
data_L	data	3Dh
data_H	data	3Eh
;dang thap phan
data_1	data	40h
data_2	data	41h
data_3	data	42h
data_4	data	43h
;bien gia tri sai lech giu gia tri doc tu ADC va gia tri dat
test_L	data	44h
test_H	data	45h
;bien thoi gian giu
var_time	data	46h
;bien giu gia tri doc tu ADC
datas	data	47h
data_du	data	48h
;bien hien thi
hienthi_1	data	49h
hienthi_2	data	4Ah
hienthi_3	data	4Bh
hienthi_4	data	4Ch
hienthi_5	data	4Eh
;khai bao cac bit trang thai
test_carry	data	20h
end_flag	bit	test_carry.2
push_button	data	21h
button_1	bit	push_button.0
button_2	bit	push_button.1
button_3	bit	push_button.2
on_flag	bit	test_carry.0
inc_flag	bit	test_carry.1
;*************************************************************
org	0000h
ajmp	begin
org	0003h
ljmp	int_0
org	000bh
ljmp	int_timer0
org	100
begin:
	clr	EA
	setb	IT0
	mov	TMOD,#82h
	mov	TH0,#reload
	mov	temp_1,#7h
	mov	temp_2,#8h
	mov	temp_3,#9h
	mov	temp_4,#1h
	mov	var_time,#00h
	mov	push_button,#00h
	mov	scount_1,#byte_1
	mov	scount_2,#byte_2
	mov	scount_3,#byte_3
	mov	scount_4,#byte_4
	mov	request_L,#begin_L
	mov	request_H,#begin_H
	mov	test_carry,#00h
	mov	psw,#0h
repeat:
	jnb	start,run_program
	ajmp	repeat
run_program:
	mov	sp,#60h
	clr	led_start
 	setb	TR0
 	mov	IE,#83h
	lcall	Motor
	lcall	Danh_lua
	lcall	Open_Valve
	lcall	change_setpoint 
	lcall	READ_ADC
	lcall	xu_ly
	lcall	changeBIN_BCD
	lcall	hien_thi
	lcall	compear_contror
	lcall	test_trangthai
	ajmp	run_program
Motor:
	Setb	motor_1
	Lcall	delay
	Clr	motor_1
	ret
Danh_Lua:
	mov	r1,#64h
	setb	role_1
	djnz	r1, Danh_Lua
	clr	role_1
	ret
Open_Valve:
	mov	r2,# 32
	setb	role
	djnz	r2, Open
	ret
;*************************************************************
 ;	CHUONG TRINH NGAT TIMER 0 TAO THOI GIAN 
;*************************************************************
int_timer0:
	clr	tf0	
	push	psw
	push	acc
	push	0
	push	1
	push	2
	push	3
	push	dpl
	push	dph
	mov	r0,scount_1
	dec	r0
	mov	scount_1,r0
	cjne	r0,#00h,out_int
	mov	scount_1,#byte_1
	mov	r1,scount_2
	dec	r1
	mov	scount_2,r1
	cjne	r1,#00h,out_int
	mov	scount_2,#byte_2
	mov	r2,scount_3	
	dec	r2
	mov	scount_3,r2
	cjne	r2,#00h,out_int
	mov	scount_3,#byte_3
	mov	r3,scount_4
	dec	r3
	mov	scount_4,r3
	cjne	r3,#00h,out_int
	mov	scount_4,#byte_4
	lcall	inc_request
out_int:
	pop	dph
	pop	dpl
	pop	3
	pop	2
	pop	1
	pop	0
	pop	acc
	pop	psw
	reti
;*************************************************************
;	CHUONG TRINH THAY DOI GIA TRI YEU CAU
;*************************************************************inc_request:
	clr	c
	mov	a,request_H
	cjne	a,temp_H,change
	mov	a,request_L
	cjne	a,temp_L,change
loop:
	clr	inc_flag
	mov	r0,var_time
	cjne	r0,#10,inc_time
	clr	c
	mov	a,request_H
	cjne	a,end_H,dec_request
	mov	a,request_L
	cjne	a,end_L,dec_request
ket_thuc:
	mov	request_L,#end_L
	mov	request_H,#end_H
	setb	end_flag
	ret
change:
	jnc	loop
	clr	c
	jnb	inc_flag,dec_request
	mov	a,request_L
	add	a,tang_request
	mov	request_L,a
	mov	a,request_H
	addc	a,#00h
	mov	request_H,a
	ret
inc_time:
	inc	r0
	mov	var_time,r0
	mov	a,temp_L
	mov	request_L,a
	mov	a,request_H
	mov	request_H,a
	ret	
dec_request:
	jc	ket_thuc
	mov	a,request_L
	subb	a,giam_request
	mov	request_L,a
	mov	a,request_H
	subb	a,00h
	mov	request_H,a
	ret
;*************************************************************
 ;CHUONG TRINH PHUC VU NGAT 1 DE TANG GIAM GIA TRI DAT
;*************************************************************
int_0:
	push	psw
	push	acc
	push	0
	push	1
	push	2
	push	3
	push	dpl
	push	dph
	push	hienthi_1
	push	hienthi_2
	push	hienthi_3
	push	hienthi_4
	push	hienthi_5	
mov	digit_s,#01h
in_key:
	jb	on_flag,select
	jnb	prog,program
	ajmp	thoat
program:
	setb	on_flag
	ajmp	loops
select:
	jnb	SL_DG,select_DG
	clr	button_1
	jnb	inc_temp,tang_temp
	clr button_2
	jnb	prog,thoat1
select_DG:
	jb	SL_DG,loops
	jb button_1,loops
	setb button_1	
	mov	r0,digit_s
	inc	r0
	cjne	r0,#4,tiep
	mov	r0,#01h
tiep:
	mov	digit_s,r0
	ajmp	loops
tang_temp:
 	jb	inc_temp,loops
 	jb	button_2,loops
 	setb	button_2
	mov	r0,digit_s
	cjne	r0,#01h,inc_2
	mov	a,temp_1
	inc	a
	cjne	a,#0Ah,tiep_1
	mov	a,#00h
tiep_1:
	mov	temp_1,a
	ajmp	loop
inc_2:
	cjne	r0,#02h,inc_3
	mov	a,temp_2
	inc	a
	cjne	a,#0Ah,tiep_2
	mov a,#00h
tiep_2:
	mov	temp_2,a
	ajmp	loop
inc_3:
	cjne	r0,#03,inc_4
	mov	a,temp_3
	inc	a
	cjne	a,#0Ah,tiep_3
	mov	a,#00h
tiep_3:
	mov	temp_3,a
	ajmp	loop	
inc_4:
	mov	a,temp_4
	inc	a
	cjne	a,#0Ah,tiep_4
	mov	a,#00h
tiep_4:
	mov	temp_4,a
loops:
	mov	hienthi_5,#digit_d
	mov	a,temp_4
	mov	hienthi_4,a
	mov	a,temp_3
	mov	hienthi_3,a
	mov	a,temp_2
	mov	hienthi_2,a
	mov	a,temp_1
	mov	hienthi_1,a
	lcall	hien_thi
	ajmp	in_key
thoat1:
	jb	prog,loops
	clr	on_flag
thoat:
	mov	digit_s,#00h
 	pop	hienthi_5
	pop	hienthi_4
	pop	hienthi_3
	pop	hienthi_2
	pop	hienthi_1
	pop	dph
	pop	dpl
	pop	3
	pop	2
	pop	1
	pop	0	
	pop	acc
	pop	psw
	reti
;*************************************************************
;	CHUONG TRINH CON DOC SO LIEU TU ADC
;*************************************************************
READ_ADC:
	mov	datas,#00h
	mov	data_du,#00h
	mov	r1,#30
loop_read:
	mov	a,#00h
	mov dptr,#port_elable
	movx	@dptr,a
	mov	dptr, #port_ale
	movx	@dptr,a
	mov	dptr,#port_start
	mov	r2,#100
 loop1:
	djnz	r2,loop1
	mov	dptr,#port_elable
	movx	a,@dptr
	mov	AD_Buf, a	
mov	b,#1eh
	div	ab
	add	a,datas
	mov	datas,a
	mov	a,b
	add	a,data_du
	mov	data_du,a
	djnz	r1,loop_read
	mov	a,data_du
	mov	b,#30
	div	ab
	add	a,datas
	mov	datas,a
	ret
;*************************************************************
; chuong trinh con chuyen gia tri doc tu adc bin2bcd
;*************************************************************
BIN2BCD: 	
	mov	b, #100 
	div	ab 
	mov	hund, a
	mov	a,#10 
	xch	a,b 
	div	ab 
	swap	a 
	add	a,b
	mov	tenone, a
	ret
;*************************************************************
; CHUONG TRINH CON XU LY	
;*************************************************************
 XU_LY:
	mov	a,datas
	mov	b,#5
	mul	ab
 	mov	data_H,b
	mov	data_L,a
	ret
;*************************************************************
 ;	CHUONG TRINH CON DOI SO NHI PHAN SANG SO BCD
;************************************************************* changeBIN_BCD:
clr	c
mov	data_1,#00h
mov	data_2,#00h
mov	data_3,#00h
mov	data_4,#00h
mov	data_H,#27h
mov	data_L,#0fh
subb_1000:
mov	a,data_H
cjne	a,#03h,testcarry_1000
mov	a,data_L
cjne	a,#0E8h,testcarry_1000
ajmp	tru_1000
testcarry_1000:
jc	subb_100
tru_1000:	
mov	a,data_L
mov	b,#0E8h
subb	a,b
mov	data_L,a
mov	a,data_H
mov	b,#03h
subb	a,b
mov	data_H,a
mov	a,data_4
inc	a
mov	data_4,a
clr	c
ajmp	subb_1000
subb_100:
mov	a,data_H
cjne	a,#00h,tru_100
ajmp	subb_tiep
tru_100:
clr	c
mov	a,data_L
mov	b,#64h
subb	a,b
mov	data_L,a
mov	a,data_H
mov	b,#00h
subb	a,b
mov	data_H,a
mov	a,data_3
inc	a
mov	data_3,a
ajmp	subb_100
subb_tiep:
clr	c
mov	a,data_L
add	a,#9Ch
jnc	subb_10
clr	c
mov	a,data_L
mov	b,#64h
subb	a,b
mov	data_L,a
mov	a,data_3
inc	a
mov	data_3,a
ajmp	subb_tiep
subb_10:
mov	a,data_L
add	a,#0F6h
jnc	subb_0
clr	c
mov	a,data_L
mov	b,#10
subb	a,b
mov	data_L,a
mov	a,data_2
inc	a
mov	data_2,a
clr	c
ajmp	subb_10
subb_0:
mov	a,data_L
mov	data_1,a
mov	hienthi_1,a	
mov	a,data_2
mov	hienthi_2,a	
mov	a,data_3
mov	hienthi_3,a	
mov	a,data_4
mov	hienthi_4,a
mov	hienthi_5,#digit_do
ret
;*************************************************************;CCHUONG TRINH CON CHUYEN DOI GIA TRI DAT TU BCD-BIN	
;*************************************************************change_setpoint:
	mov	a,temp_4
	mov	b,#10
	mul	ab
	add	a,temp_3
	mov	b,#10
	mul	ab
	mov	temp_H,b
	add	a,temp_2
	mov	temp_L,a
	mov	a,#00h
	addc	a,temp_H
	mov	temp_H,a
	mov	a,temp_L
	mov	b,#10
	mul	ab
	mov	temp_L,a
	mov	r0,b
	mov	a,temp_H
	mov	b,#10
	mul	ab
	add	a,r0
	mov	temp_H,a
	mov	a,temp_L
	clr	c
	add	a,temp_1
	mov	temp_L,a
	mov	a,#00h
	addc	a,temp_H
	mov	temp_H,a
	ret
;*************************************************************
;	CHUONG TRINH CON HIEN THI GIA TRI DAT VA GIA TRI DOC TU ADC
;*************************************************************
hien_thi:
	mov	r0,#02h
	mov	r1,#04h
loop_hthi:
	mov	a,#0FFh
	mov	dptr,#port_digit
	movx	@dptr,a
	mov	a,#digit_1
	mov	dptr,#port_led
	movx	@dptr,a
	mov	a,hienthi_1
	mov	r2,digit_s
	cjne	r2,#00h,s_lect
	ajmp	tieps
s_lect:
	cjne	r2,#01h,tiep1
	djnz	r0,loop2
	mov	r0,#2
tiep1:
	anl	a,#0Fh
	lcall	display
tieps:
	mov	dptr,#port_digit
	movx	@dptr,a
	lcall	delay
loop2:
	mov	r2,digit_s
	cjne	r2,#02,tiep2
	djnz	r0,loop3
	mov	r0,#2
tiep2:
	mov	a,#0FFh
	mov	dptr,#port_digit
	movx	@dptr,a
	mov	a,#digit_2
	mov	dptr,#port_led
	movx	@dptr,a
	mov	a,hienthi_2
	anl	a,#0fh
	lcall	display
	mov	dptr,#port_digit
	movx	@dptr,a
	lcall	delay
loop3:
	mov	r2,digit_s
	cjne	r2,#03h,tiep3
	djnz	r0,loop4
	mov	r0,#2
tiep3:
	mov	a,#0FFh
	mov	dptr,#port_digit
	movx	@dptr,a
	mov	a,#digit_3
	mov	dptr,#port_led
	movx	@dptr,a
	mov	a,hienthi_3
	anl	a,#0Fh
	lcall	display
	mov	dptr,#port_digit
	movx	@dptr,a
	lcall	delay
loop4:
	mov	r2,digit_s
	cjne	r2,#04h,tiep4
	djnz	r0,loop5
	mov	r0,#2
tiep4:
	mov	a,#0FFh
	mov	dptr,#port_digit
	movx	@dptr,a
	mov	a,#digit_4
	mov	dptr,#port_led
	movx	@dptr,a
	mov	a,hienthi_4
	anl	a,#0Fh
	lcall	display
	mov	dptr,#port_digit
	movx	@dptr,a
	lcall	delay
loop5:
	mov	a,#0FFh
	mov	dptr,#port_digit
	movx	@dptr,a
	mov	a,#digit_5
	mov	dptr,#port_led
	movx	@dptr,a
	mov	a,hienthi_5
	mov	r2,digit_s
	cjne	r2,#00h,tiep5
	lcall	display
tiep5:
	mov	dptr,#port_digit
	movx	@dptr,a
	lcall	delay
	djnz	r1,loop_thi
	ret
loop_thi:
	ajmp	loop_hthi
;*************************************************************
;chuong trinh con tao tre
;*************************************************************
delay:
	push	0
	push	1
	push	2
 	mov	r0,#5h
wait1:	mov	r1,#0ffh
	djnz r1,wait1 
wait2:	mov	r2,#05h
	djnz	r2, wait2
wait3:	djnz	r0,wait3
	pop	2
	pop	1
	pop	0
	ret
;*************************************************************
;CHUONG TRINH DOI TU SO BCD RA DANG 7 THANH DE HIEN THI
;*************************************************************display:
	inc	a
	movc	a,@a+pc
	ret
	db	0C0h	;0
	db	0F9h	;1
	db	0A4h	;2
	db	0B0h	;3
	db	99h	;4
	db	92h	;5
	db	82h	;6
	db	0F8h	;7
	db	80h	;8
	db	90h	;9
	db	88h	;A
	db	83h	;B
	db	0C6h	;C
	db	0A1h	;D
	db	86h	;E
	db	8Eh	;F
;*************************************************************;CCHUONG TRINH DIEU KHIEN ROLE
;*************************************************************compear_contror:
	clr	c
	mov	a,data_H
	cjne	a,request_H,not_eq	
	mov	a,data_L
	mov	a,data_L
	cjne	a,request_L,not_eq
	ret
not_eq:
	jc	less
	clr	role
	ret
less:
	setb	role
	ret
;*************************************************************
;CHUONG TRINH KIEM TRA TRANG THAI LAM VIEC
;*************************************************************
test_trangthai:
	jb	role,test_low
	mov	a,data_L
	clr	c
	subb	a,request_L
	mov	test_L,a
	mov	a,data_H
	subb	a,request_H
	mov	test_H,a
	ajmp	test
test_low:
	mov	a,request_L
	clr	c
	subb	a,data_L
	mov	test_L,a
	mov	a,request_H
	subb	a,data_H
	mov	test_H,a
test:
	clr	c
	mov	a,test_H
	cjne	a,chophep_H,Conti_test
	mov	a,test_L
	cjne	a,chophep_L,Conti_test
	setb	bao_dong
	ret
Conti_test:
	jc	Done
	setb	bao_dong
	ret
Done:
	clr	c
	ret
END
Phụ Lục II tập lệnh của MCS- 51
Tập lệnh của MCS-51 có thể được chia thành các nhóm sau đây:
*	Các lệnh số học: Nó bao gồm các lệnh cộng, trừ, nhân, chia và tăng giảm.
* Các lệnh logic: Nó bao gồm các lệnh AND, OR, XOR, xoá, bù, quay, Swap.
* Các lệnh chuyển dữ liệu. 
* Các lệnh sử lí bít
* Các lệnh điều khiển luồng chương trình:Các lệnh nhẩy có điều kiện , không có điều kiện , các lệnh gọi và trả về chương trình con.
Tất cả các lệnh này có thể xem trong các loại sách viết về MCS- 51 như: 
+	Vi xử lý trong đo lường và điều khiển của tác giả Ngô Diên Tập
 + Programming and Interfacing the 8051 Microcontroller- Thư viện trường Đại Học Bách Khoa Hà nội.
 + MCS- 51 Family of Microcontroller Architechture Overview- Intel.
	ở đây chỉ xin giới thiệu một số lệnh thường gặp nhất của bộ vi xủ lí này .Để rõ hơn xem thêm phần chế độ địa chỉ ở mục vi sử lí 8031 _chương3:
Nhóm lệnh dùng để chuyển số liệu (Transfer data):
 + 	MOV d, s	;dùng để trao đổi nội dung giữa hai ô nhớ dữ liệu trong 
;d, s là các toán hạng của câu lệnh đó ( d: desination- ;đích, s: souce- nguồn)
	Trong đó:
 d có thể là Ri, @Ri, DPTR, Accumulator.
 s có thể là giá trị trực tiếp(direct), địa chỉ trực tiếp, Accumulator, Ri, @Ri, tuy nhiên d, s cũng có thể là một bít.
+	MOVC d, s	;dùng để chuyển đoạn mã trong chương trình
	Trong đó:
	d chỉ có thể là Accumulator
s có thể là @ A+ PC ( 8bít), @ A+DPTR ( 16 bít).
+	MOVX d,s 	;dùng để trao đổi nội dung với các bộ nhớ dữ liệu ngoài.
	Trong đó: d, s đều có thể là ACC, Ri, @ DPTR.
+ 	PUSH op	-Thực hiện cất nội dung thanh ghi, toán hạng vào ngăn xếp.
+	POP	op	-Thực hiện việc phục hồi nội dung toán hạng op ( op- operand có thể là dữ liệu 8 bít trực tiếp).
+	XCH	d, s	- Thực hiện việc trao đổi nội dung giữa d và s.
 	Trong đó:
 	d chỉ có thể là ACC
s có thể là địa chỉ trực tiếp, Ri, @Ri.
Nhóm lệnh thực hiện các phép toán học :
+ADD A,byte 	;Phép cộng ,kết quả cất vào A
Trong đó byte có thể là hằng số(#3h) , địa chỉ trực tiếp,Ri hoặc @Ri
+ADDC A,byte 	;Phép cộng có nhớ(giá trị cờ C được thêm vào kết quả)
	 	Các toán hạng sử dụng như lệnh trên
+SUBB A,byte	;Phép trừ có nhớ(kết quả trừ đi giá trị cờ C),kết quả cất vào A
	;Các toán hạng sử dụng như trên
 +INC byte	;Tăng giá trị byte thêm 1
	;trong đó byte có thể là A,địa chỉ trực tiếp,Ri,@Ri
+DEC byte	;Lệnh giảm
	;Toán hạng như trên
+MUL AB	;Nhân A với B kết quả byte thấp cất vào A ,byte cao cất vào B
+DIV AB	;Chia A cho B thương cất vào A ,số dư cất vào B
Cáclệnh logic	
+ANL d,s	;d:=d AND s
	;d có thể là:A,địa chỉ trực tiếp(direct)
	s có thể là: direct,Ri,@Ri,#data
+ORL d,s	;d:=d OR s
	;toán hạng sử dụng như trên
+XRL d,s	;d:= d EXOR s
	;Toán hạng sử dụng như trên
+CLR A	;xoá thanh ghi A
+CPL A	;Lấy phần bù của A
+RL A	;Dịch sang trái 1 bit
+RLC A	;Dịch trái qua cờ C
+RR A	;Dịch phải
+RRC A	;Dịch phải qua cờ C
+SWAP A	;Chuyển đổi 2 nửa của thanh A
Các lệnh sử lí bit:
+SETB bit	;bit:=1
	;Trong đó bit có thể là: direct bit hoặc cờ C
+Các lệnh CLR, CPL ,MOV, ANL, ORL sử dụng với các toán hạng như lệnh trên
Các lệnh rẽ nhánh(lệnh nhảy):
-Các lệnh nhảy không điều kiện:
+SJMP 	;Lệnh nhảy trực tiếp tới “rel add” ;”rel add” ở trong phạm vi 128 byte về phía trước tới 217 byte về phía sau vi trí (con trỏ PC)hiện tại.
+AJMP 	;Nhảy tới địa chỉ 11 bit,địa chỉ này ở trong phạm vi 2kilobyte so với vị trí (PC) hiện tại.
+LJMP 	;Tương tự lệnh trên chỉ khác phạm vi là 64 kilobyte.
+JMP @A+DPTR	;Địa chỉ của lệnh tiếp theo là tổng của A và con trỏ dữ liệu DPTR.
-Các lệnh nhảy có điều kiện:
+JZ 	;Nhảy nếu A chứa 0.
+JNZ 	;Nhảy nếu A khác 0.
+JC 	;Nhảy nếu C = 1.
+JNC 	;Nhảy nếu C khác 1.
+JB , 	;Tương tự lệnh trên chỉ khác thay C là địa chỉ bit.
JNB ,	;Nhảy nếu địa chỉ bit là 0.
+CJNE byte1,byte2,	;Nhảy nếu nội dung của byte1 và byte2 khác nhau.
	byte1 có thể là: A,Ri,@Ri
	byte2 có thể là: direct,#data.
+DJNZ byte, 	;Giảm giá trị của byte,giá trị sau khi giảm khác 0 thì nhảy.
	byte có thể là: Ri, direct.
+ACALL và LCALL tương tự với lệnh AJMP và LJMP chỉ khác trước khi nhảy PC được cất vào STACK.
+RET	;Trở về từ chương trình con,đỉnh stack được nạp vào PC.
+RETI	;Trở về từ ngắt,đỉnh stack được nạp vào PC và reset phần cứng ngắt	
Lệnh chờ một nhịp:
+NOP 	;không làm gì cả.
Kết luận:
	Trong thời gian làm đồ án tốt nghiệp chúng em được sự hướng dẫn tận tình của thầy giáo T.S Nguyễn trọng Thuấn, T.S Lê duy thạc, các thầy cô trong bộ môn, cùng tập thể các cán bộ, kỹ sư tại công ty thuận quốc, chúng em đã hoàn thành bản đồ án “Thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng trong dây chuyền gạch ốp lát” với công việc như sau:
Khảo sát các công nghệ điển hình trong dây chuyền sản xuất gạch ốp lát Hà Nội.
Trên cơ sở đó đề xuất một phương án thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng của dây chuyền sản xuất.
ứng dụng Vi xử lí với bộ vi xử lý 80C31 và kĩ thuật số để thiết kế hệ thống điều khiển nhiệt độ lò sấy đứng.
	Phần thực nghiệm được chạy thử trên bộ mô phỏng Emulator- MICE 51, chương trình được viết bằng ngôn ngữ assembler.
	Do thời gian có hạn, và còn thiếu kinh nghiệm thực tế nên trong quá trình thiết kế không tránh khỏi những sai sót, vì vậy em rất mong sự đóng góp giúp đỡ của các thầy cô giáo và các bạn để bản đồ án này được ứng dụng vào thực tế.
	Một lần nữa em xin chân thành cảm ơn các thầy cô đã tận tình giúp đỡ bọn em hoàn thành bản đồ án này.
tài liệu tham khảo:
Programming and Interfacing the 8051 Microcontroller- Thư viện trường đại học bách khoa Hà Nội.
Tài liệu về lò sấy đứng của nhà máy gạch ốp lát Hà nội.
Vi xử lí trong đo lường và điều khiển- Ngô diên Tập.
Đo lường và điều khiển bằng máy tính- Ngô diên Tập.
Giáo trình lò Silicat- trường đại học bách khoa Hà Nội.
Kỹ thuật vi xử lí- Trường đại học bách khoa hà nội- Nhiều tác giả.
Kỹ thuật vi xử lý- Văn thế minh.
Microcomputer Components SAB 80515/80C515- Siemens
            Các file đính kèm theo tài liệu này:
DAN082.doc