Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
610,5 KB
Nội dung
Giáo trình VXL B Trần Quang Hiếu TÓM TẮT NỘI DUNG VỀ 89C51 Lý Thuyết 89C51 I Bảng tóm tắt vùng nhớ 8951 Bản đồ nhớ Data Chip sau : Địa byte Địa byte Địa bit 7F Địa bit FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC RAM đa dụng D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 18 17 10 0F 08 07 00 B8 7F 7E 77 76 6F 6E 67 66 5F 5E 57 56 4F 4E 47 46 3F 3E 37 36 2F 2E 27 26 1F 1E 17 16 0F 0E 07 06 Bank 7D 75 6D 65 5D 55 4D 45 3D 35 2D 25 1D 15 0D 05 7C 74 6C 64 5C 54 4C 44 3C 34 2C 24 1C 14 0C 04 7B 73 6B 63 5B 53 4B 43 3B 33 2B 23 1B 13 0B 03 7A 72 6A 62 5A 52 4A 42 3A 32 2A 22 1A 12 0A 02 Bank Bank Bank ghi (mặc định cho R0 -R7) 79 71 69 61 59 51 49 41 39 31 29 21 19 11 09 01 78 70 68 60 58 50 48 40 38 30 28 20 18 10 08 00 - - BC BB BA B9 B8 IP B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 A8 AF AC AB AA A9 A8 IE A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 99 khoâng địa hoá bit 98 9F 9E 9D 9C 9B 9A 99 98 SBUF SCON 90 97 96 95 94 93 92 91 90 P1 8D 8C 8B 8A 89 không địa hoá bit không địa hoá bit không địa hoá bit không địa hoá bit không địa hoá bit TH1 TH0 TL1 TL0 TMOD 88 8F 8E 8D 8C 8B 8A 89 88 87 không địa hoaù bit TCON PCON 83 82 81 80 DPH DPL SP P0 không địa hoá bit không địa hoá bit không địa hoá bit 87 86 85 84 83 82 81 80 Trang Giáo trình VXL B Trần Quang Hiếu Chức chân 8951 a port0 : port có chức chân từ 32 đến 39 thiết kế cỡ nhỏ ( không dùng nhớ mở rộng ) có hai chức đường IO Đối với thiết kế cỡ lớn ( với nhớ mở rộng ) kết hợp kênh giữ a bus ) b port1 : port1 port I/O chân 1-8 Các chân ký hiệu P1.0, P1.1, P1.2 … dùng cho thiết bị cần Port1 chức khác, dùng giao tiếp với thiết bị c port2 : port2 port công dụng kép chân 21 – 28 dùng đường xuất nhập byte cao bus địa thiết kế dùng nhớ mở rộng d Port3 : port3 port công dụng kép chân 10 – 17 Các chân port có nhiều chức năng, công dụng chuyển đổi có liên hệ với đặc tín đặc biệt 8951 bảng sau : 30p 40 19 XTAL1 12MHz 30p 18 29 30 31 RD\ WR\ T1 T0 INT1 INT0 TXD RXD Vcc XTAL2 PSEN\ ALE EA\ RET 17 16 15 14 13 12 11 10 Vss 20 Trang Po.7 Po.6 Po.5 Po.4 Po.3 Po.2 Po.1 Po.0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 32 33 34 35 36 37 38 39 28 27 26 25 24 23 22 21 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 A15 A14 A13 A12 A11 A10 A9 A8 Giáo trình VXL B Trần Quang Hiếu Bit Tên Chức chuyển đổi P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD TXD INTO INT1 TO T1 WR RD Dữ liệu nhận cho port nối tiếp Dữ liệu phát cho port nối tiếp Ngắt bên Ngắt bên Ngõ vào timer/counter Ngõ vào timer/counter Xung ghi nhớ liệu Xung đọc nhớ liệu Bảng 2.1 : Chức chân treân port3 e PSEN (Program Store Enable ) : 8951 có tín hiệu điều khiển PSEN tín hiệu chân 29 Nó tín hiệu điều khiển phép nhớ chương trình mở rộng thường nối đến chân OE (Output Enable) EPROM phép đọc bytes mã lệnh PSEN mức thấp thời gian lấy lệnh Các mã nhị phân chương trình đọc từ EPROM qua bus chốt vào ghi lệnh 8951 để giải mã lệnh Khi thi hành chương trình ROM nội (8951) PSEN mức thụ động (mức cao) f ALE (Address Latch Enable ) : tín hiệu ALE chân 30 tương hợp với thiết bị làm việc với xử lí 8585, 8088, 8086, 8951 dùng ALE cách tương tự cho làm việc giải kênh bus địa liệu port dùng chế độ chuyển đổi : vừa bus liệu vừa búyt thấp địa chỉ, ALE tín hiệu để chốt địa vào ghi bên đầu chu kỳ nhớ Sau đó, đường port dùng để xuất nhập liệu sau chu kỳ nhớ Các xung tín hiệu ALE có tốc độ 1/6 lần tần số dao động chip dùng nguồn xung nhịp cho hệ thống Nếu xung 8951 12MHz ALE có tần số 2MHz Chỉ ngoại trừ thi hành lệnh MOVX, xung ALE bị Chân làm ngõ vào cho xung lập trình cho EPROM 8951 g EA (External Access) : Tín hiệu vào EA chân 31 thường mắc lên mức cao (+5V) mức thấp (GND) Nếu mức cao, 8951 thi hành chương trình từ ROM nội khoảng địa thấp (4K) Nếu mức thấp, chương trình thi hành từ nhớ mở rộng Khi dùng 8031, EA nối mức thấp nhớ chương trình chip Trang Giáo trình VXL B Trần Quang Hiếu Nếu EA nối mức thấp nhớ bên chương trình 8951 bị cấm chương trình thi hành từ EPROM mở rộng Người ta dùng chân EA làm chân cấp điện áp 21V lập trình cho EPROM 8951 h SRT (Reset) : Ngõ vào RST chân ngõ reset 8951 Khi tín hiệu đưa lên múc cao (trong chu kỳ máy ), ghi 8951 tải giá trị thích hợp để khởi động hệ thống i Các ngõ vào dao động chip : Như thấy hình , 8951 có dao động chip Nó thường nối với thạch anh hai chân 18 19 Các tụ cần thiết vẽ Tần số thạch anh thông thường 12MHz J Các chân nguồn : 8951 vận hành với nguồn đơn +5V Vcc nối vào chân 40 Vss (GND) nối vào chân 20 c Các bank ghi : 32 byte thấp nhớ nội dành cho bank ghi Bộ lệnh 8951 hổ trợ ghi (RO đến R7) theo mặc định (sau Reset hệ thống) ghi địa 00H-07H Lệnh sau đọc nội dung địa 05H vào ghi tích lũy MOV A,R5 Đây lệnh byte dùng địa ghi Tất nhiên, thao tác tương tự thi hành lệnh byte dùng địa trực tiếp nằm byte thứ hai: MOV A,05H Các lệnh dùng ghi R0 đến R7 ngắn nhanh lệnh tương ứng dùng địa trực tiếp Các giá trị liệu dùng thường xuyên nên dùng ghi Bank ghi tích cực chuyển đổi cách thay đổi bit chọn bank ghi từ trạng thái chương trình (PSW) Giả sử bank ghi tích cực, lệnh sau ghi nội dung ghi tích lũy vào địa 18H: MOV R0,A Ý tưởng dùng “các bank ghi” cho phép “chuyển hướng” chương trình nhanh hiệu qủa (từng phần riêng rẽ phần mềm có ghi riêng không phụ thuộc vào phần khác) Trang Giáo trình VXL B Trần Quang Hiếu Thanh ghi trạng ta thái nghóa Cờ nhớ Cờ nhớ phụ Cờ Bit chọn bank ghi Bit chọn bank ghi 00=bank 0; địa 00H-07H 01=bank 1: địa 08H-0FH 10=bank 2:địa 10H-17H 11=bank 3:địa 18H-1FH PSW.2 OV D2H Cờ tràn PSW.1 D1H Dự trữ PSW.0 P D0H Cờ Parity chẵn • Cờ nhớ (CY) có công dụng kép Thông thường dùng cho lệnh toán học: set có số nhớ sinh phép cộng có số mượn phép trừ Ví dụ, ghi tích lũy chứa FFH, lệnh sau: ADD A,#1 Sẽ trả ghi tích lũy kết qủa 00H set cờ nhớ PSW Cờ nhớ xem ghi bit cho lệnh luận lý thi hành bit Ví dụ, lệnh AND bit 25H với cờ nhớ đặt kết qủa trở vào cờ nhớ: ANL C,25H • Cờ nhớ phụ: Khi cộng số BCD, cờ nhớ phụ (AC) set kết qủa bit thấp khoảng 0AH đến 0FH Nếu giá trị cộng số BCD, sau lệnh cộng cần có DA A( hiệu chỉnh thập phân ghi tích lũy) để mang kết qủa lớn trở tâm từ 0ữ9 ã Cụứ Cụứ (F0)laứ moọt bit cụứ đa dụng dành ứng dụng người dùng • Các bit chọn bank ghi Các bit chọn bank ghi (RSO RS1) xác định bank ghi tích cực Chúng xóa sau reset hệ thống thay đổi phần mềm cần Ví dụ, ba lệnh sau cho phép bank ghi di chuyển nội dung ghi R7 (địa byte IFH) đến ghi tích lũy: SETB RS1 SETB RSO MOV A,R7 Bit PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 Ký hiệu CY AC F0 RS1 RS0 Địa D7H D6H D5H D4H D3H Trang Giáo trình VXL B Trần Quang Hiếu Khi chương trình hợp dịch địa bit thay cho ký hiệu “RS1” “RS0” Vậy lệnh SETB RS1 giống lệnh SETB 0D4H • Cờ Tràn Cờ tràn (OV) set lệnh cộng trừ có phép toán bị tràn Khi số có dấu cộng trừ với nhau, phần mềm kiểm tra bit để xác định xem kết qủa có nằm tầm xác định không Khi số không dấu cộng, bit OV bỏ qua Các kết qủa lớn +127 nhỏ –128 set bit OV Lệnh reset 8951 reset cách giữ chân RST mức cao chu kỳ máy trả múc thấp RST kích cấp điện dùng mạch R-C +5V +5V 100 10UF ,2 K Hình 2.9: Mạch reset hệ thống Trạng thái tất ghi 8951 sau reset hệ thống tóm tắt bảng sau: Thanh ghi Nội dung Đếm chương trình 0000H Tích lũy 00H 00H B 00H PSW 07H SP 0000H DPTR FFH Port 0-3 XXX00000B IP 0XX00000B IE 00H Các ghi định thời 00H SCON 00H SBUF 0XXXXXXB PCON(HMOS) 0XXX0000B PCON(CMOS) Bảng 2.3: Trạng thái ghi sau reset Trang Giáo trình VXL B Trần Quang Hiếu Quan trọng ghi ghi đếm chương trình, đặt lại 0000H Khi RST trở lại mức thấp, việc thi hành chương trình bắt đầu địa nhớ chương trình: địa 0000H Nội dung RAM chip không bị thay đổi lệnh reset Hoạt động định thời (timer) Truy xuất timer 8951 dùng ghi chức đặc biệt cho bảng sau: SFR MỤC ĐÍCH ĐỊA CHỈ Địa hóa bit TCON TMOD TL0 TL1 TH0 TH1 Điều khiển timer 88H Có Chế độ timer 89H Không Byte thấp timer 8AH Không 8BH Không Byte thấp timer 8CH Không 8DH Không Byte cao timer Byte cao timer Bảng 2.4: Thanh ghi chức đặc biệt dùng timer Thanh ghi chế độ timer (TMOD) Thanh ghi TMOD chứa hai nhóm bit dùng để đặt chế độ làm việc cho timer timer Bit Tên Timer entry C/T M1 M0 1 GATE C/T M1 M0 0 0 Mô tả Bit (Mở) cổng, lên timer chạy INT1 mức cao Bit chọn chế độ counter/timer 1=bộ đếm kiện 0=bộ định khoảng thời gian Bit chế độ(mode) Bit chế độ 00: chế độ : timer 13 bit 01: chế độ : timer 16 bit 10: chế độ : tự động nạp lại 8255A bit 11: chế độ : tách timer Bit (mở) cổng Bit chọn counter/timer Bit chế độ Bit chế độ Bảng 2.5: Tóm tắt ghi TMOD Trang Giáo trình VXL B Trần Quang Hiếu Thanh ghi điều khiển timer (TCON) Thanh ghi TCON chứa bit trạng thái bit điều khiển cho timer timer Bit Ký hiệu Địa Mô tả TCON.7 TF1 8FH Cờ báo tràn timer Đặt phần cứng tràn, xóa phần mềm phần cứng xử lý đến chương trình phục vụ ngắt TCON.6 TR1 8EH TCON.5 TCON.4 TCON.3 TCON.2 TF0 TR0 IE1 IT1 8DH 8CH 8BH 8AH TCON.1 TCON.0 IE0 IT0 89H 88H Bit điều khiển timer chạy Đặt/xóa phần mềm cho timer chạy/ngưng Cờ báo tràn timer Bit điều khiển timer chạy Cờ cạnh ngắt bên ngoài, đặc Cờ kiểu ngắt bên phần cứng phát cạnh xuống INT1, xóa phần mềm phần cứng CPU đến chương trình phục vụ ngắt Đặt/xóa phần mềm đề ngắt tích cực cạnh xuống/mức thấp Cờ cạnh ngắt bên Cờ kiểu ngắt bên Bảng 2.6: Tóm tắt ghi TCON Khởi động truy xuất ghi timer Thông thường ghi khởi động lần đầu chương trình để đặt chế độ làm việc cho Sau thân chương trình timer cho chạy, dừng , bit cờ kiểm tra xóa, ghi timer đọc cạp nhật theo đòi hỏi ứng dụng TMOD ghi thứ khởi động đặt chế độ hoạt động Ví dụ lệnh sau khởi động timer timer 16 bit (chế độ 1) có xung nhịp từ dao động chíp cho việc địng khoảng thời gian MOV TMOD,#00010000B Lệnh đặt M1=0 vả M0=1 cho chế độ 1, C/T=0 GATE=0 cho xung nhịp nội xóa bit chế độ timer Dó nhiên timer thật không bắt đầu định thời bit điều khiển chạyy TR1 đặt lên Trang Giáo trình VXL B Trần Quang Hiếu Nếu cần số đếm ban đầu, ghi timer TL1/TH1 phải khởi động Nhớ lại timer đếm lên đặt cờ báo tràn có truyển tiếp FFFFH sang 0000H - Đọc timer chạy Trong số ứng dụng cần đọc giá trị ghi timer chạy Vì phải đọc ghi timer “sai pha” xẩy byte thấp tràn vào byte cao hai lần đọc Giá trị đọc không Giải pháp đọc byte cao trước, kế đọc byte thấp đọc byte cao lại lần Nếu byte cao thay đổi lập lại hoạt động đọc Các khoảng ngắn khoảng dài Dãy khoảng thời gian định thời ? vấn đề khảo sát với 8951 hoạt động với tần số 12MHz xung nhịp timer có tần số MHz Khoảng thời gian ngắn có bị giới hạn không tần số xung nhịp timer mà phần mềm Do ảnh hưởng thời khoảng thực lệnh Lệng ngắn 8951 chu kỳ máy hay 1µs Sau bảng tóm tắt kỹ thuật để tạo khoảng thời gian có chiều dài khác (với giả sử xung nhịp cho 8951 có tần số 12 MHz) Khoảng thời gian tối đa ≈10 256 65535 Không giới hạn Kỹ thuật - Bằng phần mềm - Timer bit với tự động nạp lại - Timer 16 bit - Timer 16 bit cộng với vòng lập phần mềm Các kỹ thuật để lập trình khoảng thời gian (FOSC=12 MHz) Hoạt động port nối tiếp Giới thiệu 8951 có port nối tiếp chip hoạt động nhiều chế độ khác dãy tần số rộng Chức chủ yếu port nối tiếp thực chuyển đổi song song sang nối tiếp với liệu xuất chuyển đồi nối tiếp sang song song với liệu nhập Truy xuất phần cứng đến port nối tiếp qua chân TXD RXD Các chân có chức khác với hai bit port P3 chân 11 (TXD) P3.0 chân 10 (RXD) Port nối tiếp cho hoạt động song công (full duplex : thu phát đồng thời) đệm lúc thu (receiver buffering) cho phép ký tự thu giữ ký tự thứ hai nhận Nếu CPU đọc ký tự thứ trước ký tự thứ hai thu đầy đủ liệu không bị Trang Giáo trình VXL B Trần Quang Hiếu Hai ghi chức đặc biệt cho phép phần mềm truy xuất đến port nối tiếp : SBUF SCON Bộ đếm port nối tiếp (SBUF) đại 99H thật sử hai đếm Viết vào SBUF để truy xuất liệu thu Đây hai ghi riêng biệt ghi ghi để phát ghi để thu TXD (P3.1) RXD (P3.0) CLK SUBF (Chæ ghi) Q D CLK Xung nhịp tốc Độ baud (thu) Xung nhịp tốc Độ baud (thu) Thanh ghi dịch SBUF (chỉ đọc) SBUF (chỉ đọc) BUS nội 8951 Hình 2.9: Sơ đồ port nối tiếp Thanh ghi điều khiển port nối tiếp (SCON) địa 98H ghi có địa bit chứa bit trạng thái bit điều khiển Các bit điều khiển đặt chế độ hoạt động cho port nối tiếp, bit trạng thái báo cáo kết thúc việc phát thu ký tự Các bit trạng thái kiểm tra phần mềm lập trình để tạo ngắt Tần số làm việc port nối tiếp gọi tốc độ baund cố định (lấy từ giao động chip) Nếu sử dụng tốc độ baud thay đổi, timer cung cấp xung nhịp tốc độ baud phải lập trình Thanh ghi điều khiển port nối tiếp Chế độ hoạt động port nối tiếp đặt cách ghi vào ghi chế độ port nối tiếp (SCON) địa 98H Sau bảng tóm tắt ghi SCON chế độ port nối tiếp : Trang 10 Giáo trình VXL B GVGD : Nguyễn Viên Quốc JNB ACC.6,ROW_2 JNB ACC.7,ROW_3 RL A ; chua^?n bi no^'i GND INC R7 ; co^.t tie^'p theo CJNE R7,#4,CONT ; la^`n luo+.t no^'i GND co^.t SJMP SCAN ; quay la.i que't tu+` co^.t ROW_0: MOV A,R7 ; Row=0, Col=R7 ADD A,#0 ; A = + R7 SJMP EXIT ROW_1: MOV A,R7 ; Row=1, Col=R7 ADD A,#4 ; A = + R7 SJMP EXIT ROW_2: MOV A,R7 ; Row=2, Col=R7 ADD A,#8 ; A = + R7 SJMP EXIT ROW_3: MOV A,R7 ; Row=3, Col=R7 ADD A,#12 ; A = 12 + R7 EXIT: POP RET DELAY: PUSH PUSH MOV R7,#0FFh LP1: MOV R6,#0FFh LP0: DJNZ R6,LP0 DJNZ R7,LP1 POP POP RET END LED • counter_led ; Que't LED ; a,b,c,d,e,f,g -> Port ; P3.0 -> LED1 ; P3.1 -> LED2 ; P3.2 -> LED3 ; P3.4(T0) -> Button ; 40h: ha`ng do+n vi ; 41h: ha`ng chu.c ; 42h: ha`ng tra(m ORG MOV 0H DPTR,#LED7SEG ; DPTR tro? dde^'n ba?ng ma~ LED Trang 41 Giáo trình VXL B GVGD : Nguyễn Viên Quốc MOV TMOD,#06h ; counter 0, mode MOV TH0,#0 SETB P3.0 ; ta('t ta^'t ca? ca'c LED SETB P3.1 SETB P3.2 SETB P3.4 ; P3.4: input SETB TR0 ; cho phe'p counter cha.y BEGIN: MOV A,TL0 LCALL BIN2BCD ; tra ba?ng, ddo^?i BCD -> LED ddoa.n MOV A,40h MOVC A,@A+DPTR MOV 40h,A MOV A,41h MOVC A,@A+DPTR MOV 41h,A MOV A,42h MOVC A,@A+DPTR MOV 42h,A LCALL DISPLAY SJMP BEGIN DISPLAY: MOV P2,40H ; LED1 CLR P3.0 ; ba^.t LED1 sa'ng ACALL DELAY ; delay SETB P3.0 ; ta('t LED1 MOV P2,41H ; LED2 CLR P3.1 ; ba^.t LED2 sa'ng ACALL DELAY ; delay SETB P3.1 ; ta('t LED2 MOV P2,42H ; LED CLR P3.2 ; ba^.t LED3 sa'ng ACALL DELAY ; delay SETB P3.2 ; ta('t LED3 RET BIN2BCD: MOV B,#10 DIV AB MOV 40h,B MOV B,#10 DIV AB MOV 41h,B ; B=10 ; chia cho 10 ; lu+u digit tha^'p ; ; chia cho 10 ; lu+u digit tie^'p theo va`o 41h Trang 42 Giáo trình VXL B MOV RET 42h,A GVGD : Nguyễn Viên Quốc ; lu+u digit cuo^'i va`o 42h DELAY: MOV R1,#10 MOV R0,#0FFh LOOP: DJNZ R0,LOOP DJNZ R1,LOOP RET ; LED7SEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H DB 88H,0C6H,86H,8EH,82H,89H END • quetled ; a,b,c,d,e,f,g -> Port ; P3.0 -> LED1 ; P3.1 -> LED2 ; P3.1 -> LED3 ORG 0H MOV P3,#0FFH MOV DPTR,#LED7SEG BEGIN: MOV A,#4 MOVC A,@A+DPTR MOV 40H,A MOV A,#3 MOVC A,@A+DPTR MOV 41H,A MOV A,#2 MOVC A,@A+DPTR MOV 42H,A MOV A,#1 MOVC A,@A+DPTR MOV 43H,A LCALL DISPLAY SJMP BEGIN DISPLAY: ; LED1 MOV P2,40H CLR P3.0 Trang 43 Giáo trình VXL B GVGD : Nguyễn Viên Quốc ACALL DELAY_25 SETB P3.0 ; LED2 MOV P2,41H CLR P3.1 ACALL DELAY_25 SETB P3.1 ; LED MOV P2,42H CLR P3.2 ACALL DELAY_25 SETB P3.2 ; LED MOV P2,43H CLR P3.3 ACALL DELAY_25 SETB P3.3 RET ; DELAY_25: MOV R1,#10 MOV R0,#0 LOOP: DJNZ R0,LOOP DJNZ R1,LOOP RET ; LED7SEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H DB 88H,0C6H,86H,8EH,82H,89H END • quetled_123 ; a,b,c,d,e,f,g -> Port ; P3.0 -> LED1 ; P3.1 -> LED2 ; P3.1 -> LED3 ORG 0H MOV P3,#0FFh ; ta('t ta^'t ca? ca'c LED BEGIN: MOV P2,#0B0h ; xua^'t P2 ma~ cu?a '3' CLR P3.0 ; ba^.t LED1 ACALL DELAY ; delay SETB P3.0 ; ta('t LED1 MOV P2,#0A4h ; xua^'t P2 ma~ cu?a '2' CLR P3.1 ; ba^.t LED2 ACALL DELAY ; delay Trang 44 Giáo trình VXL B SETB P3.1 GVGD : Nguyễn Viên Quốc ; ta('t LED2 MOV P2,#0F9h ; xua^'t P2 ma~ cu?a '1' CLR P3.2 ; ba^.t LED3 ACALL DELAY ; delay SETB P3.2 ; ta('t LED3 SJMP BEGIN DELAY: MOV R1,#10 MOV R0,#0FFh LOOP: DJNZ R0,LOOP DJNZ R1,LOOP RET END • quetled_8255 ORG 0H MOV MOV MOVX MOV MOV BEGIN: MOV MOVC MOV DPTR,#4003H A,#80H @DPTR,A P3,#0FFH DPTR,#LED7SEG A,#4 A,@A+DPTR 40H,A MOV A,#3 MOVC A,@A+DPTR MOV 41H,A MOV A,#2 MOVC A,@A+DPTR MOV 42H,A MOV A,#1 MOVC A,@A+DPTR MOV 43H,A LCALL DISPLAY SJMP BEGIN DISPLAY: PUSH PUSH MOV MOV DPH DPL A,40H DPTR,#4000H Trang 45 Giáo trình VXL B MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0FEH MOVX @DPTR,A ACALL DELAY_25 GVGD : Nguyeãn Viên Quốc ; chon LED o PB MOV A,41H ; xuat nd o nho 41h PA MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H ; cho.n MOV A,#0FDH MOVX @DPTR,A ACALL DELAY_25 MOV A,42H MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0FBH MOVX @DPTR,A ACALL DELAY_25 MOV A,43H MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0F7H MOVX @DPTR,A ACALL DELAY_25 POP DPL POP DPH RET ; DELAY_25: MOV R1,#10 MOV R0,#0 LOOP: DJNZ R0,LOOP DJNZ R1,LOOP RET ; LED7SEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H DB 88H,0C6H,86H,8EH,82H,89H END • quetled_8255_ram Trang 46 Giáo trình VXL B ORG 0H MOV MOV MOVX MOV MOV BEGIN: MOV MOVC MOV MOVX MOV GVGD : Nguyễn Viên Quốc DPTR,#4003H A,#80H @DPTR,A P3,#0FFH DPTR,#LED7SEG A,#9 A,@A+DPTR DPTR,#2000H @DPTR,A DPTR,#LED7SEG MOV A,#3 MOVC A,@A+DPTR MOV 41H,A MOV A,#2 MOVC A,@A+DPTR MOV 42H,A MOV A,#1 MOVC A,@A+DPTR MOV 43H,A LCALL DISPLAY SJMP BEGIN DISPLAY: PUSH DPH PUSH DPL MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0FEH MOVX @DPTR,A ACALL DELAY_25 MOV MOV MOVX MOV MOV MOVX ; chon LED o PB A,41H ; xuat nd o nho 41h PA DPTR,#4000H @DPTR,A DPTR,#4001H ; cho.n A,#0FDH @DPTR,A Trang 47 Giáo trình VXL B GVGD : Nguyễn Viên Quốc ACALL DELAY_25 MOV A,42H MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0FBH MOVX @DPTR,A ACALL DELAY_25 MOV A,43H MOV DPTR,#4000H MOVX @DPTR,A MOV DPTR,#4001H MOV A,#0F7H MOVX @DPTR,A ACALL DELAY_25 POP DPL POP DPH RET ; DELAY_25: MOV R1,#10 MOV R0,#0 LOOP: DJNZ R0,LOOP DJNZ R1,LOOP RET ; LED7SEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H DB 88H,0C6H,86H,8EH,82H,89H END • Led Blink ORG LOOP: SETB P2.0 ACALL DELAY CLR P2.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#0FFh LP2: MOV R7,#0FFh LP1: DJNZ R7,LP1 DJNZ R6,LP2 RET Trang 48 Giáo trình VXL B GVGD : Nguyễn Viên Quốc • Switch Led On ORG SETB P3.0 ;P3.0: input LOOP: JNB P3.0,LOOP LOOP1: JB P3.0,LOOP1 CLR P2.0 ACALL DELAY SETB P2.0 SJMP LOOP DELAY: MOV R6,#0FFh LP2: MOV R7,#0FFh LP1: DJNZ R7,LP1 DJNZ R6,LP2 RET SERIALPORT • Receive_Char_Send_To_P1 ; Nha^.n ky' tu+ tu+` serial port, xua^'t P1 ORG MOV TMOD,#20H ;timer1, mode (auto reload) MOV TH1,#-6 ;4800 baud MOV SCON,#50H ;8-bit, REN enabled SETB TR1 ;cho phe'p timer cha.y HERE: JNB RI,HERE ;cho+` thu xong (cho+` RI=1) MOV A,SBUF ;ddo.c du+~ lie^.u va`o A MOV P1,A ;xua^'t port CLR RI ;xo'a RI dde^? chua^?n bi nha^.n byte tie^'p theo SJMP HERE • Transmit ; pha't ki' tu+ 'A' lie^n tu.c ; XTAL 11.0592MHz MOV TMOD,#20H ; timer 1, mode MOV TH1,#-6 ; 4800 baud rate MOV SCON,#50H ; 8-bit UART, REN enable SETB TR1 ; cho phe'p Timer cha.y AGAIN: MOV SBUF,#'A' ; pha't ky' tu+ 'A' HERE: JNB TI,HERE ; cho+` pha't xong CLR TI ; xo'a TI SJMP AGAIN ; tie^'p tu.c pha't • Transmit_B ; xua^'t ki' tu+ 'B' lie^n tu.c ORG MOV A,PCON ;A=PCON SETB ACC.7 ; Trang 49 Giáo trình VXL B MOV MOV MOV MOV SETB MOV A_1: CLR MOV H_1: JNB SJMP GVGD : Nguyễn Viên Quốc PCON,A ;SMOD=1 TMOD,#20H ;Timer 1, mode 2,auto reload TH1,-3 ;baud rate 19200 SCON,#50H ;8-bit data, RI enabled TR1 ;cho phe'p Timer cha.y A,#'B' ;luu+ ma~ ASCII cu?A 'B' va`o ACC TI ;xo'a TI SBUF,A ;pha't TI H_1 ;cho+` pha't xong A_1 ;tie^'p tu.c pha't • Transmit_String_Receive_Char ; Pha't chuo^~i "We are ready!" ; Sau ddo' nha^.n ki' tu+ tu+` serial port, xua^'t no' P1 ORG MOV P2,#0FFH ;P2: input port MOV TMOD,#20H ;timer 1,mode 2(auto-reload) MOV TH1,#0FAH ;4800 baud rate MOV SCON,#50H ;8-bit, REN enabled SETB TR1 ;cho phe'p timer cha.y MOV DPTR,#MYDATA ;na.p ddi.a chi? chuo^~i va`o DPTR H_1: CLR A MOVC A,@A+DPTR ;ddo.c ki' tu+ JZ B_1 ;nha?y ne^'u la` ki' tu+ NULL (0) ACALL SEND ;ne^'u kho^ng, go.i CT SEND INC DPTR ;ta(ng tro? DPTR SJMP H_1 B_1: MOV A,P2 ACALL SEND ACALL RECV MOV P1,A SJMP B_1 ;ddo.c du+~ lie^.u o+? P2 ;xua^'t ki' tu+ ddo' port nt ;nha^.n du+~ lie^.u tu+` port nt ;xua^'t P1 ; ;CTC pha't data ACC chu+'a data ca^`n pha't SEND: MOV SBUF,A ;na.p data va`o SBUF dde^? pha't H_2: JNB TI,H_2 ;cho+` pha't xong CLR TI ;xo'a TI RET ; ;CTC nha^.n data tu+` port nt RECV: JNB RI,RECV ;cho+` thu xong MOV A,SBUF ;ca^'t data va`o ACC CLR RI ;xo'a RI RET ; ; Trang 50 Giáo trình VXL B MYDATA: DB END GVGD : Nguyễn Viên Quốc 'We Are Ready!',0 • transmit_YES ORG 0h MOV TMOD,#20H ;timer 1, mode MOV TH1,#-3 ;9600 baud MOV SCON,#50H ;8-bit, REN enabled SETB TR1 ;cho phe'p Timer cha.y AGAIN: MOV A,#'Y' ;pha't 'Y' ACALL TRANS MOV A,#'E' ;pha't 'E' ACALL TRANS MOV A,#'S' ;pha't 'S' ACALL TRANS SJMP AGAIN ;CTC pha't du+~ lie^.u TRANS: MOV SBUF,A ;na.p data va`o SBUF HERE: JNB TI,HERE ;cho+` pha't xong CLR TI ;xo'a TI RET Timer • Counter ; DDe^'m xung ngoa`i tu+` ngo~ T1 (P3.5) MOV TMOD,#01100000B ; counter 1,mode 2,C/T=1 ; xung ngoa`i MOV TH1,#0 ; xo'a TH1 SETB P3.5 ; T1: input AGAIN: SETB TR1 ; cho phe'p dde^'m BACK: MOV A,TL1 ; ddo.c tri dde^'m o+? TL1 MOV P2,A ; xua^'t port JNB TF1,Back ; dde^'m cho dde^'n TF=0 CLR TR1 ; du+`ng counter CLR TF1 ; xo'a co+` TF SJMP AGAIN • Delay ; Delay da`i (Timer tra`n nhie^`u la^`n) MOV TMOD,#10H ; Timer 1,mode 1(16-bit) MOV R3,#200 ; bie^'n dde^'m so^' la^`n tra`n AGAIN: MOV TL1,#08 ; TL1=08,low byte MOV TH1,#01 ; TH1=01,Hi byte SETB TR1 ; cho phe'p Timer cha.y BACK: JNB TF1,BACK ; cho+` Timer tra`n CLR TR1 ; du+`ng timer CLR TF1 ; xo'a TF1 Trang 51 Giáo trình VXL B DJNZ R3,AGAIN ; GVGD : Nguyễn Viên Quốc ; tie^'p tu.c ne^'u R3 chu+a = END • Pulse ; pha't xung o+? P1.5 ORG MOV TMOD,#01 ; Timer 0,mode 1(16-bit mode) HERE: MOV TL0,#0F2H ; TL0=F2H, low byte MOV TH0,#0FFH ; TH0=FFH, high byte CPL P1.5 ; dda?o bit P1.5 ACALL DELAY SJMP HERE ; ; delay using timer DELAY: SETB TR0 ; cho phe'p Timer cha.y AGAIN: JNB TF0,AGAIN ; cho+` Timer tra`n CLR TR0 ; du+`ng Timer CLR TF0 ; xo'a TF0 RET • Pulse1 ; pha't xung ta.i P1.5 du`ng Timer 1, mode ORG MOV TMOD,#10H ; timer 1, mode 1(16-bit) AGAIN: MOV TL1,#34H ; TL1=34H,low byte MOV TH1,#76H ; TH1=76H,Hi byte ; (tri dde^'m = 7634H) SETB TR1 ; cho phe'p timer cha.y BACK: JNB TF1,BACK ; cho+` Timer tra`n CLR TR1 ; ddu+`ng timer CPL P1.5 ; dda?o bit P1.5 CLR TF1 ; xo'a TF1 SJMP AGAIN ; • Pulse2 ; pha't xung ta.i P1.5 MOV TMOD,#10H ;timer 1, mode 1(16-bit) AGAIN: MOV TL1,#1AH ;TL1=1A,low byte MOV TH1,#0FFH ;TH1=FF,Hi byte SETB TR1 ;cho phe'p Timer cha.y BACK: JNB TF1,BACK ;cho+` Timer tra`n CLR TR1 ;du+`ng Timer CPL P1.5 ;dda?o bit P1.5 CLR TF1 ;xo'a TF1 SJMP AGAIN ; • Pulse3 ; pha't xung ta.i P2.3 ORG Trang 52 Giaùo trình VXL B GVGD : Nguyễn Viên Quốc MOV TMOD,#10H ;timer 1, mode (16-bit) AGAIN: MOV TL1,#00 ;TL1=00, low byte MOV TH1,#0DCH ;TH1=DC, hi byte SETB TR1 ;cho phe'p Timer cha.y BACK: JNB TF1,BACK ;cho+` tra`n CLR TR1 ;du+`ng Timer CPL P2.3 ;dda?o bit P2.3 CLR TF1 ;xo'a TF1 SJMP AGAIN ; • Pulse4 ORG MOV TMOD,#2H ; Timer 0,mode ; (8-bit,auto reload) MOV TH0,#-150 ; TH0=6AH = bu`2 cu?a -150 AGAIN: SETB P1.3 ; P1.3=1 ACALL DELAY ACALL DELAY CLR P1.3 ; P1.3=0 ACALL DELAY SJMP AGAIN DELAY: SETB TR0 ; cho phe'p Timer cha.y BACK: JNB TF0,BACK ; cho+` TF0 tra`n CLR TR0 ; du+`ng Timer0 CLR TF0 ; xo'a TF0 RET • Pulse5 ; pha't xung o+? P1.0 ORG MOV TMOD,#2H ;Timer 0,mode ;(8-bit,auto reload) MOV TH0,#0 ;TH0=0 AGAIN: MOV R5,#250 ;dde^'m so^' la^`n tra`n (250 la^`n) ACALL DELAY CPL P1.0 SJMP AGAIN DELAY: SETB TR0 ;cho phe'p Timer0 cha.y BACK: JNB TF0,BACK ;cho+` tra`n CLR TR0 ;du+`ng timer CLR TF0 ;xo'a TF0 DJNZ R5,DELAY RET Trang 53 Giáo trình VXL B GVGD : Nguyễn Viên Quốc Trang 54 ... Output READ STANDBY PROGAM PROGRAM VERYFY PROGRAM INHIBIT Vil Vih Vil Vil Vil X X Vil Vih X Vil Vih Vcc Vcc Vpp Vpp Vcc Vcc Vcc Vcc Dout HighZ Din Dout Vih X X Vpp Vcc HighZ B? ?? NHỚ RAM -Ram nhớ truy... gián tiếp nội dung vùng RAM xuống INC DPTR (1,2): Tăng nội dng trỏ liệu lên MUL AB (1,4): Nhân nội dung ghi A với nội dung ghi B DIV AB (1,4): Chia noäi dung ghi A cho noäi dung ghi B DA A (1,1,):... tích trữ tụ điện Trang 19 Giáo trình VXL B GVGD : Nguyễn Vi? ?n Quốc Tóm tắt lệnh thường dùng VXL 89C51 a Nhóm lệnh xử lý số học: ADD A,Rn (1byte, chu kỳ máy) : cộng nội dung ghi Rn vào ghi A ADD