Điều khiển đo và cắt chiều dài bằng vi xử lý

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)

doc97 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2677 | Lượt tải: 0download
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:

  • docĐiều khiển đo và cắt chiều dài bằng vi xử lý.doc