Chương 1: Thuyết minh Thiết kế và vận hành mô hình
máy đo và cắt chiều dài. 1
I. Giới thiệu chung 1
II. Nguyên lí làm việc 2
III. Các Lưu đồ điều khiển hệ thống 8
Chương 2: Thiết kế phần cứng 13
1. Mạch Vi Xử Lí 13
2. Khối tạo địa chỉ 15
3. Khối giao tiếp Vi xử lý và RAM(62256) 18
4. Khối đếm xung 19
5. Khối hiển thị 20
6. Khối bàn phím 21
7. Khối Mạch động lực 22
8. Mạch đóng ngắt dao 23
Chương 3: Điều Chỉnh Vị Trí Động Cơ DC 25
I. Khái niệm 25
II. Điều khiển vị trí dùng các vòng phản hồi 25
III. Thuật toán điều khiển PID 26
IV. Điều khiển vị trí dùng logic mờ 39
Chương 4:
A. Động Cơ DC 41
I. Đặc tính cơ của động cơ DC kích từ
độc lập hoặc kích từ kích thích song song 41
II. Đặc tính cơ của động cơ kích từ nối tiếp 49
III. Các phương pháp điều chỉnh tốc
độ động cơ điện một chiều 51
B. Bộ giải mã vị trí 54
I. Encoder số 54
Chương 5: Phụ lục 59
A. Giới Thiệu Vi Xử Lý AT89C52 59
B. Giới Thiệu Các IC Sử Dụng Trong Đề Tài 74
C. Chương trình điều khiển 80
Chương1:
Thuyết minh
Thiết kế và vận hành mô hình
máy đo và cắt chiều dài.
I.Giới thiệu chung:
1.1 .Sơ đồ nguyên lý mô hình máy đo và cắt chiều dài:
1.2. Bộ điều khiển mô hình máy cắt dùng để điều khiển 1 động cơ điện 1 chiều cùng với con lăn kéo chiều dài đối tượng cần cắt được cuộn trong Robbin , động cơ chạy với tốc độ tùy thuộc chiều dài, thời gian cài đặt. Điều khiển 1 dao cắt để cắt đối tượng khi động cơ đã kéo đúng chiều dài. Trong quá trình mô hình vận hành tín hiệu phản hồi được lấy về từ Encoder đưa vào bộ điều khiển xử lý, xuất tín hiệu điều khiển động cơ và dao cắt.
1.3. Bộ điều khiển sử dụng điện áp +5V lấy từ điện áp 220v(50Hz) qua bộ chỉnh lưu áp .
1.4. Động cơ điện 1 chiều để kéo đối tượng sử dụng áp+ 24V, kích tư + 24V, vì động cơ củ nên thông số không đầy đủ. Một dao cắt được làm từ Role sử dụng áp +110V.
1.5.Ngoài ra trong mô hình còn sử dụng hệ thống hãm bằng cơ khí gắn liền với Robbin.
II.Nguyên lí làm việc:
1.1 Nguyên lí làm việc của thiết bị điều khiển mô hình máy cắt mô tả trong hình dưới đây:
Hình 2: Sơ đồ nguyên lý bộ điều khiển máy đo và cắt.
Trong đó:
Udk1: Điện áp điều khiển mạch động lực động cơ, có dạng áp xung với chu kì T cố định, T1 thay đổi tùy NFP
Udk2 : Điện áp điều khiển Relay đóng ngắt dao.
NFP : Sốxung phản hồi về từ Encoder.
NSP : Số xung đặt tương ứng với chiều dài cần cắt.
Umax : Điện áp cung cấp cho mạch động lực điều khiển động cơ.
Vi trí đặt : Chiều dài, thời gian cần đo và cắt đối tượng.
Khối hiển thị, bàn phím: khối hiển thị hiển thị chiều dài, số lần cắt. Khối bàn phím nhập chiều dài, thời gian thực hiện 1 lần cắt.
Khối điều khiển: Nhận tín hiệu từ Bàn phím, số xung NFP phản hồi từ Encoder. Đồng thời xuất tín hiệu điều khiển Led 7 đoạn, tín hiệu Udk1, Udk2 điều khiển động cơ, dao cắt.
1.2.Điều khiển động cơ: Nguyên lí điều khiển theo sai lệch của bộ điều khiển được thực hiện trong khối điều khiển. Các tín hiệu được tổng hợp bằng phương trình sau:
(1)
Trong đó:
Kp: hệ số khuyếch đại tỉ lệ theo phương pháp điều khiển vòng kín PID mà trong trường hợp này ta chỉ sử dụng khâu P. Hệ số KP phụ thuộc vào đặc tính động cơ.
EN : Sai số giữa tín hiệu đặt và tín hiệu phản hồi.
EN = NSP – NFP. (2)
DUTY_CYCLE : Ta gọi là chu kì nhiệm vụ. Nó được định nghĩa như sau:
(3)
Tín hiệu điều khiển Udk1 được tạo ra nhờ bộ điều khiển số. Nó có dạng xung với tần số T cố định. Biên độ thay đổi giữa 2 mức 0V, 5V. Khi DUTY_CYCLE thay đổi thì áp ra mạch động lực Udc cung cấp cho động cơ thay đổi khi đó tốc độ động cơ thay đổi theo.
Dựa vào biểu thức (1), Kp không đổi , DUTY_CYCLE thay đổi theo EN :
EN = 0, DUTY_CYCLE = 0 , Udc =0 , động cơ dừng.
EN=NSP, DUTY_CYCLE = 100 , Udc= Umax , động cơ hoạt động ở chế độ định mức.
Ta có: (4)
97 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2687 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Điều khiển đo và cắt chiều dài bằng vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
iều chỉnh. Phương pháp này dùng bộ biến đổi phức tạp như cần có thiết bị nguồn như máy phát điện một chiều kích từ độc lập, các bộ điều khiển dùng phương pháp chỉnh lưu …
Điều chỉnh tốc độ bằng phương điều rộng xung :
Điều áp bao gồm những xung có độ rộng thay đổi được và biên độ là hằng số. Yêu cầu làm mạch có khả năng đóng ngắt tần số cao, có thể đóng ngắt cho từng ngắt khác nhau. Các loại mạch này thích hợp cho mạch động lực dùng Transistor công suất, việc ngắt nhiều lần, nếu ta thay đổi được sóng hài bậc cao.
Trong các phương pháp điều chỉnh tốc độ động cơ điện một chiều, ta nhận thấy để điều chỉnh tốc độ cần có dãi điều chỉnh rộng, đòi hỏi chất lượng điều chỉnh tốc độ cao. Do đó chọn phương pháp điều chỉnh tốc độ động cơ bằng phương pháp điều rộng xung là thay đổi được tON và fxung = 1/T = const.
B. Bộ giải mã vị trí
I. Encoder số :
Mỗi một Encoder số bao gồm một đĩa tròn với các vạch kẻ mẫu ở trên. Các vạch mẫu này được đọc bởi các đầu cảm biến. Đĩa này thường đi kèm với trục quay của nó, trục này làm quay những mẫu phát ra tín hiệu cho mỗi vị trí nhận được. Cách ghi các mã trên đĩa phụ thuộc vào các mẫu trên nó.
Phân loại theo cấu tạo vật lý thì hiện nay Encoder thường có 3 loại : Encoder tiếp xúc, Encoder từ trừơng và Encoder quay.
Encoder tiếp xúc :
- Điểm tiếp xúc thực tế của loại Encoder này là giữa đĩa và đầu đọc thông qua chổi than. Loại này có nhược điểm là tạo ra ma sát, hao mòn, bụi bẩn do mọt than, xuất hiện điện trở tiếp xúc, gây ra rung động… làm giảm độ chính xác và tuổi thọ.
- Độ phân giải của Encoder phụ thuộc vào đường rãnh và độ chính xác nhỏ nhất của một rãnh có thể có được trên đĩa, độ phân giải có thể đạt 10 rãnh trên đĩa, Độ phân giải có thể tăng lên bằng cách ghép nhiều tầng đĩa hoặc dùng bộ đếm lên/xuống cho trạng thái cao nhất của bit.
Encoder từ trường :
Đối với Encoder từ trường thì đĩa quay của nó được tráng một lớp vật liệu từ, trong đó những vạch mẫu không được phủ. Các vạch này được đọc bằng một đầu đọc nam châm. Rõ ràng với ưu điểm này thì Encoder từ trường có tuổi thọ cao hơn Encoder tiếp xúc.
Encoder quang :
Encoder quang là loại thông dụng nhất nhờ có độ chính xác cao và dùng ánh sáng của bàn dẫn. Encoder có 3 bộ phận : đĩa Segment có những phần trong suốt cho ánh sáng đi qua và những phần không cho ánh sáng đi qua, một nguồn sáng cùng với một hệ thống hỗ trợ chiếu sáng, bộ phân cảm biến ánh sáng ( Photocell ).
Hầu hết Encoder được sản xuất với độ chính xác cao, một Segment có bề dày xấp xỉ 12 micros. Độ phân giải của Encoder quang thông thường có thể đạt đến 14 bits.
Hiện nay trên thị trường có 2 loại Encoder số :
Bộ giải mã tuyệt đối ( Absolute Encoder ) :
Là loại thiết bị mã hóa mà các tín hiệu mã đầu ra song song để chỉ thị góc quay tuyệt đối của trục. Loại này không cần bộ đếm để điếm xung mà vẫn có thể biết góc quay của trục thiết bị mã hóa.
Cũng giống như nhiều loại Encoder khác, bộ giải mã tuyệt đối gồm một đĩa tròn, trên đó có những khoảng trong suốt và đục. Anh sáng có thể xuyên qua những phần trong suốt đến bộ cảm biến quang ( Photo transistor ), khi đĩa quay thì bộ cảm biế bật lên 1 và phần ánh sáng bị chặn bởi những phần đục làm cảm biến quang xuống 0. Như vậy cảm biến quang sẽ tạo thành những xung tuần tự:
Khi thiết bị mã hóa này được sử dụng với cùng một thiết bị khác, thì vị trí 0 của trục xem như góc tọa độ. Khi trục của thiết bị mã hóa quay về tọa độ góc này thì góc quay có thể được hiển thị trên bộ chỉ thị của máy. Tín hiệu đầu ra của thiết bị mã hóa không bị ảnh hưởng bởi nhiễu của thiết bị đóng, ngắt và không yêu cầu điều chỉnh góc quay chính xác. Hơn nữa, thậm chí nếu tín hiệu mã hóa đầu ra không thể đọc vì trục quay quá nhanh, thì góc quay chính xác được ghi khi tốc độ quay giảm xuống, hoặc ngay khi nguồn cho thiết bị mã hóa bị ngắt. Thêm nữa, mã hóa sẽ không hoạt động do sự rung động của các thiết bịsử dụng nó.
Loại thiết bị mã hóa tuyệt đối, có độ phân giải cao hơn và cho ra các giá trị thay đổi trong phạm vi rộng hơn so với thiết bị mã hóa tăng dần ( Incremental Encoder ).
Thiết bị mã hóa tăng dần ( Incremental Encoder )
Là loại thiết bị mã hóa có dãy xung ra phù hợp với góc của trục quay. Thiết bị mã hóa này không có xung ra khi trục không làm việc. Do đó cần có một bộ đếm để xung ra.
Thiết bị mã hóa cho biết vị trí của trục quay bằng số xung được đếm. Dạng thiết bị mã hóa này chỉ có 1 hay 2 kênh ngõ ra :
+Loại 1 chiều ( chỉ có đầu kênh A ) là loại chỉ sinh ra xung khi trục quay.
+Loại 2 chiều ( có đầu ra kênh A và B ) cũng có thể cho biết chiều của trục quay, nghĩa là thuận chiều kim đồng hồ. Ngoài ra còn có đầu dây trung tính ( xung Z ) cho mỗi vòng quay, có nghĩa là nếu quay được 1 vòng thì xung Z lên 1.
- khi đĩa quay theo chiều kim đồng hồ
-Khi đĩa quay theo chiều kim đồng hồ thì xung track 1 (B) trễ pha hơn xung track 2 (A).
-Ngược lại, khi đĩa quay ngược chiều kim đồng hồ thì xung track 1 (B) nhanh pha hơn xung track 2 (A).
*Quay thuận chiều kim đồng hồ :
Đầu A vượt quá B ( độ lệch pha ) = 90 +- 45 (T/4 +- T/8)
*Quay ngược chiều kim đồng hồ :
Một số thuật ngữ cơ bản để xác định Encoder:
*Điện áp nguồn : Điện áp đặt trên 2 đầu Encoder.
*Dòng tiêu thụ : Dòng điện lớn nhất có thể chạy qua Encoder khi đặt điện áp nguồn.
*Tần số đáp ứng cực đại :
-Là tần số lớn nhất mà thiết bị mã hóa quay có thể đáp ứng. Với dạng mã hóa tăng dần, tần số này tương ứng với xung ra trong 1 giây. Vì vậy thiết bị phải thỏa mãn quan hệ sau :
( Số vòng quay + 60 vòng/phút ) x độ phân giải <= tần số đáp ứng lớn nhất
*Momen quán tính :
-Là moment của quán tính trục quay. Moment quán tính càng nhỏ trục được dừng càng nhanh và êm.
*Đầu ra A và B:
Đối với thiết bị mã hóa 2 chiều thì người ta sử dụng 2 đầu ra song song để xác định trục quay theo chiều kim đồng hồ(CCW) dựa trên độ lệch pha của đầu ra A và B. Mặc dù độ lệch pha lý tưởng90 +- 0 song sai số cho phép đến +-45. Ngoài ra còn có xung chuẩnở đầu ra cho mỗi vòng quay của trục thiết bị, chức năng chỉ thị 0 này cùng với thiết bị mã hóa dạng số được dùng để đặt tại điểm 0 của một bộ đếm nối bên ngoài hoặc trạng thái nghỉ của bộ nhận biết vị trí.
*Độ phân giải:
Đối với loại mã hóa tăng dần, thì thuật ngữ này ứng với số
xung đầu ra cho mỗi vòng quay của trục.
*Tải trọng trục:
Là tải lớn nhất mà trục có thể chịu được. Tải trọng có ảnh hưởng trực tiếp đến tuổi thọ của trục.
*Tốc độ quay:
Là tốc độ quay lớn nhất mà thết bị mã hóa có thể chịu đựng về mặt cơ học.
Moment khởi động :
Là Moment cần để khởi động trục quay từ trạng thái nghỉ, Moment khởi động càng nhỏ thì trục quay càng êm.
Chương 5: Phụ lục.
A. GIỚI THIỆU VI XỬ LÝ AT89C52
&
VI ĐIỀU KHIỂN HỌ MCS-51MCS-51tm
Là họ vi điều khiển do hãng intel sản xuất vào đầu những năm 80 và ngày nay đã trở thành một chuẩn trong công nghiệp. bắt đầu từ ic tiêu biểu là 8051 đã cho thấy khả năng thích hợp với những ứng dụng mang tính điều khiển. việc xử lí trên byte và các phép toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên ram nội. tập lệnh cung cấp một bản tiện dụng của những lệnh số học 8 bit gồm cả lệnh nhân và lệnh chia. nó cung cấp những hỗ trợ mở rộng on-chip dùng cho những biến 1 bit như là kiểu dữ liệu riêng cho phép quản lí và kiểm tra bit trực tiếp trong điều khiển và những hệ thống logic đòi hỏi xử lí luận lí.
Sau đây là bảng so sánh các IC trong họ MCS-51TM :
TÊN LINH KIỆN
BỘ NHỚ CHƯƠNG TRÌNH ON CHIP
BỘ NHỚ DỮ LIỆU ON CHIP
TIMER
8051
4 KB MROM
128 Bytes
2
8031
0 KB
128 Bytes
2
8751
4 KB EPROM
128 Bytes
2
8951
4 KB Flash ROM
128 bytes
2
8052
8 KB MROM
256 Bytes
3
8032
0 KB
256 Bytes
3
8752
8 KB EPROM
256 Bytes
3
8952
8 KB Flash ROM
256 Bytes
3
2. VI ĐIỀU KHIỂN AT89C52
Do họ MCS-51TM đã trở thành chuẩn công nghiệp nên có rất nhiều hãng sản xuất ra nó, điển hình là ATMEL Corporation. Hãng này đã kết hợp rất nhiều tính năng dựa trên nền tảng kỹ thuật của mình để tạo ra các vi điều khiển tương thích với MCS-51TM nhưng mạnh mẽ hơn.
AT89C52 là một vi điều khiển 8 bit do ATMEL sản xuất, chế tạo theo công nghệ CMOS, có chất lượng cao, công suất thấp với 8 KB Flash (flash programmable and erasable read only memory). Thiết bị này được chế tạo bằng cách sử dụng kỹ thuật bộ nhớ không bốc hơi mật độ cao của ATMEL và tương thích với chuẩn công nghiệp MCS-51TM về tập lệnh và các chân ra. Flash on-chip cho phép bộ nhớ lập trình được lập trình trong hệ thống bởi một lập trình viên bình thường. Bằng cách nối 1 CPU 8 bit với một Flash trên một chip đơn, AT89C52 là một vi điều khiển mạnh (có công suất lớn), cung cấp một sự linh động cao và giải pháp về giá cả đối với nhiều ứng dụng vi điều khiển.
Các đặc điểm chủ yếu của AT89C52 :
Tương thích hoàn toàn với họ MCS-51TM của Intel.
Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.Độ bền : 1000 lần ghi/xóa.
Tần số hoạt động : 0 Hz đến 24 MHz.3 chế độ khóa bộ nhớ.
256 x 8-Bit RAM nội.32 đường I/O lập trình được (4 port).
3 timer/counter 16-bit.8 nguồn ngắt.
Chế độ hạ nguồn và chế độ lười tiêu tốn công suất thấp.
2.1. Cấu tạo chân
Tùy theo khả năng (về kinh tế, kỹ thuật, …) mà các nhà sản xuất các sản phẩm ứng dụng có thể chọn một trong 3 kiểu chân do ATMEL đưa ra.
2.2. Sơ đồ khối
2.3. Mô tả chức năng của các chân
Vcc : áp nguồn.
GND : đất.
Port 0 : là một port I/O 8-bit hai chiều, cực máng hở. Khi xuất ra, mỗi chân port có thể lái 8 đầu vào TTL. Nếu ghi các mức 1 ra các chân port thì các chân này có thể dùng như các đầu vào trở kháng cao.
Port 0 cũng có thể được cấu hình thành một bus multiplex giữa địa chỉ thấp và dữ liệu khi truy cập chương trình hay dữ liệu từ bên ngoài. Trong chế độ này, port 0 có điện trở pullup nội.
Port 0 cũng nhận các byte mã chương trình khi lập trình Flash và xuất ra mã chương trình khi kiểm tra, khi đó cần có điện trở pullup bên ngoài.
Port 1 : là một port I/O 8-bit hai chiều có pullup nội. Đầu ra port 1 có thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào. Khi vai trò là cổng nhập, những chân của port 1 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên.
Hơn nữa, P1.0 và P1.1 có thể được dùng như là đầu vào bộ đếm timer/counter 2 bên ngoài (P1.0/T2) và xung kích (P1.1/T2EX).
Port 1 cũng nhận những byte địa chỉ thấp trong khi lập trình Flash và trong khi kiểm tra Flash .
Port 2 : là một port I/O 8-bit hai chiều có pullup nội. Đầu ra port 2 có thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào. Khi vai trò là cổng nhập, những chân của port 2 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên.
Port 2 phát byte địa chỉ cao trong khi nhận lệnh từ bộ nhớ chương trình ngoài và trong lúc truy xuất đến bộ nhớ dữ liệu ngoài mà có sử dụng địa chỉ 16 bit (MOVX A, @DPTR). Trong ứng dụng này nó dùng điện trở nội kéo lên mạnh khi xuất 1. Khi truy xuất bộ nhớ dữ liệu ngoài dùng địa chỉ 8 bit, port 2 sẽ phát nội dung của thanh ghi P2
Port 2 cũng nhận byte địa chỉ cao trong lúc lập trình Flash và trong lúc kiểm tra Flash.
Port 3 : là một port I/O 8-bit hai chiều có pullup nội. Đầu ra port 3 có thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào. Khi vai trò là cổng nhập, những chân của port 3 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên.
Port 3 cũng có những chức năng của họ MSC-51 được iệt kê ở bảng sau:
BIT
TÊN
ĐỊA CHỈ BIT
CHỨC NĂNG THAY THẾ
P3.0
RXD
B0H
Nhận dừ liệu cho port nối tiếp
P3.1
TXD
B1H
Truyền dừ liệu cho port nối tiếp
P3.2
INT0
B2H
Ngắt ngoài 0
P3.3
INT1
B3H
Ngắt ngoài 1
P3.4
T0
B4H
Ngõ vào từ bên ngoài cho timer/counter 0
P3.5
T1
B5H
Ngõ vào từ bên ngoài cho timer/counter 1
P3.6
WR
B6H
Xung ghi bộ nhớ dữ liệu ngoài
P3.7
RD
B7H
Xung đọc bộ nhớ dữ liệu ngoài
Port 3 cũng nhận vài tín hiệu điều khiển trong lúc lập trình Flash và trong lúc kiểm tra Flash.
RST : là ngõ vào Reset. Khi ngõ này được đưa lên cao (trong ít nhất hai chu kì máy), các thanh ghi bên trong AT89C51 được tải những giá trị thích hợp để khởi động hệ thống.
ALE/PROG (Address Latch Enable) : ALE là xung xuất cho phép chốt byte địa chỉ thấp khi truy cập bộ nhớ ngoài. Chân này còn là ngõ vào của xung lập trình (PROG) khi lập trình Flash.
Trong hoạt động bình thường, ALE được phát xung với tần số 1/6 tần số dao động on-chip và có thể được dùng như xung thời gian chuẩn bên ngoài. Tuy nhiên, cần chú ý là một xung ALE sẽ bị mất khi truy cập bộ nhớ ngoài.
Có thể hủy bỏ chức năng của ALE bằng cách set bit 0 của thanh ghi ở vị trí 8EH. Một khi bit này được set, ALE chỉ tích cực khi có lệnh MOVX hoặc MOVC. Nếu không có các lệnh này thì ALE ở mức cao. Việc set bit 0 của thanh ghi ở vị trí 8EH không làm ảnh hưởng đến vi điều khiển khi truy cập bộ nhớ ngoài.
PSEN (Program Store Enable) : PSEN là xung strobe báo hiệu việc đọc bộ nhớ chương trình ngoài, PSEN tích cực hai lần (mức thấp) mỗi chu kì máy, ngoại trừ hai xung PSEN bị mất khi truy xuất dữ liệu ngoài. Khi thi hành chương trình trong RAM nội, PSEN sẽ ở mức thụ động (mức cao).
EA/VPP (External Access) : EA là ngõ vào để cho phép truy xuất bộ nhớ chương trình từ bên ngoài khi được nối với GND. Khi EA được treo lên nguồn VCC, chương trình sẽ được thực thi trong ROM nội. Chân này cũng nhận điện áp 12v (VPP) trong khi lập trình Flash.
XTAL1 : Đầu vào của bộ khuếch đại dao động đảo và cũng là đầu vào đến mạch tạo xung clock nội.
XTAL2 : Đầu ra của bộ khuếch đại dao động đảo.
2.4. Các thanh ghi chức năng (SFR-Special Funtion Reisters)
AT89C52 có 26 thanh ghi chức năng được thiết kế như là một thành phần của RAM on-chip. Do đó mỗi thanh ghi có một địa chỉ của nó, nằm trong vùng từ 80H đến FFH. Tuy nhiên, vùng này cũng là vùng bộ nhớ nên việc truy cập các thanh ghi này thông qua các lệnh dùng định vị trực tiếp khác với việc truy cập vùng nhớ dùng định vị gián tiếp.
Bảng vị trí các thanh ghi chức năng :
Chú ý là không phải tất cả các địa chỉ đều có các thanh ghi, những địa chỉ không có thanh ghi này có thể không có trên chip. Đọc những địa chỉ này sẽ có những giá trị ngẫu nhiên và ghi những giá tri này có những tác động không xác định trước.
Phần mềm của người dùng không nên ghi những giá trị 1 đến các vị trí này, bởi vì chúng có thể được dùng trong tương lai. Trong trường hợp đó, giá trị của các bit luôn là 0.
Ngoài những thanh ghi tương tự 8051, AT89C52 có thêm :
Các thanh ghi Timer 2 các bit điều khiển và trạng thái chứa trong thanh ghi T2CON và T2MOD cho Timer 2. Cặp thanh ghi RCAP2H và RCAP2L là những thanh ghi Capture/Reload trong chế độ capture 16 bit hay chế độ auto-reload 16 bit.
Ký hiệu
Chức năng
TF2
Cờ tràn Timer 2, set khi Timer 2 tràn và phải được clear bằng phần mềm. TF2 sẽ không set khi RCLK = 1 hoặc TCLK = 1.
EXF2
Cờ ngoài của Timer 2, set khi xảy ra capture hoặc reload do T2EX xuống thấp và EXEN2 = 1. Nếu ngắt Timer 2 được kích hoạt, EXF2 = 1 sẽ làm CPU trỏ đến ISR của Timer 2. EXF2 phải được xóa bằng phần mềm. EXF2 không gây nên ngắt trong chế độ đếm lên/xuống (DCEN = 1).
RCLK
Kích hoạt xung clock bộ thu. Khi set, các xung tràn Timer 2 sẽ là xung clock cho bộ thu port nối tiếp trong mode 1 và 3. RCLK = 0 thì bộ thu port nối tiếp sẽ dùng các xung tràn của Timer 1.
TCLK
Kích hoạt xung clock bộ phát. Khi set, các xung tràn Timer 2 sẽ là xung clock cho bộ phát port nối tiếp trong mode 1 và 3. TCLK = 0 thì bộ phát port nối tiếp sẽ dùng các xung tràn của Timer 1.
EXEN2
Kích hoạt bên ngoài. Khi set, cho phép capture hay reload khi T2EX xuống thấp (nếu Timer 2 không sử dụng cho port nối tiếp). EXEN2 = 0 làm cho Timer 2 bỏ qua các sự kiện trên T2EX.
TR2
Khởi động/Dừng Timer 2. TR2 = 1 làm khởi động Timer 2.
C/T2
Bit lựa chọn timer hay counter. C/T2 = 0 : timer. C/T2 = 1 : counter đếm sự kiện bên ngoài (kích cạnh xuống).
CP/RL2
Lựa chọn capture hay reload. CP/RL2 = 1: capture xảy ra khi T2EX xuống thấp nếu EXEN2 = 1. CP/RL2 = 0 : reload xảy ra khi Timer 2 tràn hoặc khi T2EX xuống thấp nếu EXEN2 = 1. Nếu TCLK hay RCLK = 1, bit này bị bỏ qua và timer bị ép vào chế độ reload khi Timer 2 tràn.
Các thanh ghi ngắt tập các bit riêng lẻ cho phép ngắt chứa trong thanh ghi IE. Thiết lập hai mức ưu tiên cho 6 nguồn ngắt bằng cách set các bit thanh ghi IP.
2.5. Bộ nhớ dữ liệu
AT89C52 có 256 byte bộ nhớ RAM on-chip. Trong đó, 128 byte trên có cùng địa chỉ với vùng thanh ghi chức năng nhưng có cấu tạo vật lý riêng biệt.
Khi một lệnh truy cập một vị trí nội có địa chỉ trên 7FH, chế độ địa chỉ nó sử dụng sẽ báo cho CPU biết vùng địa chỉ nào nó cần truy cập : RAM hay SFR. Các lệnh dùng địa chỉ trực tiếp sẽ truy cập vùng SFR. Ví dụ như lệnh sau đây sẽ truy cập SFR ở địa chỉ 0A0H (port 2)
MOV 0A0H,#data
Lệnh dùng địa chỉ gián tiếp sẽ truy cập 128 byte trên của RAM. Ví dụ như cũng truy cập địa chỉ 0A0H nhưng gián tiếp thông qua R0.
MOV R0,#0A0H
MOV @R0,#data
Chú ý rằng các tác vụ của stack vốn đã sử dụng địa chỉ gián tiếp nên vùng 128 byte trên của RAM rất tiện dụng để làm vùng stack.
2.6. Đặc tính bộ dao động
XTAL1 là đầu vào và đầu ra tương ứng của bộ khuếch đại đảo được dùng làm bộ dao động nội on-chip. Có thể dùng thạch anh hay bộ cộng hưởng ceramic đều được.
Để lái vi điều khiển từ nguồn xung clock bên ngoài, XTAL2 phải được để trống trong khi XTAL1 nối đến nguồn lái. Không có yêu cầu gì về duty cycle nhưng phải chú ý đến thời gian tối đa và tối thiểu của mức điện áp cao cũng như mức điện áp thấp.
2.7. Chế độ lười
Trong chế độ lười, CPU rơi vào trạng thái “ngủ” trong khi tất cả thiết bị ngoại vi vẫn còn tích cực. Chế độ này được tạo ra bằng phần mềm. Nội dung của RAM on-chip và giá trị của các SFR vẫn được giữ nguyên. Kết thúc chế độ lười bằng cách kích hoạt một ngắt hoặc reset phần cứng.
Chú rằng khi kết thúc chế độ lười bằng cách reset phần cứng thì thông thường vi điều khiển sẽ gọi lại chương trình mà nó vừa thoát, cho đến hai chu kỳ máy trước khi thuật toán reset chiếm quyền điều khiển. Phần cứng cấm truy cập RAM nội trong trường hợp này nhưng không cấm truy cập đến các chân port, do đó có thể xảy ra những trường hợp không mong muốn. Để loại bỏ trường hợp này, lệnh ngay sau lệnh gọi chế độ lười không nên là lệnh ghi port hay ghi bộ nhớ ngoài.
2.8. Chế độ hạ nguồn
Trong chế độ hạ nguồn, bộ dao động ngừng, và lệnh gọi hạ nguồn là lệnh cuối cùng được thực thi. RAM on-chip và SFR duy trì giá trị của nó cho đến khi kết thúc chế độ hạ nguồn.
Kết thúc chế độ hạ nguồn chỉ bằng một cách duy nhất : reset phần cứng. Reset sẽ tạo lại giá trị cho SFR nhưng không thay đổi nội dung của RAM on-chip. Không nên reset trước khi Vcc phục hồi mức điện áp thông thường của nó và phải giữ đủ lâu để bộ dao động phục hồi và ổn định.
2.9. Trạng thái của một số chân trong chế độ lười và chế độ hạ nguồn
IX. TẬP LỆNH CỦA 89C51:
AT89C51 có 255 lệnh chia thành các nhóm lệnh:
+ Nhóm lệnh chuyển dời
+ Nhóm lệnh số học
+ Nhóm lệnh logic
+ Nhóm lệnh chuyển điều khiển
Sau đây là tập lệnh cơ bản của vi xử lý AT89C51:
Các chỉ dẩn thiết lập lệnh
Rn : Thanh ghi R0 đến R7
Data : 8 bit địa chỉ vùng dữ liệu bên trong
@Ri : Định chỉ gián tiếp qua R0 hay R1
#data : Hằng số 8 bit
#data16 : Hằng số 16 bit
addr 16 : 16 bit địa chỉ đích
addr 11 : 11 bit địa chỉ đích
rel : Ofset 8 bit có dấu
bit : Bit được định địa chỉ trực tiếp
a) Nhóm lệnh xử lý số học :
ADD A,Rn (1 byte,1chu kỳ máy): (A) = (A)+(Rn)
ADD A,data (2;1) : (A) = (A) + (data)
ADD A,@Ri (1;1) : (A) = (A) + ((Ri))
ADD A,#data (2;1) : (A) = ( A) + #data
ADDC A,Rn (1;1) : (A) = ( A) + (C) +(Rn)
ADDC A,data ( 2;1) : (A) = (A) + (C) + (data)
ADDC A,@Ri (1;1) : (A) = (A) + ((Ri)) + (C)
ADDC A,#data ( 2;1) : (A) = (A) + (C) + #data
SUBB A,Rn (1;1) : (A) = (A) - (C)- (Rn)
SUBB A,data (2;1) : (A) = (A) - (C) -( data)
SUBB A,@Ri (1;1) : (A) =(A) -(C) -((Ri))
SUBB A,#data (2;1) : (A) = (A) - (C) - #data
INC A (1;1) : (A) = (A) +1
INC Rn (1;1) : (Rn) = (Rn) +1
INC data (2;1) : (data) = (data) +1
INC @Ri (1;1) : ((Ri)) =((Ri))+1
DEC A (1;1) : (A) =(A) – 1
DEC Rn (1;1) : (Rn) =(Rn) -1
DEC data (2;1) : (data) =(data) –1
DEC @Ri (1;1) : ((Ri)) =((Ri)) –1
INC DPTR (1;2) : (DPTR) =(DPTR) +1
MUL AB (1;4) : (A) = byte cao của (A) * (B)
(B) = byte thấp của (A)* (B)
DIV AB (1;4) : chia (A) cho (B) ,kết quả:
( A) = thương số
(B) = số dư
DA A (1;1) : hiệu chỉnh thập phân thanh ghi A
b) Nhóm lệnh luận lý:
ANL A,Rn (1;1) : (A) =(A) and (Rn)
ANL A,data (2;1) : (A) =(A) and (data)
ANL A,@Ri (1;1) : (A) = (A) and ((Ri))
ANL A,#data (2;1) : (A) = (A) and #data
ANL data,A (2;1) : (data) = (data) and (A)
ANL data,#data (3;2) : (data) =(data) and #data
ANL C,bit (2;2) : (C) =(C) and (bit)
ANL C, bit (2;2) : (C) =(C) and not (bit)
ORL A,Rn (1;1) : (A) = (A) or (Rn)
ORL A,data (2;1) : (A) = (A) or data
ORL A,@Ri (1;1) : (A) = (A) or ((Ri))
ORL A,#data (2;1) : (A) = (A) or #data
ORL data,A (2;1) : (data) = (data) or (A)
ORL data,#data (3;2) : (data ) = (data) or # data
ORL C,bit (2;2) : (C) = (C) or bit
ORL C,/bit (2;2) : (C) = (C) or not bit
XRL A,Rn (1;1) : (A) =(A) xor (Rn)
XRL A,data (2;1) : (A) = (A) xor (data)
XRL A,@Ri (1;1) : (A) = (A) xor ((Ri))
XRL A,#data (2;1) : (A) = (A) xor #data
XRL data,A (2;1) : (data) = (data) xor (A)
XRL data,#data (3;2) : (data) = (data) xor #data
SETB C (1;1) : (C) =1
SET bit (2;1) : (bit) = 1
CLR A (1;1) : (A) = 0
CLR bit (2;1) : (bit) =0
CLR C (1;1) : (C) = 0
CPL A (1;1) : (A) = not (A)
CPL C (1;1) : (C) = not (C)
CPL bit (2;1) : (bit) = not (bit)
RL A (1;1) : quay trái nội dung thanh ghi A
RLC A (1;1) : quay trái nội dung thanh ghi A
RR A (1;1) : quay phải nội dung thanh ghi A
RRC A (1;1) : quay phải nội dung thanh ghi A
qua cờ nhớ
SWAP A (1;1) : quay trái nội dung thanh ghi A
một nibble
c) Nhóm lệnh chuyển dữ liệu :
MOV A,Rn (1;1) : (A) =(Rn)
MOV A,data (2;1) : (A) = (data)
MOV A,@Ri (1;1) : (A) = ((Ri))
MOV A,#data (2;1) : (A) = #data
MOV Rn,A (1;1) : (Rn) = (A)
MOV Rn,data (2;2) : (Rn) = (data)
MOV Rn,#data (2;1) : (Rn) = #data
MOV data,A (2;1) :(data) = (A)
MOV data,Rn (2;2) : (data) = (Rn)
MOV data,data (3;2) : (data) = (data)
MOV data,@Ri (2;2) : (data) = ((Ri))
MOV data,#data (3;2) : (data) = #data
MOV @Ri,A (1;1) : ((Ri)) = (A)
MOV @Ri,data (2;2) : ((Ri)) = (data)
MOV @Ri,#data (2;1) : ((Ri)) = #data
MOV DPTR,#data16 (3;2) : (DPTR) = #data16
MOV C,bit (2;1) : (C) = (bit)
MOV bit,C (2;2) : (bit) = (C)
MOVC A,@A+DPTR (1;2) : (A) = ((A)+(DPTR))
MOVC A,@A+PC (1;2) : (A) = ((A)+(PC))
MOVX A,@Ri (1;2) : chuyển dữ liệu ngoài 8 bít
vào thanh ghi A .
MOVX A,@DPTR (1;2) : chuyển dữ kiệu ngoài 16 bit vào
thanh ghi A.
MOVX @Ri,A (1;2) : chuyển nội dung thanh ghi A ra dữ
liệu ngoài 8 bit địa chỉ.
MOVX @DPTR,A (1;2) : chuyển nội dung thanh ghi A ra dữ
liệu ngoài 16 bit địa chỉ.
PUSH data (2;2) : (SP) =(SP) +1
((SP)) = (data)
POP data (2;2) : (data) = ((SP))
(SP) = (SP) -1
XCH A,Rn (1;1) : trao đổi dữ liệu giữa thanh ghi Rn
và thanh ghi A.
XCH A,data (2;1) : trao đổi giửa thanh ghi A và data.
XCH A,@Ri (1;1) : trao đổi giữa thanh ghi A và một
dữ liệu gián tiếp.
XCHD A,@Ri (1;1) : trao đổi giữa nibble thấp
của thanh ghi A và nibble thấp của byte dữ liệu gián tiếp.
d) Nhóm lệnh chuyển điều khiển :
ACALL addr11 (2;2) : Gọi chương trình con dùng địa
chỉ tuyệt đối.
LCALL addr16 (3;2) : Gọi chươnhg trình con dùng địa chỉ dài.
RET (1;2) : Trở về từ lệnh gọi chương trình
con
RETI (1;2) :Trở về từ lệnh gọi ngắt
AJMP addr11 (2;2) : Nhảy tuyệt đối
LJMP addr16 (3;2) : Nhảy dài
SJMP rel (2;2) : Nhảy ngắn
JMP @A+DPTR (1;2) : Nhảy gián tiếp từ con trỏ dữ liệu
JZ rel (2;2) : Nhảy nếu A bằng 0
JNZ rel (2;2) : Nhảy nếu A không bằng không
JC rel (2;2) : Nhảy nếu cờ nhớ được đặt
JNC rel (2;2) : Nhảy nếucờ nhớ không được đặt
JB bit,rel (3;2) : Nhảy tương đối nếu bit trực tiếp được đặt
JNB bit,rel (3;2) : Nhảy nếu bit không được đặt
JBC bit, rel (3;2) : Nhảy tương đối nếu bit trực tiếp được
đặt rồi xóa bit
CJNE A,data,rel (3;2) : So sánh dữ liệu trực tiếp với A
và nhảy nếu không bằng
CJNE A,#data,rel (3;2) : So sánh dữ liệu ức thời với Avà nhảy nếu
không bằng
CJNE Rn,#data,rel (3;2) : So sánh dữ liệu tức thời với (Rn) và nhảy
nếu không bằng
CJNE @Ri,#data,rel (3;2) : So sánh dữ liệu tức thời với
dữ liệu gián tiếp và nhảy nếu không bằng
DJNZ Rn,rel (2;2) : Giảm thanh ghi Rn và nhảy nếu
không bằng không
DJNZ data,rel (3;2) : Giảm dữ liệu trực tiếp và nhảy
nếu không bằng
B. GIỚI THIỆU CÁC IC SỬ DỤNG TRONG ĐỀ TÀI
&
PPI 8255 ( Programing Peripheral Interface ):
Cấu trúc tổng quát:
Đệm data
Kiểm soát đọc ghi
Điều khiển nhóm B
Điều khiển nhóm A
Nhóm A
Port A
Nhóm A
½ port C
Nhóm B
½ port C
Nhóm B
Port B
RD
WR
CS
RST
A1
A2 WR CS PB0¸P B7 RTS A0
A 1 RD WR CS PB0¸P B7 RTS A0
A 1 WR CS PB0¸P B7 RTS A0
A 1
PC0¸PC3
PA0¸PA7
PC4¸P C7
PB0¸PB7
Bus data
D0¸D7
Bộ đệm truyền data : Bộ đệm 8 bit , hai chiều , ba trạng thái dùng để giao tiếp bus data 8255 với bus data CPU.
Bộ kiểm soát đọc ghi : kiểm soát tất cả sự truyền đạt bên trong và ngoài của từ điều khiển và data nhận tín hiệu A0,A1 từ bus địa chỉ , các tín hiệu RD ,WR, CS, RST từ bus địa chỉ phát ra các lệnh cho hai nhóm A và B
Khối từ điều khiển : Để điều khiển hoạt động hai nhóm A và B ta phải xuất từ điều khiển đến thanh ghi điều khiển 8255 , từ điều khiển bao gồm các thông tin về chọn mode , set bit ,reset bit… Nó sẽ khỏi động cấu hình hoạt động cho 8255, thanh ghi điều khiển chỉ ghi vào chứ không đọc ra được.
Các port : 8255 gồm 3 port , ký hiệu A,B,C, mỗi port gồm 8 bit có thể lập trình được để xác định chế độ hoạt động thích hợp, các port A và B gồm bộ đệm chốt ngõ ra 8 bit và chốt ngõ vào 8 bit. Port C có chốt ngõ ra 8bit và đệm không chốt ngõ vào 8 bit , port C được phân ra làm hai phần : 4 bit cao PC4¸PC7 cùng với port A hình thành nhóm A, bốn bit thấp PC0¸PC4 cùng port B hình thành nhóm B .
Các tín hiệu điều khiển :
+ CS :chọn chip , tích cực mức 0
+ RD :đọc data , tích cực mức 0
+ WR : ghi data, tích cực mức 0
+ RST : Reset, xóa các thanh ghi điều điều khiển và các port A, B ,C về mode nhập , tích cực mức 1.
+ Chọn mode:
A1 A0 port
0 0 A
0 1 B
1 0 C
1 1 từ điều khiển
- Nguồn cung cấp : 5V
l 8255 có nhiều mode làm việc , tuy nhiên mode là mode được sử dụng phổ biến trong các ứng dụng của nó, đây là mode xuất nhập đơn giản : các port có thể được lập trình là ngõ vào hay ngõ ra.
PC¸PC3
0:out put, 1: input
Port B
0:output, 1: input
Mode nhóm A
00:mode0,01:mode 1
Mode nhóm B:
O:mode 0, 1:mode 1
PC4¸PC7
0:output,1 : input
Port A
0:output, 1: input
Chọn mode
0: BSR mode
1: I/O mode
D7 D6 D5 D4 D3 D2 D1 D0
l Khởi động 8255:
Để hoạt động đầu tiên ta phải khởi động 8255: khởi động 8255 là ghivào từ điều khiển một giá trị thích hợp để chọn mode làm việc , qui định ngõ vào , ngõ ra cho các port.
lTừ điều khiển : ( hình vẽ trên )
II. RAM 62256:
Bộ nhớ Ram thường được dùng trong các thiết bị tính để cất giữ các kết quả trung gian hay kết quả tạm thời trong khi thực hiện các chương trình điều khiển.
- Dung lượng :32kbyte.
Từ D0® D7 :Data
Từ A0®A14 : Địa chỉ
Chân /CE: cho phép RAM xuất nhập data .
Chân /WE =0 : cho phép RAM ghi data
Chân /OE = 0 : cho phép RAM xuất data.
Sơ đồ chân linh kiện :
III. IC 75176:
Là IC chuyển đổi tín hiệu điện áp so với mass thành tín hiệu điện áp vi sai .
Sơ đồ chân linh kiện :
IV. MAX 232:
Là vi mạch chuyển đổi tín hiệu theo chuẩn RS232 sang chuẩn TTL và ngược lại.
Trong thực tế có rất nhiều vi mạch chuyển đổi từ RS_232 sang TTL và ngược lại. Thế nhưng MAX232 có ưư điểm hơn các vi mạch khác và rất phổ biến hiện nay, ưu điểm của MAX 232 là chỉ sử dụng nguồn đơn cực +5V.
Bên trong MAX 232 có một bộ nhân đôi điện áp để tạo ra điện áp +10V và một bộ tạo ra điện áp âm. Như vậy nó tạo ra bộ nguồn +/-10V,đáp ứng được mức điện áp cho RS_232.
Sơ đồ chân linh kiện :
Giải thích tín hiệu :
R2IN: ngõ vào RS_232 ®R2OUT: ngõ ra TTL
T2OUT: ngõ ra RS_232¬T2IN: ngõ vào TTL
R1IN: ngõ vàoRS_232®R1OUT: ngõ ra TTL
T1OUT : ngõ ra RS_232®T1 IN :ngõ vào TTL
C1+, C1-: tụ C1= 10mF bên ngoài
C2+, C2-: tụ C2= 10mF bên ngoài
+V: nguồn +10V
-V: nguồn -10V
VCC,GND: nguồn cung cấp đơn cực +5V
IC 74573 :
Là IC chốt có ngõ ra 3 trạng thái.
sơ đồ chân và bảng sự thật :
OC
C
Input (D)
Output (Q)
L
H
H
H
L
H
L
L
L
L
X
Q1
H
X
X
Z
IC 74138 :
Là IC giải mã 3 sang 8. Có ngõ ra tích cực mức thấp
Sơ đồ chân và bảng sự thật :
INPUTS
OUTPUTS
ENABLE
SELECT
G1 G2
C B A
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
X H
X X X
H
H
H
H
H
H
H
H
L X
X X X
H
H
H
H
H
H
H
H
H L
L L L
L
H
H
H
H
H
H
H
H L
L L H
H
L
H
H
H
H
H
H
H L
L H L
H
H
L
H
H
H
H
H
H L
L H H
H
H
H
L
H
H
H
H
H L
H L L
H
H
H
H
L
H
H
H
H L
H L H
H
H
H
H
H
L
H
H
H L
H H L
H
H
H
H
H
H
L
H
H L
H H L
H
H
H
H
H
H
H
L
VII . IC74LS393.
IC này có 2 kênh 1, mỗi kênh là 1 bộ đếm 4 bit, được dùng làm bộ đếm, chia tần số, các ứng dụng khác. Mỗi bộ đếm chứa 4 Fiplop bên trong. Các Fiplop này được kích cạnh xuống vào ngõ A.
Chương trình điều khiển
PORTA1 EQU 4000H
PORTB1 EQU 4001H
PORTC1 EQU 4002H
CTRWL1 EQU 4003H
AL EQU 30H
AH EQU 31H
BL EQU 32H
BH EQU 33H
XL EQU 34H
XH EQU 35H
YL EQU 36H
YH EQU 37H
ZL EQU 38H
ZH EQU 39H
TEMP EQU 40H
KPL EQU 41H
KPH EQU 42H
EORL EQU 43H
EORH EQU 44H
DUTY_CYCLE EQU 45H
PULSL EQU 46H
PULSH EQU 47H
PULFL EQU 48H
PULFH EQU 49H
CONSTN EQU 50H
CONSTD EQU 51H
TEMP2L EQU 52H
TEMP2H EQU 53H
TEMP3L EQU 54H
TEMP3H EQU 55H
CL EQU 56H
CH EQU 57H
CBC EQU 58H
DU EQU 59H
TEMP4L EQU 60H
SCKP1 EQU 61H
SCKP2 EQU 62H
LD1L EQU 63H
LD1H EQU 64H
CDAIT EQU 65H
CDAIC EQU 66H
SLCATT EQU 67H
SLCATC EQU 68H
TGCATT EQU 69H
TGCATC EQU 6AH
ORG 0000H
JMP MAIN
ORG 001BH
LJMP ISR_TOKP
ORG 0030H
MAIN: CALL NAP_DULIEU
CALL INIT
SETB TF1
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DIEU KHIENDONG CO, DAO CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
AGAIN: CALL PWM
CALL DISPLAY
JNB 03H,AGAIN
CLR ET1
MOV A,#80H
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; NGAT DAO CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MOV DPTR,#CTRWL1
MOVX @DPTR,A
INC 3EH
MOV A,3EH
CJNE A,SLCATT,AGAIN4
AGAIN4: JNC AGAIN3
MOV A,3EH
MOV B,#10
DIV AB
SWAPA
ORL A,B
MOV 3CH,A
MOV 6EH,#100
AGAIN1: CALL PWM
CALL DISPLAY
MOV 6FH,#100
DJNZ 6FH,$
DJNZ 6EH,AGAIN1
MOV DPTR,#CTRWL1
MOV A,#02H
MOVX @DPTR,A
MOV A,#03H
MOVX @DPTR,A
MOV A,#02H
MOVX @DPTR,A
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DONG DAO CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MOV A,#90H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
CLR 03H
SETB ET1
JMP AGAIN
AGAIN3: MOV A,#80H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
CALL PWM
CALL DISPLAY
SJMP AGAIN3
RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INIT: MOV TMOD,#11H
MOV TH1,#HIGH(-10000)
MOV TL1,#LOW(-10000)
SETB TR1
MOV IE,#88H
MOV A,#100
MOV B,#24
DIV AB
CLR 00H
CLR 01H
CLR 02H
CLR 03H
CLR 10H
CLR 11H
CLR 12H
CLR 13H
CLR 14H
CLR 15H
SETB 30H
CLR 31H
CALL DKD
MOV 5AH,#1
MOV 5BH,#0
MOV 5CH,#0
MOV 5DH,#0
MOV 5EH,#0
MOV 5FH,#0
MOV 7CH,#0
MOV 7DH,#2 ;VI TRI LED TRUY XUAT
MOV 7EH,#0
MOV 7FH,#0
MOV 3CH,#0
MOV 3EH,#0
MOV DUTY_CYCLE,#0
MOV 3DH,#1
MOV 4AH,#40H
MOV 4BH,#30H
MOV 4CH,#20H
MOV 4DH,#10H
MOV 4EH,#60H
MOV 4FH,#50H
MOV R0,#3AH
MOV R1,#4AH
MOV R3,#0
MOV CONSTN,A
MOV CONSTD,B
MOV PULSL,CDAIT
MOV PULSH,CDAIC
MOV PULFL,#00H
MOV PULFH,#00H
MOV KPL,#1
MOV KPH,#0
MOV A,#92H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
MOV A,#05H
MOVX @DPTR,A
MOV A,#07H
MOVX @DPTR,A
MOV A,#02H
MOVX @DPTR,A
MOV A,#03H
MOVX @DPTR,A
MOV A,#02H
MOVX @DPTR,A
MOV A,#90H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; CT NGAT ISR_TOKP
;DOC XUNG,TINH TOAN DUTY_CYCLE
;CHU KI NGAT 10mS
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ISR_TOKP: CLR TR1
MOV TL1,#LOW(-10000)
MOV TH1,#HIGH(-10000)
SETB TR1
CALL DOC_XUNG
MOV PULFL,R6
MOV PULFH,R7
MOV XL,PULSL
MOV XH,PULSH
MOV YL,PULFL
MOV YH,PULFH
CALL SUBB16
MOV EORL,ZL
MOV EORH,ZH
MOV AL,EORL
MOV AH,EORH
MOV BL,#0
MOV BH,#0
CALL COMPAB
JNB 01H,EXIT7
JMP LABEL
EXIT7: LJMP EXIT2
;LENH THUC HIEN KHI A>B
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;TEMP2:=TEMP2H:TEMP2L:=E[N]*KP
LABEL: MOV XL,EORL
MOV XH,EORH
MOV YL,KPL
MOV YH,KPH
CALL MUL_16
MOV TEMP2L,ZL
MOV TEMP2H,ZH
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;(CONST:=CONSTD:CONSTN:=100/(Umax=24))*TEMP2
MOV XL,ZL
MOV XH,ZH
MOV YL,CONSTN
MOV YH,#0
CALL MUL_16
MOV TEMP3L,ZL
MOV TEMP3H,ZH
MOV XL,TEMP2L
MOV XH,TEMP2H
MOV YL,CONSTD
MOV YH,#0
CALL MUL_16
MOV R6,ZL
MOV R7,ZH
MOV B,#24
CALL DIV_16_8
MOV XL,R6
MOV XH,R7
MOV YL,TEMP3L
MOV YH,TEMP3H
CALL ADD16
;TRUONG HOP TREN TINH VOI KP=(1....9)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;DUOI DAY SE TINH THEM CHO SO CHIA CUA KP
MOV CL,#1
MOV CH,#0
MOV XL,ZL
MOV XH,ZH
MOV CBC,SCKP1
CALL TG_DUNG
MOV CL,#1
MOV CH,#0
MOV XL,ZL
MOV XH,ZH
MOV CBC,SCKP2
CALL TG_DUNG
MOV DUTY_CYCLE,ZL
MOV AL,DUTY_CYCLE
MOV AH,#0
MOV BL,#50
MOV BH,#0
CLR 01H
CALL COMPAB
CLR 00H
CLR 02H
JNB 01H,LABEL2
MOV DUTY_CYCLE,LD1T
CLR 01H
LABEL2: MOV R5,DUTY_CYCLE
CJNE R5,#7,STOP
STOP: JNC EXIT2
MOV DUTY_CYCLE,#0
CLR ET1
SETB 03H
JMP EXIT4
CLR 01H
EXIT2: JNB 02H,EXIT3
;LENH THUC HIEN KHI A<B
MOV DUTY_CYCLE,#0
CLR 02H
EXIT3: JNB 00H,EXIT4
;LENH THUC HIEN KHI A=B
MOV DUTY_CYCLE,#0
CLR 00H
EXIT4: MOV R7,#0
MOV R6,DUTY_CYCLE
ACALL BINTOBCD
CALL CDL
RETI
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;CT CON DOC_XUNG
;DOC XUNG TU PORTA,B CUA 8255
; NGO RA PC1,PC2,PC3 DIEU KHIEN XOA,CHOT XUNG KHI LAY XUNG
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DOC_XUNG: MOV A,#04H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
MOV A,#06H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
MOV DPTR,#PORTA1
MOVX A,@DPTR
MOV R6,A
MOV A,#05H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
MOV DPTR,#PORTB1
MOVX A,@DPTR
MOV R7,A
MOV A,#07H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
RET
;*****************************************************************
;CHUONG TRINH CON DIEU RONG XUNG
; CHU KI DIEU RONG T= 200*R3uS
; T1\T*100= DUTY_CYCLE
;THOI GIAN THUC THI LA 1324uS
;*****************************************************************
PWM: MOV R2, DUTY_CYCLE
CJNE R2,#01H,MAIN_L2
MAIN_L2: JC MAIN_L3
MOV A,#01H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
ACALL DELAY
MAIN_L3: MOV A,#100
SUBB A,DUTY_CYCLE
MOV R2,A
CJNE R2,#01H,MAIN_L4
MAIN_L4: JC MAIN_L5
MOV A,#00H
MOV DPTR,#CTRWL1
MOVX @DPTR,A
ACALL DELAY
MAIN_L5: RET
;*****************************************************************
DELAY: MOV R3,#5
DELAY_L1: DJNZ R3,DELAY_L1
DJNZ R2,DELAY
RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Chuong trinh so sanh 2 so 16 bit
; A=AHAL B=BHBL
; IF A>B THEN 00 =1
; IF A<B THEN 01 =1
; IF A=B THEN 02 =1
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
COMPAB: MOV A,AH
CJNE A,BH,BIGGER
MOV A,AL
CJNE A,BL,BIGGER
SETB 00H ; A=B
JMP EXIT
BIGGER: JC SMALLER
SETB 01H
JMP EXIT
SMALLER: JNC EXIT
SETB 02H
EXIT: RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;Chuong trinh cong 2 so 16 bit
;INPUT X=XH_XL
; Y=YH_YL
;OUT PUT Z=X+Y
; Z=ZH_ZL
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ADD16: MOV A,XL
ADD A,YL
MOV ZL,A
MOV A,XH
ADDC A,YH
MOV ZH,A
RET
;*****************************************************************
;CHUONG TRINH TRU HAI SO NGUYEN 16 BIT
;INPUT X=XH_XL
; Y=YH_YL
;OUT PUT Z=X-Y
; Z=ZH_ZL
;*****************************************************************
SUBB16: MOV A,XL
SUBB A,YL
MOV ZL,A
MOV A,XH
SUBB A,YH
MOV ZH,A
RET
;*****************************************************************
;CHUONG TRINH NHAN HAI SO NGUYEN 16 BIT
;INPUT X=XH_XL
; Y=YH_YL
;OUT PUT Z=X*Y
; Z=ZH_ZL
;*****************************************************************
MUL_16: MOV A,XL
MOV TEMP,A
MOV B,YL
MUL AB
MOV ZL,A
MOV A,YL
XCH A,B
XCH A,XH
MUL AB
ADD A,XH
MOV XH,A
MOV A,XH
MOV A,YH
MOV B,TEMP
MUL AB
ADD A,XH
MOV ZH,A
RET
;*****************************************************************
;CHUONG TRINH CHIA 1 S0 16 BIT CHO 1 SO 8 BIT
;INPUT SO(16BIT) BI CHIA R7:R6 SO CHIA 8 BIT THANH GHI B
;OUT PUT R7:R6=KET QUA CAN CHIA B: SO DU
;*****************************************************************
DIV_16_8: PUSH 02H
PUSH ACC
MOV R2,#16
CLR A
DIVIDE: XCH A,R6
CLR C
RLC A
XCH A,R6
XCH A,R7
RLC A
XCH A,R7
RLC A
CJNE A,B,NOT_EQUAL
SJMP A_GREATER_EQ_B
NOT_EQUAL: JC BELOW
A_GREATER_EQ_B:
SUBB A,B
XCH A,R6
ORL A,#1
XCH A,R6
BELOW: DJNZ R2,DIVIDE
XCH A,B
POP ACC
POP 02H
RET
;** *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** ***
;CT CON DELAY 1000US, DUNG TIMER 0
;** *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** ***
DELAY1: MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
; *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** **
; CTC BINTOBCD
; CHUYEN DOI TU SO NHI PHAN 16 BIT (<9999) SANG SO BCD
;INPUT : R7:R6 = SO NHI PHAN 16 BIT
;OUTPUT: R7:R6 = SO BCD, R7:R6=NGHIN,TRAM ,CHUC ,DON VI
; *** *** *** **** *** *** ** ** *** ** ** ** *** *** *** *** ****** *** **
BINTOBCD:
PUSH ACC
PUSH B
MOV B,#10
ACALL DIV_16_8
PUSH B
MOV B,#10
ACALL DIV_16_8
PUSH B
MOV B,#10
MOV A,R6
DIV AB
PUSH B
SWAP A
POP B
ORL A,B
MOV R7,A
POP ACC
SWAP A
POP B
ORL A,B
MOV R6,A
POP B
POP ACC
RET
;*****************************************************************
;CT CON CDT,CDC,XUAT PHUC VU XUAT LED
;*****************************************************************
CDT: MOV A,@R0
ANL A,#0FH
RET
CDC: MOV A,@R0
SWAP A
ANL A,#0FH
RET
XUAT: ORL A,@R1
MOV P1,A
RET
;*****************************************************************
;CHUONG TRINH CHIA 1 S0 16 BIT CHO 1 SO 8 BIT
;INPUT SO(16BIT) BI CHIA R7:R6 SO CHIA 8 BIT THANH GHI B
;OUT PUT R7:R6=KET QUA CAN CHIA B: SO DU
;KET QUA SAI SO(O SO DU B) DOI VOI SO LE LON HON 128
;*****************************************************************
DIV_16_81: PUSH ACC
MOV A,B
JNB ACC.7,NH128
JNB ACC.0,EVEN
INC A
CJNE A,#0,EVEN
MOV A,#0FEH
EVEN: MOV B,#2
DIV AB
MOV B,A
MOV TEMP4L,A
CALL DIV_16_8
MOV DU,B
MOV B,#2
CALL DIV_16_8
MOV A,B
JZ LAMT1
MOV A,TEMP4L
ADD A,DU
MOV B,A
LAMT1: POP ACC
JMP EXIT5
NH128: CALL DIV_16_8
POP ACC
EXIT5: RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;CT CON TG_DUNG
;Chuong trinh tinh (A/B)*C=A1*C+B1*C/B=A1*C+A2*C+E(sai so) (C<B)
;INPUT: A=XL:XH, B=B, C:YL:YH
;OUTPUT: PHAN NGUYEN:ZL:ZH, PHAN DU B
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TG_DUNG: MOV R6,XL
MOV R7,XH
MOV B,CBC
CALL DIV_16_81
MOV XL,R6
MOV XH,R7
MOV TEMP3L,B
MOV YL,CL
MOV YH,CH
CALL MUL_16
MOV TEMP2L,ZL
MOV TEMP2H,ZH
MOV XL,TEMP3L
MOV XH,#0
MOV YL,CL
MOV YH,CH
CALL MUL_16
MOV R6,ZL
MOV R7,ZH
MOV B,CBC
CALL DIV_16_81
MOV XL,R6
MOV XH,R7
MOV TEMP3H,B
MOV YL,TEMP2L
MOV YH,TEMP2H
CALL ADD16
MOV B,TEMP3H
RET
CDL: MOV 3AH,R6
MOV 3BH,R7
RET
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;CT CON HIEN THI CHIEU DAI KHI CAT
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DISPLAY: MOV A,3DH
MOV B,#2
DIV AB
MOV A,B
CJNE A,#0,ELSE
CALL CDC
CALL XUAT
INC R0
JMP BQ1
ELSE: CALL CDT
CALL XUAT
BQ1: INC R1
INC 3DH
MOV A,3DH
CJNE A,#7,ELSE1
MOV 3DH,#1
MOV R0,#3AH
MOV R1,#4AH
ELSE1: RET
DKD: CLR 26H
CLR 25H
CLR 24H
CLR 23H
CLR 22H
CLR 21H
MOV 7AH,#200
MOV 7BH,#200
RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
CHUONG TRINH CON NAP XUAT DU LIEU
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
NAP_DULIEU: NOP
QUETPHIM: MOV R2,#100
BACK0: JB P2.2,PHIM_1
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
; TANG GIA TRI CAC LED(3->6) : 0 ->9->0
;TANG GIA TRI CAC LED(2) : 0 ->4->0
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
DJNZ R2,BACK0
MOV A,7DH
ADD A,#59H
MOV R0,A
INC @R0
MOV A,@R0
CJNE A,#10,$+7
JC $+4
MOV @R0,#0
CJNE R0,#5BH,$+10
CJNE A,#5,$+7
JC $+4
MOV @R0,#0
NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 6 : NHAP NHAYKHI DUOC CHON
; : KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_1: JNB 26H,QLED6ON
MOV A,5FH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED6OFF
CLR 26H
MOV 7BH,#200
QLED6ON: MOV A,5FH
ORL A,#40H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#6,QLED6OFF
DJNZ 7AH,QLED6OFF
MOV 7AH,#200
SETB 26H
QLED6OFF: MOV R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;GIAM GIA TRI CAC LED(3->6) : 9 ->0->9
;GIAM GIA TRI CAC LED(2) : 4 ->0->4
;XUAT LAI DATA DA NHAP THEO THU TU GIAM DAN THEO TUNG CHE ;DO
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK1: JB P2.3,PHIM_2
DJNZ R2,BACK1
MOV A,7DH
ADD A,#59H
MOV R0,A
DEC @R0
MOV A,@R0
CJNE A,#255,$+5
MOV @R0,#9
CJNE R0,#5BH,$+8
CJNE A,#255,$+5
MOV @R0,#4
MOV A,7DH
CJNE A,#2,$+7
JNB 30H,$+4
CALL XUATDATA
NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 5 : NHAP NHAYKHI DUOC CHON
; : KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_2: JNB 25H,QLED5ON
MOV A,5EH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED5OFF
CLR 25H
MOV 7BH,#200
QLED5ON: MOV A,5EH
ORL A,#30H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#5,QLED5OFF
DJNZ 7AH,QLED5OFF
MOV 7AH,#200
SETB 25H
QLED5OFF: MOV R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHON LED TU PHAI SANG TRAI : 6->2->6
;LED DUOC CHON NHAP NHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK2: JB P2.4,PHIM_3
DJNZ R2,BACK2
DEC 7DH
CALL DKD
MOV A,7DH
CJNE A,#2,$+8
MOV 5AH,#1
SETB 30H
JMP $+5
MOV 5AH,#0
CLR 30H
MOV A,7DH
CJNE A,#1,$+5
MOV 7DH,#6
NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED 4 : NHAP NHAYKHI DUOC CHON
; : KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_3: JNB 24H,QLED4ON
MOV A,5DH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED4OFF
CLR 24H
MOV 7BH,#200
QLED4ON: MOV A,5DH
ORL A,#20H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#4,QLED4OFF
DJNZ 7AH,QLED4OFF
MOV 7AH,#200
SETB 24H
QLED4OFF: MOV R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHON LED TU TRAI SANGPHAI : 2->6->2
;LED DUOC CHON NHAP NHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK3: JB P2.5,PHIM_4
DJNZ R2,BACK3
INC 7DH
CALL DKD
MOV A,7DH
CJNE A,#2,ST11
MOV 5AH,#1
SETB 30H
ST11: MOV 5AH,#0
CLR 30H
MOV A,7DH
CJNE A,#7,ST
MOV 7DH,#2
ST: NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED3 : NHAP NHAYKHI DUOC CHON
; : KHONG NHAP NHAY KHI DUOC KHONG CHON
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_4: JNB 23H,QLED3ON
MOV A,5CH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED3OFF
CLR 23H
MOV 7BH,#200
QLED3ON: MOV A,5CH
ORL A,#10H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#3,QLED3OFF
DJNZ 7AH,QLED3OFF
MOV 7AH,#200
SETB 23H
QLED3OFF: MOV R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;LUU GIA TRI CAN NAP THEO TUNG CHE DO
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK4: JB P2.6,PHIM_5
DJNZ R2,BACK4
INC 5AH
MOV A,5AH
MOV B,#2
DIV AB
MOV A,B
CJNE A,#0,$+8
MOV 5AH,#0
CLR 30H
JMP $+7
MOV 5AH,#1
SETB 30H
CALL NAPDATA
NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED2 : NHAP NHAYKHI DUOC CHON
; : KHONG NHAP NHAY KHI DUOC KHONG CHON
; CHI DINH CHE DO TU : 0->4
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
PHIM_5: JNB 22H,QLED2ON
MOV A,5BH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED2OFF
CLR 22H
MOV 7BH,#200
QLED2ON: MOV A,5BH
ORL A,#60H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#2,QLED2OFF
DJNZ 7AH,QLED2OFF
MOV 7AH,#200
SETB 22H
QLED2OFF: MOV R2,#100
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
; KET HOP VOI LED1=1 THOAT KHOI CHUONG TRINH NHAP DATA
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
BACK5: JB P2.7,THOAT
DJNZ R2,BACK5
INC 7FH
MOV A,7FH
MOV B,#2
DIV AB
MOV A,B
CJNE A,#0,$+8
MOV 7FH,#0
CLR 31H
JMP $+5
MOV 7FH,#1
SETB 31H
NOP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;HIEN THI LED1 : GOM 2 GIA TRI (0,1)
; 0: NAP GIA TRI ,0->1 :LUU GIA TRI
; 1:KET HOP VOI PHIM 5 XEM DATA DA NHAP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
THOAT: JNB 21H,QLED1ON
MOV A,5AH
ORL A,#00H
MOV P1,A
ACALL DELAY1
DJNZ 7BH,QLED1OFF
CLR 21H
MOV 7BH,#200
QLED1ON: MOV A,5AH
ORL A,#50H
MOV P1,A
ACALL DELAY1
MOV A,7DH
CJNE A,#1,QLED1OFF
DJNZ 7AH,QLED1OFF
MOV 7AH,#200
SETB 21H
QLED1OFF: JNB 30H,$+3
JMP $+4
JMP QUETPHIM
JNB 31H,TTQP1
CLR 30H
CLR 31H
MOV 7EH,#0
MOV 7FH,#0
JMP $+3
TTQP1: JMP QUETPHIM
RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHUONG TRINH CON NHAP DATA
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
NAPDATA: MOV A,5BH
CJNE A,#0,NAPDATA0
MOV A,5EH
SWAP A
ORL A,5FH
MOV LENGTHL,A
MOV A,5CH
SWAP A
ORL A,5DH
MOV LENGTHH,A
NAPDATA0: MOV A,5BH
CJNE A,#1,NAPDATA1
MOV A,5EH
SWAP A
ORL A,5FH
MOV TGCCL,A
MOV A,5CH
SWAP A
ORL A,5DH
MOV TGCCH,A
NAPDATA1: MOV A,5BH
CJNE A,#2,NAPDATA2
MOV A,5EH
SWAP A
ORL A,5FH
MOV SLCCL,A
MOV A,5CH
SWAP A
ORL A,5DH
MOV SLCCH,A
NAPDATA2: MOV A,5BH
CJNE A,#3,NAPDATA3
MOV A,5EH
SWAP A
ORL A,5FH
MOV SCKP1,A
MOV A,5CH
SWAP A
ORL A,5DH
MOV SCKP2,A
NAPDATA3: MOV A,5BH
CJNE A,#4,NAPDATA4
MOV A,5EH
SWAP A
ORL A,5FH
MOV LD1L,A
MOV A,5CH
SWAP A
ORL A,5DH
MOV LD1H,A
NAPDATA4: NOP
RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CHUONG TRINH CON XUAT DATA DA NHAP
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
XUATDATA: MOV A,5BH
CJNE A,#0,XUATDATA0
MOV A,LENGTHL
ANL A,#0FH
MOV 5FH,A
MOV A,LENGTHL
SWAP A
ANL A,#0FH
MOV 5EH,A
MOV A,LENGTHH
ANL A,#0FH
MOV 5DH,A
MOV A,LENGTHH
SWAP A
ANL A,#0FH
MOV 5CH,A
XUATDATA0: MOV A,5BH
CJNE A,#1,XUATDATA1
MOV A,TGCCL
ANL A,#0FH
MOV 5FH,A
MOV A,TGCCL
SWAP A
ANL A,#0FH
MOV 5EH,A
MOV A,TGCCH
ANL A,#0FH
MOV 5DH,A
MOV A,TGCCH
SWAP A
ANL A,#0FH
MOV 5CH,A
XUATDATA1: MOV A,5BH
CJNE A,#2,XUATDATA2
MOV A,SLCCL
ANL A,#0FH
MOV 5FH,A
MOV A,SLCCL
SWAP A
ANL A,#0FH
MOV 5EH,A
MOV A,SLCCH
ANL A,#0FH
MOV 5DH,A
MOV A,SLCCH
SWAP A
ANL A,#0FH
MOV 5CH,A
XUATDATA2: MOV A,5BH
CJNE A,#3,XUATDATA3
MOV A,SCKP1
ANL A,#0FH
MOV 5FH,A
MOV A,SCKP1
SWAP A
ANL A,#0FH
MOV 5EH,A
MOV A,SCKP2
ANL A,#0FH
MOV 5DH,A
MOV A,SCKP2
SWAP A
ANL A,#0FH
MOV 5CH,A
XUATDATA3: MOV A,5BH
CJNE A,#4,XUATDATA4
MOV A,LD1L
ANL A,#0FH
MOV 5FH,A
MOV A,LD1L
SWAP A
ANL A,#0FH
MOV 5EH,A
MOV A,LD1H
ANL A,#0FH
MOV 5DH,A
MOV A,LD1H
SWAP A
ANL A,#0FH
MOV 5CH,A
XUATDATA4: NOP
RET
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
;CT CON KIEM TRA 2 NUT STOP/START,PAUSE KHI CT DANG CHAY
;** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
Q1P: MOV R3,#100
BACK7: JB P2.7,EXITQ2P
DJNZ 2,BACK7
SETB 31H
EXITQ2P: NOP
RET
END
Các file đính kèm theo tài liệu này:
- Điều khiển đo và cắt chiều dài bằng vi xử lý.doc