Bài giảng môn Điện - Điện tử - Bài tập ôn thi học kỳ – Môn học: Vi xử lý – AY1213-S2

Tài liệu Bài giảng môn Điện - Điện tử - Bài tập ôn thi học kỳ – Môn học: Vi xử lý – AY1213-S2: VXL _BTOT_AY1213-S2–1/8 ĐHBK Tp HCM – Khoa ĐĐT BMĐT GVPT: Hồ Trung Mỹ Bài tập ôn thi học kỳ – Môn học: Vi xử lý – AY1213-S2 Chú ý:  Trong các bài tập sau giả sử dùng 8051 với thạch anh (XTAL) là 12 MHz  Hệ thống số có dấu là hệ thống có số âm được biểu diễn bằng số bù 2.  Khi đề bài chỉ nói viết chương trình thì ngầm hiểu là viết bằng hợp ngữ 8051. 1) Cho trước mạch giải mã địa chỉ của hệ thống dùng VXL 8051: a) Xác định vùng địa chỉ của các SRAM b) Viết các lệnh 8051 để sao chép 10 byte từ vùng nhớ có địa chỉ đầu là địa chỉ đầu của SRAM thứ nhất (U1) đến vùng nhớ có địa chỉ đầu là địa chỉ đầu của là địa chỉ đầu của SRAM thứ hai (U2) 2) Cho trước mạch giao tiếp 8051 với SRAM 4KB: VXL _BTOT_AY1213-S2–2/8 a) Viết đoạn chương trình sao chép 10 byte từ bộ nhớ chương trình bắt đầu từ địa chỉ 0100H đến SRAM bắt đầu từ địa chỉ 0240H bằng MOVX với: i) DPTR, và ii) R0. b) Thay vì dùng chân ALE nối vào chân LE mạch chốt, người ta nối chân P3.0 đến chân LE của...

