Hướng Dẫn viết 10 chương trình ứng dụng cơ bản cho AT89C51

33 944 8
Hướng Dẫn viết 10 chương trình ứng dụng cơ bản cho AT89C51

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

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

Thông tin tài liệu

Hướng Dẫn viết 10 chương trình ứng dụng cơ bản cho AT89C51

www. Beenvn.com - Tủ Sách Online Hướng dẫn Bạn viết 10 chương trình ứng dụng bản cho ic vi ñiều khiển AT89C51 Lời nói ñầu Bạn biết, kiến thức là luôn luôn cải biến và phát triển, do ñó các bài viết của tôi ở ñây cũng luôn theo tôn chỉ của RIXIN, nghĩa là Nhật Tân        (Ngày mới, ngày mới, ngày ngày mới   日新 日新日新 日新, ,, ,日新 日新日新 日新, ,, ,日日新 日日新日日新 日日新). Các bài viết luôn ñược người soạn ñọc ñi ñọc lại và sửa lỗi, viết thêm vào các ý tưởng mới và các bài viết luôn ñược làm tươi. Nó giống như một vườn cây ñược người trồng vườn chăm coi cẩn thận và khu vườn thì ñang ngày ngày sinh trưởng, các bài viết sẽ luôn mới, luôn khác và mỗi ngày ñều ñược bổ xung tu chỉnh, và thêm mới. Mong Bạn thường xuyên quay lại ñể xem và góp ý. Người soạn: Vương Khánh Hưng. Trước hết chúng ta hãy tìm hiểu nguyên lý làm việc của ic vi ñiều khiển AT89C51 (Bạn xem hình). www. Beenvn.com - Tủ Sách Online IC AT89C51 40 chân. Công dụng của các chân như sau: * Chân 40 nối vào ñường nguồn 5V, chân 20 cho nối masse. * Chân 9 nối vào mạch reset với ñiện trở 10K và tụ 10uF. Khi mạch vừa ñược cấp ñiện, tụ nạp và kéo chân 9 lên mức áp cao tạo tác ñộng reset. Sau một lúc chân 9 trở lại mức áp thấp. IC AT89C51 bắt ñầu hoạt ñộng từ trạng thái khởi ñầu. * Chân 18, 19 mắc thạch anh ñịnh tần. Như vậy tần số xung nhịp sẽ là 1Mhz (hay 1us). Ngang thạch anh mắc 2 tụ nhỏ dùng ñể bù nhiệt ổn tần (Bạn xem hình). www. Beenvn.com - Tủ Sách Online * Chân 31 Bạn phải cho treo lên mức áp cao, ñể xác ñịnh là mạch chỉ làm việc với bộ nhớ nội (Vì mạch không dùng thêm bộ nhớ ngoài). * Bạn chú ý, ic 4 cảng, ñó là port 0 (p0), port 1 (p1), port 2 (p2) và port 3 (p3). Mỗi cảng 8 chân. Mọi hoạt ñộng của ic vi ñiều khiển ñều ñược thực hiện trên các cảng này. Ghi nhận: Bạn thấy ic AT89C51 chỉ cần một ít linh kiện bên ngoài là ñã thể chấp hành các câu lệnh ñã trong bộ nhớ EEP-ROM , Bạn dùng các câu lệnh này ñể xác ñịnh trạng thái ñiện áp cao thấp trên các cảng và dùng các mức áp cao thấp này cho việc ñiều khiển các dạng mạch ñiện, hay các thiết bị. Bài 1: Viết chương trình ñể Led trên chân số 1 (p1.0) luôn nhấp nháy. www. Beenvn.com - Tủ Sách Online ORG 0000h ; Khởi ñầu từ thanh ghi ñịa chỉ là 0000h START: CLR P1.0 ; ðặt chân p1.0 xuống mức áp thấp, Led sẽ sáng. LCALL DELAY ; Cho gọi trình làm trễ (có tên nhãn là delay). SETB P1.0 ; ðặt chân p1.0 lên mức áp cao, Led sẽ tắt LCALL DELAY ; Lại cho gọi trình làm trễ (có tên nhãn là delay). LJMP START ; Cho nhẩy về dòng lệnh với tên nhãn là start, công việc sẽ lập lại. DELAY: MOV R5,#20 ; Nạp trị 50 vào thanh nhớ r5. D1: MOV R6,#20 ; Nạp trị 20 vào thanh nhớ r6. D2: MOV R7,#248 ; Nạp trị 248 vào thanh nhớ r7. DJNZ R7,$ ; Cho giảm r7 theo bước -1 cho ñến 0. DJNZ R6,D2 ; Cho giảm r6 theo bước -1, chưa bằng 0 thì nhẩy www. Beenvn.com - Tủ Sách Online về D2. DJNZ R5,D1 ; Cho giảm r5 theo bước -1, chưa bằng 0 thì nhẩy về D1. RET ; Quay lại dòng lệnh sau lệnh lcall. END ; dừng biên dịch. Phân tích cách viết các câu lệnh : Bạn thấy khởi ñầu luôn dùng câu khai báo giả lệnh: org 0000h Nghĩa là mọi việc sẽ bắt ñầu từ thanh nhớ ñịa chỉ là 0000h. ðây cũng là thanh mà chương trình sẽ nhấy ñến mỗi khi Bạn nhấn nút Reset. và kết thúc với khai báo giả lệnh: end Các câu lệnh sau khai báo bởi giả lệnh "end" sẽ không ñược biên dịch. Nói rõ hơn về cách tính thời gian trễ của ñoạn chương trình con delay : Trong hình trên do dùng thạch anh 12MHz nên một chu kỳ máy sẽ là 1us. Vậy câu lệnh: mov r6,#20 sẽ thực hiện 2 lần. Bạn phải cho nhân 2. Từ ñó cách tính như sau: MOV R6,#20 2lần 2 D1: MOV R7,#248 2 lần 2 2+2×248=498 20× DJNZ R7,$ 2 lần 2×248 (498 DJNZ R6,D1 2 lần 2×20=40 10002 Qua các nhân thời gian trễ của ñoạn chương trình delay này là 10.002ms. Nếu Bạn mov vào r6=10 thì thời gian trễ sẽ là 5ms. www. Beenvn.com - Tủ Sách Online Nếu Bạn mov vào r6=20 thì thời gian trễ sẽ là 10ms. Và ñể thời gian trễ là 200ms. Bạn dùng thêm thanh nhớ r5. Mov vào r5=20. Và như vậy ñoạn chương trình trễ delay 200ms như sau: DELAY: MOV R5,#20 ; chuyển vào thanh ghi r5 số thập phân 20. D1: MOV R6,#20 ; chuyển vào thanh ghi r6 số thập phân 20. D2: MOV R7,#248 ; chuyển vào thanh ghi r7 số thập phân 248. DJNZ R7,$ ; cho số trong r7 giảm theo bước -1, ở tại chổchờ ñến khi bằng 0. DJNZ R6,D2 ; cho số trong r6 giảm theo bước -1, và nhẩy về D2 nếu chưa bằng 0. DJNZ R5,D1 ; cho số trong r5 giảm theo bước -1, và nhẩy về D1 nếu chưa bằng 0. RET ; quay trở lại thực hiện dóng lệnh sau lệnh call. Bài 2: Viết chương trình dùng Led trên chân 1 (p1.0) theo dõi khóa ñiện K1 trên chân 10 (p3.0). * K1 ñóng lại Led sáng . * K1 bỏ ra Led tắt. www. Beenvn.com - Tủ Sách Online ORG 0000H ; Khởi ñầu từ thanh ghi 0000h START: JB P3.0, LIG ; Lệnh nhẩy. Nếu chân p3.0 ở bit 1 thì nhẩy ñến tên nhãn LIG, Led tắt CLR P1.0 ; ðặt p1.0 về bit 0, chân p1.0 ở mức áp thấp. Led sẽ sáng SJMP START ; Nhảy về tên nhãn START. LIG: SETB P1.0 ; ðặt p1.0 về bit 1, chân p1.0 ở mức áp cao, Led tắt. SJMP START ; Nhảy về tên nhãn START. END ; Dừng biên dịch ở ñây. Phân tích cách viết các câu lệnh : Ở ñây, Bạn dùng lệnh nhẩy theo ñiều kiện bit, tức lệnh jb (jump bit) hay jnb (jump no bit). JB P3.0, LIG Lệnh này nghĩa là sẽ nhẩy theo trạng thái bit trên chân p3.0 . www. Beenvn.com - Tủ Sách Online Nếu xét chân p3.0 ở mức áp cao (nút nhấn K1 hở) thì nhẩy ñến tên nhãn LIG, và Nếu xét chân p3.0 ở mức áp thấp (nút nhấn K1 kín) thì thực hiện câu lệnh kế tiếp bên dưới. Bạn nhớ, khi chân p3.0 ở mức áp cao thì Led tắt và khi chân p3.0 ở mức áp thấp thì Led sẽ sáng. Bài 3: Viết chương trình dùng 4 led trên các chân 1 (p0.0), 2 (p0.1), 3 (p0.2), 4 (p0.3) ñể cho biết trạng thái của 4 khóa ñiện trên các chân 5 (p0.4), 6 (p0.5), 7(p0.6), 8 (p0.7). * Khi khóa ñiện ñóng lại Led tương ứng sáng. * Khi khóa ñiện nhã ra, Led tương tứng tắt. www. Beenvn.com - Tủ Sách Online ORG 0000H ; Bắt ñầu từ thanh ghi 0000h START: MOV A,P1 ; Lấy trang thái trên cảng port 1 nạp vào thanh ghi tích lũy a. ANL A,#0F0H ; dùng logic AND ñể che 4 bit thấp, giữ nguyên trạng thái 4 bit cao. RR A ; cho nội dung trong thanh ghi a quay qua phải 1 bit. RR A ; cho nội dung trong thanh ghi a quay qua phải 2 bit. RR A ; cho nội dung trong thanh ghi a quay qua phải 3 bit. www. Beenvn.com - Tủ Sách Online RR A ; cho nội dung trong thanh ghi a quay qua phải 4 bit. XOR A,#0F0H ; dùng logic Ex-OR ñể phát hiện sự khác bit trên 4 bit thấp. ; như vậy Led ứng với vị trí bit 0 sẽ phát sáng. MOV P1,A ; Chuyển trạng thái của thanh ghi a ra trên port 1 ñể làm sáng Led. SJMP START ; nhẩy về tên nhãn start ñể tiếp tục làm như trên. END ; ngừng biên dịch ở dòng lệnh này. Phân tích cách viết các câu lệnh : a- Dùng 4 phím ñể tắt mở 4 Led trên port 1 Bạn cho chuyển trạng thái của port 1 vào thanh ghi tích lũy a, chú ý trạng thái của 4 bit cao. Nó phản ảnh nút nhấn K1, K2, K3, K4. b- Dùng logic And với hằng 11110000b ñể cho che 4 bit thấp. [...]... n ph i vi t ño n chương trình ch 10ms r i m i xác l p tr ng hái c a phím, www Beenvn.com - T Sách Online ñi u này s tăng ñ sau: n ñ nh khi dùng lo i phím khí Cách vi t như REL: JNB P3.7,REL ; Khi b n nh n xu ng, n u phím t t, nó s bit 0 và s tr ng thái ch buông phím N u rung phím, nó s nh y xu ng câu l nh dư i là cho g i chương trình tr 10ms LCALL DELAY10MS ; G ; Sau chương trình tr l nh: JNB... FLAG MOV R2,#200 CPL P1.0 www Beenvn.com - T Sách Online ; Cho g i chương trình làm tr 500us ; g i l n n a chương trình dely500 ; Cho ñ m lùi và th c hi n l nh bù cpl p1.0 ñ n l n ; ð o bit trong c Flag ; N p l i s th p phân 200 vào thanh ghi r2 ; L y bù chân p1.0, ch c năng t ñ o LCALL DELY500 DJNZ R2,DV1 ; Cho g i chương trình làm tr 500us ; Cho ñ m lùi và th c hi n bù cpl p1.0 ñ n 200 l n DELY500:... t i dòng này Phân tích cách vi t các câu l nh: Trong ño n chương trình trên, chúng ta dùng ñ n l nh làm phép toán chia: div ab www Beenvn.com - T Sách Online B n l y s trong a chia cho b K t qua s chia trong a và s dư trong b ð chia a cho 10, B n ph i n p vào thanh ghi b tr 10 v i câu l nh: mov b, #10 B n chú ý ñ n trình làm tr 10ms, ñây dùng ñ tránh nh hư ng ñóc sai do rung phím, vì m... t tr kh i ñ u 0 cho thanh ghi r1 MOV A,R1 ; Cho chuy n n i dung trong r1 vào a MOV DPTR,#TABLE ; ð t ñ a ch c a b ng vào thanh ghi con tr dptr MOVC A,@A+DPTR ; L y các mã d li u trong b ng theo tr c a a và d c t vào a MOV P2,A ; Xu t d li u trong a ra port 2 ñ cho hi n s LCALL DELAY ; Cho g i chương trình làm tr , tên nhãn là delay INC R1 ; Cho tăng tr trong r1 theo ki u +1 CJNE R1, #10, NEXT ; So sánh... LCALL DELAY INC DPTR JMP LOOP MOV R4,#20 ; G i chương trình làm tr , tên nhãn là delay ; cho tăng ñ a ch b ng lên +1 ; Nh y v tên nhãn LOOP ; Vi t chương trình con dùng làm tr , tên nhãn là MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 ; N p tr th p phân 248 vào r5 ; Cho gi m theo bư c -1, ch r5 b ng 0 ; Cho r4 gi m theo bư c -1, chưa b ng 0, nh y v DJNZ R3,DELAY ; Cho r3 gi m theo bư c -1, chưa b ng 0, nh y v D1... DELAY10MS: LOOP1: CJNE A,#03H,IS3 CPL L4 LCALL DELAY SJMP START LJMP START MOV ; Cho so sánh a v i #00 ñ phát hi n s l n K1 ; L y bù L1 ñ t t/m Led D1 ; G i chương trình làm tr v i tên nhãn là delay ; Nh y không ñi u ki n v tên nhãn START ; Cho so sánh a v i #01 ñ phát hi n s l n K1 ; L y bù L2 ñ t t/m Led D2 ; G i chương trình làm tr v i tên nhãn là delay ; Nh y không ñi u ki n v tên nhãn START ; Cho. .. ; G i chương trình làm tr v i tên nhãn là delay ; Nh y không ñi u ki n v tên nhãn l n K1 ; L y bù L4 ñ t t/m Led D4 ; G i chương trình làm tr v i tên nhãn là delay ; Nh y không ñi u ki n v tên nhãn START ; Nh y không ñi u ki n v tên nhãn START R6,#20 DELAY: LOOP2: ; Cho so sánh a v i #03 ñ phát hi n s ; MOV DJNZ DJNZ Chương trình MOV LCALL DJNZ END làm tr R7,#248 R7,$ R6,LOOP1 RET R5,#20 DELAY10MS R5,LOOP2... Cho s trong a chia cho 10 (s trong b) ; ð t ñ a ch c a b ng tên là Table vào thanh con tr ; L y s t b ng theo tr trong a và k t qu gi a ; Cho xu t n i dung trong a ra port 1 ; Bây gi cho chuy n n i dung trong thanh ghi vào a ; L i l y s t b ng theo tr trong a và k t qu trong a ; Cho xu t n i dung trong a ra port 2 ; Ch buông phím SP1 ; Ch nh n phím SP1 ; G i chương trình tr 10ms, tránh hi n... Trong bài này, chúng ta cho l y d li u li t kê trong b ng ñ làm sáng các Led trên port 1 Trình t làm như sau: Trư c h t B n ch n cách làm sáng t t cho 8 Led trên port 1 v i mã 0/1 Chúng ta nh bit 0 làm Led sáng và bit 1 s làm Led t t Thí d : Mu n Led sáng nh y qua trái, chúng ta s ch n mã ñi u khi n như sau: 11111110b ñ i ra d ng mã h 16 s là 0FEH 1111 1101 b 111 1101 1b 11 1101 11b 1 1101 111b ñ ñ ñ ñ i i i... chương trình làm tr RLC A ; Cho n i dung trong thanh ghi a quay qua trái cho quay bit c C DJNZ R2,LOOP ; ð m lùi tr trong thanh ghi r2 N u chưa b ng 0 thì làm ti p LOOP MOV R2,#8 ; N p l i tr 8 vào thanh ghi r2 MOV P1,A ; Chuy n n i dung trong thanh ghi a vào c ng port 1 LCALL DELAY ; Cho g i chương trình làm tr RRC A ; Cho n i dung trong thanh ghi a quay qua ph i cho quay www Beenvn.com - T . Chuyển nội dung trong thanh ghi a vào cảng port 1. LCALL DELAY ; Cho gọi chương trình làm trễ RRC A ; Cho nội dung trong thanh ghi a quay qua phải có cho quay www. Beenvn. com - Tủ Sách Online. giảm r7 theo bước -1 cho ñến 0. DJNZ R6,D2 ; Cho giảm r6 theo bước -1 , chưa bằng 0 thì nhẩy www. Beenvn. com - Tủ Sách Online về D2. DJNZ R5,D1 ; Cho giảm r5 theo bước -1 , chưa bằng 0. K2, K3, K4. b- Dùng logic And với hằng 11 1100 00b ñể cho che 4 bit thấp. www. Beenvn. com - Tủ Sách Online Bạn lấy logic AND giữa thanh a và hằng 0f0h (hay là 11 1100 00b), cách làm

Ngày đăng: 06/04/2014, 00:01

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan