Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữXung & Hoi 4
1. LED 1
2. LED 2
3. Hiển thị với LED 7 đoạn
4. Keypad
5. Đo thời gian
6. Tạo sóng vuông
7. Đồng hồ số
8. Giao tiếp PC, viết C code
9. ADC, cảm biến & xuất LED 7 đoạn
10. Motor bước
11. PWM
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật Vi điều khiển - Lê Xứng
Xung & Hoi 1 Kỹ thuật Vi điều khiển Th.S LÊ XỨNG và Th.S NGUYỄN BÁ HỘI Trường Đại học Bách khoa, ĐHĐN Lexung59@yahoo.com hoinb@ud.edu.vn Xung & Hoi 2 Sách tham khảo • I. Scott Mackenzie, Họ Vi điều khiển 8051, Dịch: Tống Văn On và Hoàng Đức Hải, 2001 • Ngô Diên Tập, Kỹ thuật ghép nối máy tính, 2000 • Ngô Diên Tập, Đo lường và điều khiển bằng máy tính, 1998 • Đỗ Xuân Tiến, Kỹ thuật Vi xử lý và lập trình Assembly cho hệ vi xử lý, 2003 • Sencer Yeralan, The 8051 Cookbook for Assembly and C with Experiments in Mechatronics amd Robotics, 2000 • Sencer Yeralan, Programming and Interfacing the 8051 Microcontroller, 1995 Xung & Hoi 3 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 4 1. LED 1 2. LED 2 3. Hiển thị với LED 7 đoạn 4. Keypad 5. Đo thời gian 6. Tạo sóng vuông 7. Đồng hồ số 8. Giao tiếp PC, viết C code 9. ADC, cảm biến & xuất LED 7 đoạn 10. Motor bước 11. PWM Xung & Hoi 5 CPU Vi xử lý RAM ROM I/O Port Timer Cổng nối tiếp Data Bus Address Bus • CPU cho các máy tính • Không có RAM, ROM, I/O trên CPU chip • Vd: Intel’s x86, Motorola’s 680x0 Nhiều chips trên bo mạch chủ Hệ thống vi xử lý Vi xử lý Xung & Hoi 6 RAM ROM I/O Port Timer Cổng nối tiếp CPU • Là máy tính mini • Có RAM, ROM, I/O ports trên CPU chip • Vd: Motorola’s 6811, Intel’s 8051, Zilog’s Z80, & PIC 16X Vi điều khiển tất cả bên trong 1 chip Vi điều khiển Xung & Hoi 7 Vi xử lý & Vi điều khiển Vi điều khiển Ø CPU, RAM, ROM, I/O & Timer nằm trên cùng 1 chip Ø Cố định lượng ROM, RAM, I/O Ports trên chip Ø Thích hợp cho các ứng dụng: ügiá cả thấp ünăng lượng tiêu thụ thấp ükhông gian hạn chế Ø Đơn mục đích Vi xử lý Ø CPU chip riêng biệt. RAM, ROM, I/O, Timer bên ngoài Ø Lượng ROM, RAM, I/O Ports tùy ý Ø Giá thành cao Ø Đa năng Ø Đa mục đích Xung & Hoi 8 Hệ thống nhúng (Embedded System) Bộ xử lý được nhúng (embedded) vào một ứng dụng cụ thể Một sản phẩm nhúng chỉ sử dụng VXL,VĐK, FPGA, DSP... để thực thi 1 công việc duy nhất Chỉ có một phần mềm ứng dụng & thông thường được nộp trong ROM vd:printer, keyboard, video game player... Xung & Hoi 9 3 tiêu chí chọn vi điều khiển 1. Đáp ứng yêu cầu về nhiệm vụ và giá thành thi công Ø Tốc độ, lượng bộ nhớ, cổng I/O, timers, kích cỡ, đóng gói, năng lượng tiêu thụ Ø Dễ nâng cấp Ø Giá thành 2. Các công cụ phát triển phần mềm Ø Assember, bộ sửa lỗi, trình dịch C, mô phỏng, hỗ trợ kỹ thuật 3. Thị trường cung cấp sản phẩm tin cậy Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân (block and pin diagrams) 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt (SFR) 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 2 2-1. Sơ đồ khối CPU On-chip RAM On-chip ROM for program code 4 I/O Ports Timer 0 Serial PortOSC Interrupt Control External by Timers, Serial Port Timer 1 Timer/Counter Bus Control TxD RxDP0 P1 P2 P3 Address/Data Counter Inputs T1,T0 /EA RST ALE /PSEN Xung & Hoi 3 2-2. So sánh các thành viên họ 8051 5 1 32 2 128 4K Flash 8951 5 1 32 2 128 4K EPROM 8751 5 1 32 2 128 0K 8031 665Interrupt sources 111Serial Port 323232I/O pins 332Timers 256256128Data Mem on chip (bytes) 8K EPROM 8K ROM 4K ROM Code Mem on chip (bytes) 875280528051Specification Xung & Hoi 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST (RXD)P3.0 (TXD)P3.1 (T0)P3.4 (T1)P3.5 XTAL2 XTAL1 GND (INT0)P3.2 (INT1)P3.3 (RD)P3.7 (WR)P3.6 Vcc P0.0(AD0) P0.1(AD1) P0.2(AD2) P0.3(AD3) P0.4(AD4) P0.5(AD5) P0.6(AD6) P0.7(AD7) EA/VPP ALE/PROG PSEN P2.7(A15) P2.6(A14) P2.5(A13) P2.4(A12) P2.3(A11) P2.2(A10) P2.1(A9) P2.0(A8) 8051 2-3. Sơ đồ chân Xung & Hoi 5 Các chân 8051 (phần 1) § Vcc (chân 40): üCung cấp nguồn cho chip ü+5V § GND (chân 20): đất § XTAL1 & XTAL2 (chân 19, 18) ü2 chân cung cấp xung clock ngoài üCách 1: dao động dùng thạch anh üCách 2: dao động từ nguồn xung clock TTL bên ngoài üQuan hệ giữa chu kỳ máy và XTAL Xung & Hoi 6 Các chân 8051 (phần 2) § RST (chân 9): reset üinput & kích hoạt mức cao üĐể đảm bảo hoạt động reset xảy ra, xung kích khởi phải kéo dài ít nhất là 2 chu kỳ máy üGiá trị các thanh ghi chịu tác động bởi hoạt động reset, xem bảng trong phần 5 bài giảng üMạch reset có chống rung Xung & Hoi 7 Các chân 8051 (phần 3) Ø /EA (chân 31): External Access ü/EA nối mass chỉ định rằng code lưu trên bộ nhớ ngoài ü/PSEN & ALE dùng cho ROM ngoài üVới 8051, 8031, 8032 thì /EA nối Vcc ü“/”: chỉ định tác động mức thấp Ø /PSEN (chân 29): Program Store Enable üOutput, cho phép truy xuất bộ nhớ chương trình ngoài üNối tới chân /OE của ROM/EPROM üKhi thực thi chương trình ở ROM nội, /EA được gán mức 1, (khi đó /PSEN được tự động giữ ở mức 1) Xung & Hoi 8 Các chân 8051 (phần 4) Ø ALE (pin 30):Address Latch Enable ØLà chân output cho phép chốt địa chỉ để giải đa hợp (de- multiplexing) bus dữ liệu và bus địa chỉ ØALE xuất tín hiệu để chốt địa chỉ (byte thấp địa chỉ 16-bit) vào 1 thanh ghi ngoài trong suốt nửa đầu của chu kỳ bộ nhớ (memory cycle). Trong nửa chu kỳ bộ nhớ còn lại, P0 sẽ xuất/nhập dữ liệu ØALE có f=1/6fclock ØCó 1 ngoại lệ: trong thời gian thực thi lệnh MOVX, một xung ALE bị bỏ qua Ø Cổng I/O: P0, P1, P2, & P3. Mỗi cổng: 8 chân. Xung & Hoi 9 Các cổng I/O Ø 4 cổng I/O Port 0 (chân 32-39) :P0 (P0.0〜P0.7) Port 1 (chân 1-8) :P1 (P1.0〜P1.7) Port 2 (chân 21-28) :P2 (P2.0〜P2.7) Port 3 (chân 10-17) :P3 (P3.0〜P3.7) Mỗi cổng có 8 chân Đánh tên P0.X (X=0,1,...,7), P1.X, P2.X, P3.X Ex:P0.0 là bit 0 (LSB) của P0 Ex:P0.7 là bit 7 (MSB) của P0 8 bits này cấu thành 1 byte Mỗi cổng có thể được dùng như input hay output Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ (Memory Organization) 4. Các thanh ghi chức năng đặc biệt 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 2 1. Các thanh ghi và các I/O port được định địa chỉ theo kiểu ánh xạ bộ nhớ (memory mapped) & do đó được truy xuất như 1 vị trí nhớ trong bộ nhớ 2. Stack là trên RAM nội thay vì trên RAM ngoài như đối với các bộ VXL Hai đặc tính cần lưu ý Xung & Hoi 3 0000H 0FFFH 0000H 1FFFH 0000H 7FFFH 8751 AT89C51 8752 AT89C52 4k DS5000-32 8k 32k Atmel Corporation Dallas Semiconductor 3-1. Không gian bộ nhớ ROM nội Xung & Hoi 4 RAM đa mục đích 7FH 30H RAM định địa chỉ bit 2FH 20H Bank 31FH Bank 2 17H 10H Bank 1 (Stack)0FH 07H Default Register Bank for R0-R7 08H 18H 00H R7 R6 R4 R3 R5 R2 R0 R1 0001020304050607 08090A0B0C0D0E0F 1011121314151617 18191A1B1C1D1E1F 78797A7B7C7D7E7F 2F 2E 20 Byte address Bit address 3-2. Không gian bộ nhớ RAM nội Xung & Hoi 5 3-2-1. Vùng RAM đa mục đích • Truy xuất tự do 80 bytes này theo kiểu định địa chỉ trực tiếp hay gián tiếp • MOV A, 5FH Hoặc: MOV R0, #5FH MOV A, @R0 Xung & Hoi 6 3-2-2. Vùng RAM định địa chỉ bit • Truy xuất các bit riêng rẽ là 1 đặc trưng của VĐK. Các bit có thể được set, xóa, AND, OR chỉ bằng 1 lệnh so với 1 chuỗi lệnh của VXL • Các port cũng được định địa chỉ bit • Vd: để set bit 7FH bằng 1, ta viết: VĐK: SETB 7FH VXL: MOV A,2FH ; đọc cả byte ORL A,#10000000B ; set bit MOV 2FH,A ; ghi trở lại cả byte Xung & Hoi 7 3-2-3. Các dãy thanh ghi (register banks) • Các lệnh dùng thanh ghi là những lệnh ngắn & thực hiện nhanh hơn – MOV A,R5 ; 1 byte – MOV A,05H ; 2 bytes • Các dữ liệu thường dùng nên chứa ở các thanh ghi • Ý tưởng các dãy thanh ghi cho phép chuyển đổi ngữ cảnh nhanh và hiệu quả ở các module độc lập nhau của phần mềm Xung & Hoi 8 • Thanh ghi dùng truy cập ngăn xếp gọi là SP (stack pointer) • SP là thanh ghi 8 bit: giá trị từ 00 à FFH. • Khi được cấp nguồn hay sau khi reset, SP=07H 3-2-4. Ngăn xếp 7FH 30H 2FH 20H 1FH 17H 10H 0FH 07H 08H 18H 00H Register Bank 0 (Stack) Register Bank 1 Register Bank 2 Register Bank 3 Bit-Addressable RAM Scratch pad RAM Xung & Hoi 9 VD: MOV R6,#25H MOV R1,#12H MOV R4,#0F3H PUSH 6 PUSH 1 PUSH 4 0BH 0AH 09H 08H Start SP=07H 25 0BH 0AH 09H 08H SP=08H F3 12 25 0BH 0AH 09H 08H SP=0AH 12 25 0BH 0AH 09H 08H SP=09H Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt (SFR) 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 2 Xêm thêm Hình 2.6 trang 26 SFRs Xung & Hoi 3 CPU registers: - ACC : Accumulator. - B : B register. - PSW : Program Status Word. - SP : Stack Pointer. - DPTR : Data Pointer (DPH, DPL). Interrupt control: -IE : Interrupt Enable. -IP : Interrupt Priority. I/O Ports: - P0 : Port 0. - P1 : Port 1. - P2 : Port 2. - P3 : Port 3. Xung & Hoi 4 TImers: - TMOD : Timer mode. - TCON : Timer control. - TH0 : Timer 0 high byte. - TL0 : Timer 0 low byte. - TH1 : Timer 1 high byte. - TL1 : Timer 1 low byte. Serial I/O: - SCON : Serial port control. - SBUF : Serial data registers. Other: - PCON : Power control & misc. Xung & Hoi 5 4-1. Thanh ghi PSW • Thanh ghi PSW (bit addressable) C AC F0 RS1 OVRS0 P-- RS1 RS0 Register Bank Byte Address of R0-R7 0 0 0 00H-07H 0 1 1 08H-0FH 1 0 2 10H-17H 1 1 3 18H-1FH CPSW.7Cờ nhớ ACPSW.6Cờ nhớ phụ --PSW.5Available to user for general purpose RS1PSW.4Bit chọn dãy thanh ghi 1 RS0PSW.3Bit chọn dãy thanh ghi 0 OVPSW.2Cờ tràn --PSW.1Dự trữ - User define bit PPSW.0Cờ chẵn lẻ Địa chỉ bitD0D1D2D3D4D5D6D7 Xung & Hoi 6 • C (carry flag) - Cờ nhớ – Được set bằng 1 nếu có số nhớ từ phép cộng bit 7 hay có số mượn mang đến bit 7 • MOV A,#FFH • ADD A,#1 – Còn được dùng như 1 thanh ghi 1 bit đối với các lệnh logic thao tác trên các bit • ANL C,25H • AC (auxiliary carry) – Cờ nhớ phụ – Được set bằng 1 nếu có số nhớ từ bit 3 sang bit 4 • RS1, RS0 - Các bit chọn dãy (bank) thanh ghi – Dùng để xác định dãy thanh ghi tích cực – Chúng được xóa khi reset MOV A,R7SETB RS0 SETB RS1 º SETB 0D4H Xung & Hoi 7 • OV (overflow flag) - Cờ tràn – Set bằng 1 sau phép toán cộng hoặc trừ nếu có xuất hiện 1 tràn số học. Khi các số có dấu được cộng hoặc trừ, phần mềm có thể kiểm tra bit tràn OV để xác định KQ có nằm trong tầm hay không – Với các số có dấu, KQ nhỏ hơn -128 hoặc lớn hơn +127 sẽ set cờ OV = 1. Với các số không dấu, OV=1 khi KQ vượt quá 255 – VD: • 0F thập phân 15 • +7F +127 • ____ _____ • 8E 142 • 8EH biễu diễn -114 không đúng với KQ mong muốn là 142 nên OV = 1 Xung & Hoi 8 • P (parity) - Cờ chẵn lẻ – Kiểm tra chẵn lẻ cho thanh chứa A – Số các bit 1 trong thanh chứa A cộng với bit P luôn luôn chẵn • MOV A,#10101101B • àP=1 – Bit chẵn lẻ được sử dụng kết hợp với các chương trình xuất/nhập nối tiếp trước khi truyền dữ liệu hoặc để kiểm tra chẵn lẻ sau khi nhận dữ liệu VD4: MOV A,#FFH ADD A,#1 VD3: MOV A,#38H ADD A,#2FH VD2: MOV A,#9CH ADD A,#64H VD1: MOV A,#88H ADD A,#93H Xung & Hoi 9 VD: MOV A,#38H ADD A,#2FH 38 00111000 +2F +00101111 ---- -------------- 67 01100111 C=0 AC=1 P=1 VD: MOV A,#88H ADD A,#93H 88 10001000 +93 +10010011 ---- -------------- 11B 00011011 C=1 AC=0 P=0 VD: MOV A,#9CH ADD A,#64H 9C 10011100 +64 +01100100 ---- -------------- 100 00000000 C=1 AC=1 P=0 VD: MOV A,#FFH ADD A,#1 A=00H; C=1; AC=1; Xung & Hoi 10 Những lệnh ảnh hưởng đến các bit cờ X có thể là 1 hoặc 0 Xung & Hoi 11 • B được dùng với thanh chứa A trong các phép toán nhân, chia • MUL A,B ; nhân 2 số 8-bit không dấu chứa trong A & B, KQ 16-bit chứa vào cặp thanh ghi B:A (B chứa byte cao) • DIV AB ; chia A bởi B, thương số cất trong A, dư cất trong B • B còn được xử lý như thanh ghi nháp • B được định địa chỉ bit 4-2. Thanh ghi B F0F1F2F3F4F5F6F7 Xung & Hoi 12 4-3. Con trỏ ngăn xếp (SP) • SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack • Các lệnh liên quan đến stack bao gồm lệnh cất dữ liệu vào stack (làm tăng SP trước khi ghi dữ liệu) và lệnh lấy dữ liệu khỏi stack (giảm SP) • Muốn stack bắt đầu ở 60H: – MOV SP,#5FH – Thì vùng stack sẽ là 32 byte trên 8051 vì địa chỉ cao nhất của RAM nội là 7FH – 5FH được dùng vì SP tăng lên 60H trước khi thao tác cất vào stack đầu tiên được thực thi Địa chỉ byte 81 Xung & Hoi 13 • Nếu không khởi động SP, nội dung mặc định là 07H (để duy trì sự tương thích với 8048) à thao tác cất vào stack đầu tiên sẽ lưu dữ liệu vào vị trí nhớ có địa chỉ 08H • Trong trường hợp này, nếu phần mềm ứng dụng không khởi động SP, dãy thanh ghi 1 (và có lẽ 2, 3) sẽ không còn hợp lệ vì chúng được sử dụng làm stack • PUSH & POP cất dữ liệu vào stack và lấy dữ liệu từ stack • ACALL, LCALL, RET, RETI cất và phục hồi bộ đếm chương trình PC Xung & Hoi 14 VD: MOV R6,#25H MOV R1,#12H MOV R4,#0F3H PUSH 6 PUSH 1 PUSH 4 0BH 0AH 09H 08H Start SP=07H 25 0BH 0AH 09H 08H SP=08H F3 12 25 0BH 0AH 09H 08H SP=0AH 12 25 0BH 0AH 09H 08H SP=09H Xung & Hoi 15 4-4. Con trỏ dữ liệu (DPTR) • DPTR được dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài • VD: MOV A,#55H MOV DPTR,#1000H MOVX @DPTR,A DPH DPL 83H 82H Xung & Hoi 16 4-5. Các thanh ghi I/O port: P0, P1, P2, P3 • Tất cả port đều được định địa chỉ bit • VD: (điều khiển motor nối bit P1.0) SETB P1.0 CLR P1.0 • Đoạn chương trình kiểm tra trạng thái BUSY của thiết bị: WAIT: JB P1.5, WAIT Xung & Hoi 17 4-6. Các thanh ghi định thời • 8051 có 2 bộ đếm/định thời 16-bit để định các khoảng thời gian hoặc đếm các sự kiện • Hoạt động của bộ định thời được thiết lập bởi: – TMOD (Timer Mode Register) – TCON (Timer Control Register) Xung & Hoi 18 4-7. Các thanh ghi của port nối tiếp • 8051 có 1 port nối tiếp để truyền thông với các thiết bị nối tiếp • SBUF (Serial Data Buffer): lưu trữ dữ liệu truyền và nhận • SCON (Serial Port Control Register): chọn chế độ hoạt động Xung & Hoi 19 4-8. Các thanh ghi ngắt • IE (interrupt enable) • IP (interrupt priority) Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt 5. Dao động và hoạt động reset (oscillator and reset) 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 2 C2 30pF C1 30pF XTAL2 XTAL1 GND 5-1. Dao động dùng thạch anh Xung & Hoi 3 N C EXTERNAL OSCILLATOR SIGNAL XTAL2 XTAL1 GND 5-2. Da ... động nạp lại (Auto-reloading) • TL0 được tăng lên khi TR0=1 • VD, tạo thời gian trễ với 200 chu kỳ máy (MC) trên timer 0. TLx THx TFx overflow flag reload TF goes high when FF à 0 Timer clock Xung & Hoi 27 1. Chọn mode 2 timer 0 – MOV TMOD,#02H 2. Khởi tạo giá trị đầu trong TH0 – MOV TH0,#38H 3. Xóa cờ TF0=0. – CLR TF0 4. Sau khi TH0 được gán, 8051 copy giá trị này vào TL0 – TL0=TH0=38H 5. Bật Timer – SETB TR0 Xung & Hoi 28 6. 8051 đếm lên TL0 – TL0= 38H, 39H, 3AH,.... 7. Khi TL0 từ FFH à 00 thì 8051 set TF0=1. Bên cạnh đó, TL0 được tự động nạp lại giá trị lưu giữ trong TH0 – TL0= FEH, FFH, 00H (lúc này TF0=1) – 8051 tự động nạp lại TL0=TH0=38H. – Quay lại bước 6 8. CLR TF0 9. CLR TR0 Xung & Hoi 29 TL1 TH1 TF1 overflow flag reload TF goes high when FF à 0 XTAL oscillator ÷ 12 C/T=0: up C/T=0: down Timer clockT0 hay T1 pin C/T TRx Mode 2 Xung & Hoi 30 10-5. Tính toán trễ dùng Timer (a) Dạng hexa (FFFF – YYXX + 1) * 1.085 ms Trong đó YYXX là các giá trị ban đầu của TH, TL tương ứng (b) Dạng thập phân Chuyển các giá trị YYXX của TH, TL sang dạng thập phân NNNNN, à ta có (65536 – NNNNN) * 1.085 ms XTAL = 11.0592 MHz Áp dụng đ/v chế độ định thời 16-bit (mode 1) Xung & Hoi 31 EChương trình sau tạo sóng vuông trên chân P1.5 liên tục dùng timer 1 tạo trễ mode 1. Tìm tần số? (Không bao gồm overhead gây bởi các lệnh trong vòng lặp) MOV TMOD,#10H ;timer 1, mode 1 AGAIN:MOV TL1,#34H ;timer value=7634H MOV TH1,#76H SETB TR1 ;start BACK: JNB TF1,BACK CLR TR1 ;stop CPL P1.5 ;next half clock CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer1 Bài toán 10.2. Sóng vuông, tìm f Xung & Hoi 32 Giải đáp: Với mode 1, các thanh ghi định thời TH, TL phải được khởi động lại sau mỗi lần tràn. FFFFH – 7634H + 1 = 89CCH = 35276 clock count ½ chu kỳ = 35276 × 1.085 ms = 38.274 ms Chu kỳ = 2 × 38.274 ms = 76.548 ms Tần số = 1/ 76.548 ms = 13.064 Hz. Trong các tính toán trên, không bao gồm overhead gây bởi các lệnh trong vòng lặp Xung & Hoi 33 • ETìm KQ các bài toán trên trong trường hợp có tính đến overhead? • EGiải các bài toán trên với chế độ định thời tự nạp lại 8-bit (mode 2)? • EVới phạm vi tần số nào thì không thể dùng chế độ tự nạp lại 8-bit (mode 2), giải thích? Bài toán 10.3. Xung & Hoi 34 10-6. Tìm giá trị các thanh ghi định thời • Giả định biết trước thời gian trễ, XTAL = 11.0592 MHz • Làm sao tính toán các giá trị cần gán cho TH, TL? 1. Chia thời gian trễ cho 1.085 ms. 2. Thực hiện 65536 –n, với n (decimal) từ bước 1 3. Chuyển KQ trong bước 2 sang hex yyxx 4. Set TH = yy và TL = xx. Xung & Hoi 35 EXTAL = 11.0592 MHz, viết chương trình tạo sóng vuông 50 Hz trên chân P2.3 Giải đáp: (a) T = 1 / 50 Hz = 20 ms. (b) Thời gian mức cao = Thời gian mức thấp = 10 ms. (c) 10 ms / 1.085 ms = 9216 65536 – 9216 = 56320 in decimal = DC00H in hex. (d) TL1 = 00H and TH1 = DCH. Bài toán 10.4. Tạo sóng vuông theo f cho sẵn Xung & Hoi 36 MOV TMOD,#10H ;timer 1, mode 1 AGAIN: MOV TL1,#00 ;Timer value = DC00H MOV TH1,#0DCH SETB TR1 ;start BACK: JNB TF1,BACK CLR TR1 ;stop CPL P2.3 CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer since ;mode 1 is not ;auto-reload Xung & Hoi 37 Tạo thời gian trễ lớn • Độ lớn tdelay phụ thuộc 2 thông số: – Tần số dao động thạch anh – Giá trị chứa trong các thanh ghi định thời TH & TL • Thời gian trễ là lớn nhất khi TH=TL=0. Nếu vẫn chưa đủ? Xung & Hoi 38 EKhảo sát BT sau và tìm thời gian trễ? (Không tính overhead) MOV TMOD,#10H MOV R3,#200 AGAIN: MOV TL1,#08H MOV TH1,#01H SETB TR1 BACK: JNB TF1,BACK CLR TR1 CLR TF1 DJNZ R3,AGAIN Giải đáp: TH – TL = 0108H = 264 (decimal) 65536 – 264 = 65272. Trễ do timer = 65272 × 1.085 ms = 70.820 ms Tổng thời gian trễ = 200 × 70.820 ms = 14.164024 seconds Bài toán 10.5. Tính delay Xung & Hoi 39 ETìm tần số xung vuông trên chân P1.0 ? MOV TMOD,#2H ;Timer 0,mode 2 MOV TH0,#0 AGAIN:MOV R5,#250 ;count 250 times ACALL DELAY CPL P1.0 SJMP AGAIN DELAY:SETB TR0 ;start BACK: JNB TF0,BACK CLR TR0 ;stop CLR TF0 ;clear TF DJNZ R5,DELAY ;timer 2: auto-reload RET Giải đáp:T = 2 (250 × 256 × 1.085 ms) = 138.88 ms à f = 72 Hz. Bài toán 10.6. Tính tần số xung vuông Xung & Hoi 40 Bài toán 10.7. Tìm giá trị gán cho TH EGiả sử đang lập trình cho Timer ở mode 2, tìm giá trị hex gán cho thanh ghi TH trong các trường hợp sau: (a) MOV TH1,#-200 (b) MOV TH0,#-60 (c) MOV TH1,#-3 (d) MOV TH1,#-12 (e) MOV TH0,#-48 • Giải đáp: Vài 8051 assemblers cho phép cách thức sau: • -200 = -C8H à 2’s complement of –200 = 100H – C8H = 38H Decimal 2’s complement (TH value) -200 = - C8H 38H - 60 = - 3CH C4H - 3 FDH - 12 F4H - 48 D0H Xung & Hoi 41 (a) Tìm tần số sóng vuông với đoạn code sau (b) Thời gian mức cao và thấp MOV TMOD,#2H ;Timer 0,mode 2 MOV TH0,#-150 ;Count=150 AGAIN:SETB P1.3 ACALL DELAY ACALL DELAY CLR P1.3 ACALL DEALY SJMP AGAIN DELAY:SETB TR0 ;start BACK: JNB TF0,BACK CLR TR0 ;stop CLR TF0 ;clear TF RET high period low period Bài toán 10.8. Tìm f Xung & Hoi 42 Giải đáp: “MOV TH0,#-150” dùng 150 clocks. CTC DELAY = 150 × 1.085 ms = 162 ms. Thời gian mức cao gấp 2 lần thời gian mức thấp (66% duty cycle). Chu kỳ = Thời gian mức cao + thời gian mức thấp = 325.5 ms + 162.25 ms = 488.25 ms Tần số = 2.048 kHz. Xung & Hoi 43 • Các bộ định thời (timers) cũng có thể dùng như những bộ đếm (counters) để đếm sự kiện xảy ra bên ngoài 8051 • Khi đó, xung từ ngoài sẽ làm tăng giá trị các thanh ghi TH, TL • Khi C/T=1, bộ đếm sẽ đếm lên khi có xung xuất hiện từ: – T0: timer 0 input (Pin 14, P3.4) – T1: timer 1 input (Pin 15, P3.5) Timer/Counter 1 external inputT1P3.515 Timer/Counter 0 external inputT0P3.414 DescriptionFunctionPort PinPin GATE C/T=1 M1 M0 GATE C/T=1 M1 M0 Timer 1 Timer 0 (MSB) (LSB) 10-7. Bộ đếm Xung & Hoi 44 10-7-1. Chế độ đếm 16-bit (mode 1) • 16-bit counter (TH0 and TL0) • Giá trị trong các thanh ghi TH0-TL0 tăng khi: TR0 được set lên 1 và một xung bên ngoài (T0) xuất hiện • Khi bộ đếm (TH0-TL0) đạt tới giá trị lớn nhất là FFFFH, nó được chuyển trạng thái về 0000, và TF0 được set lên 1 • Bằng cách nạp giá trị ban đẩu cho TH0-TL0, theo dõi TF0=1 để nhận biết 1 tình huống nào đó (vd: 100 người đã đến). TR0 TH0 TL0 TF0 TF0 goes high when FFFF à 0 overflow flag C/T = 1 Timer 0 ngõ vào từ bên ngoài chân 3.4 (T0) Xung & Hoi 45 • 8-bit counter. – Chỉ cho phép các giá trị từ 00 đến FFH nạp vào TH0 • Tự động nạp lại (Auto-reloading) • Giá trị trong TL0 sẽ tăng nếu TR0=1 và 1 xung bên ngoài xuất hiện 10-7-2. Chế độ đếm tự nạp lại 8-bit (mode 2) Xung & Hoi 46 Bài toán 10.9. Đếm xung & xuất port Giả định 1 xung clock được đưa vào chân T1, viết chương trình bộ đếm 1 làm việc ở mode 2 để đếm xung & hiển thị giá trị của TL1 ra P2, khi Counter tràn thì kết thúc? T1 to LEDs P3.5 P2 8051 Xung & Hoi 47 Ans: MOV TMOD, #01100000B ;mode 2, counter 1 MOV TH1, #0 SETB P3.5 SETB TR1 ;start BACK: MOV A,TL1 MOV P2,A ;display in P2 JNB TF1,BACK ;overflow CLR TR1 ;stop CLR TF1 ;make TF=0 Xung & Hoi 48 • Giả sử 1 xung tần số 1Hz được cấp vào chân P3.4. Viết chương trình hiển thị counter 0 trên LCD. Khởi tạo giá trị ban đầu cho thanh ghi TH0 là -60. T0 to LCD P3.4 P1 8051 1 Hz clock Bài toán 10.10. Đếm xung & Hiển thị LCD Xung & Hoi 49 ACALL LCD_SET_UP ;initialize the LCD MOV TMOD,#00000110B ;Counter 0,mode2 MOV TH0,#-60 SETB P3.4 ;make T0 as input AGAIN: SETB TR0 ;starts the counter BACK: MOV A,TL0 ;every 60 events ACALL CONV ;convert in R2,R3,R4 JNB TF0,BACK ;loop if TF0=0 CLR TR0 ;stop CLR TF0 SJMP AGAIN Xung & Hoi 50 ;converting 8-bit binary to ASCII CONV: MOV B,#10 ;divide by 10 DIV AB MOV R2,B ;save low digit MOV B,#10 ;divide by 10 once more DIV AB ORL A,#30H ;make it ASCII MOV R4,A MOV A,B ORL A,#30H MOV R3,A MOV A,R2 ORL A,#30H MOV R2,A ;ACALL LCD_DISPLAY here RET R4 R3 R2 Xung & Hoi 51 • Cải tiến ví dụ trên thực hiện 1 đồng hồ số đơn giản, chưa cần các nút hiệu chỉnh giở, phút ? • Việc sử dụng lệnh “JNB TF0,target” để giám sát cờ TF0 là sự hoang phí thời gian vô cùng lớn – Giải pháp là dùng ngắt, đề cập trong phần 12 của bài giảng – Với ngắt, ta có thể thực thi nhiều việc – Khi cờ TF được set, nó sẽ thông báo cho chúng ta Bài toán 10.11. Đồng hồ số Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt (SFR) 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ (addressing modes) 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp (serial comm programming) 12.Lập trình ngắt (interrupt programming) 13.Lập trình hợp ngữ Xung & Hoi 2 11-1. Giới thiệu • Port nối tiếp hoạt động song công (full duplex), nghĩa là có khả năng thu và phát đồng thời • Sử dụng 2 thanh ghi chức năng đặc biệt SBUF (địa chỉ byte là 99H) & SCON (địa chỉ byte là 98H) để truy xuất port nối tiếp • Việc ghi lên SBUF sẽ nạp dữ liệu để phát, và việc đọc SBUF sẽ truy xuất dữ liệu đã nhận đượcà thực ra có 2 SBUF riêng rẽ • SCON chứa các bit trạng thái và điều khiển, thanh này được định địa chỉ bit • Tần số hoạt động của port nối tiếp hay còn gọi là tốc độ baud (baud rate) có thể cố định hoặc thay đổi Xung & Hoi 3 Clk SBUF Q (write only) SBUF (read only) D Shift Register Clk Baud rate clock (phát) Baud rate clock (thu) TXD (P3.1) 8051 internal bus RXD (P3.0) Xung & Hoi 4 11-2. Thanh khi điều khiển port nối tiếp SM1, SM0: chọn chế độ của port nối tiếp SM2: cho phép truyền thông đa xử lý REN: cho phép thu, phải được set để nhận các ký tự TB8: bit thứ 9 được phát ở chế độ 2 & 3 RB8: bit thứ 9 nhận được TI: cờ ngắt phát, được set ngay sau khi kết thúc việc phát 1 ký tự; được xóa bởi phần mềm RI: cờ ngắt thu, được set ngay sau khi kết thúc việc thu 1 ký tự; được xóa bởi phần mềm SM0 SM1 SM2 REN RB8TB8 RITISCON Xung & Hoi 5 11-3. Các chế độ hoạt động SM0 SM1 Mode Mô tả Tốc độ baud 0 0 0 Thanh ghi dịch Cố định (fOSC/12) 0 1 1 UART 8-bit Thay đổi (thiết lập bởi bộ định thời) 1 0 2 UART 9-bit Cố định (fOSC/12 hoặc fOSC/64) 1 1 3 UART 9-bit Thay đổi (thiết lập bởi bộ định thời) Xung & Hoi 6 11-3-1. Thanh ghi dịch 8-bit (mode 0) • Khi phát và thu dữ liệu 8-bit, bit LSB được phát hoặc thu trước tiên • Tốc độ baud cố định = fOSC/12 • Chân RxD dùng cho cả việc thu phát dữ liệu trong khi TxD dùng làm chân xuất clock dịch bit • Phát: – Ghi vào SBUF – Dữ liệu được dịch ra ngoài trên chân RxD (P3.0) – Xung clock dịch bit được gửi ra trên chân TxD (P3.1) – Mỗi bit hợp lệ truyền đi trên RxD trong 1 chu kỳ máy Xung & Hoi 7 • Thu: – Chỉ được khởi động khi REN = 1 & RI = 0, nghĩa là phải set REN = 1 ở thời điểm bắt đầu chương trình & xóa RI để bắt đầu công việc thu dữ liệu – Dữ liệu được dịch vào chân RxD bởi xung clock dịch bit (tác động sườn lên) • 1 Ứng dụng của mode 0: – Mở rộng thêm các ngõ ra cho 8051 8051 TxD(P3.1) RxD(P3.0) Clock Shift Regsiter Data 8 ngõ ra mở rộng Xung & Hoi 8 11-3-2. UART 8-bit có tốc độ baud thay đổi (mode 1) • UART là bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu được đứng trước bởi 1 bit start và đứng sau bởi 1 bit stop. Thỉnh thoảng 1 bit parity được chèn vào. • Hoạt động chủ yếu của UART là biến dữ liệu phát từ // thành nt và biến dữ liệu thu từ nt thành // • Cờ ngắt phát TI được set bằng 1 ngay khi bit stop xuất hiện trên TxD 1 / baud rate D0 D1 D2 D3 D4 D5 D6 D7 Start bit Stop bit TI (ready for more data) TxD TI Xung & Hoi 9 • Việc nhận được khởi động bởi 1 chuyển trạng thái từ 1 xuống 0 trên đường RxD (bit start) • Bit start sau đó được bỏ qua & 8 bit dữ liệu sau đó được nhận tuần tự vào thanh ghi dịch bit của port nối tiếp. Khi cả 8 bit được nhận, ta có: – Bit thứ 9 (bit stop) à RB8 của SCON – 8 bit dữ liệu được nạp vào SBUF – Cờ ngắt thu RI được set • Note: Các điều trên chỉ xảy ra nếu trước đó cờ RI = 0 Xung & Hoi 10 11-4. Khởi động và truy xuất các thanh ghi • Cho phép nhận: REN trong SCON phải được set bởi phần mềm để cho phép nhận ký tự SETB REN Hoặc MOV SCON, #xxx1xxxxB • Thêm vào bit chẵn lẻ: bit P trong PSW được set hoặc xóa ở mỗi chu kỳ máy để thiết lập việc kiểm tra chẵn cho 8 bit chứa trong A MOV C, P ; đưa bit kiểm tra chẵn vào TB8 MOV TB8, C ; bit này trở thành bit thứ 9 MOV SBUF, A ; di chuyển 8 bit dữ liệu vào SBUF Xung & Hoi 11 • Các cờ ngắt: RI và TI được set bằng phần cứng nhưng phải xóa bằng phần mềm CTC nhận 1 ký tự qua port nối tiếp như sau: INCHAR: JNB RI, $ CLR RI MOV A, SBUF RET CTC phát 1 ký tự qua port nt: OUTCHAR: JNB TI, $ CLR TI MOV SBUF, A RET Xung & Hoi 12 11-5. Tốc độ baud của port nối tiếp ¸12On-chip OSC Baud rate clock ¸64 On-chip OSC Baud rate clock ¸32 SMOD=0 SMOD=1 ¸32 Timer 1 overflow Baud rate clock ¸16 SMOD=0 SMOD=1 Mode 0 Mode 2 Mode 1 & 3 Xung & Hoi 13 Dùng timer 1 làm xung clock tốc độ baud • Thông thường khởi động thanh ghi TMOD ở chế độ tự động nạp lại 8-bit (mode 2) & đặt giá trị nạp lại thích hợp vào thanh ghi TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud • MOV TMOD, #0010xxxxB ;for timer 1 • Baud rate = Timer 1 overflow / 32 hay /16 tùy thuộc giá trị bit SMOD Xung & Hoi 14 Bài toán 11.1 • Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0592MHz)? ~7%8929-7 (F9H)1129600 0,16%1202-26 (E6H)0121200 0%1200-24 (E8H)011,05921200 0%2400-12 (F4H)011,05922400 0%4800-6 (FAH)011,05924800 0%9600-3 (FDH)011,05929600 0%19200-3 (FDH)111,059219200 Sai sốTốc độ baud thực tế Giá trị nạp cho TH1SMOD Tần số thạch anh (MHz) Tốc độ baud Xung & Hoi 15 Tóm lại: Nếu PCON.7 = 0 • TH1 = 256 - ((Crystal / 384) / Baud) Nếu PCON.7 =1 • TH1 = 256 - ((Crystal / 192) / Baud) Làm vd với baud rate 19200 để chứng tỏ vai trò bit SMOD 11.059Mhz crystal: • TH1 = 256 - ((Crystal / 384) / Baud) TH1 = 256 - ((11059200 / 384) / 19200 ) TH1 = 256 - ((28799) / 19200) TH1 = 256 - 1.5 = 254.5 Xung & Hoi 16 • Nếu set 254 ta đạt được 14,400 baud còn với 255 ta đạt được 28,800 baud • Set PCON.7 (SMOD). Ta có: TH1 = 256 - ((Crystal / 192) / Baud) TH1 = 256 - ((11059200 / 192) / 19200) TH1 = 256 - ((57699) / 19200) TH1 = 256 - 3 = 253 Kết luận với 19,200 baud (11.0592MHz crystal) ta phải: 1. Cấu hình Port nối tiếp mode 1 or 3 2. Timer 1 hoạt động mode 2 (8-bit auto-reload) 3. Set TH1 bằng 253 4. Set PCON.7 (SMOD) Xung & Hoi 17 Các bài toán • EBT11.1. Khởi động port nt: Viết chuỗi lệnh khởi động port nối tiếp hoạt động như 1 UART 8-bit với tốc độ baud 2400. Dùng timer 1 để cung cấp xung clock tốc độ baud? • EBT11.2. CTC xuất ký tự: Viết CTC mang tên OUTCHAR phát mã ASCII 7-bit chứa trong A ra port nối tiếp với bit kiểm tra chẵn là bit thứ 8. Việc trở về từ CTC phải không làm thay đổi nội dung thanh chứa A? • EBT11.3. CTC thu ký tự: Viết CTC mang tên INCHAR để thu 1 ký tự từ port nối tiếp & trả về mã ASCII 7-bit trong A. Sử dụng kiểm tra chẵn trong bit thứ 8 thu được và set cờ nhớ bằng 1 nếu có lỗi chẵn lẻ? Xung & Hoi 18 MAX 232 Xung & Hoi 19
File đính kèm:
- bai_giang_ky_thuat_vi_dieu_khien_le_xung.pdf