1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Tài liệu Thiết kế - Ứng dụng pptx

22 382 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 292,74 KB

Nội dung

3 Thiết kế – ứng dụng 3.1 Giao tiếp với PPI8255 3.1.1 Giới thiệu PPI8255 PPI: programmable peripheral interface – giao tiếp ngoại vi lập trình - Dùng 8255 để mở rộng I/O Từng port lập trình input hay output cách linh hoạt phần mềm (so sánh với việc thiết kế I/O port dùng 74LS244 74LS373 chương → input hay output thiết kế “cứng”, cố định) - Các chân: D0÷D7: bus liệu chiều PA0÷PA7: port A PB0÷PB7: port B PC0÷PC7: port C /RD: Read (Nối với /RD (P3.7) 8051.) /WR: Write (Nối với /WR 8051.) RESET: khởi động lại 8255 (Thường nối với mạch reset 8051 GND /CS: chọn chip.) A0, A1: địa port (Nối với bus địa chỉ.) - /CS 0 0 - A1 0 1 × A0 1 × Mô tả Port A Port B Port C Từ điều khiển (control word) 8255 không chọn Thanh ghi điều khiển: o Hoạt động I/O (D7 = 1) D6 D5 Mode 00: mode 01: mode 1X: mode D4 D3 PA 0: output 1: input PCH 0: output 1: input Nhoùm A D2 Mode 0: mode 1: mode D1 D0 PB 0: output 1: input PCL 0: output 1: input Nhóm B Ghi chú: PCH = PC7÷PC4, PCL = PC3÷PC0 o Hoạt động BSR – Bit set/reset (D7 = 0): X X X D3 D2 Chọn bit port C - Hoạt động I/O có mode: o Mode 0: I/O đơn giản o Mode 1: I/O có bắt tay o Mode 2: bus chiều 3.1.2 Thiết kế - Giao tiếp D1 D0 Bit set/reset 0: reset 1: set Thieát keá U1 10 11 12 13 14 15 16 17 29 31 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD U3 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 ALE/PROG P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 PSEN XTAL1 39 38 37 36 35 34 33 32 30 21 22 23 24 25 26 27 28 D0 D1 D2 D3 D4 D5 D6 D7 XTAL2 13 14 17 18 U6 D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 G 11 A8 A9 A10 A11 A12 A13 A14 A15 OC 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7 D0 D1 D2 D3 D4 D5 D6 D7 34 33 32 31 30 29 28 27 A0 A1 35 U2 A13 A14 A15 18 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A B C AT89C51 +5V G1 G2A G2B D0 D1 D2 D3 D4 D5 D6 D7 74LS373 19 EA/VPP RST D0 D1 D2 D3 D4 D5 D6 D7 15 14 13 12 11 10 36 A0 A1 CS RESET RD WR PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 40 39 38 37 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 8 J2 J3 J4 8255 74LS138 Địa 8255 (base addr.): 4000h (16 bit) PA (base + 00h): 4000h PB (base + 01h): 4001h PC (base + 02h): 4002h Control word (base + 03h): 4003h Thieát keá U1 10 11 12 13 14 15 16 17 29 31 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD U3 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 ALE/PROG P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 PSEN XTAL1 39 38 37 36 35 34 33 32 XTAL2 D0 D1 D2 D3 D4 D5 D6 D7 30 21 22 23 24 25 26 27 28 13 14 17 18 U6 D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 G 11 OC 12 15 16 19 D0 D1 D2 D3 D4 D5 D6 D7 A0 A1 A2 A3 A4 A5 A6 A7 34 33 32 31 30 29 28 27 A0 A1 35 18 U2 A5 A6 A7 A B C AT89C51 +5V G1 G2A G2B 74LS138 Địa 8255 (base addr.): 40h (8 bit) PA (base + 00h): 40h PB (base + 01h): 41h PC (base + 02h): 42h Control word (base + 03h): 43h D0 D1 D2 D3 D4 D5 D6 D7 74LS373 19 EA/VPP RST D0 D1 D2 D3 D4 D5 D6 D7 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 15 14 13 12 11 10 36 A0 A1 CS RESET RD WR 8255 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 40 39 38 37 18 19 20 21 22 23 24 25 14 15 16 17 13 12 11 10 8 J2 J3 J4 VD1: Khởi động 8255: PA xuất, PB xuất, PC xuất → Từ điều khiển: 80h PA xuất, PB nhập, PC xuất → Từ điều khiển: 82h PA xuất, PB nhập, PC nhập → Từ điều khiển: 8Bh VD2: Viết chương trình - Khởi động 8255: PA xuất, PB nhập, PC nhập - Liên tục đọc liệu từ Port 8951, xuất liệu 8255 Chương trình cho sơ đồ ‘Thiết kế 1’: AGAIN: ORG MOV MOV MOVX MOV MOV MOV MOVX SJMP DPTR,#4003h A, #8Bh @DPTR, A P1, #0FFh DPTR,#4000h A, P1 @DPTR,A AGAIN ; tu+` ddie^`u khie^?n ; PA: output, PB: input, PC: input ; P1 (8951): input ; Port A Chương trình cho sơ đồ ‘Thiết kế 2’: AGAIN: ORG MOV MOV MOVX MOV MOV MOV MOVX SJMP R0,#43h A, #8Bh @R0, A P1, #0FFh R0,#40h A, P1 @R0,A AGAIN ; tu+` ddie^`u khie^?n ; PA: output, PB: input, PC: input ; P1 (8951): input ; Port A 3.2 Giao tiếp với LED đoạn Đoạn: Bit: p g f e d c b a ↑ D7 ↑ D6 ↑ D5 ↑ D4 ↑ D3 ↑ D2 ↑ D1 ↑ D0 a f g e c d Hiển thị A B C D E F [traéng] Anod chung C0h F9h A4h B0h 99h 92h 82h F8h 80h 98h 88h C6h 86h 8Eh 82h 89h 7Fh FFh Cathode chung 3Fh 06h 5Bh 4Fh 66h 6Dh 7Dh 07h 7Fh 67h 77h 39h 79h 71h 70h 76h 80h 00h b p Queùt LED 19 18 31 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD XTAL1 XTAL2 RST PSEN ALE/PROG a b c d e f g p 10 11 12 13 14 15 16 17 10 a b c d e f g p A B C D E F G P LED2 a b c d e f g p A1015 Q1 R3 10K 10 A B C D E F G P LED1 a b c d e f g p R2 10K A1015 Q2 10 A B C D E F G P A1 A2 LED3 16 15 14 13 12 11 10 A1 A2 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 21 22 23 24 25 26 27 28 A1 A2 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 3 R4 470x8 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 U1 39 38 37 36 35 34 33 32 R1 A1015 Q3 10K 29 +5V 30 EA/VPP AT89C51 VD: Hiển thị ‘123’ lên LED đoạn ; ; ; ; a,b,c,d,e,f,g -> Port P3.0 -> LED1 P3.1 -> LED2 P3.1 -> LED3 ORG 0H MOV P3,#0FFh BEGIN: ; ta('t ta^'t ca? ca'c LED ; ; ; ; xua^'t P2 ma~ cu?a '3' ba^.t LED1 delay ta('t LED1 P2,#0A4h P3.1 DELAY P3.1 ; ; ; ; xua^'t P2 ma~ cu?a '2' ba^.t LED2 delay ta('t LED2 MOV CLR ACALL SETB SJMP LOOP: P2,#0B0h P3.0 DELAY P3.0 MOV CLR ACALL SETB DELAY: MOV CLR ACALL SETB P2,#0F9h P3.2 DELAY P3.2 BEGIN ; ; ; ; xua^'t P2 ma~ cu?a '1' ba^.t LED3 delay ta('t LED3 MOV MOV DJNZ DJNZ RET END R1,#10 R0,#0FFh R0,LOOP R1,LOOP VD: Đếm xung ngõ vào T0 (P3.4) → hiển thị trị đếm lên LED đoạn ; ; ; ; ; ; ; ; ; 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 0H MOV DPTR,#LED7SEG ; DPTR tro? dde^'n ba?ng ma~ LED BEGIN: 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 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 CLR ACALL SETB P2,40H P3.0 DELAY P3.0 ; ; ; ; LED1 ba^.t LED1 sa'ng delay ta('t LED1 MOV CLR ACALL SETB P2,41H P3.1 DELAY P3.1 ; ; ; ; LED2 ba^.t LED2 sa'ng delay ta('t LED2 MOV CLR ACALL SETB RET P2,42H P3.2 DELAY P3.2 ; ; ; ; LED ba^.t LED3 sa'ng delay ta('t LED3 B,#10 AB 40h,B B,#10 AB 41h,B 42h,A ; ; ; ; ; ; ; B=10 chia cho 10 lu+u digit tha^'p BIN2BCD: MOV DIV MOV MOV DIV MOV MOV RET ; su+?a cho SV DELAY: PUSH PUSH MOV LP2: MOV LP1: DJNZ DJNZ POP POP RET LED7SEG: DB DB END chia cho 10 lu+u digit tie^'p theo va`o 41h lu+u digit cuo^'i va`o 42h R7,#10 R6,#0FFh R6,LP1 R7,LP2 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H 88H,0C6H,86H,8EH,82H,89H Thiết kế port xuất LED Địa (8-bit): LED1: A0h LED2: C0h LED3: E0h VD: Xuất LED đoạn ‘123’ ORG MOV MOVX MOV MOVX MOV MOVX SJMP R0,#0A0h @R0,#0B0h R0,#0C0h @R0,#0A4h R0,#0E0h @R0,#0F9h $ ; LED1 ; LED2 ; LED3 +5V LED3 LED2 LED1 8 A B C D E F G P 10 16 15 14 13 12 11 10 9 10 16 15 14 13 12 11 10 9 10 16 15 14 13 12 11 10 R4 R5 29 31 11 12 15 16 19 G Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 11 G OC D0 D1 D2 D3 D4 D5 D6 D7 13 14 17 18 D0 D1 D2 D3 D4 D5 D6 D7 OC D0 D1 D2 D3 D4 D5 D6 D7 13 14 17 18 7402 U6 XTAL1 XTAL2 11 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 G OC 74LS373 19 18 EA/VPP AT89C51 12 15 16 19 A0 A1 A2 A3 A4 A5 A6 A7 U5 74LS138 A5 A6 A7 G1 G2A G2B D0 D1 D2 D3 D4 D5 D6 D7 15 14 13 12 11 10 7 13 14 17 18 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 D0 D1 D2 D3 D4 D5 D6 D7 30 D0 D1 D2 D3 D4 D5 D6 D7 A B C 39 38 37 36 35 34 33 32 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P3.0/RXD ALE/PROG P3.1/TXD P3.2/INTO P1.0 P1.1 P3.3/INT1 P3.4/TO P1.2 P3.5/T1 P1.3 P3.6/WR P1.4 P1.5 P3.7/RD P1.6 P1.7 PSEN RST U4 74LS373 D0 D1 D2 D3 D4 D5 D6 D7 D0 D1 D2 D3 D4 D5 D6 D7 13 14 17 18 D0 D1 D2 D3 D4 D5 D6 D7 OC U3 74LS373 U1 10 11 12 13 14 15 16 17 470x8 12 15 16 19 G Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 11 12 15 16 19 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 U2 74LS373 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 R6 470x8 470x8 21 22 23 24 25 26 27 28 A2 A1 A B C D E F G P A2 A1 A B C D E F G P A2 A1 +5V 10 11 12 13 14 15 16 17 29 30 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD PSEN ALE/PROG P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 XTAL1 XTAL2 RST EA/VPP 39 38 37 36 35 34 33 32 COL P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 COL U1 21 22 23 24 25 26 27 28 COL COL 3.3 Giao tiếp với bàn phím hex SW0 SW1 SW2 SW3 SW4 SW5 SW6 SW7 SW10 SW11 ROW ROW SW8 SW9 ROW SW12 19 18 SW13 SW14 SW15 ROW 31 AT89C51 A B C ; ; ; ; ; D E F Ba`n phi'm hex no^'i va`o P1 Chuo+ng tri`nh hie^?n thi phi'm nha^'n LED ddoa.n P1.0-P1.3: columns P1.4-P1.7: rows DDi.a chi? LED: A000h LOOP: READKB: SCAN: CONT: ROW_0: LCALL MOV MOVC MOV MOVX SJMP READKB DPTR,#T7SEG A,@A+DPTR DPTR,#0A000H @DPTR,A LOOP PUSH MOV MOV MOV MOV JNB JNB JNB JNB RL INC CJNE SJMP MOV A,#11111110B R7,#0 P1,A A,P1 ACC.4,ROW_0 ACC.5,ROW_1 ACC.6,ROW_2 ACC.7,ROW_3 A R7 R7,#4,CONT SCAN A,R7 ; tri tra? ve^`: A = 0-15 ; A000h: ddi.a chi? LED ; ; ; ; ; col_0 -> GND R7 = i no^'i col i -> GND ddo.c row xe't xem row na`o? ; ; ; ; ; chua^?n bi no^'i GND co^.t tie^'p theo la^`n luo+.t no^'i GND co^.t quay la.i que't tu+` co^.t Row=0, Col=R7 ROW_1: ROW_2: ROW_3: EXIT: T7SEG: ADD SJMP MOV ADD SJMP MOV ADD SJMP MOV ADD POP RET A,#0 EXIT A,R7 A,#4 EXIT A,R7 A,#8 EXIT A,R7 A,#12 ; A = + R7 DB DB END 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H, 08H,03H,46H,21H,04H,0EH ; Row=1, Col=R7 ; A = + R7 ; Row=2, Col=R7 ; A = + R7 ; Row=3, Col=R7 ; A = 12 + R7 3.4 Giao tiếp với ADC0804 +5V 21 22 23 24 25 26 27 28 19 18 31 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0/RXD P2.0/A8 P3.1/TXD P2.1/A9 P2.2/A10 P3.2/INTO P2.3/A11 P3.3/INT1 P3.4/TO P2.4/A12 P3.5/T1 P2.5/A13 P3.6/WR P2.6/A14 P3.7/RD P2.7/A15 XTAL1 XTAL2 RST PSEN ALE/PROG 10 11 12 13 14 15 16 17 18 17 16 15 14 13 12 11 EOC START DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 INTR WR +IN -IN VREF/2 CLKR CLKIN RD CS 19 R1 + - U3A TL082 R2 10K P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 39 38 37 36 35 34 33 32 Analog Input U2 10K U1 C1 150p ADC0804 29 30 EA/VPP AT89C51 ADC0804 laø chuyển đổi tương tự sang số bit Xét sơ đồ hình: - Điện trở 10K tụ 150pF nối với đầu vào CLKR CLKIN hình → phát xung nhịp bên tạo tần số hoạt động 640KHz - Một lần biến đổi bắt đầu xung START (tích cực mức thấp) ngắn hạn ngõ vào /WR Sau thời gian biến đổi khoảng 100µs, ngõ /INTR chuyển sang LOW báo hiệu kết thúc trình biến đổi (EOC – End of Conversion) VD: Đọc AD từ port 1, lưu vào ô nhớ 40h xuất Port ;P1 ;P3.2 -> RS RW E HERE: pin RS pin R/W pin E pin EQU EQU EQU ORG MOV ACALL MOV ACALL MOV ACALL MOV ACALL P3.0 P3.1 P3.2 A,#38H CSTROBE A,#0CH CSTROBE A,#01H CSTROBE A,#06H CSTROBE MOV ACALL MOV ACALL MOV ACALL MOV ACALL MOV ACALL MOV ACALL SJMP A,#86H CSTROBE A,#'H' DSTROBE A,#'e' DSTROBE A,#'l' DSTROBE A,#'l' DSTROBE A,#'o' DSTROBE HERE ;init LCD do`ng, ma tra^.n 5x7 ;LCD on, cursor on ;clear LCD ;cursor di.ch pha?i ;chuye^?n cursor dde^'n line 1, pos CSTROBE: ACALL MOV CLR CLR SETB CLR RET READY P1,A RS RW E E ;command strobe ;is LCD ready? ;xua^'t ma~ le^.nh ;RS=0: le^.nh ;R/W=0 -> ghi LCD ;E=1 -> ta.o ca.nh xuo^'ng ;E=0 ,cho^'t DSTROBE: ACALL MOV SETB CLR SETB CLR RET READY P1,A RS RW E E ;data strobe ;is LCD ready? ;xua^'t du+~ lie^.u ;RS=1 for data ;R/W=0 to write to LCD ;E=1 -> ta.o ca.nh xuo^'ng ;E=0, cho^'t ; kie^?m tra co+` BF READY: SETB P1.7 CLR RS SETB RW BACK: CLR E SETB E JB P1.7,BACK RET END ;P1.7: input ;RS=0: ghi le^.nh ;R/W=1: ddo.c ;E=0 -> ta.o ca.nh le^n ;E=1 ;cho+` busy flag=0 12 VD2: Đọc bàn phím Hex → xuaát LCD ;P1 = data/command pin ;P3.0 -> RS pin ;P3.1 -> R/W pin ;P3.2 -> E pin ;P2 -> Keypad ORG RS EQU P3.0 RW EQU P3.1 EN EQU P3.2 MOV ACALL MOV ACALL MOV ACALL MOV ACALL MOV ACALL AGAIN: A,#38H CSTROBE A,#0EH CSTROBE A,#01H CSTROBE A,#06H CSTROBE A,#80H CSTROBE LCALL ORL ACALL ACALL SJMP READKP A,#30h DELAY DSTROBE AGAIN ;command strobe CSTROBE: ACALL MOV CLR CLR SETB CLR RET ;data strobe DSTROBE: ACALL MOV SETB CLR SETB CLR RET READY: BACK: SETB CLR SETB CLR SETB JB RET ;init LCD lines,5x7 matrix ;LCD on, cursor on ;clear LCD ;cursor di.ch pha?i ;cursor: line 1, pos READY P1,A RS RW EN EN ;is LCD ready? ;xua^'t ma~ le^.nh ;RS=0: le^.nh ;R/W=0: ghi LCD ;EN=1 -> ta.o ca.nh xuo^'ng ;EN=0 ,cho^'t READY P1,A RS RW EN EN ;is LCD ready? ;xua^'t du+~ lie^.u P1 ;RS=1: du+~ lie^.u ;R/W=0 ghi LCD ;EN=1 -> ta.o ca.nh xuo^'ng ;EN=0, cho^'t P1.7 RS RW EN EN P1.7,BACK ;P1.7: input ;RS=0: le^.nh ;R/W=1: ddo.c ;EN=0 -> ta.o ca.nh le^n ;EN=1 ;cho+` busy flag=0 ; DDo.c ba`n phi'm READKP: PUSH SCAN: MOV A,#11111110B MOV R7,#0 ; col_0 -> GND ; R7 = i 13 CONT: ROW_0: ROW_1: ROW_2: ROW_3: EXIT: DELAY: LP1: LP0: MOV MOV JNB JNB JNB JNB RL INC CJNE SJMP MOV ADD SJMP MOV ADD SJMP MOV ADD SJMP MOV ADD POP RET P2,A A,P2 ACC.4,ROW_0 ACC.5,ROW_1 ACC.6,ROW_2 ACC.7,ROW_3 A R7 R7,#4,CONT SCAN A,R7 A,#0 EXIT A,R7 A,#4 EXIT A,R7 A,#8 EXIT A,R7 A,#12 PUSH PUSH MOV MOV DJNZ DJNZ POP POP RET END ; no^'i col i -> GND ; ddo.c row ; xe't xem row na`o? R7,#0FFh R6,#0FFh R6,LP0 R7,LP1 ; ; ; ; ; ; chua^?n bi no^'i GND co^.t tie^'p theo la^`n luo+.t no^'i GND co^.t quay la.i que't tu+` co^.t Row=0, Col=R7 A = + R7 ; Row=1, Col=R7 ; A = + R7 ; Row=2, Col=R7 ; A = + R7 ; Row=3, Col=R7 ; A = 12 + R7 14 Lập trình hợp ngữ 4.1 Một số cấu trúc lập trình Nhảy có điều kieän: C=1 bit = A=0 Rn = direct = A ≠ direct A ≠ #data Rn ≠ #data @Ri ≠ #data Jump_if_not JNC rel JNB bit, rel JNZ rel DJNZ Rn, rel DJNZ direct, rel CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE @Ri, #data, rel Jump_if_ JC rel JB bit, rel / JBC bit, rel JZ rel Nhảy không điều kiện: AJMP, LJMP, SJMP Cấu trúc “repeat… until” repeat until REPEAT: JUMP_if_not_,REPEAT Cấu trúc “while… do” while START: STOP: JUMP_if_not_,STOP SJMP START Cấu trúc “if… then… else” if then else JUMP_if_not_,ELSE SJMP DONE ELSE: DONE: 15 Cấu trúc “case… of…” case of val1: val2: val3: else: end SKIP1: SKIP2: SKIP3: CJNE ,,SKIP1 SJMP EXIT CJNE ,,SKIP2 SJMP EXIT CJNE ,,SKIP3 SJMP EXIT CJNE ,,EXIT EXIT: 4.2 Một số ví dụ VD1: LED nhấp nháy +5V +5V 10uF R3 10K C1 19 30pF 12MHz C2 18 40 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD RST PSEN XTAL1 XTAL2 AT89C51 30pF LOOP: ORG SETB ACALL CLR D1 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 GND C3 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 20 +5V VCC U1 39 38 37 36 35 34 33 32 R4 470 P2.0 DELAY P2.0 16 ALE/PROG EA/VPP 21 22 23 24 25 26 27 28 LED 10 11 12 13 14 15 16 17 29 30 31 +5V ACALL SJMP DELAY: LP2: LP1: DELAY LOOP MOV MOV DJNZ DJNZ RET R6, #0FFh R7, #0FFh R7, LP1 R6, LP2 VD2: Nhaán SW1 (tạo cạnh xuống) → LED sáng lúc taét +5V +5V 10uF R3 10K C1 19 30pF 12MHz 18 C2 40 D1 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD RST PSEN XTAL1 GND C3 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 XTAL2 AT89C51 ALE/PROG EA/VPP 20 +5V VCC U1 39 38 37 36 35 34 33 32 R4 470 30pF Pseudo code: Repeat until P3.0 = Repeat until P3.0 = P2.0 = Delay P2.1 = Assembly code: ORG SETB LOOP: JNB LOOP1: JB CLR ACALL SETB P3.0 P3.0, LOOP P3.0, LOOP1 P2.0 DELAY P2.0 ;P3.0: input 17 21 22 23 24 25 26 27 28 LED SW1 10 11 12 13 14 15 16 17 29 30 31 +5V DELAY: LP2: LP1: SJMP MOV MOV DJNZ DJNZ RET LOOP R6, #0FFh R7, #0FFh R7, LP1 R6, LP2 18 Ôn tập Chương 1: Khái niệm - - - Sơ đồ khối hệ vi xử lý tổng quát Bộ nhớ: ROM (các loại?), RAM o Các chân địa chỉ: số chân ↔ dung lượng o Các chân liệu o Các chân điều khiển: RAM có /OE /WE, ROM có /OE Trong hệ vi xử lý: /OE ↔ /RD, /WE ↔ /WR o Địa chip nhớ = địa làm cho chân /CS (/CE) tích cực → mạch giải mã địa Giải mã địa chỉ: toàn phần, phần o Bus địa có 16-bit, chip nhớ có n chân địa chỉ: (16-n) đường tín hiệu đưa vào mạch GMĐC → GM toàn phần, (16-n) đường tín hiệu đưa vào mạch GMĐC → GM phần o Mạch GMĐC: thường dùng 74LS138, 74LS139, cổng Logic Thiết kế port nhập (dùng 74LS244), port xuất (dùng 74LS373) Yêu cầu chương 1: - Nhìn sơ đồ → xác định địa - Bản đồ địa → vẽ sơ đồ (thiết kế) Chương 2: Họ VĐK 8051 - - - Đặc tính kỹ thuật: o Không gian nhớ liệu: 64KB, không gian nhớ chương trình: 64KB (Bộ nhớ on-chip 89C51: 128 byte RAM, 4K EEPROM.) o port I/O chiều o timer o port nối tiếp o nguồn ngắt Truy xuất ô nhớ → phải biết kiểu định địa (cách định ô nhớ) Truy xuất RAM nội? Truy xuất nhớ liệu mở rộng (RAM ngoài)? Truy xuất nhớ chương trình? Một số lệnh thường dùng (các lệnh ví dụ) Kết hợp lệnh nhảy để thực cấu trúc: repeat … until, while … do, if … then … else, … Timer: o Thanh ghi TMOD? Các bit: TFi, TRi (thanh ghi TCON)? o Dùng timer để định thời nào? Sử dụng port: muốn port input làm nào? Port nối tiếp: 19 o o o o - Ngắt: Thanh ghi SCON? Dùng Timer để tạo baud rate → xác định trị nạp cho TH1? Xuất ký tự port nối tiếp? Nhận ký tự từ port nối tiếp? o Thanh ghi IE, IP? Các bit: ITi? o Bảng vector ngắt? o Cấu trúc chương trình có sử dụng ngắt? Yêu cầu chương : Viết chương trình cho 8051: - Tra bảng - Truy xuất RAM ngoài, RAM - Copy khối liệu - Đổi binary → BCD - Delay (ngắn/dài) không dùng Timer - Delay (ngắn/dài) dùng Timer - Phát/thu ký tự qua port nối tiếp - Trình phục vụ ngắt thu/phát liệu qua port nối tiếp - Tạo xung vuông dùng ngắt - Xử lý ngắt tác động mức/cạnh Chương 3: Ứng dụng - Cách quét LED đoạn Các cách đọc A/D Cách quét bàn phím HEX Khởi động 8255 Đọc/xuất liệu qua port A, B, C (mode 0) 20 Sinh viên nên tự lập bảng tóm tắt: - Tóm tắt Bảng tổng kết lệnh nhảy C=1 bit = A=0 Rn = direct = A ≠ direct A ≠ #data Rn ≠ #data @Ri ≠ #data Jump_if_not JNC rel JNB bit, rel JNZ rel DJNZ Rn, rel DJNZ direct, rel CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE @Ri, #data, rel Jump_if_ JC rel JB bit, rel / JBC bit, rel JZ rel - Các ghi SFR - Công thức tính giá trị nạp cho TH1 để tạo baud rate cho port nối tieáp o SMOD = 0: f osc TH = 256 − 384 × Baud o SMOD = 1: f osc TH = 256 − 192 × Baud - Bảng vector ngắt: 21 - Thanh ghi điều khiển 8255 mode 0: - Bảng mã LED đoạn Hiển thò A B C D E F [traéng] Anod chung C0h F9h A4h B0h 99h 92h 82h F8h 80h 98h 88h C6h 86h 8Eh 82h 89h 7Fh FFh 22 Cathode chung 3Fh 06h 5Bh 4Fh 66h 6Dh 7Dh 07h 7Fh 67h 77h 39h 79h 71h 70h 76h 80h 00h ... báo hiệu kết thúc trình biến đổi (EOC – End of Conversion) VD: Đọc AD từ port 1, lưu vào ô nhớ 40h xuất Port ;P1

Ngày đăng: 19/01/2014, 08:20

TỪ KHÓA LIÊN QUAN

w