Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
1,73 MB
Nội dung
CHƯƠNG GIẢI MÃ ĐỊA CHỈ&GIAO TIẾP NGOẠI VI Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Nhắc lại: MCU8051 cho phép giao tiếp nhớ chương trình(code) nhớ liệu(data) ngồi tối đa 64KB Kết nối bus địa tối đa 16 đường địa ký hiệu từ A0 đến A15,trong byte thấp địa A0 – A7 xuất Port0 phần đầu chu kỳ nhận lệnh (truy xuất code)/thực thi lệnh(truy xuất data)với tín hiệu ALE tích cực,qua mạch chốt IC 74LS/HC373 chốt địa byte thấp,cùng với byte cao địa A8-A15 xuất Port2 suốt chu kỳ nhận lệnh(truy xuất code)/thực thi lệnh(truy xuất data) Kết nối bus data D0 – D7 ≡Port0 với bus data nhớ Bộ nhớ code data có bus địa chỉ,phân biệt tín hiệu điều khiển: /PSEN kết nối với /OE IC nhớ code(ROM) /RD /WR kết nối với /OE /WE IC nhớ data(RAM) Trên IC nhớ có tín hiệu chọn chip /CS thường tích cực mức - /CS=0 :chip chọn,cho phép bus data IC nhớ kết nối với bus data hệ thống(MCU) - /CS=1 : chip bị cấm,bus data IC nhớ trạng thái hi-Z ngắt khỏi bus data hệ thống Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: 1.Trường hợp nhớ ngồi có 01 chip ROM/RAM Ví dụ 4.1: Vẽ sơ đồ kết nối MCU8051 với nhớ ngồi 27C64(ROM) HM6264(RAM) Giải: Chip ln chọn nên nối /CS=0 Hình 4.1: Sơ đồ kết nối MCU8051 với 01 chip 27C64 HM6264 Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Trường hợp nhớ ngồi có nhiều 01 chip nhớ ROM/RAM Ví dụ 4.2: Vẽ sơ đồ kết nối MCU8051 với nhớ code data dung lượng 16KB sử dụng IC 27C64 HM 6264 Giải: Bộ nhớ 16KB# 210x 24=214,cần 14 đường địa A0 – A13 Dung lượng IC 27C64/HM6264 8KB cần 13 đường địa A0 – A12 Vậy ta phải cần 02 chip 27C64/HM6264 để tạo nhớ có dung lượng tổng 16KB Vùng địa chip : 0000H – 1FFFH Vùng địa chip1 : 2000H – 3FFFh Bảng phân vùng địa cho 02 chip nhớ sau: Bảng 4.1: Bảng phân vùng địa 02 chip nhớ 8KB tạo dung lượng tổng 16KB Tín hiệu chọn A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 chip Chip /CS0 x x x x x x x x x x x x x Chip /CS1 x x x x x x x x x x x x x Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Từ bảng 4.1,ta thấy A13=0 tương ứng với chọn vùng địa chip A13=1 tương ứng với chọn vùng địa cho chip 1.Do ta chọn A13 làm tín hiệu giải mã địa chọn chip hình 4.2 Hình 4.2: Sơ đồ ví dụ 4.2 Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Thiết kế mạch giải mã địa tạo tín hiệu chọn chip: Từ yêu cầu dung lượng nhớ/vùng nhớ : Tính số đường địa cần thiết Chọn số lượng chip tương ứng có tổng dung lượng lớn dung lượng nhớ/vùng nhớ yêu cầu Tốt nên sử dụng chip nhớ có dung lượng chọn vùng địa chọn chip cho tổng dung lượng nhớ chip dung lượng nhớ/vùng nhớ cần thiết kế, mạch giải mã địa chọn chip đơn giản Lập bảng phân vùng địa chỉ: Chọn vùng địa cho chip Xác định tín hiệu chọn chip mức tích cực Liệt kê tất đường địa cần thiết cho toàn nhớ/vùng nhớ Điền mức logic 0/1 cho đường địa tương ứng với vùng địa chọn chip Loại bỏ đường địa thấp có logic thay đổi – 1(tùy định) Chú ý đường địa cao có mức logic phân biệt vùng địa chọn chip với Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Thiết kế mạch giải mã địa tạo tín hiệu chọn chip: Lập bảng chân trị(truth table) rút gọn với inputs đường địa cao có mức logic phân biệt vùng nhớ outputs tín hiệu chọn chip có mức tích cực tương ứng Sử dụng phương pháp thiết kế hệ tổ hợp từ bảng chân trị Sử dụng cổng logic,vi mạch MSI decoder/demutiplex,thiết bị logic lập trình(PAL,GAL) hồn thành mạch giải mã địa Ví dụ 4.3: Thiết kế mạch giải mã địa tạo tín hiệu chọn chip cho 64KB nhớ ngồi MCU8051 sử dụng chip nhớ ROM 27C64 RAM HM6264 Giải: ROM 27C64 làm nhớ code RAM HM6264 làm nhớ data có dung lượng 8KB.Để tạo vùng nhớ 64KB,ta cần: 16 đường địa A0 – A15 08 chip nhớ 27C64 08 chip nhớ HM6264 Cần 08 tín hiệu chọn chip Bảng phân vùng địa Bảng 4.2 Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Bảng 4.2: Phân vùng địa vd 4.3 Tín hiệu Vùng chọn địa chip /CS0 0000H1FFFH A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 1 1 1 1 1 1 /CS1 2000H3FFFH 0 0 1 1 1 1 1 1 1 /CS2 4000H5FFFH 0 1 0 1 1 1 1 1 1 /CS3 6000H7FFFH 0 1 1 1 1 1 1 1 1 /CS4 8000H9FFFH 1 0 0 1 1 1 1 1 1 /CS5 A000HBFFFH 1 0 1 1 1 1 1 1 1 /CS6 C000HDFFFH 1 1 0 1 1 1 1 1 1 /CS7 E000HFFFFH 1 1 1 1 1 1 1 1 1 Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Từ Bảng 4.2,ta thấy cần sử dụng đường địa A15,A14,A13 phân biệt 08 tín hiệu chọn chip.Bảng 4.3 bảng chân trị rút gọn cho mạch giải mã địa theo yêu cầu Bảng 4.3: Mạch giải mã địa rút gọn Bảng 4.2 Inputs Outputs A15 A14 A13 /CS0 /CS1 /CS2 /CS3 /CS4 /CS5 /CS6 /CS7 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Bảng 4.3 bảng chân trị hệ decoder/demultiplexer – Sơ đồ logic hình 4.3 Ta sử dụng IC 74LS/HC138 để thiết kế mạch giải mã hình 4.4(xem data sheet IC 74LS138) Giáo Trình Vi Xử Lý Lưu Phú 4.1: Giải mã địa chỉ: Hình 4.4: Mạch decoder – sử dụng IC 74HC138 Hình 4.3: Mạch decoder từ – Giáo Trình Vi Xử Lý Lưu Phú 10 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): MOV A,#06H ;Entry mode set trỏ dịch phải,địa DDRAM ;tăng,display không dịch ghi ký tự CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD RET OUT: MOV DBUS,A ;chuyển lệnh/data ngõ dataLCD CLR RW ; truy xuất ghi SETB E ; cho phép truy xuất CLR E RET WAIT: CLR RS ;truy xuất lệnh SETB RW ;đọc lệnh SETB DBUS.7 ;DBUS.7 input SETB E ;cho phép truy xuất LCD CLR E JB DBUS.7,WAIT;chờ cờ BF=DB7=0 RET Giáo Trình Vi Xử Lý Lưu Phú 50 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): Ví dụ 4.14: Viết chương trình liên tục xuất chuỗi ký tự chứa vùng nhớ chương trình địa đầu nhãn TAB_CHR LCD dòng 16 ký tự 5X8 dots: - Nếu 16 ký tự phải xuống dòng - Nếu 32 ký tự,xuất 32 ký tự tạo thành trang hình,delay khoảng 2s,xóa hình xuất ký tự đầu dòng trang tiếp tục - Nếu ký tự NULL=00H, delay 2s,xóa hình quay trở lại xuất ký tự tiếp tục RS BIT P3.0 RW BIT P3.1 E BIT P3.2 DBUS EQU P1 COUNT EQU 32 ORG JMP MAIN ORG 0030H MAIN: MOV SP,#5FH CALL INIT Giáo Trình Vi Xử Lý Lưu Phú 51 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): BATDAU: MOV R0,#0 ;chỉ số vị trí ký tự=0 MOV DPTR,#TAB_CHR ;DPTR trỏ địa đầu bảng ký tự START: MOV R1,#COUNT ;R1 đếm số ký tự XUAT: MOV A,R0 MOVC A,@A+DPTR ;chuyển mã ký tự vào A JNZ TIEP ; Không phải mã null nhảy đến TIEP CALL DELAY_2S ;chờ 2s MOV A,#01H ;mã xóa LCD CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD MOV A,#80H ;mã chuyển trỏ đầu dòng CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD JMP BATDAU ;trở xuất ký tự TIEP: CALL WAIT ;chờ cờ BF=0 SETB RS ;truy xuất data CALL OUT ;xuất ký tự Giáo Trình Vi Xử Lý Lưu Phú 52 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): INC DJNZ CALL MOV CALL CLR CALL MOV CALL CLR CALL JMP ROW2: CJNE MOV CALL CLR CALL JMP R0 ;tăng số vị trí ký tự R1,ROW2 ;xuất cho đủ 32 ký tự DELAY_2S ;chờ 5s A,#01H ;mã xóa LCD WAIT ;chờ cờ BF=0 RS ;truy xuất lệnh OUT ;ghi LCD A,#80H ;mã chuyển trỏ đầu dòng WAIT ;chờ cờ BF=0 RS ;truy xuất lệnh OUT ;ghi LCD START ;quay lại từ đầu dòng R1,#16,XUAT ;xuất đủ 16 ký tự xuống dòng A,#0C0H ;mã xuống dòng WAIT ;chờ cờ BF=0 RS ;truy xuất lệnh OUT ;ghi LCD XUAT Giáo Trình Vi Xử Lý Lưu Phú 53 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): ; -;INIT khởi động LCD: ; Function set LCD kết nối bit,2 dòng,5X8 dots mã lệnh #38H ;Display on,con trỏ on không chớp mã lệnh #0EH ; Entry mode set trỏ dịch phải,địa DDRAM tăng,display không dịch ghi ký tự ; -INIT: MOV A,#38H ;function set LCD kết nối bit,2 dòng,5X8 dots CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD MOV A,#01H ;mã xóa LCD CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD MOV A,#0EH ;mã display on,con trỏ on không chớp CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD MOV A,#06H ;Entry mode set trỏ dịch phải,địa DDRAM ;tăng,display không dịch ghi ký tự CALL WAIT ;chờ cờ BF=0 CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD Giáo Trình Vi Xử Lý Lưu Phú 54 RET 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): ; OUT: MOV DBUS,A ;chuyển lệnh/data ngõ dataLCD CLR RW ; truy xuất ghi SETB E ; cho phép truy xuất CLR E RET ; WAIT: CLR RS ;truy xuất lệnh SETB RW ;đọc lệnh SETB DBUS.7 ;DBUS.7 input SETB E ;cho phép truy xuất LCD CLR E JB DBUS.7,WAIT ;chờ cờ BF=DB7=0 RET ; - Giáo Trình Vi Xử Lý Lưu Phú 55 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): DELAY_2S: LOOP1: LOOP2: MOV R7,#20 MOV R6,#200 MOV R5,#250 DJNZ R5,$ DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET ; TAB_CHR: DB ‘ Que huong la chum khe ngot Cho treo hai moi ngay’,00H END Lưu ý: Khi mơ Proteus,có thể chương trình WAIT khơng đọc bit BF từ LCD nên ta thay chương trình WAIT chương trình delay khoảng 2ms(lớn thời gian thực lệnh xóa LCD khoảng 1520µs): WAIT: MOV R4,#4 LAP: MOV R3,#250 DJNZ R3,$ DJNZ R4,LAP RET Giáo Trình Vi Xử Lý Lưu Phú 56 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): Hình 4.13: Giao tiếp LCD định vị IO gián tiếp Giáo Trình Vi Xử Lý Lưu Phú 57 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): Ví dụ 4.15: Hình 4.13 minh họa giao tiếp LCD dùng định vị IO gián tiếp (tương tự Kit Thí Nghiệm VXL) Viết chương trình thực công việc sau: Nhấn/nhả SW1 đọc ký tự đặt DIPSW_8,địa truy xuất A000H→BFFFH,hiển thị ký tự LCD,địa truy xuất 8000H→9FFFH Nhấn/nhả SW2 chọn xuống dòng trở dòng Nhấn/nhả SW3 xóa tồn hình chuyển trỏ hiển thị đầu dòng ;==================================================== ; DEFINITIONS ;==================================================== LCD_ADD EQU 8000H ; địa LCD DIP_SW EQU 0A000H ;địa DIP_SW EN BIT P3.4 RS BIT P3.5 SW1 BIT P1.0 SW2 BIT P1.1 SW3 BIT P1.2 Giáo Trình Vi Xử Lý Lưu Phú 58 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): ;====================================================== ; RESET and INTERRUPT VECTORS ;====================================================== ORG 0000H JMP START ;====================================================== ; CODE SEGMENT ;====================================================== ORG 0100H START: MOV SP,#5FH CLR F0 ;F0 báo trạng thái dòng CALL INIT ;khởi động LCD STATE: JB SW1,DOWN_L ;SW1 nhấn? LOOP0: CALL WAIT ;delay chống rung phím JNB SW1,LOOP0 ;SW1 nhả? MOV DPTR,#DIP_SW ;nhập ký tự từ DIP_SW MOVX A,@DPTR SETB RS ;truy xuất data CALL OUT ;xuất ký tự LCD CALL WAIT ;chờ LCD nhận JMP STATE ;quay Giáo Trình Vi Xử Lý Lưu Phú 59 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): DOWN_L: JB SW2,XOA_LCD;SW2 nhấn? LOOP1: CALL WAIT ;delay chống rung phím JNB SW2,LOOP1 ;SW2 nhả? JNB F0,ROW1 ;F0=0 xuống dòng MOV A,#80H ;mã chuyển trỏ dòng JMP TIEP ROW1: MOV A,#0C0H ;mã chuyển trỏ xuống dòng TIEP: CPL F0 ;cập nhật trạng thái dòng CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD CALL WAIT ;chờ LCD nhận JMP STATE ;quay XOA_LCD: JB SW3,STATE ;SW3 nhấn? LOOP2: CALL WAIT ;delay chống rung phím JNB SW3,LOOP2 ;SW3 nhả MOV A,#01H ;mã xóa LCD CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD CALL WAIT ;chờ LCD nhận Giáo Trình Vi Xử Lý Lưu Phú 60 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): MOV A,#80H ;mã chuyển trỏ đầu dòng CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD CALL WAIT ;chờ LCD nhận JMP STATE ;quay ; ;INIT khởi động LCD: ; Function set LCD kết nối bit,2 dòng,5X8 dots mã lệnh #38H ;Display on,con trỏ on không chớp mã lệnh #0EH ; Entry mode set trỏ dịch phải,địa DDRAM tăng,display không dịch ghi ký tự ; - INIT: MOV CLR CALL CALL MOV CLR CALL CALL A,#38H ;function set LCD kết nối bit,2 dòng,5X8 dots RS ;truy xuất lệnh OUT ;ghi LCD WAIT ;chờ LCD nhận A,#01H ;mã xóa LCD RS ;truy xuất lệnh OUT ;ghi LCD WAIT ;chờ LCD nhận Giáo Trình Vi Xử Lý Lưu Phú 61 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): MOV A,#80H ;mã chuyển trỏ đầu dòng CLR RS ;truy xuất lệnh CALL OUT ;ghi LCD CALL WAIT ;chờ LCD nhận JMP STATE ;quay ; ;INIT khởi động LCD: ; Function set LCD kết nối bit,2 dịng,5X8 dots mã lệnh #38H ;Display on,con trỏ on khơng chớp mã lệnh #0EH ; Entry mode set trỏ dịch phải,địa DDRAM tăng,display không dịch ghi ký tự ; - INIT: MOV CLR CALL CALL MOV CLR CALL CALL A,#38H ;function set LCD kết nối bit,2 dòng,5X8 dots RS ;truy xuất lệnh OUT ;ghi LCD WAIT ;chờ LCD nhận A,#01H ;mã xóa LCD RS ;truy xuất lệnh OUT ;ghi LCD WAIT ;chờ LCD nhận Giáo Trình Vi Xử Lý Lưu Phú 62 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): MOV CLR CALL CALL MOV A,#0EH RS OUT WAIT A,#06H ;mã display on,con trỏ on không chớp ;truy xuất lệnh ;ghi LCD ;chờ LCD nhận ;Entry mode set trỏ dịch phải,địa ;DDRAM tăng,display không dịch ghi ký tự ;truy xuất lệnh ;ghi LCD ;chờ LCD nhận CLR RS CALL OUT CALL WAIT RET ; -OUT: MOV DPTR,#LCD_ADD ;chuyển lệnh/data ngõ data LCD SETB EN ; cho phép truy xuất MOVX @DPTR,A CLR EN RET ; Giáo Trình Vi Xử Lý Lưu Phú 63 4.2: Giao tiếp ngoại vi: Giao tiếp Đèn LCD hiển thị ký tự(alphanumeric LCD): WAIT: LOOP3: MOV R7,#4 MOV R6,#250 DJNZ R6,$ DJNZ R7,LOOP3 RET ; END Giải thích tóm tắt: - Sử dụng cờ F0=PSW.5 để báo trạng thái dòng tại,khi nhấn SW2 chuyển dịng lên/xuống - Sử dụng chương trình WAIT tạo trễ khoảng 2ms sau lần ghi lệnh/data LCD đảm bảo đủ thời gian LCD nhận lệnh/data - Do không cần đọc data từ LCD nên chân RW LCD nối GND mode ghi - SV tự phân tích sơ đồ hình 4.13 Giáo Trình Vi Xử Lý Lưu Phú 64 ... bảng 4. 5 Giáo Trình Vi Xử Lý Lưu Phú 29 4. 2: Giao tiếp ngoại vi: 4. 2.2: Giao tiếp ngoại vi gián tiếp: Hình 4. 9 Giáo Trình Vi Xử Lý Lưu Phú 30 4. 2: Giao tiếp ngoại vi: 4. 2.2: Giao tiếp ngoại vi. .. Vi Xử Lý Lưu Phú 33 4. 2: Giao tiếp ngoại vi: 4. 2.2: Giao tiếp ngoại vi gián tiếp: Hình 4. 10: Sơ đồ hiển thị LED đoạn phương pháp quét Giáo Trình Vi Xử Lý Lưu Phú 34 4.2: Giao tiếp ngoại vi: 4. 2.2:... Giáo Trình Vi Xử Lý Lưu Phú 40 4. 2: Giao tiếp ngoại vi: 4. 2.2: Giao tiếp ngoại vi gián tiếp: Hình 4. 11c: Sơ đồ giao tiếp ADC0809 định vị ngoại vi gián tiếp Giáo Trình Vi Xử Lý Lưu Phú 41 4. 2: Giao