Chương 3: Cấu trúc phần cứng hệ vi điều khiển

1. Nháy LED đơn nối với cổng P1.0 với 1 nhịp/1s 2. Sáng lần lượt các LED đơn nối với cổng P1 theo thứ tự P1.0 đến P1.7 rồi lặp lại, thời gian sáng /tắt là 1s 3. Sáng và lưu sáng các LED đơn nối với cổng P1 theo thứ tự từ P1.0 đến P1.7, thời gian sáng /tắt là 1s

pdf133 trang | Chia sẻ: phanlang | Lượt xem: 1898 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Chương 3: Cấu trúc phần cứng hệ vi điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3: Cấu trúc phần cứng hệ vi điều khiển TS. Trần Văn Hưng Bộ môn: Kỹ thuật điện tử Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.1 Các kiến trúc vi điều khiển Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.2 Họ vi điều khiển MCS51 • 8051 là vi điều khiển đầu tiên của họ VĐK MCS51 được Intel sản xuất vào năm 1980. Một số tính năng cơ bản của họ MCS51 kinh điển: – CPU 8 bit được thiết kế tối ưu cho các ứng dụng điều khiển – Có khả năng xử l{ các bit logic – Không gian bộ nhớ chương trình 64KB – Không gian bộ nhớ dữ liệu 64KB – Tích hợp 4KB bộ nhớ chương trình, 128 byte RAM trên chip – có 32 đường vào ra 2 chiều có thể định địa chỉ đến từng bit – Tích hợp 2 timer 16 bit – Tích hợp UART song công (Universal Asynchronous Receiver Transmitter) – Cấu trúc ngắt với 6 nguồn/5 vector ở 2 mức khác nhau – Tích hợp mạch dao động trên chip. 8051 89C51 • 89C51 thuộc họ MCS51 • 4Kbyte EPROM (1000 chu kz ghi/xóa) • 128 byte RAM • 32 bit (4 cổng) I/O • 2 Timer/Counter 16bit • 6 nguồn ngắt So sánh bộ nhớ một số chip trong họ MCS51: Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.3 AT89C52 Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.3.1 Các cổng vào/ra (I/O port) (1/3) • Port 0: là port 8bit có 2 chức năng: – Là I/O đối với các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng) – Là byte thấp của Add/Data bus khi thiết kế có sử dụng bộ nhớ mở rộng • Port 1: là I/O port 8bit • Port 2: là port 8bit có 2 chức năng: – Là I/O port đối với các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng) – Là byte cao của add/data bus khi thiết kế có sử dụng bộ nhớ mở rộng • Port 3 (cổng 3): là port 8bit có nhiều chức năng: – Là I/O port – Có công dụng chuyển đổi có liên hệ với các tính năng đặc biệt của 89c52 3.3.1 Các cổng vào/ra (I/O port) (2/3) 3.3.1 Các cổng vào/ra (I/O port) (3/3) • Các chân của P0 không có điện trở treo (internal pull-up), ngoại trừ lúc làm việc như bus dữ liệu/địa chỉ bên ngoài; điện trở treo có thể được dùng với P0 tùy theo đặc tính của thiết bị phối ghép với cổng; • Port 0 with Pull-Up Resistors Port 3 Alternate Functions Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.3.2 Các tín hiệu điều khiển (1/2) • PSEN (Program Store Enable): – Là tín hiệu để cho phép đọc bộ nhớ chương trình mở rộng (bộ nhớ ngoài); – Khi 89C51 đọc mã lệnh từ bộ nhớ chương trình mở rộng thì PSEN được tích cực (mức thấp) 2 lần trong mỗi chu kz máy; – Khi 89C51 thi hành chương trình trong ROM nội thì PSEN sẽ ở mức cao; • ALE/PROG (Program Store Enable) – ALE (Address Latch Enable) là tín hiệu chốt byte thấp của địa chỉ trong suốt quá trình truy xuất bộ nhớ ngoài; – Chân này cũng được làm ngõ vào xung lập trình (PROG) cho EPROM; – Ở chế độ hoạt động bình thường thì xung ALE có tốc độ bằng 1/6 tần số dao động trên chip và có thể được dùng làm nguồn xung nhịp cho các phần khác của hệ thống; 3.3.2 Các tín hiệu điều khiển (2/2) • EA (External Access): – Khi truy xuất ROM nội thì chân /EA phải nối nguồn 5V – Khi truy xuất ROM ngoài thì /EA nối với GND • RST (Reset): khi tín hiệu này được đưa lên cao trong ít nhất 2 chu kz máy thì sẽ khởi động lại hệ thống • XTAL1, XTAL2: là ngõ vào và ngõ ra của bộ dao động tạo xung nhịp • Nguồn nuôi: dùng nguồn +5V ở chân 40 và GND ở chân 20 Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.3.3 Tổ chức bộ nhớ (1/5) • 89C51 có cả ROM nội và RAM nội, tuy nhiên co thể mở rộng thêm bằng các thiết bị nhớ bên ngoài • RAM nội gồm: – RAM lưu trữ đa dụng – RAM được địa chỉ hóa từng bit – Các bank thanh ghi – Các thanh ghi chức năng đặc biệt 3.3.3 Tổ chức bộ nhớ (2/5) • RAM đa dụng có địa chỉ 30-7FH • RAM được địa chỉ hóa từng bit có địa chỉ từ 20H- 2FH • Có 4 bank thanh ghi, mỗi bank có 8 thanh ghi từ R0 đến R7 3.3.3 Tổ chức bộ nhớ (3/5) 3.3.3 Tổ chức bộ nhớ (4/5) Thanh ghi PSW • Các bit RS0 và RS1 dùng để chọn bank thanh ghi tích cực, trạng thái mặc định thì các thanh ghi này ở bank 0 3.3.3 Tổ chức bộ nhớ (5/5) • Thanh ghi B: dùng cùng với thanh ghi A trong các phép toán nhân và chia • Con trỏ dữ liệu DPTR: – Dùng khi truy xuất bộ nhớ ngoài. – DPTR dùng để xác định địa chỉ của bộ nhớ ngoài cần truy xuất • Các thanh ghi port: – P0,P1,P2,P3; – Các thanh ghi này được địa chỉ hóa đến từng bit • Thanh ghi định thời gian: là các thanh ghi điều khiển hoạt động của timer Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 3.3.4 Giới thiệu tập lệnh • Các cách đánh địa chỉ – Định địa chỉ thanh ghi – Định địa chỉ trực tiếp – Định địa chỉ gián tiếp thanh ghi – Định địa chỉ tức thời • Tập lệnh – Nhóm lệnh di chuyển dữ liệu – Nhóm lệnh số học và luận l{ – Nhóm lệnh điều khiển – Nhóm lệnh thực hiện trên bit Các cách đánh địa chỉ (1/2) • Đánh địa chỉ thanh ghi (Rn): – 98C51 có 8 thanh ghi làm việc được k{ hiệu từ R0-R7 – Trong định địa chỉ thanh ghi, mã lệnh luôn có 3 bit để chị thị một thanh ghi – Ví dụ: MOV A,R0 • Đánh địa chỉ trực tiếp (direct): – Lệnh hiện hành sẽ cung cấp địa chỉ tuyệt đối của ô nhớ sử dụng; – Lệnh có ít nhất 2byte, trong đó địa chỉ ô nhớ chiếm 1byte – Ví dụ: MOV A,40H Các cách đánh địa chỉ (2/2) • Định địa chỉ gián tiếp thanh ghi (@Ri): – Với i=0,1 – Ri hoạt động như một con trỏ thanh ghi, nội dung của Ri chỉ ra một ô nhớ trong RAM nội; – Mã lệnh có bit thấp nhất được dùng để xác định con trỏ thanh ghi nào được sử dụng – Ví dụ: MOV A,@R0 • Đinh địa chỉ tức thời (#data): – Với lệnh này thì data không phải là địa chỉ mà là dữ liệu thật, dữ liệu 8bit (hằng số) – Ví dụ: MOV A,#12 – Khi sử dụng con trỏ dữ liệu DPTR thì cần phải có dữ liệu 16bit (#data16); ví dụ MOV DPTR,#8000H Nhóm lệnh chuyển dữ liệu (1/3) • Cú pháp: MOV đích,nguồn • Chuyển dữ liệu trong không gian bộ nhớ nội, hướng chuyển dữ liệu từ nguồn đến đích • Ví dụ: – MOV A,Rn: chuyển nội dung thanh ghi Rn vào A – MOV A,@Ri: chuyển dữ liệu gián tiếp vào A – MOV A,direct: chuyển dữ liệu trực tiếp từ ô nhớ vào A – MOV A,#data: chuyển giá trị dữ liệu tức thời vào A – MOV Rn,A: chuyển nội dung thanh ghi A vào thanh ghi Rn – MOV Rn,#data: chuyển giá trị dữ liệu tức thời vào thanh ghi Rn – … Nhóm lệnh chuyển dữ liệu (2/3) • XCH A,Rn: hoán đổi dữ liệu giữa A và Rn • XCH A,direct: hoán đổi dữ liệu giữa A và ô nhớ trực tiếp • XCH A,@Ri: hoán đổi dữ liệu giữa A và ô nhớ gián tiếp • MOVX đích,nguồn – Chuyển dữ liệu giữa RAM nội và RAM bên ngoài – Hướng chuyển là từ nguồn đến đích – Địa chỉ của ngoại vi (ô nhớ ngoài) sẽ là nội dung của thanh ghi DPTR – Khi làm việc với bộ nhớ ngoài có dung lượng thấp (<256byte) thì chỉ cần 8bit địa chỉ thấp và ta sẽ sử dụng cách định địa chỉ gián tiếp thanh ghi @Ri để chứa địa chỉ 8bit này Nhóm lệnh chuyển dữ liệu (3/3) • MOVX @Ri,A: ghi dữ liệu từ A ra ô nhớ ngoài • MOVX A,@Ri: đọc dữ liệu từ ô nhớ ngoài vào A • MOVX @DPTR,A: ghi dữ liệu từ A ra ô nhớ ngoài • MOVX A,@DPTR: đọc dữ liệu từ ô nhớ ngoài về A • Ví dụ áp dụng:ở trạng thái ban đầu thanh ghi R1 chứa giá trị 40H, ô nhớ RAM nội ở địa chỉ 40H chứa giá trị FFH, sau khi thực thi lệnh các thanh ghi và ô nhớ sẽ có giá trị như thế nào ? – MOV A,R1 – MOV A,@R1 – MOV A,40H – MOV A,#40 Nội dung A là 40H, R1 là 40H, ô nhớ 40H là FFH Nội dung A là FFH, R1 là 40H, ô nhớ 40H là FFH Nội dung A là FFH, R1 là 40H, ô nhớ 40H là FFH Nội dung A là 40H, R1 là 40H, ô nhớ 40H là FFH Nhóm lệnh số học và luận l{ (1/2) • ADD, ADDC: lệnh cộng dữ liệu – Lệnh cộng dữ liệu sẽ lưu kết quả tính toán vào thanh ghi A – Lệnh cộng sẽ tác động đến cờ CY trong thanh ghi PSW – Lệnh ADDC sẽ cộng cả nội dung của cờ nhớ CY – Ví dụ: A chứa giá trị 12H, sau khi thực hiện lệnh ADD A,#36H thì giá trị của A là 48H và bit cờ CY=0 • SUBB: lệnh trừ dữ liệu – Lệnh trừ sẽ lưu kết quả tính toán vào thanh ghi A – Lệnh tác động đến cờ trong thanh ghi PSW – Để kết quả tính chính xác, trước khi dùng lệnh trừ ta nên xóa cờ CY – Ví dụ: lệnh SUBB A,R1: nội dung A – nội dung R1 – nội dung bit cờ CY, kết quả cất trở lại thanh ghi A Nhóm lệnh số học và luận l{ (2/2) • INC: lệnh tăng 1 đơn vị (không tác động đến CY) • DEC: giảm đi 1 đơn vị • MUL A,B: nhân nội dung A với nội dung B, byte thấp của kết quả cất vào A, byte cao của kết quả cất vào B • DIV A,B: chia nội dung của A cho nội dung B, phần nguyên kết quả cất vào A, phần dư cất vào B • Các lệnh luận l{: – ANL: lệnh AND – ORL: lệnh OR – XRL: lệnh XOR – RL A: quay trái thanh ghi A đi 1bit (RR A: quay phải 1 bit) – SWAP A: hoán đổi nội dung 4bit cao và 4 bit thấp của thanh ghi A (tương đương quay 4 lần) Nhóm lệnh thực hiện trên bit • CLR C: xóa cờ carry (CY) về 0 • CLR bit: xóa bit về 0 • SETB C, SETB bit: đặt bit cờ/bit lên 1 • CPL C, CPL bit: lấy bù bit cờ/ bit • … Nhóm các lệnh điều khiển • Lệnh gọi chương trình con: – ACALL: gọi ctc dùng địa chỉ tuyệt đối – LCALL: gọi ctc dùng địa chỉ dài • Lênh thoát: – RET: trở về CTC từ ctc – RETI: trở về CTC từ ctc phục vụ ngắt • Lệnh nhảy không điều kiện: – AJMP/LJMP/SJMP (lệnh nhảy tuyệt đối/dài/ngắn) • Lệnh nhảy có điều kiện – JZ/JNZ (nhảy nếu A=0/khác 0) – JC/JNC (nhảy nếu C=1/C=0) – JB bit/JNB bit: nhảy nếu bit =1/nếu bit=0 • NOP: lệnh k làm gì cả nhưng PC vẫn tăng lên 1 • …. Một số ví dụ áp dụng tập lệnh • VD1: Hãy cho biết các lệnh dưới đây thực hiện công việc gì ? Giá trị các thanh ghi và ô nhớ sau khi thực hiện xong lệnh: MOV R1,#25H MOV A,#50H MOV @R1,A • VD2: Viết chương trình thực hiện cổng logic sau: R1=25H; A=50H; (ô nhớ 25H)=50H MOV C,P1.4 ORL C,P1.5 CPL C MOV P1.7,C Một số ví dụ áp dụng tập lệnh a) Viết chương trình cho 8 Led sáng b) Viết chương trình cho 4 led sáng: D1-D4 c) Viết chương trình cho 4 led sáng: D5-D8 Một số ví dụ áp dụng tập lệnh a) Viết chương trình cho 8 Led sáng b) Viết chương trình cho 4 led sáng: D1-D4 c) Viết chương trình cho 4 led sáng: D5-D8 Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 Giới thiệu Timer: • Timer là một chuỗi các Flip-Flop chia đôi tần số mắc nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp. Xung nhịp được đưa vào Flip-Flop thứ nhất để chia đôi tần số xung nhịp. Ngõ ra của Flip-Flop thứ nhất làm xung nhịp cho Flip-Flop thứ hai (cũng làm việc chia đôi tần số), và v.v. … • Vì mỗi tầng kế tiếp chia đôi cho nên timer có n tầng sẽ cho xung ra có tần số là tần số xung nhịp chia cho 2n. Ngõ ra của tầng cuối làm xung nhịp cho Flip-Flop báo tràn của timer (còn gọi là cờ timer TF – Timer Flag); • Giá trị nhị phân trong các Flip-Flop của timer có thể xem như số đếm xung nhịp (hoặc các sự kiện) từ khi timer bắt đầu chạy. Thí dụ timer 16bit sẽ đếm từ 0000H đến FFFFH, cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H. Vi dụ Timer 3 bit: Ứng dụng của Timer: • Sử dụng timer để: Định khoảng thời gian; Đếm sự kiện;Tạo tốc độ baud cho cổng nối tiếp có sẵn trong VĐK • Trong các ứng dụng định khoảng thời gian, thường lập trình cho timer tràn ở một khoảng đều đặn và đặt cờ tràn timer lên 1. cờ được dùng để đồng bộ hóa hoặc đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung); • Đếm sự kiện được dùng để xác định số lần xảy ra của một sự kiện hơn là đo khoảng thời gian trôi qua giữa các sự kiện. Một “sự kiện” là bất cứ tác động bên ngoài nào có thể cung cấp một chuyển tiếp 1 sang 0 từ chân T0,T1,T2 (ở P3, P2) của 89c52 • Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho cổng nối tiếp có sẵn trong VĐK Các thanh ghi chức năng đặc biệt (SFR) của timer Timer được truy cập khi sử dụng các thanh ghi chức năng đặc biệt: TMOD, TCON, TH0, TL0, TH1, TL1 Thanh ghi TMOD (Timer Mode Register) (1/2) • Thanh ghi TMOD dùng để xác định chế độ làm việc cho Timer 0 và Timer 1 • TMOD không được địa chỉ hóa từng bit • Nạp bằng phần mềm khi bắt đầu chương trình – Gate: bit mở cổng cho Timer: • Khi GATE=1: Timer/Counterx chỉ hoạt động khi chân INTx ở mức 1 (phần cứng) và bit TRx=1 (trong thanh ghi TCON) Thanh ghi TMOD (Timer Mode Register) (2/2) • Khi GATE=0: Timerx hoạt động khi bit TRx=1 (ghi chú: x=0,1; TRx: TR0 hoặc TR1; Timerx: Timer0 hoặc Timer1) – C/T: Bit chọn Timer hay Counter • C/T =1: chọn Counter (đếm sự kiện) • C/T = 0 chọn Timer (định khoảng thời gian) – M0,M1: các bit chọn chế độ Thanh ghi TMOD (Timer Mode Register) Ví dụ: TMOD = 0000 0001 (01H) chế độ 1 của bộ định thời Timer 0 được chọn TMOD = 0010 0000 (20H) chế độ 2 của bộ định thời Timer 1 được chọn TMOD = 0001 0010 (12H) chế độ 1 của bộ định thời Timer 1 và chế độ 2 của Timer 0 được chọn Thanh ghi TMOD (Timer Mode Register) Ví dụ: TMOD = 0000 0010 Bộ định thời là Timer0, chế độ 2, C/T = 0 dùng nguồn XTAL, GATE = 0 dùng phần mềm để khởi động và dừng bộ định thời. Thanh ghi điều khiển Timer (TCON- Timer Control Register) • Thanh ghi TCON chứa các bit trạng thái và điều khiển cho Timer 0 và Timer 1 • Được địa chỉ hóa đến từng bit • TFx: cờ báo tràn timer; cờ này được đặt bởi phần cứng khi tràn timer, được xóa bằng phần mềm VD: timer 16bit sẽ đếm lên từ 0000H đến FFFFH, tràn timer xảy ra khi số đếm tràn từ FFFFH sang 0000H • TRx: bit điều khiển timer chạy, được đặt/xóa bằng phần mềm để điều khiển timer chạy/dừng (TRx=1: cho phép Timer chạy; TRx=0: dừng Timer) Thanh ghi điều khiển Timer (TCON- Timer Control Register) Các chế độ làm việc của timer • AT89C52 có 3 timer, mỗi timer có 4 chế độ làm việc, bao gồm: – Chế độ 0 (mode 0): chế độ định thời 13bit – Chế độ 1 (mode 1): chế độ định thời 16bit – Chế độ 2 (mode 2): timer 8bit tự động nạp lại giá trị ban đầu – Chế độ 3 (mode 3): chế độ tách timer Chế độ 0 (mode 0): chế độ định thời 13bit • Chế độ Timer 13bit, tương thích 8048 • Trong chế độ này không sử dụng 3bit cao của thanh ghi TLx, chỉ sử dụng THx và 5bit thấp của TLx • Giá trị đếm được: 0 đến (213-1)Ttimer (từ 0 đến 8191Ttimer) Chế độ 1 (mode 1): chế độ định thời 16bit • Trong chế độ này sử dụng cả 2 thanh ghi THx và TLx • Cờ báo tràn là bit TFx trong thanh ghi TCON, được đọc hoặc ghi bằng phần mềm • Bit có trọng số cao (MSB) trong các thanh ghi timer là bit 7 của THx; Bit có trọng số thấp nhất (LSB) là bit 0 của TLx • Các thanh ghi timer có thể được đọc/ghi bất cứ lúc nào bằng phần mềm • Giá trị đếm được là từ 0 đến (216-1)Ttimer, nghĩa là từ 0 đến 65535Ttimer Lập trình trong chế độ 1 Để tạo ra một độ trễ thời gian dùng chế độ 1 của Timer: 1. Nạp giá trị TMOD cho thanh ghi báo độ định thời nào (Timer0 hay Timer1) được sử dụng và chế độ nào được chọn; 2. Nạp các thanh ghi TL và TH với các giá trị đếm ban đầu; 3. Khởi động bộ định thời 4. Duy trì kiểm tra cờ bộ định thời TF bằng một vòng lặp để xem nó được bật lên 1 không. Thoát vòng lặp khi TF được lên cao; 5. Dừng bộ định thời; 6. Xoá cờ TF cho vòng kế tiếp; 7. Quay trở lại bước 2 để nạp lại TL và TH. Lập trình trong chế độ 1 Công thức tính toán độ trễ sử dụng chế độ 1 (16 bit) của bộ định thời đối với tần số thạch anh XTAL = f (MHz): Tính theo số Hex Tính theo số thập phân (FFFF - YYXX + 1)*12/f (ms) trong đó YYXX là các giá trị khởi tạo của TH, TL tương ứng. Lưu ý rằng các giá trị YYXX là theo số Hex. Chuyển đổi các giá trị YYXX của TH, TL về số thập phân để nhận một số thập phân NNNNN sau đó lấy (65536 – NNNNN)*12/f (ms). Chế độ 2 (mode 2): timer 8bit tự động nạp lại giá trị ban đầu • Trong chế độ thanh ghi TLx hoạt động như một timer 8bit, trong khi đó thanh ghi THx vẫn giữ nguyên giá trị được nạp • Khi số đếm tràn từ FFH sang 00H thì cờ tràn timer được đặt lên 1 đồng thời giá trị trong THx được nạp lại vào TLx và chu trình đếm mới được bắt đầu • Chế độ này rất thông dụng vì sự tràn timer xảy ra trong những khoảng thời gian nhất định và tuần hoàn một khi đã khởi động bộ đếm • Giá trị đếm được là từ 0 đến (28-1)Ttimer, nghĩa là từ 0 đến 255Ttimer Chế độ 3 (mode 3): chế độ tách timer • Chế độ tách timer. Timer 0 được tách thành 2 timer 8bit: TH0 và TL0. Timer 1 dừng • TL0 có cờ báo tràn là TF0; TH0 có cờ báo tràn là TF1 Nguồn tạo xung nhịp cho Timer: Có 2 nguồn xung nhịp có thể được sử dụng và nó được chọn bằng bit C/T trong thanh ghi TMOD khi khởi động Timer; • Xung nhịp định khoảng thời gian: – Khi C/T=0: timer dùng để định khoảng thời gian – Nguồn xung nhịp được lấy từ bộ dao động trên chip đưa qua 1 bộ chia 12 để giảm đến tần số thích hợp cho phần lớn các ứng dụng. – ftimer=fOSC/12 • Xung nhịp đếm sự kiện: – Khi C/T=1: dùng timer đếm sự kiện – Xung nhịp được lấy từ nguồn bên ngoài thông qua ngõ T0 hoặc T1, nguồn bên ngoài sẽ cung cấp một xung khi xảy ra một sự kiện – Giá trị trong các thanh ghi timer (THx và TLx) sẽ tăng lên 1 khi có 1 sự kiện xảy ra. – Số sự kiện được xác định bằng phần mềm thông qua đọc các thanh ghi timer Nguồn tạo xung nhịp cho Timer: Tần số thạch anh Tần số bộ định thời Chu kỳ bộ định thời 20MHz 20MHz/12=1,6666MHz 1/1,6666MHz=0,6us 12MHz 12MHz/12=1MHz 1/1MHz=1us 11,0592MHz 11,0592MHz/12=0,9216MHz 1/0,9216MHz=1,085us Mặc dù các hệ thống 8051 có thể sử dụng tần số thạch anh từ 10 đến 40MHz, song ta chỉ tập trung vào tần số thạch anh 11,0592MHz. Lý do đằng sau một số lẻ như vậy là tốc độ baud đối với truyền thông nối tiếp của 8051. Tần số XTAL = 11,0592MHz cho phép hệ thống 8051 truyền thông với PC mà không có lỗi. Các bước cơ bản để khởi động Timer • Nạp giá trị bắt đầu cho thanh ghi TMOD: lựa chọn chế độ timer, cho bit Gate=0, C/T=0 • Nạp các giá trị thích hợp cho các thanh ghi THx và TLx • Cho timer chạy: SETB TRx (trong C: TRx=1) • Chờ cờ báo tràn: có 2 cách: – JNB TFx,$ – Wait: JNB TFx,Wait lenh JNB • Xóa cờ báo tràn: CLR TFx (trong C: TFx=0) • Dừng Timer: CLR TRx (trong C: TRx=0) Một số VD: Ví dụ 1: viết chương trình tạo trễ (delay) 100μs dùng Timer 0, biết rằng bộ dao động trên chip sử dụng thạch anh 12MHz • B1: tìm tần số dao động và chu kz xung nhịp của timer fOSC=12MHz Ftimer=fOSC/12=1MHz Ttimer=1/ftimer=1/10 6=1μs • B2: xác định các giá trị cần nạp cho các thanh ghi timer Có tdelay=100μs Mà Ttimer=1μs nên: tdelay=100Ttimer Do timer hoạt động như là một bộ đếm lên và khi bộ đếm tràn thì nó sẽ quay lại về giá trị 0, nên giá trị phải nạp cho các thanh ghi timer là -100 • B3: xác định giá trị cần nạp cho thanh ghi chế độ timer TMOD – Do Tdelay=100Ttimer ; giá trị này <255 nên có thể chọn timer ở chế độ 1(16bit) hay chế độ 2(8bit tự động nạp lại) Một số VD: • B4: Cho timer chạy • B5: chờ cờ báo tràn • B6: Xóa cờ báo tràn • B7: Dừng timer Chương trình hoàn chỉnh khi dùng timer 0 ở chế độ 2: MOV TMOD,#0000 0010B MOV TH0,#-100 SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 END Một số VD: Chương trình dùng timer 0 chế độ 1: MOV TMOD,#0000 0001B MOV TH0,# high(-100); chuyển -100 sang mã nhị phân sau đó lấy 8bit cao của giá trị gán vàoTH0 MOV TL0,# low(-100); chuyển -100 sang mã nhị phân sau đó lấy 8bit thấp của giá trị gán vàoTL0 SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 END Một số VD: VD2: viết chương trình tạo trễ 10ms dùng timer 1, tần số dao động trên chip là 12MHZ • B1: Ttimer=1 μs • B2: Các giá trị cần nạp cho các thanh ghi timer Tdelay=10ms vậy Tdelay=10000Ttimer • B3: các giá trị cần nạp cho thanh ghi TMOD Do Tdelay=10000Ttimer nên chọn timer ở chế độ 1 (16bit) Chương trình: MOV TMOD,#0001 0000B MOV TH1,#high(-10000) MOV TL1,#low(-10000) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 END Một số VD: VD3: Viết chương trình tạo sóng vuông 50% có tần số 10KHz ở ngõ ra P1.0, biết tần số dao động trên chip là 12MHz • Tần số xung 10KHz nên chu kz xung vuông là T=1/(10.103)=10-4s = 100μs • Xung vuông 50% nên: tH=tL=T/2=50μs Dùng Timer 1: MOV TMOD,#0000 0010B MOV TH0,# -50 SETB TR0 LOOP: JNB TF0,$ CLR TF0 CPL P1.0 SJMP LOOP END Một số VD: Cách 2: LOOP: SETB P1.0 ACALL Delay_50us CLR P1.0 ACALL Delay_50us SJMP LOOP Delay_50us: MOV TMOD,# 0000 0010B MOV TH0,# -50 SETB TR0 JNB TF0,$ CLR TF0 RET END Một số VD: • Tạo ra một sóng vuông với độ đầy xung 50% (cùng tỷ lệ giữa phần cao và phần thấp) trên chân P1.5. Bộ định thời Timer0 được dùng để tạo độ trễ thời gian: XTAL=11,0592MHz #include //khai báo thư viện cho VĐK 89x51 void delay(void); //khi báo nguyên mẫu hàm con tạo trễ main() { P1_5=1; //khởi tạo chân P1_5 ở mức cao while(1) //vòng lặp vô hạn { delay(); //chương trình con tạo trễ P1_5=~P1_5; //đảo tín hiệu chân P1_5 } } Một số VD: void delay(void) //định nghĩa hàm delay { TMOD=0x01; //chọn timer0, chế độ 1, 16Bit TL0=0xF2; //nạp giá trị cho TL0 TH0=0xFF; //nạp giá trị cho TH0 TR0=1; //khởi động timer0 while(!TF0){} //vòng lặp kiểm tra cờ TF0 TR0=0; //ngừng timer0 TF0=0; //xóa cờ TF0 } Một số VD: • Tính toán độ trễ tạo ra bởi bộ định thời ở chương trình trên với tần số XTAL=11,0592MHz: • Bộ định thời làm việc với tần số đồng hồ bằng 1/12 tần số XTAL, do vậy ta có 11,0592MHz/12=0,9216MHz là tần số của bộ định thời. Kết quả là mỗi nhịp xung đồng hồ có chu kỳ T=1/0,9216MHz=1,085us. Hay nói cách khác, bộ Timer0 tăng 01 đơn vị sau 1,085ms để tạo ra bộ trễ bằng số_đếm´1,085ms. • Số đếm bằng FFFFH - FFF2H = ODH (13 theo số thập phân). Tuy nhiên, ta phải cộng 1 vào 13 vì cần thêm một nhịp đồng hồ để nó quay từ FFFFH về 0000H và bật cờ TF. Do vậy, ta có 14 x1,085us = 15,19us cho nửa chu kỳ và cả chu kỳ là T = 2 x15,19us = 30,38us là thời gian trễ được tạo ra bởi bộ định thời. Phân tích ví dụ Các bước để tìm các giá trị của các thanh ghi TH và TL, XTAL = 11. 0592MHz 1. Chia thời gian trễ cần thiết cho 1.085ms 2. Thực hiện 65536 - n với n là giá trị thập phân nhận được từ bước 1. 3. Chuyển đổi kết quả ở bước 2 sang số Hex: ta có YYXX là giá trị Hexa ban đầu cần phải nạp vào các thanh ghi bộ định thời. 4. Đặt TL = XX và TH = YY. Một số VD: Ví dụ: Giả sử tần số XTAL = 11.0592MHz. Hãy tìm các giá trị cần được nạp vào các thanh ghi vào các thanh ghi TH và TL nếu ta muốn độ thời gian trễ là 5ms. • Để có được ta chia 5ms cho 1.085ms và nhận được số n = 4608 nhịp. Để nhận được giá trị cần được nạp vào TL và TH thì ta tiến hành lấy 65536 trừ đi 4608 bằng 60928. Ta đổi số này ra số hex thành EE00H. Do vậy, giá trị nạp vào TH là EE Và TL là 00. void delay(void) //định nghĩa hàm delay { TMOD=0x01; //chọn timer0 chế độ 1 16Bit TL0=0x00; //nạp giá trị cho TL0 TH0=0xEE; //nạp giá trị cho TH0 TR0=1; //khởi động timer0 while(!TF0){} //vòng lặp kiểm tra cờ TF0 TR0=0; //ngừng timer0 TF0=0; //xóa cờ TF0 } Chú {: • Lập trình chế độ 0: Chế độ 0 hoàn toàn giống chế độ 1 chỉ khác là bộ định thời 16 bit được thay bằng13 bit. Bộ đếm 13 bit có thể giữ các giá trị giữa 0000 đến 1FFFH • trong TH - TL. Do vậy khi bộ định thời đạt được giá trị cực đại của nó là 1FFFH thì nó sẽ quay trở về 0000và cờ TF được bật lên. • Lập trình ở chế độ 2: chế độ 2 là bộ định thời 8 bit. Tuy nhiên, nó lại có khả năng tự nạp, khi tự nạp lại thì giá trị ban đầu của TH được giữ nguyên, còn TL được nạp lại giá trị sao chép từ TH. Bài tập 1. Thiết kế cột đèn giao thông ở ngã tư dùng LED đơn và LED 7 thanh 2. Hiển thị số đếm từ 0 đến 9999 trên sơ đồ đã copy 3. Chuẩn bị: – Lập trình cho LCD – Lập trình cho LED ma trận – Lập trình cho ADC, RTC, … Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 Truyền dữ liệu nối tiếp • Truyền dữ liệu khoảng cách xa • Tốc độ truyền dữ liệu thấp • Truyền dữ liệu nối tiếp đồng bộ – Dùng tìn hiệu clock riêng để đồng bộ hóa mạch thu và phát; – Thường dùng khung dữ liệu lớn hơn và nhanh hơn. • Truyền dữ liệu nối tiếp bất đồng bộ – Không cần tín hiệu clock riêng để đồng bộ hóa chuyển dữ liệu; – Dựa trên ký tự, mỗi ký tự được đóng khung bằng ‘start bit’ và ‘stop bit’ – Bên thu cần nhận dạng ‘start bit’ và ‘stop bit’ để nhận đúng ký tự dữ liệu Truyền dữ liệu đồng bộ và bất đồng bộ Đường truyền dữ liệu cơ bản Đường truyền điểm-điểm và điêm-đa điểm Cơ bản về đường truyền RS232 Giới thiệu cổng nối tiếp của MCS81 • 80c52 có 1 port nối tiếp hoạt động ở nhiều chế độ trên một dải tần số rộng; • Chức năng: chuyển dữ liệu từ song song sang nối tiếp đối với dữ liệu xuất và từ nối tiếp sang song song đối với dữ liệu nhập; • Port nối tiếp được truy xuất qua các chân TXD và RXD. Dữ liệu được thu (nhập) qua chân RXD (P3.0) và dữ liệu được phát (xuất) qua chân TXD (P3.1) • Tại mỗi thời điểm chỉ có 1 bit được thu hay phát. Để đồng bộ giữa thu và phát nối tiếp người ta sử dụng tốc độ baud • Port nối tiếp hoạt động song công và có đệm lúc thu cho phép 1 k{ tự được thu và được giữ trong khi k{ tự thứ 2 được nhận. Nếu CPU đọc k{ tự thứ nhất trước khi k{ tự thứ 2 được thu đầy đủ thì dữ liệu sẽ không bị mất; Giới thiệu cổng nối tiếp Hai thanh ghi DBUF và SCON dùng để truy xuất Port nối tiếp Các đặc tính của cổng nối tiếp MCS51 Thanh ghi đệm nối tiếp SBUF: • Thanh ghi SBUF đóng vai trò vừa là bộ đệm phát vừa là bộ đệm thu: – Dữ liệu phát đi sẽ được ghi vào SBUF và được phát qua ngõ TXD, trong trường hợp này nó là bộ đệm phát – Dữ liệu thu sẽ được nạp vào SBUF thông qua ngõ RXD và đọc thanh ghi này để truy xuất dữ liệu thu được, trong trường hợp này nó là bộ đệm thu – Port nối tiếp được dùng để cất các dữ liệu phát hoặc thu, khi dịch hết 8bit thì một dữ liệu được phát hoặc được nhận – Tốc độ baud của port nối tiếp có thể lấy từ bộ dao động trên chip hoặc sử dụng timer Thanh ghi điều khiển port nối tiếp SCON Các chế độ làm việc của cổng nối tiếp Mode 0: chế độ thanh ghi dịch • Dữ liệu nối tiếp được vào (thu) và ra (phát) qua ngõ RXD • Ngõ TXD là ngõ ra xung nhịp dịch, với 1 chu kz xung nhịp dịch thì 1 bit sẽ được phát hoặc thu • Dữ liệu được phát hoặc thu với bit đầu tiên là bit LSB • Xung nhip tốc độ baud cố định ở 1/12 tần số dao động trên chip • Việc phát k{ tự được khởi động bằng bất cứ lệnh nào ghi dữ liệu vào thanh ghi SBUF, trước khi phát phải kiểm tra bộ đệm phát đã rỗng • Chương trình con để phát 1 byte dữ liệu: Mode 0: chế độ thanh ghi dịch Mode 0: chế độ thanh ghi dịch Mode 1: UART 8bit tốc độ baud thay đổi được Mode 1: UART 8bit tốc độ baud thay đổi được Mode 1: UART 8bit tốc độ baud thay đổi được Mode 2: UART 9 bit có tốc độ baud cố định Mode 3: UART 9 bit có tốc độ baud thay đổi Khởi tạo và truy nhập các thanh ghi cổng nối tiếp Cho phép bộ thu – truyền dữ liệu nối tiếp Tốc độ baud cho cổng nối tiếp Sử dụng Timer1 làm xung nhịp tốc độ baud Tốc độ baud port nối tiếp • Tốc độ baud là số bit dữ liệu được truyền trong 1 sec, đơn vị tính là bit/giây (bps) • Để tạo tốc độ baud thì khởi động cho timer 1 tràn sau một khoảng thời gian tương ứng với tốc độ baud Ví dụ: tạo tốc độ baud 1200bps biết chip sử dụng thạch anh 12MHz Thạch anh 12MHz: Ttimer =1us Tốc độ tràn timer 1 là (giả sử bit SMOD trong thanh ghi PCON có giá trị =0) Ta có: fbaud=ftràn T1/32 Suy ra ftràn T1 = fbaudx32=1200x32=38400Hz Suy ra Ttràn T1=1/ftrànT1=1/38400Hz=26us TtrànT1=26Ttimer Như vậy giá trị cần nạp cho thanh ghi timer là -26 Tóm tắt tốc độ baud Ví dụ 1: Khởi tạo giá trị cho cổng nối tiếp Ví dụ 2 Ví dụ 3: Ví dụ 4 Ví dụ 5 Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 Hoạt động ngắt Thực thi chương trình Cấu trúc ngắt trong 8051 Các nguồn ngắt Thanh ghi cho phép ngắt IE Thứ tự ưu tiên ngắt Xử lý ngắt Các vector ngắt Tổ chức bộ nhớ khi ngắt Khung chương trình dùng ngắt Chương trình phục vụ ngắt có kích thước nhỏ Chương trình phục vụ ngắt có kích thước lớn a.Ngắt timer Ví dụ tạo sóng vuông bằng ngắt timer Phân tích chương trình tạo sóng dùng timer Ví dụ: tạo 2 sóng vuông dùng ngắt Ví dụ: tạo 2 sóng vuông dùng ngắt Ví dụ về ngắt timer Ví dụ về ngắt timer b. Ngắt cổng nối tiếp c. Ngắt ngoài Nội dung 3.1 Các kiến trúc vi điều khiển 3.2 Khái quát họ vi điều khiển MCS51 3.3 Cấu trúc AT89C52 3.3.1 Các cổng vào ra (I/O port) 3.3.2 Các tín hiệu điều khiển 3.3.3 Tổ chức bộ nhớ 3.3.4 Giới thiệu tập lệnh 3.3.5 Timer – Mạch định thời 3.3.6 Serial Port – cổng nối tiếp 3.3.7 Interupt – Hoạt động ngắt 3.4 Phần cứng tối thiểu của họ MCS51 Phần cứng tối thiểu của họ MCS51 Bài tập 1. Sơ đồ đã cho: – Lập trình & mô phỏng: 8 led sáng lần lượt từ phải qua trái, sau đó lần lượt từ trái qua phải. 2. Thiết kế 1 ngã tư 4 cột đèn đk giao thông, lập trình và mô phỏng hoạt động của nút giao thông: xanh 10s, vàng 2s, đỏ 5s. return Bài tập 1. Nháy LED đơn nối với cổng P1.0 với 1 nhịp/1s 2. Sáng lần lượt các LED đơn nối với cổng P1 theo thứ tự P1.0 đến P1.7 rồi lặp lại, thời gian sáng/tắt là 1s 3. Sáng và lưu sáng các LED đơn nối với cổng P1 theo thứ tự từ P1.0 đến P1.7, thời gian sáng/tắt là 1s Tai lieu 1. Timer 2. Cong noi tiep 3. Ngat Bài tập lớn • 1 nhóm 3 người • Yêu cầu: – Làm mô phỏng (vẽ protus+lập trình chạy mô phỏng) – Làm mạch thực tế: chạy được – Viết Báo cáo: phần thiết kế mạch, phần mô phỏng, mạch thật

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

  • pdfchuong3_2611.pdf
Tài liệu liên quan