Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 168 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
168
Dung lượng
3,08 MB
Nội dung
TRƯ NG I H C K THU T CÔNG NGHI P KHOA I N T B MÔN K THU T MÁY TÍNH BÀI GI NG PHÁT CHO SINH VIÊN (LƯU HÀNH N I B ) Theo chương trình 150 TC thay 180 TC ho c tương ương S d ng cho năm h c 2009 – 2010 Tên gi ng: Vi x lý – Vi i u n S tín ch : 03 BÀI GI NG PHÁT CHO SINH VIÊN (LƯU HÀNH N I B ) Theo chương trình 150 TC thay 180 TC ho c tương ương S d ng cho năm h c 2009 - 2010 Tên gi ng: Vi x lý – Vi i u n S tín ch : 03 Trư ng b môn Ths Nguy n Tu n Linh Thái Nguyên, ngày 25 tháng 03 năm 2009 Trư ng khoa i n T PGS TS Nguy n H u Công M CL C CHƯƠNG T NG QUAN V VI X LÝ – VI I U KHI N 1.1 GI I THI U CHUNG V VI X LÝ – VI I U KHI N 10 1.1.1 T ng quan 10 1.1.2 L ch s phát tri n c a b x lý 10 1.1.3 Vi x lý vi i u n .11 1.2 C u trúc chung c a h vi x lý 11 1.2.1 Kh i x lý trung tâm (CPU) 12 1.2.2 B nh (Memory) 13 1.2.3 Kh i ph i ghép vào/ra (I/O) 15 1.2.4 H th ng bus 16 1.3 nh d ng d li u bi u di n thông tin h vi x lý – vi i u n 17 1.3.1 Các h m 17 1.3.2 Bi u di n s ký t 18 1.3.3 Các phép toán s h c h m nh phân 19 CHƯƠNG H VI X LÝ INTEL 80x86 21 2.1 C u trúc ph n c ng c a b vi x lý 8086 22 2.1.1 T ng quan 22 2.1.2 C u trúc bên s ho t ng .22 2.1.3 Mô t ch c chân 26 2.2 Ch a ch 26 2.2.1 Khái ni m ch a ch .26 2.2.2 Các ch a ch 29 2.2.3 Gi i mã a ch 32 2.3 T p l nh 35 2.3.1 Gi i thi u chung 35 2.3.2 Các nhóm l nh .35 2.4 Bi u th i gian ghi/ c 62 2.4.1 Xung nh p chu kỳ máy 62 2.4.2 Chu kỳ c/ghi c a vi x lý 8086 63 2.5 L p trình h p ng (Assembly) cho vi x lý 80x86 64 2.5.1 Gi i thi u chung v h p ng .64 2.5.2 C u trúc chung c a chương trình h p ng 65 2.5.3 Các c u trúc i u n b n 72 2.5.4 Các bư c l p trình 73 2.5.5 Các t p ví d 74 2.6 Câu h i t p 83 CHƯƠNG H VI I U KHI N 8051 85 3.1 Gi i thi u chung 86 3.1.1 ng d ng c a vi i u n .87 3.1.2 Ho t ng c a vi i u n 87 3.1.3 C u trúc chung c a vi i u n 88 3.2 Ki n trúc vi i u n 8051 92 3.2.1 Chu n 8051 92 3.2.2 Chân vi i u n 8051 94 3.2.3 C ng vào/ra 95 3.2.4 T ch c b nh 8051 99 3.2.5 Các ghi ch c c bi t (SFRs - Special Function Registers) 104 3.2.6 B m b nh th i .107 3.2.7 Truy n thông không ng b (UART) 112 3.2.8 Ng t vi i u n 8051 117 3.3 T p l nh 8051 l p trình h p ng cho 8051 .119 3.3.1 T p l nh .119 3.3.2 L p trình Assembly 126 B môn K thu t máy tính – Khoa i n t - Trư ng H K thu t Công nghi p 3.4 Câu h i t p 132 CHƯƠNG CÁC H VI I U KHI N TIÊN TI N VÀ NG D NG 135 4.1 Các h vi i u n tiên ti n 136 4.1.1 Atmel AVR 136 4.1.2 Vi i u n PIC 141 4.1.3 ARM 143 4.2 Các ví d ng d ng 147 4.2.1 Nh p nháy dãy LED ơn 147 4.2.2 Timer T0 ch chia tách 148 4.2.3 S d ng Timer T2 149 4.2.4 Dùng ng t 151 4.2.5 L p trình ng t ngồi theo sư n xu ng 152 4.2.6 S d ng LED 153 4.2.7 Vi t ch s LED 153 4.2.8 Thông báo b ng văn b n hình LCD 155 4.2.9 Nh n d li u qua UART 160 4.2.10 Truy n d li u qua UART 161 4.2.11 Chương trình ph c v truy n thông n i ti p 162 4.2.12 Truy n thông UART cho 8051 b ng ph n m m 163 4.2.13 Ghép n i 8051 v i ADC0804, chuy n i ADC 165 4.2.14 Chuy n i s nh phân sang s th p phân 165 4.2.15 Ghép n i vi i u n v i bàn phím 166 4.2.16 Ghép n i vi i u n v i step motor 166 Tài li u tham kh o 168 ĐẠI HỌC THÁI NGUYÊN CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜ ĐẠ HỌ TRƯỜNG ĐẠI HỌC lậ Độc lập - Tự - Hạnh phúc THUẬ NGHIỆ KỸ THUẬT CÔNG NGHIỆP CHƯƠNG TRÌNH GIÁO D C IH C NGÀNH ÀO T O: I N – I N T , SPKT I N – TIN, CƠ T CHUYÊN NGÀNH: KH I NGÀNH I N – I N T CƯƠNG CHI TI T H C PH N: VI X KHI N I N LÝ – VI I U (H c ph n b t bu c) Tên h c ph n: Vi x lý – vi i u n S tín ch : 03; 3(3; 1,5; 6)/12 Trình cho sinh viên năm th : ( i n, i n t , SPKT i n, SPKT Tin) ho c (Cơ i n t ) Phân b th i gian - Lên l p lý thuy t: (ti t/tu n) x 12 (tu n) = 36 ti t - Th o lu n: 1,5 (ti t/tu n) x 12 (tu n)= 18 ti t Các h c ph n h c trư c K thu t i n t s H c ph n thay th , h c ph n tương ương Vi x lý – vi i u n (trong chương trình 180 TC 260 VHT) M c tiêu c a h c ph n Sau h c xong h c ph n sinh viên ph i n m c c u trúc ph n c ng c a b vi x lý – vi i u n tiêu bi u: x86, 8051; T ch c b nh , t p l nh, ch a ch l p trình cho chúng; Bi t cách ghép n i v i b nh thi t b ngo i vi; Bi t khai thác kh ng t nh th i Có kh thi t k xây d ng modul (bao g m c ph n c ng ph n m m) s d ng vi i u n cho tốn c th Mơ t v n t t n i dung h c ph n T ng quan v h m bi u di n thông tin h vi x lý – vi i u n Vi x lý: T ng quan v ki n trúc h vi x lý; t ch c ph n c ng c a CPU h Intel 80x86, ch ánh a ch , t p l nh, l p trình h p ng (assembly) cho 80x86 v i nh ng toán ơn gi n; m t s vi m ch ph tr h vi x lý Vi i u n: C u trúc h vi i u n onchip MCS 8051; l p trình h p ng cho vi i u n; ho t ng nh th i, ng t truy n thông n i ti p; gi i thi u m t s h vi x lý thông d ng khác Gi i thi u m t s toán ng d ng tiêu bi u Nhi m v c a sinh viên D l p ≥ 80 % t ng s th i lư ng c a h c ph n Chu n b th o lu n Bài t p, Bài t p l n (dài): Không 10 Tài li u h c t p - Sách, giáo trình chính: [1] Bài gi ng “Vi x lý – vi i u n” ang biên so n [2] Giáo trình “H vi x lý – vi i u n ng d ng” ang biên so n - Sách tham kh o: [1] Văn Th Minh, K thu t vi x lý, NXB KHKT, 1997 [2] T ng Văn On, H vi i u n 8051, NXB KH&KT, 2005 [3] Nguy n Tăng Cư ng, Phan Qu c Th ng, C u trúc l p trình h vi i u n 8051, NXB KH&KT, 2004 [4] Michael Hordeski, Personal Computer Interfaces, Mc Graw Hill, 1995 11 Tiêu chu n ánh giá sinh viên thang i m 11.1 Các h c ph n lý thuy t • Tiêu chu n ánh giá Chuyên c n; Th o lu n, t p; Bài t p l n (dài); Ki m tra gi a h c ph n; Thi k t thúc h c ph n; Khác • Thang i m i m ánh giá b ph n ch m theo thang i m 10 v i tr ng s sau: + Ki m tra gi a h c ph n: 20 % + i m thi k t thúc h c ph n: 80 % 12 N i dung chi ti t h c ph n l ch trình gi ng d y Ngư i biên so n: KS Nguy n Tu n Anh ThS Nguy n Ti n Duy ThS Nguy n Tu n Linh KS Nguy n Văn Huy Tu n th N i dung Chương I: T ng quan v vi x lý – vi i u n 1.1 Gi i thi u chung v vi x lý – vi i u n 1.1.1 T ng quan 1.1.2 L ch s phát tri n c a b x lý 1.1.3 Vi x lý vi i u n 1.2 C u trúc chung c a h vi x lý 1.2.1 Kh i x lý trung tâm (CPU) 1.2.2 B nh (Memory) 1.2.3 Kh i ph i ghép vào/ra (I/O) 1.2.4 H th ng bus 1.3 nh d ng d li u bi u di n thông tin h vi x lý – vi i u n 1.3.1 Các h m 1.3.2 Bi u di n s ký t 1.3.3 Các phép toán s h c h m nh phân Chương II: H vi x lý Intel 80x86 2.1 C u trúc ph n c ng c a b vi x lý 8086 2.1.1 T ng quan 2.1.2 C u trúc bên s ho t ng 2.1.3 Các ch a ch 2.2 T p l nh 2.2.1 Gi i thi u chung 2.2.2 Các nhóm l nh 2.3 Bi u th i gian ghi/ c 2.4 L p trình h p ng (Assembly) cho vi x lý 80x86 2.4.1 Gi i thi u chung v h p ng 2.4.2 C u trúc c a chương trình h p ng 2.4.3 Các c u trúc i u n b n 2.4.4 Các bư c l p trình Tài li u h c t p, tham kh o Hình th c h c [1] - [4] Gi ng [1] - [4] Gi ng [1] - [4] Gi ng [1] - [4] Gi ng B mơn K thu t máy tính – Khoa i n t - Trư ng H K thu t Công nghi p 7 10 2.4.5 Các t p ví d Th o lu n Chương III: H vi i u n onchip MCS 8051 3.1 Gi i thi u chung v vi i u n 3.1.1 Gi i thi u chung 3.1.2 Khái ni m vi i u n 3.1.3 C u trúc chung c a vi i u n 3.2 Ki n trúc vi i u n 8051 3.2.1 Chu n 8051 3.2.2 C u trúc chân vi i u n 8051 3.2.3 C ng vào/ra 3.2.4 T ch c b nh 8051 3.2.5 Các ghi ch c c bi t (SFRs) 3.2.6 B m b nh th i 3.2.7 Truy n thông không ng b v n (UART) 3.2.8 Ng t vi i u n 8051 3.2.9 Qu n lý lư ng c a 8051 Ki m tra gi a kỳ Th o lu n 3.3 T p l nh 8051 l p trình h p ng cho 8051 3.3.1 T p l nh 8051 3.3.2 Thành ph n ngôn ng assembly [1] - [4] Gi ng [1] - [4] Th o lu n 11 Th o lu n [1] - [4] Th o lu n 12 Chương IV: Các h vi i u n tiên ti n ng d ng 4.1 Các vi i u n tiên ti n 4.1.1 AVR 4.1.2 PIC 4.1.3 ARM [1] - [4] Gi ng 13 4.2 [1] - [4] 14 Th o lu n [1] - [4] 15 Th o lu n [1] - [4] Các ví d ng d ng Th o lu n Th o lu n Th o lu n Bài gi ng Vi x lý - Vi i u n T NG QUAN V VI X Chương T ng quan v vi x lý – vi i u n CHƯƠNG LÝ – VI I U KHI N M c tiêu: Giúp sinh viên hi u v l ch s i c a h vi x lý – vi i u n; khái ni m, c u t o nguyên lý c a h vi x lý – vi i u n; ôn l i ki n th c v h th ng s m Tóm t t chương: Chương chia làm ph n: Gi i thi u chung v vi x lý – vi i u n T ng quan L ch s phát tri n c a b x lý Vi x lý vi i u n C u trúc chung c a h vi x lý Kh i x lý trung tâm (CPU) B nh (Memory) Kh i ph i ghép vào/ra (I/O) H th ng bus nh d ng d li u bi u di n thông tin h vi x lý – vi i u n Các h m Bi u di n s ký t Các phép toán s h c h m nh phân B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n 1.1 GI I THI U CHUNG V VI X Chương T ng quan v vi x lý – vi i u n LÝ – VI I U KHI N 1.1.1 T ng quan Vi x lý (vi t t t P hay uP), cịn c g i b vi x lý, m t linh ki n i n t máy tính c ch t o t tranzito thu nh tích h p lên m t vi m ch tích h p ơn Kh i x lý trung tâm (CPU) m t b vi x lý c nhi u ngư i bi t n nhi u thành ph n khác máy tính có b vi x lý riêng c a nó, ví d c c hình (video card) có m t b vi x lý Hình 1-1.B vi x lý Intel 80486DX2 Trư c xu t hi n b vi x lý, CPU c xây d ng t m ch tích h p c nh riêng bi t, m i m ch tích h p ch ch a kho ng vào ch c tranzito Do ó, m t CPU có th m t b ng m ch g m hàng ngàn hay hàng tri u vi m ch tích h p Ngày nay, cơng ngh tích h p ã phát tri n, m t CPU có th tích h p lên m t ho c vài vi m ch tích h p c l n, m i vi m ch tích h p c l n ch a hàng ngàn ho c hàng tri u tranzito Nh ó cơng su t tiêu th giá thành c a b vi x lý ã gi m k Vi i u n m t máy tính c tích h p m t chíp, thư ng c s d ng i u n thi t b i n t Vi i u n, th c ch t, m t h th ng bao g m m t vi x lý có hi u su t dùng giá thành th p (khác v i b vi x lý a dùng máy tính) k t h p v i kh i ngo i vi b nh , mô un vào/ra, mô un bi n i s sang tương t tương t sang s , máy tính mơ un thư ng c xây d ng b i chíp m ch Vi i u n thư ng c dùng xây d ng h th ng nhúng Nó xu t hi n nhi u d ng c i n t , thi t b i n, máy gi t, lị vi sóng, i n tho i, u c DVD, thi t b a phương ti n, dây chuy n t ng, v.v H u h t vi i u n ngày c xây d ng d a ki n trúc Harvard, ki n trúc nh nghĩa b n thành ph n c n thi t c a m t h th ng nhúng Nh ng thành ph n lõi CPU, b nh chương trình (thơng thư ng ROM ho c b nh Flash), b nh d li u (RAM), m t ho c vài b nh th i c ng vào/ra giao ti p v i thi t b ngo i vi mơi trư ng bên ngồi - t t c kh i c thi t k m t vi m ch tích h p Vi i u n khác v i b vi x lý a ch có th ho t ng ch v i vài vi m ch h tr bên 1.1.2 L ch s phát tri n c a b x lý - Th h (1971 - 1973): vi x lý bit, i di n 4004, 4040, 8080 (Intel) hay IPM-16 (National Semiconductor) + dài word thư ng bit (có th l n hơn) + Ch t o b ng công ngh PMOS v i m t ph n t nh , t c th p, dòng t i th p giá thành r +T c 10 - 60 µs / l nh v i t n s xung nh p 0.1 - 0.8 MHz + T p l nh ơn gi n ph i c n nhi u vi m ch ph tr 10 B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng Hình 4-5 DSEG STACK_START: ;RESET VECTORS CSEG JMP AT DS 03FH 040H AT XRESET ; Reset vector ORG MOV MOV SP,#STACK_START P1,#0 ; Define Stack pointer ; Turn off all segments on MOV P3,#20h ; Activate display D4 MOV LCALL MOV SJMP A,#03 Disp P1,A LOOP INC MOVC RET DB DB DB DB XRESET: 100H A A,@A+PC displays LOOP: Disp: 154 ; Send number “3” to display ; Perform appropriate masking for the number ; Subroutine for displaying digits 3FH 06H 5BH 4FH ; ; ; ; Digit Digit Digit Digit mask mask mask mask B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n DB DB DB DB DB DB END 66H 6DH 7DH 07H 7FH 6FH ; ; ; ; ; ; ; Chương Các h vi i u n tiên ti n ng d ng Digit mask Digit mask Digit mask Digit mask Digit mask Digit mask End of program 4.2.8 Thông báo b ng văn b n hình LCD Ví d s d ng lo i LCD ph bi n nh t hi n th văn b n hai dòng v i 16 ký t m i dòng ti t ki m chân IO c a vi i u n, ch có chân c s d ng cho giao ti p d li u B ng cách này, m i byte c truy n i theo hai bư c: u tiên bit cao sau ó bit th p LCD c n ph i c kh i t o t i u chương trình (trư c s d ng tính ghi c LCD) Bên c nh ó, ph n c a chương trình l p i l p l i chương trình t o m t chương trình c bi t T t c i u có v r t ph c t p, tồn b chương trình v b n th c hi n m t s ho t ng ơn gi n hi n th dòng ch “LCD display” Hình 4-6 ************************************************************************* ;* PROGRAM NAME : Lcd.ASM ;* DESCRIPRTION : Program for testing LCD display 4-bit communication ;* is used Program does not check BUSY flag but uses program delay ;* between commands PORT1 is used for connection ;* to the microcontroller ;************************************************************************ ;BASIC DIRECTIVES $MOD53 $TITLE(LCD.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING ;Stack DSEG AT 0E0h B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 155 Bài gi ng Vi x lý - Vi i u n Stack_Start: Chương Các h vi i u n tiên ti n ng d ng DS 020h Start_address EQU 0000h ;Reset vectors CSEG ORG JMP AT Start_address Inic ORG Start_address+100h MOV IE,#00 ; All interrupts are disabled MOV Inic: SP,#Stack_Start CALL LCD_inic ; Initialize LCD ;************************************************* ;* MAIN PROGRAM ;************************************************* START: A,#80h LCD_status MOV CALL A,#' ' LCD_putc MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#'L' LCD_putc A,#'C' LCD_putc A,#'D' LCD_putc MOV A,#0c0h CALL LCD_status MOV CALL A,#' ' LCD_putc MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL 156 MOV CALL A,#' ' LCD_putc A,#' ' LCD_putc A,#' ' LCD_putc A,#'D' LCD_putc A,#'i' LCD_putc A,#'s' LCD_putc ; Next character will appear on the first ; location in the first line ;of LCD display ; Display character ‘ ’ ; Call subroutine for ;character transmission ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘L’ ; Display character ‘C’ ; Display character ‘D’ ; Next character will appear; ; on the first ; location in the second line ;of LCD display ; Display character ‘ ’ ; Call subroutine for ;character transmission ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘ ’ ; Display character ‘D’ ; Display character ‘i’ ; Display character ‘s’ B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV MOV CALL MOV CALL JMP Chương Các h vi i u n tiên ti n ng d ng ; Display character ‘p’ n A,#'p' LCD_putc A,#'l' LCD_putc A,#'a' LCD_putc A,#'y' LCD_putc ; Display character ‘l’ ; Display character ‘a’ ; Display character ‘y’ R0,#20d Delay_10ms DPTR,#LCD_DB A,#6d LCD_inic_status R0,#10d Delay_10ms START ; Wait time (20x10ms) ; Clear display ; Wait time(10x10ms) ;********************************************* ;* Subroutine for wait time (T= r0 x 10ms) ;********************************************* Delay_10ms: MOV MOV MOV DJNZ DJNZ DJNZ RET R5,00h R6,#100d R7,#100d R7,$ R6,$-4 R5,$-6 ; 1+(1+(1+2*r7+2)*r6+2)*r5 approximately ; (if r7>10) ; 2*r5*r6*r7 ; $ indicates current instruction ;************************************************************************ * ;* SUBROUTINE: LCD_inic ;* DESCRIPTION: Subroutine for LCD initialization ;* ;* (is used with 4-bit interface, under condition that pins DB4-7 on LCD ;* are connected to pins PX.4-7 on microcontroller’s ports, ; i.e four higher ;* bits on the port are used) ;* ;* NOTE: It is necessary to define port pins for controlling LCD operation: ;* LCD_enable, LCD_read_write, ; LCD_reg_select,similar to port for connection to LCD ;* It is also necessary to define addresses for the first character in each ;* line ;************************************************************************ * LCD_enable LCD_read_write LCD_reg_select LCD_port Busy BIT BIT BIT SET BIT LCD_Start_I_red P1.3 P1.1 P1.2 P1 P1.7 EQU 00h LCD_Start_II_red EQU 40h LCD_DB: DB DB ; ; ; ; Bit for activating pin E on LCD Bit for activating pin RW on LCD Bit for activating pin RS on LCD Port for connection to LCD ; Port pin on which Busy flag appears ; Address ; in the ; Address ; in the 00111100b 00101100b B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p of the first message character first line of LCD display of the first message character second line of LCD display ; -8b, 2/1 lines, 5x10/5x7 format ; -4b, 2/1 lines, 5x10/5x7 format 157 Bài gi ng Vi x lý - Vi i u n DB DB 00011000b 00001100b DB 00000110b Chương Các h vi i u n tiên ti n ng d ng ; -Display/cursor shift, right/left ; -Display ON, cursor OFF, ;cursor blink off ; -Increment mode, display shift off DB DB DB 00000010b 00000001b 00001000b ; -Display/cursor home ; -Clear display ; -Display OFF, cursor OFF, ; cursor blink off LCD_inic: ;***************************************** MOV MOV CALL MOV CALL DPTR,#LCD_DB A,#00d ; Triple initialization in 8-bit LCD_inic_status_8 ; mode is performed at the beginning A,#00d ; (in case of slow increment of LCD_inic_status_8 ; power supply when the power supply is on MOV A,#00d lcall LCD_inic_status_8 MOV CALL MOV CALL A,#1d ; Change from 8-bit into LCD_inic_status_8 ; 4-bit mode A,#1d LCD_inic_status MOV A,#3d CALL MOV CALL MOV CALL ; As from this point the program executes in ;4-bit mode LCD_inic_status A,#6d LCD_inic_status A,#4d LCD_inic_status RET LCD_inic_status_8: ;****************************************** PUSH B MOVC CLR CLR MOV memorized ORL ORL ANL A,@A+DPTR LCD_reg_select LCD_read_write B,LCD_port ; RS=0 - Write command ; R/W=0 - Write data on LCD ; Lower bits from LCD port are B,#11110000b A,#00001111b A,B MOV SETB LCD_port,A LCD_enable CLR LCD_enable MOV B,#255d DJNZ B,$ DJNZ B,$ DJNZ B,$ ; Data is moved from A to LCD port ; high-to-low transition signal ; is generated on the LCD's EN pin ; Time delay in case of improper reset ; during initialization POP B RET 158 B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng LCD_inic_status: ;************************************************************************ * MOVC A,@A+DPTR CALL LCD_status RET ;************************************************************************ * ;* SUBROUTINE: LCD_status ;* DESCRIPTION: Subroutine for defining LCD status ;************************************************************************ * LCD_status: MOV DJNZ DJNZ DJNZ CLR CALL PUSH B B,#255d B,$ B,$ B,$ LCD_reg_select LCD_port_out SWAP A DJNZ DJNZ DJNZ CLR CALL ; RS=O: Command is sent to LCD ; Nibles are swapped in accumulator B,$ B,$ B,$ LCD_reg_select LCD_port_out ; RS=0: Command is sent to LCD POP B RET ;************************************************************************ ;* SUBROUTINE: LCD_putc ;* DESCRIPTION: Sending character to be displayed on LCD ;************************************************************************ LCD_putc: MOV DJNZ SETB CALL PUSH B B,#255d B,$ LCD_reg_select LCD_port_out SWAP A DJNZ SETB B,$ LCD_reg_select CALL POP RET ; RS=1: Character is sent to LCD ; Nibles are swapped in accumulator LCD_port_out B ; RS=1: Character is sent to LCD ;************************************************************************ * ;* SUBROUTINE: LCD_port_out ;* DESCRIPTION: Sending commands or characters on LCD display ;************************************************************************ * LCD_port_out: PUSH ACC PUSH B MOV B,LCD_port B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p ; Lower bits of LCD port are memorized 159 Bài gi ng Vi x lý - Vi i u n ORL B,#11110000b ORL A,#00001111b ANL A,B MOV LCD_port,A SETB LCD_enable CLR LCD_enable POP POP RET Chương Các h vi i u n tiên ti n ng d ng B ACC END ; Data is copied from A to LCD port ; high-to-low transition signal ; is generated on the LCD's EN pin ; End of program 4.2.9 Nh n d li u qua UART kích ho t tính giao ti p n i ti p UART thành công, i u c n thi t áp ng quy nh c th c a chu n RS232 Nó ch y u c p n c p i n áp theo yêu c u c a chu n Theo ó,-10V n -3V m c logic m t (1) thông i p, 3V n 10 V m c logic không (0) Các vi i u n chuy n i xác d li u v nh d ng n i ti p, ngu n cung c p i n áp ch 5V T ó, khơng ph i d dàng chuy n i 0V thành 10V 5V thành -10V, Ho t ng c ng truy n ng nh n d li u ây, MAX232 c a Maxim c s d ng b i c ph bi n r ng rãi, r tin c y Ví d cho th y làm th nh n c thông i p g i t PC Timer T1 t o t c baud T th ch anh 11,0592 MHz c s d ng, r t d dàng có c tiêu chu n t c truy n mà t c baud 9600 bps M i d li u nh n c l p t c c chuy n P1 Hình 4-7 ;************************************************************************ 160 B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Chương Vi x lý - Vi i u n Các h vi i u n tiên ti n ng d ng ;* PROGRAM NAME : UartR.ASM ;* DESCRIPTION: Each data received from PC via UART appears on the port ;* P1 ;* ;************************************************************************ ;BASIC DIRECTIVES $MOD53 $TITLE(UARTR.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING ;STACK DSEG STACK_START: AT DS 03FH 040H ;RESET VECTORS CSEG JMP ORG AT XRESET 023H ; Reset vector ; Starting address of ;UART interrupt routine JMP IR_SER ORG 100H MOV MOV MOV MOV IE,#00 SP,#STACK_START TMOD,#20H TH1,#0FDH MOV MOV CLR CLR SETB SCON,#50H IE,#10010000B TI RI TR1 ; ; ; ; ; ; ; ; ; ; LOOP: SJMP LOOP ; Remain here IR_SER: JNB RI,OUTPUT A,SBUF P1,A RI OUTPUT: MOV MOV CLR RETI ; If any data is received, ; move it to the port ; P1 XRESET: END All interrupts are disabled Initialization of Stack pointer Timer1 in mode2 9600 baud rate at the frequency of 11.0592MHz Receiving enabled, 8-bit UART UART interrupt enabled Clear transmit flag Clear receive flag Start Timer1 ; Clear receive flag ; End of program 4.2.10 Truy n d li u qua UART Chương trình mô t cách s d ng UART truy n d li u M t dãy s (0-255) c truy n n máy PC t c truy n 9600 baud MAX 232 c s d ng m t i u áp ;************************************************************************ ;* PROGRAM NAME : UartS.ASM ;* DESCRIPTION: Sends values 0-255 to PC ;************************************************************************ ;BASIC DIRECTIVES B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 161 Bài gi ng Vi x lý - Vi i u n $MOD53 $TITLE(UARTS.ASM) $PAGEWIDTH(132) $DEBUG $OBJECT $NOPAGING Chương Các h vi i u n tiên ti n ng d ng ;STACK DSEG STACK_START: AT DS 03FH 040H ;RESET VECTORS CSEG JMP AT XRESET ORG MOV MOV MOV MOV IE,#00 SP,#STACK_START TMOD,#20H TH1,#0FDH SCON,#40H TI RI R3,#00H TR1 MOV JNB SBUF,R3 TI,LOOP1 CLR INC START: LOOP1: 100H MOV CLR CLR MOV SETB XRESET: TI R3 ; Reset vector CJNE R3,#00H,START ; ; ; ; ; ; ; ; ; ; All interrupts are disabled Initialization of Stack pointer Timer1 in mode 9600 baud rate at the frequency of 11.0592MHz 8-bit UART Clear transmit bit Clear receive flag Reset caunter Start Timer ; ; ; ; ; Move number from counter to a PC Wait here until byte transmission is complete Clear transmit bit Increment the counter value by ; If 255 bytes are not sent return to the ; label START LOOP: SJMP END LOOP ; Remain here ; End of program 4.2.11 Chương trình ph c v truy n thông n i ti p Serial_Init: ;Kh i t o: ;Set timer mode to 8-bit Auto-Reload mov TMOD,#20H ;Enable reception ;Set Serial port mode to 8-bit UART mov SCON,#50H ;Set baudrate to 9600 at 11.0592MHz mov TH1,#0FDH mov TL1,#0FDH ;Start Timer setb TR1 ret Serial_Send: ; truy n n i dung ghi A UART ;wait for last data to be 162 B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng ;sent completely jnb TI,Serial_Send ;clear the transmit interrupt flag clr TI ;Then move the data to send in SBUF mov SBUF,A ret Serial_Read: ; nh n t UART v ghi A ;Wait for Receive interrupt flag jnb RI,Serial_Read ;If falg is set then clear it clr RI ;Then read data from SBUF mov A,SBUF ret 4.2.12 Truy n thông UART cho 8051 b ng ph n m m th c hi n thành công UART u tiên c n ph i bi t giao th c truy n thông UART Sơ cho th y d ng sóng c a m t frame truy n u tiên bit b t u sau ó 8-bit d li u t i m t bit d ng cu i Có m t cơng th c bí m t tính tốn th i gian trì hỗn có baudrate xác gi a bit Dư i ây m t ph n m m tri n khai UART, ó có th c s d ng chương trình C ASM Nó c vi t cho ph n m m Keil Nhưng v i m t vài thay i nh b n có th dùng chương trình c a b n ?SU?PUTC SEGMENT CODE ?SU?GETC SEGMENT CODE PUBLIC _putc PUBLIC getc txd_pin EQU rxd_pin EQU P3.1 P3.0 ;Transmit on this pin ;Receive on this pin ;Formula to calculate the bit time delay constant ;This constant is calculated as: (((crystal/baud)/12) - 5) / ;crystal is the frequency of crystal in Hz ;baud is required baudrate ;Please try to keep baudrate below 9600 ;to get best results :) BITTIM EQU 45; (((11059200/9600)/12) - 5) / ; -;To send data serially B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 163 Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng ;For C programs ;Protype definition: ; void putc(unsigned char); ;Usage: ; putc(data); ;Return: ; This function returns nothing ; ;For Assembly Programs: ; ;Usage: ; data to be send has to be moved to R7 ; for example: ; mov R7,#'a' ; lcall _putc ; -RSEG ?SU?PUTC _putc: push ACC Push PSW mov a,r7 CLR txd_pin ;Drop line for start bit MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For START bit MOV R1,#8 ;Send bits putc1: RRC A ;Move next bit into carry MOV txd_pin,C ;Write next bit MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For DATA bit DJNZ R1,putc1 ;write bits SETB txd_pin ;Set line high RRC A ;Restore ACC contents MOV R0,#BITTIM ;Wait full bit-time DJNZ R0,$ ;For STOP bit POP PSW pop ACC RET ; -;To receive data Serially ;If you want to use this routine in your ;C program then define function prototype ; as: ; unsigned char getc(void); ; ; Usage: ; data = getc(); ; Return value: ; Returns data received ;If you are using it in assembly program ; Usage: ; lcall getc ; Return: ; data received is stored in R7 ; 164 B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng RSEG ?SU?GETC getc: Push ACC Push PSW JB rxd_pin,$ MOV R0,#BITTIM/2 DJNZ R0,$ JB rxd_pin,getc MOV R1,#8 getc1: MOV R0,#BITTIM DJNZ R0,$ MOV C,rxd_pin RRC A DJNZ R1,getc1 mov r7,a POP PSW pop ACC RET ;Wait for start bit ;Wait 1/2 bit-time ;To sample in middle ;Insure valid ;Read bits ;Wait full bit-time ;For DATA bit ;Read bit ;Shift it into ACC ;read bits ;go home 4.2.13 Ghép n i 8051 v i ADC0804, chuy n rd equ P1.0 wr equ P1.1 cs equ P1.2 intr equ P1.3 adc_port equ P2 adc_val equ 30H i ADC ;Read signal P1.0 ;Write signal P1.1 ;Chip Select P1.2 ;INTR signal P1.3 ;ADC data pins P2 ;ADC read value stored here org 0H start: acall conv acall read mov P3,adc_val sjmp start conv: clr cs clr wr nop setb wr setb cs ;Start of Program ;Start ADC conversion ;Read converted value ;Move the value to Port ;Do it again ;Start of Conversion ;Make CS low ;Make WR Low ;Make WR High ;Make CS high wait: jb intr,wait ret ;Wait for INTR signal ;Conversion done clr cs clr rd mov a,adc_port mov adc_val,a setb rd setb cs ret ;Read ADC value ;Make CS Low ;Make RD Low ;Read the converted value ;Store it in local variable ;Make RD High ;Make CS High ;Reading done read: 4.2.14 Chuy n i s nh phân sang s th p phân Khi s d ng èn LED hình LCD, thư ng c n thi t ph i chuy n i s t nh phân sang s th p phân Ví d , n u m t vài ghi có ch a s d ng nh phân, c n hi n th s ó m t hình LED ba ch s , c n thi t ph i chuy n B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 165 Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng sang d ng th p phân Nói cách khác, c n thi t xác nh nh ng s c hi n th hình hi n th bên ph i nh t ( ơn v ), gi a hi n th (hàng ch c) hi n th trái nh t (hàng trăm) Các chương trình dư i ây th c hi n chuy n i m t byte S nh phân c lưu tr accumulator, s ó nh d ng th p phân c lưu ghi R3, R2 accumulator ( ơn v , hàng ch c hàng trăm, tương ng) ;************************************************************************ ;* SUBROUTINE NAME : BinDec.ASM ;* DESCRIPTION : Content of accumulator is converted into ;* three decimal digits ;************************************************************************ BINDEC: MOV DIV MOV MOV DIV MOV MOV DIV MOV RET B,#10d AB R3,B B,#10d AB R2,B B,#10d AB A,B ; ; ; ; ; ; ; ; ; ; Store decimal number 10 in B A:B Remainder remains in B Move units to register R3 Store decimal number 10 in B A:B Remainder remains in B Move tens to register R2 Store decimal number 10 in B A:B Remainder remains in B Move hundreds to accumulator Return to the main program 4.2.15 Ghép n i vi i u n v i bàn phím Hình 4-8.Ma tr n bàn phím Hình 4-9.Cách ghép n i bàn phím o n chương trình g i mã ASCII b m phím P0.1 4.2.16 Ghép n i vi i u n v i step motor Bài toán th c hi n vi c i u n ng bư c quay, thay i t c , o chi u, d ng ng Chương trình s d ng u t o xung vào ng làm thay i tr ng thái c a ng bư c Thư ng cu n dây c a ng bư c c xác nh theo màu dây, nhiên i v i m t ng b t kỳ, ta có th dùng ng h xác nh dây hình v , ây trình bày cách xác nh ng có 5, u dây 166 B mơn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p Bài gi ng Vi x lý - Vi i u n Chương Các h vi i u n tiên ti n ng d ng Hình 4-10 C u t o ng bư c dùng ng h xác nh u chung (common) dùng ng h thang o tr , o tr gi a c p dây, u chung u có tr gi a u khác b ng ½ i n tr u khác v i Khi bi t c th t cu n dây, ta kích xung theo th t ó ng s ch y Ví d m t o n chương trình sau, gi s u c a ng bư c u vào bit: P1.0 – P1.3 c a 8051 ORG 0000H MOV R3, MOV A, BACK: MOV P1,A RL A ACALL SJMP BACK DELAY: MOV R1, H1: MOV R2 , H2: DJNZ R2, DJNZ R1, RET END #00000011B R3 ;Quay ghi A DELAY #50 #255 H2 H1 B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 167 Tài li u tham kh o T ng Văn On, Hoàng c H i, H vi i u n 8051, NXB Lao ng xã h i, năm 2001 Nguy n Tăng Cư ng, C u trúc l p trình h vi i u n 8051, NXB Khoa h c k thu t, năm 2004 Nguy n Minh Tu n, Giáo trình h p ng - Chương 1, HKHTN, 2002 Randal Hyde, The art of assembly language programming – Chapter Norton Guide Dan Rollins, TechHelp v.6.0 http://picat.dieukhien.net http://wapedia.mobi/vi/H p_ng http://www.emu8086.com/ 10 http://www.daniweb.com/code/ 11 http://www.freewebs.com/maheshwankhede/adcdac.html B môn K thu t máy tính – Khoa i n t Trư ng H K thu t Công nghi p 168 ... kh? ?i ni m kh? ?ng kh? ?c nhi u, “vi x lý” thu t ng chung d? ?ng c p n k thu t ng d ng c? ?ng ngh vi i n t , c? ?ng ngh t? ?ch h p kh x lý theo chư? ?ng trình vào lĩnh v c kh? ?c Vào nh ng giai o n u trình ph? ?t tri... l nh d li u t thnah ghi ch c chung N? ? c l nh, gi i mã ch? ?ng t o a ch to? ?n h ng n u c n, chuy n ch? ?ng cho BIU yêu c u th c hi n chu k? ?? c/ ghi b nh hay I/ O th c hi n ho t ng c th c ch nh b i l nh... n thao t? ?c c ghi i u ó c? ? nghĩa m i m ch nh ph i c g? ?n cho m t v? ?ng ri? ?ng bi t c? ? a ch x? ?c nh n m kh? ?ng gian a ch t ng th c a b nh Vi c g? ?n a ch c th cho m ch nh c th c hi n nh m t xung ch n