pdf8 trang | Chia sẻ: ntt139 | Lượt xem: 1476 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Bài giảng môn Điện - Điện tử - Bài tập ôn thi học kỳ – Môn học: Vi xử lý – AY1213-S2, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
VXL _BTOT_AY1213-S2–1/8 ĐHBK Tp HCM – Khoa ĐĐT BMĐT GVPT: Hồ Trung Mỹ Bài tập ôn thi học kỳ – Môn học: Vi xử lý – AY1213-S2 Chú ý:  Trong các bài tập sau giả sử dùng 8051 với thạch anh (XTAL) là 12 MHz  Hệ thống số có dấu là hệ thống có số âm được biểu diễn bằng số bù 2.  Khi đề bài chỉ nói viết chương trình thì ngầm hiểu là viết bằng hợp ngữ 8051. 1) Cho trước mạch giải mã địa chỉ của hệ thống dùng VXL 8051: a) Xác định vùng địa chỉ của các SRAM b) Viết các lệnh 8051 để sao chép 10 byte từ vùng nhớ có địa chỉ đầu là địa chỉ đầu của SRAM thứ nhất (U1) đến vùng nhớ có địa chỉ đầu là địa chỉ đầu của là địa chỉ đầu của SRAM thứ hai (U2) 2) Cho trước mạch giao tiếp 8051 với SRAM 4KB: VXL _BTOT_AY1213-S2–2/8 a) Viết đoạn chương trình sao chép 10 byte từ bộ nhớ chương trình bắt đầu từ địa chỉ 0100H đến SRAM bắt đầu từ địa chỉ 0240H bằng MOVX với: i) DPTR, và ii) R0. b) Thay vì dùng chân ALE nối vào chân LE mạch chốt, người ta nối chân P3.0 đến chân LE của mạch chốt. Khi đó hãy viết các lệnh để sao chép 1 byte ở địa chỉ 0375H vào thanh ghi R7. c) Thay vì dùng cổng P2 nối đến các đường địa chỉ A8–A11 của SRAM, người ta dùng cổng P1 thay cho cổng P2. Khi đó hãy viết các lệnh để sao chép 1 byte ở địa chỉ 0758H vào thanh ghi R7. 3) Thiết kế mạch giao tiếp bộ nhớ cho 8051 với bộ nhớ chương trình bên ngoài ROM 16KB và bộ nhớ dữ liệu SRAM 32KB đều có vùng địa chỉ bắt đầu từ 0000H. Mạch này được xây dựng từ 1 IC giải mã 74138, 2 ROM 8Kx8 và 4 SRAM 8Kx8. 4) Cho biết nội dung của thanh ghi A sau khi thực thi mỗi đoạn chương trình sau: (a) (b) (c) (d) (e) MOV 20h,#75h MOV R1,#20H MOV A,@R1 ANL a,#0FH MOV R1,#2 MOV A,1 ORL A,#40H XRL A,#0FH MOV A,#0FFH CLR C MOV ACC.7,C CPL C MOV ACC.0,C XRL A,ACC ADD A,#0F7H SETB C MOV R1,#89H ADDC A,R1 MOV A,#56H SWAP A RR A RR A 5) Cho biết nội dung của các thanh ghi A, R0, R1, R2, R3, SP, PC, các ô nhớ trong ROM có địa chỉ là 0001H và 0A8FH, và các ô nhớ của RAM nội có địa chỉ là 01H, 02H và 03H sau khi 8051 thực thi lệnh “add A, R2”: Dòng Địa chỉ Mã máy Lệnh 1 0000 ORG 0 2 0000 020A80 LJMP Start 3 0A80 ORG 0A80H 4 0A80 758170 Start: MOV SP,#70H 5 0A83 7A1C MOV R2,#1CH 6 0A85 7428 MOV A,#28H 7 0A87 78C7 MOV R0,#0C7H 8 0A89 C002 PUSH 2 9 0A8B C000 PUSH 0 10 0A8D 2A ADD A, R2 11 0A8E D001 POP 1 12 0A90 29 ADD A, R1 13 0A91 D000 POP 0 14 0A93 EB MOV A, R3 15 0A94 28 ADD A, R0 16 0A95 80FE SJMP $ 17 0A97 END 6) Cho trước bảng sau: Địa chỉ ROM (hex) Mã máy (hex) Lệnh 8051 Cách định địa chỉ của toán hạng thứ nhất thứ hai ORG 0 MOV R0,#30H MOV R1,#10 CLR A MOV R2,A MOV R3,A Loop: MOV A,@R0 JB ACC.7,Neg INC R3 SJMP Cont Neg: INC R2 Cont: INC R0 DJNZ R1,Loop SJMP $ END a) Điền vào các chỗ trống trong cột địa chỉ ROM chương trình, cột mã máy và cột các cách địa chỉ. b) Cho biết đoạn chương trình trên làm gì và vai trò của các thanh ghi R0, R1, R2, và R3 là gì? VXL _BTOT_AY1213-S2–3/8 7) Cho biết nội dung của SP và RAM nội sau khi thực thi đoạn chương trình sau: MOV SP,#49h MOV R1,#5BH PUSH 1 ORL 48H,#0A5h XRL 4AH,#63h POP 00h PUSH 48H Địa chỉ RAM Trước khi thực thi Sau khi thực thi SP 07H 4AH 08H 49H 07H 48H 06H 00H 05H 8) Hãy cho biết giá trị của SP và nội dung của stack sau khi thực thi mỗi dòng lệnh sau: ORG 0BH LCALL DELAY SJMP $ ORG 300H DELAY: MOV R5, #0FFH AGAIN: DJNZ R5, AGAIN RET 9) a) Viết chương trình hợp ngữ để sao chép khối dữ liệu 10 byte (của RAM ngoài) có địa chỉ đầu là 8020H đến khối dữ liệu (RAM ngoài) có địa chỉ đầu là 8040H. b) Viết chương trình hợp ngữ để sao chép khối dữ liệu 10 byte (của RAM nội) có địa chỉ đầu là 20H đến khối dữ liệu (ở RAM ngoài) có địa chỉ đầu là 8040H. 10) Hãy hoàn tất chương trình sau dựa theo các chú thích đi kèm tại mỗi lệnh . . . . . . . ; chương trình bắt đầu từ địa chỉ 100H start: . . . . . . . ; A  9BH . . . . . . . ; R0  32H vào thanh ghi A . . . . . . . ; A  A + R0 . . . . . . . ; DPTR  2010H . . . . . . . ; cất A vào ô nhớ 2010H ở RAM ngoài here: . . . . . . . ; lặp vòng tại đây END ; Kết thúc chương trình 11) Viết chương trình con hợp ngữ hoặc C để so sánh 2 số 8 bit X và Y trong các thanh ghi R5 và R6 tương ứng. Kết quả so sánh được đặt trong R7 theo quy ước sau:  X < Y thì R7 = 01H  X = Y thì R7 = 02H  X > Y thì R7 = 04H Cờ F0 (trong PSW) dùng để chọn so sánh số không dấu (khi F0=0) hay có dấu (khi F0=1). Áp dụng chương trình con trên để so sánh 2 số 16 bit không dấu đặt trong RAM nội với byte thấp ở địa chỉ thấp, số thứ nhất bắt đầu từ địa chỉ 30H và số thứ hai bắt đầu từ 40H. 12) Viết chương trình con thực hiện phép toán OR 8 bit ở thanh ghi A và cho kết quả trong cờ C với các cách sau: a) Áp dụng lệnh JZ hoặc JNZ để tìm kết quả OR. b) Áp dụng lệnh ORL cho biến Boole Ứng dụng chương trình con trên để tìm: i) OR 4 bit thấp của cổng P1 và kết quả xuất ra P1.4 ii) OR 16 bit của DPTR và kết quả để ở cờ C. 13) Viết chương trình con thực hiện phép toán XOR 8 bit ở thanh ghi A và cho kết quả trong cờ C với các cách sau: a) Tận dụng cờ parity P để tìm kết quả XOR. b) Đếm số bit 1 trong thanh ghi A để tìm kết quả XOR. Ứng dụng chương trình con trên để tìm: i) XOR 4 bit thấp của cổng P1 và kết quả xuất ra P1.4 ii) XOR 16 bit của DPTR và kết quả để ở cờ C. 14) a) Viết chương trình con thực hiện cộng 2 số không dấu nhiều byte. Giả sử trước khi gọi chương trình con này thì:  R0 chứa địa chỉ đầu của toán hạng thứ nhất (trùng với địa chỉ của byte thấp nhất) N1. VXL _BTOT_AY1213-S2–4/8  R1 chứa địa chỉ đầu của toán hạng thứ hai (trùng với địa chỉ của byte thấp nhất) N2.  R2 chứa số byte trong mỗi toán hạng (cả 2 toán hạng có cùng chiều dài).  Toán hạng nhiều byte được để trong RAM nội của 8051 với sắp thứ tự byte theo “little endian”. Kết quả của phép tính được cất lại vào cùng vùng nhớ của toán hạng 1, nghĩa là tính N1 = N1 + N2. Áp dụng tính cộng 2 toán hạng 5 byte có các địa chĩ đầu là 20H và 30H. b) Tương tự a) nhưng thực hiện cộng 2 số BCD không dấu nhiều byte với R2 chứa trị số 2k (k > 0). Viết chương trình con thực hiện trừ 2 số không dấu nhiều byte nhiều byte: N1 = N1 – N2. 15) Viết chương trình con thực hiện các phép tính sau theo nội dung của thanh ghi R0 (nếu R0 >7 thì R3 = 0) R0 Phép toán R0 Phép toán 0 R3 = R1 + R2 4 R3 = R1 AND R2 1 R3 = R1 – R2 5 R3 = R1 OR R2 2 R3 = R1 * R2 6 R3 = R1 XOR R2 3 R3 = R1 / R2 (chỉ lấy thương số) 7 R3 = NOT(R1) với các cách sau: a) Tận dụng lệnh CJNE b) Tận dụng lệnh JMP @A+DPTR 16) Viết chương trình bằng hợp ngữ hoặc C để mô phỏng bộ đếm lên/xuống 8 bit với ngõ ra 8 bit ở cổng P2. Bộ đếm này có các chân điều khiển sau:  P0.0 = RESET = khi có cạnh xuống ở chân này thì ngõ ra P2 là 0. (có ưu tiên cao nhất)  P0.1 = UP = khi có cạnh xuống thì giá trị của P2 được tăng thêm 1 (có ưu tiên nhì)  P0.3 = DOWN = khi có cạnh xuống thì giá trị của P2 được giảm đi 1 (có ưu tiên thấp nhất) Sửa lại chương trình với chân RESET dùng ngắt ngoài 0 (/INT0). 17) Tận dụng chương trình (bằng hợp ngữ hoặc C) mô phỏng bộ đếm lên/xuống 4 bit ngõ ra nhị phân để mô phỏng bộ đếm lên/xuống 4 bit có cho phép nạp trị đầu và trị cuối của bộ đếm (giả sử giá trị đầu là 4 bit cao của P1 và giá trị cuối là 4 bit thấp của P1, giá trị đầu luôn luôn nhỏ hơn giá trị cuối). Bộ đếm này có các chân điều khiển sau:  P0.0 = RESET = khi có cạnh xuống ở chân này thì nạp trị đầu và cuối vào counter để cho phép trị bắt đầu đếm là giá trị đầu. (có ưu tiên cao nhất)  P0.1 = UP = khi có cạnh xuống thì giá trị của P2 được tăng thêm 1 (có ưu tiên nhì)  P0.3 = DOWN = khi có cạnh xuống thì giá trị của P2 được giảm đi 1 (có ưu tiên thấp nhất) 18) Xét 1 mạch 8051 với các công tắc: SW1 được nối với P0.0, SW2 nối với P0.1; và các LED được nối: LED 1 được nối với P0.2, LED 2 được nối với P0.3. Giả sừ LED có VLED=2V và ILED=10mA. Hãy vẽ sơ đồ mạch và viết chương trình hợp ngữ hoặc C cho mạch này. Qui luật hoạt động của mạch như sau: P0.1 P0.0 LED 2 LED 1 0 0 Tắt Tắt 0 1 Tắt Sáng 1 0 Sáng Tắt 1 1 Nhấp nháy chu kỳ 1s Nhấp nháy chu kỳ 1s ngược pha với LED 2 19) Cho trước chương trình con Delay sau: Delay: MOV R1,#255 L1: MOV R0,#255 L2: DJNZ R0, L2 DJNZ R1, L1 RET a) Hãy ghi chú thích số chu kỳ máy (MC) cho mỗi lệnh và từ đó suy ra thời gian trễ của CT con này. b) Nếu muốn làm trễ 100 ms thì ta phải nạp cho R1 giá trị là bao nhiêu? c) Hãy viết lại chương trình con làm trễ 100 ms dùng Timer (không dùng ngắt Timer). 20) Chương trình con sau tạo trễ 1 giây với XTAL=12MHz. DELAY: MOV R0, #0 MOV R1, #0 MOV R2, #8 LOOP: DJNZ R0, LOOP DJNZ R1, LOOP VXL _BTOT_AY1213-S2–5/8 DJNZ R2, LOOP RET a) Nếu sử dụng XTAL = 6MHz thì phải sửa các tham số nào trong chương trình trên để vẫn có trễ 1 giây? b) Chương trình con trên có sai số bao nhiêu? Hãy sửa lại chương trên để có độ chính xác cao nhất có thể được. 21) Viết chương trình tạo sóng vuông (TON=TOFF) ở chân P1.1 có tần số theo qui tắc sau: 500 Hz nếu P1.0 = 0, 100 Hz nếu P1.0 = 1. Phần tạo thời gian trễ được thực hiện bằng các cách sau: a) Bằng phần mềm (dùng DJNZ và NOP nếu cần). b) Bằng timer0 không dùng ngắt. c) Bằng ngắt timer0 22) Thiết kế mạch 8051 có chức năng sau: (SV tự chọn bất cứ chân nào của cổng I/O cho ngõ vào điều khiển)  Các ngõ ra sáng lần lượt liên tục theo qui luật sau khi ngõ vào điều khiển bằng 0 Đèn LED xanh sáng trong 5 s trong khi các đèn LED khác tắt. Đèn LED vàng sáng trong 2 s trong khi các đèn LED khác tắt.. Đèn LED đỏ sáng trong 8 s trong khi các đèn LED khác tắt..  Chỉ có đèn LED vàng sáng nhấp nháy với chu kỳ 2 s khi ngõ vào điều khiển bằng 1. 23) Cho trước mạch sau với các chân ra 1Y1 nối với đoạn a,1Y2 nối với đoạn b,..,2Y3 nối với đoạn g của LED 7 đoạn cathod chung với các R hạn dòng là 330. Mạch hoạt động như sau: (ưu tiên cao hơn ở P2.0)  Khi có cạnh xuống ở P2.0 thì hiện lần lượt từ 0 đến 9 với thời gian hiện 1 số là 1s và lặp lại.  Khi có cạnh xuống ở P2.1 thì hiện lần lượt từ 0 đến F với thời gian hiện 1 số là 1s và lặp lại. a) Hãy viết chương trình hợp ngữ hoặc C cho mạch này. b) Viết lại chương trình trên dùng ngắt ngoài 0 và ngắt ngoài 1 thay cho các tín hiệu đưa vào P2.0 và P2.1. 24) Viết chương trình tìm giá trị của y (trong thanh ghi R7) bằng 2 cách: dùng các lệnh MUL và lệnh MOVC, với giá trị y cần tính là a) y = x2+ 2x + 5 với x (trong thanh ghi A) có giá trị từ 0 đến 9 b) y = x2 – 2x + 3 với x (trong thanh ghi A) có giá trị từ 0 đến 9 25) Một mạch dùng 8051 để tạo hiệu ứng trên LED với các kết nối LED và công tắc/khóa như sau: Các LED đươc nối vào P1.0, P1.1 và P1.2, còn công tắc được nối vào P0.0. Giả sử điện trở kéo lên ở P0.0 là 10K và các điện trở hạn dòng cho LED là 330. Viết chương trình hợp ngữ hoặc C để thực hiện công việc sau:  Nếu P0.0 = 1 thì các bit ở P1.2..1.0 có trị nhị phân thay đổi từ nhỏ nhất đến lớn nhất và lặp lại (mỗi trị được duy trì trong 0.25s). VXL _BTOT_AY1213-S2–6/8  Nếu P0.0 = 0 thì các bit ở P1.2..1.0 có trị nhị phân thay đổi từ lớn nhất đến nhỏ nhất và lặp lại (mỗi trị được duy trì trong 0.25s). 26) Hãy thiết kế mạch nhấp nháy LED (3 LED với 3 R hạn dòng được gắn vào các chân P1.2..P1.0) với quy luật sau:  Nếu P1.3=0 thì P1.2..1.0=000, 001, 010, 011, 100, 101, 110, 111 và lặp lại (thời gian trễ giữa 2 số đếm là 200ms)  Nếu P1.3=1 thì P1.2..1.0=000, 001, 011, 010, 110, 111, 101, 100 và lặp lại (thời gian trễ giữa 2 số đếm là 200ms) Hãy viết chương trình bằng hợp ngữ hoặc C cho mạch này. 27) a) Thiết kế mạch dùng 8051 mô phỏng bộ đếm lên/xuống BCD 2 ký số với hiển thị LED 7 đoạn có dồn kênh sau: Kết nối với 8051 theo qui ước sau:  P1 được nối với các chân a đến g và dp của mạch hiển thị LED.  P2.0 và P2.1 được nối với các chân /DIGIT1 và /DIGIT2 của mạch hiển thị LED. Bộ đếm này có các chân điều khiển sau:  P0.0 = RESET = khi có cạnh xuống ở chân này thì ngõ ra P2 là 0. (có ưu tiên cao nhất)  P0.1 = UP = khi có cạnh xuống thì giá trị của P2 được tăng thêm 1 (có ưu tiên nhì)  P0.3 = DOWN = khi có cạnh xuống thì giá trị của P2 được giảm đi 1 (có ưu tiên thấp nhất) b) Sửa lại chương trình ở a) với chân RESET dùng chân ngắt ngoài 0 (/INT0). 28) Thiết kế mạch định thì đơn giản với hiển thị trên LED 7 đoạn (như mạch ở câu trên) cho thấy số đếm từ 0s đến 60s. Mạch hoạt động theo nguyên tắc sau:  Khi có cạnh xuống ở tín hiệu STOP/RUN (được nối vào chân ngắt ngoài /INT0) thì sẽ hiển thị thời gian từ 0 đến 60s và lặp lại (chế độ RUN), và khi có cạnh xuống ở STOP/RUN lần nữa thì nó sẽ dừng (chế độ STOP) với số hiển thị đứng yên không tăng nữa.  Sau khi reset hệ thống thì mạch ở chế độ STOP và hiển thị 0s. Hãy viết chương trình hợp ngữ cho mạch này với định thì 1s dùng ngắt timer 0 và chế độ STOP/RUN dùng ngắt ngoài /INT0 kích cạnh xuống. 29) Viết chương trình hợp ngữ (bằng 2 cách: lệnh logic với biến Boole và lệnh rẽ nhánh với biến Boole) hoặc C để mô phỏng mạch tổ hợp sau (không chưa rút gọn hàm Boole): VXL _BTOT_AY1213-S2–7/8 30) Viết chương trình hợp ngữ hoặc C để tạo sóng vuông (TON=TOFF) ở chân P2.0. Chu kỳ T của sóng vuông này phụ thuộc vào giá trị đọc được từ cổng P1, nếu trị số đọc từ P1 là N thì sóng vuông có chu kỳ là N ms (trường hợp N = 0 thì không có sóng vuông ở đầu ra). 31) Viết chương trình tạo sóng vuông 125 Hz có chu kỳ nhiệm vụ là 25% theo các cách sau: a) Không dùng timer b) Dùng timer 0 chế độ 2 và không dùng ngắt timer 0. c) Dùng timer 0 chế độ 1 và không dùng ngắt timer 0. d) Dùng timer 0 chế độ 2 và dùng ngắt timer 0. e) Dùng timer 0 chế độ 1 và dùng ngắt timer 0. 32) a) Người ta dùng 1 nguồn xung vuông 1Hz nối với chân T0 của 8051. Viết chương trình sẽ cập nhât các biến SS(giây), MM(phút), HH(giờ) được đặt tương ứng trong các ô nhớ trong RAM nội tại các địa chỉ 30H, 31H và 32H. Nội dung của các biến là HH, MM, và SS là các số BCD 2 ký số biểu diễn các giá trị giờ (tối đa 23H), phút (tối đa 59H) và giây (tối đa 59H) tương ứng. Tín hiệu RESET được nối vào chân /INT0, khi có cạnh xuống tại /INT0 thì các biến HH, MM, và SS có trị đầu là 0. b) Hiển thị giờ, phút, và giây với bộ hiển thị LED 7 đoạn dồn kênh 6 ký số. c) Hiển thị giờ, phút, và giây với LCD 33) Cho trước mạch giao tiếp 8051 với bàn phím và chương trình sau: MOV P2,#0FH MOV A,#11110111B MOV R0,#30H LOOP: MOV P1,A MOV @R0,P2 INC R0 RR A JB ACC.7,LOOP Giả sử 2 phím số 4 và 2 được nhấn đồng thời. Hãy cho biết nội dung của các ô nhớ 30H đến 33H trong RAM nội là bao nhiêu? 34) Viết chương trình đọc từ 32 byte từ cổng nối tiếp và cất vào 32 byte trong RAM nội từ địa chỉ 20H đến 3FH. Giả sử cổng nối tiếp có tốc độ baud là 4800. Thực hiện công việc bằng các cách sau: a) Hỏi vòng với kiểm tra cờ RI. b) Ngắt cổng nối tiếp. 35) Ở địa chỉ 200H trong ROM nội (bộ nhớ chương trình) có để chuỗi ký tự (TD: “This is a test!”) được kết thúc bằng ký tự NULL (=00H). Viết chương trình chép chuỗi ký tự này vào RAM ngoài từ địa chỉ 2000H và đồng thời gửi ra cổng nối tiếp. Giả sử 8051 dùng XTAL=11.0592 MHz và cổng nối tiếp có tốc độ baud là 9600. Truyền dữ liệu ra cổng nối tiếp được viết bằng 2 cách: hỏi vòng TI và dùng ngắt nối tiếp với TI. 36) a) Mạch sau cho thấy cách sử dụng cổng nối tiếp chế độ thanh ghi dịch để mở rộng cổng xuất của 8051: Viết chương trình xuất nội dung của R2 ra cổng xuất mở rộng này. Giả sử cổng nối tiếp có tốc độ baud là 2400 và XTAL = 11.0592 MHz. VXL _BTOT_AY1213-S2–8/8 b) Với mạch ở a), hãy ghép thêm các thanh ghi dịch 74LS164 để có thêm 2 cổng xuất. Hãy viết chương trình xuất 3 byte trong các ô nhớ ở RAM nội có địa chỉ là 30H, 31H và 32H. 37) Xét 1 hệ thống gồm 2 vi xử lý 8051 M1 và M2: M1 có nhiệm vụ đọc liên tục cổng P1 và xuất nối tiếp đến M2, M2 có nhiệm vụ nhận liên tục dữ liệu nối tiếp và hiển thị nội dung của P1 ra 2 LED 7 đoạn được gắn vào các cổng P1 và P2. Thí dụ nếu P1 của M1 có trị là 27H thì ở M2 ta sẽ thấy 2 LED 7 đoạn hiển thị số 27. Cả 2 VXL đều sử dụng cổng nối tiếp có tốc độ baud là 4800 và XTAL = 11.0592 MHz. 38) a) Vẽ mạch kết nối 8051 với LCD (có 2 hàng, mỗi hàng 20 ký tự) dùng giao tiếp dữ liệu 8 bit b) Viết chương trình hiển thị chuỗi “Hello the world!” ở hàng thứ nhất của LCD. c) Tạo hiệu ứng dịch sang trái mỗi lần 1 ký tự của chuỗi ký tự ở b). Sau khi dịch hết thì hiện này chuỗi này như cũ. Thời gian giữa 2 lần dịch là 200ms. d) Xuất ra chuỗi “Test: ” ở hàng thứ 2 và xuất tiếp các con số ở cùng 1 vị trí trên hàng 2 các số từ 0 đến 9 và lặp lại, thời gian hiện cho 1 số là 1s. 39) Viết chương trình hợp ngữ hoặc C để làm sáng các LED đơn được nối với cổng P1 (hình tròn đen tương ứng LED sáng và ngõ ra mức 0 làm LED sáng). Nếu ngõ vào P0.0 = 0 thì sáng theo mẫu 1 (TD: trước hết chỉ có LED ở P1.0 sáng trong 150 ms, kế tiếp chỉ có LED ở P1.1 sáng trong 150 ms, .., cuối cùng chỉ có LED ở P1.7 sáng trong 150 ms, và lặp lại) , và P0.0 thì sáng theo mẫu 2. Mẫu 1 (Cuộn trái các LED) Mẫu 2 (Cuộn phải các LED) a) Hãy vẽ sơ đồ mạch. b) Viết chương trình hợp ngữ hay C c) Thay vì dùng P0.0 để điều khiển, ta dùng kích cạnh xuống ở ngắt ngoài INT0 và INT1. Khi có ngắt ngoài INT0 thì chạy LED theo mẫu 1 và khi có ngắt ngoài INT1 thì chạy LED theo mẫu 2.Viết chương trình hợp ngữ hay C. 40) Hãy giải thích chương trình sau làm gì? #include sbit portbit = P1^5; unsigned char state = 0; void Timer0(unsigned char times) { unsigned char i; for ( i = 0; i <= times ; i++) { TL0 = –100; TR0 = 1; while (TF0 == 0) ; TF0 = 0; TR0 = 0 ; } } int main(void) { portbit = 1; TMOD = 2; while(1) { Timer0(state); state = (state +1) % 4; portbit = !portbit; } }

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf