Tài liệu Vi điều khiển (Microcontroller) pdf

55 760 5
Tài liệu Vi điều khiển (Microcontroller) pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

VI ĐIỀU KHIỂN (MICROCONTROLLER). 1 VI ĐIỀU KHIỂN (MICROCONTROLLER). 1. CẤU TRÚC CỦA BỘ VI ĐIỀU KHIỂN. 1.1 Giới thiệu về các bộ vi điều khiển. Bộ vi điều khiển (MCU – Micro Controller Unit) là một hệ thống vi xử lý cơ bản tích hợp trong cùng một chip, thông thường trong một MCU có một bộ vi xử lý (CPU), một dung lượng nhớ khoảng vài KB, và một số giao tiếp vào ra cơ bản thích hợp cho các ứng dụng điều khiển nhỏ. Với cấu trúc như mô tả trên, người sử dụng có thể nhanh chóng thực hiện một hệ thống phần cứng điều khiển lập trình bằng cách nối một số ít linh kiện cơ bản như thạnh anh, tụ điện, điện trở … vào bộ vi điều khiển. Mặt khác do không phải thực hiện các đường mạch nối giữa các khối CPU, bộ nhớ và vào ra nên khả năng chống nhiễu của hệ thống cao thích hợp cho môi trường công nghiệp. Hiện nay các bộ vi điều khiển đã trở nên khá phổ biến trong nhiều lĩnh vực với rất nhiều hãng sản xuất như: học MCU 8051 của Atmel, họ 68HC11 của Motorola, họ Z80MCU của Zilog … 1.2 Cấu trúc tổng quát của các bộ vi điều khiển. Sơ đồ khối tổng quát của một bộ vi điều khiển bao gồm các khối cơ bản như trình bày trên hình 8.1: - Khối xử lý (Processor) đóng vai trò quyết định tất cả các hoạt động của các bộ phận khác bên trong vi điều khiển. - Bộ nhớ điều khiển (Control store) thường là loại bộ nhớ ROM có dung lượng vài KB chứa các chương trình điều khiển. - Bộ nhớ RAM thường có dung lượng nhỏ sử dụng cho việc khai báo các biến trung gian, thông thường các thanh ghi của vi điều khiển cũng nằm trong phần bộ nhớ này. - Khối tạo xung nhịp và định thời (Clock & timing) đóng vai trò tạo xung nhịp định thời các hoạt động của hệ thống. Thông thường ở các bộ vi điều khiển tích hợp sẵn bộ tạo xung nhịp bên trong, tần số hoạt động của hệ thống sẽ được xác định bằng thạch anh nối vào mạch từ bên ngoài. - Khối điều khiển reset có nhiệm vụ thiết lập lại các trạng thái của hệ thống, cho phép nó bắt đầu hoạt động trở lại giống như khi mới cấp nguồn. 1 Power monitoring Reset control Clock & timing Control store RAM P r o c e s s o r I / O p o r t Power Reset Clocking Input & Output pins Hình 8.1: Sơ đồ khối tổng quát của một bộ vi điều khiển . - Khối giám sát nguồn (power monitoring) cho phép toàn bộ chip hoạt động ở chế độ chờ (standby) khi không có yêu cầu điều khiển với công suất rất nhỏ. Vì cấu trúc vi điều khiển cho phép thực hiện một hệ thống nhỏ gọn, nên nó được sử dụng nhiều trong các thiết bị điều khiển cầm tay và di động có nguồn cung cấp bằng pin, với khối giám sát nguồn vi điều khiển có thể hoạt động theo định thời hoặc chỉ khi có yêu cầu từ bên ngoài. - Các cổng vào ra (I/O): thông thường vi điều khiển có một vài cổng giao tiếp song song để giao tiếp điều khiển các thiết bị bên ngoài, đôi khi các cổng này sử dụng như các Bus (dữ liệu, địa chỉ và điều khiển) của một bộ vi xử lý thông thường, cho các hệ thống có yêu cầu mở rộng về dung lượng bộ nhớ cũng như các cổng vào ra. Ngoài các cổng vào ra song song, vi điều khiển còn có các cổng vào ra nối tiếp theo chuẩn RS232 hoặc IEEE448. Trong một số bộ vi điều khiển còn tích hợp cả các khối A/D và D/A, khi đó sẽ có cả các đường vào ra cho các khối này. 2. MÔ TẢ PHẦN CỨNG CÁC BỘ VI ĐIỀU KHIỂN HỌ MSC-51. 2.1Giới thiệu chung. Họ IC vi điều khiển MSC-51 được phát triển, chế tạo và bán ở thị trường bởi hãng Intel. Các nhà chế tạo IC khác như Siemens của Đức, Advanced Micro Devices, Fujitsu, Philips, Atmel … là các nhà cung cấp những thiết bị họ MCS-51 được cấp giấy phép bảng quyền thứ 2. 8051 là bộ vi điều khiển đầu tiên được thương mại hoá trên thị trường, sau đó nhiều thế hệ khác trong họ ra đời, các đặc tính khác nhau của một số bộ vi điều khiển trong họ này được mô tả trong bảng sau: Loại Bộ nhớ chương trình Bộ nhớ dữ liệu Số timer 8051 8031 8751 8052 8032 8752 8951 892051 4K ROM 0K ROM 4K EPROM 8K ROM 0K ROM 8K EPROM 4K EEROM 2K EEROM 128 byte 128 byte 128 byte 256byte 256byte 256byte 256 byte 128 byte 2 2 2 3 3 3 2 0 2.2Tổng quát về phần cứng 8051. • Sơ đồ khối và chức năng các khối. Các bộ vi điều khiển 8051, 8031, 8751, 8951 trong họ MSC – 51 có chung một số đặc tính như: - 4 KB bộ nhớ loại ROM để ghi các chương trình điều khiển. - 128 byte RAM. - 4 cổng vào ra 8 bit. - 2 bộ định thời (timer) 16 bit. - Một cổng giao tiếp nối tiếp chuẩn RS 232. 1 - Có thể quản lý được 64 KB bộ nhớ mở rộng cho chương trình và 64 KB bộ nhớ mở rộng cho dữ liệu. - Một bộ xử lý các phép toán logic có thể thao tác trên từng bit. - 210 bit RAM nội được địa chỉ hoá. - Bộ nhân/chia 4 µs. Cấu trúc kết nối phần cứng của các bộ vi điều khiển trong họ gần tương tự như nhau, một số khác biệt giữa chúng cũng được biểu diễn trên sơ đồ khối hình 8.2. Khối xử lý trung tâm (CPU) nhận tín hiệu xung nhịp từ bộ dao động, tần số ra của bộ tạo dao động sẽ tuỳ thuộc vào tần số thạch anh bên ngoài. Hầu hết các bộ vi điều khiển trong họ đều có ít nhất 128 byte RAM bên trong. Các thanh ghi thông thường nằm trong phần RAM. Ngoài 8031/32 các vi điều khiển còn lại đều có bộ nhớ ROM lưu trữ chương trình điều khiển. Bộ nhớ ROM này có thể là Mask-ROM chỉ lập trình được bởi nhà sản xuất, có thể là EPROM hoặc EEROM có thể lập trình lại nhiều lần bởi người sử dụng. Các bộ định thời lập trình được có thể đếm theo xung cung cấp từ bên ngoài hoặc xung chuẩn từ bộ tạo dao động, có bộ đếm này có ứng dụng rất phổ biến trong điều khiển tự động. Bộ điều khiển Bus cung cấp các tín hiệu điều khiển giao tiếp với bên ngoài, và kiểm soát hoạt động của các cổng vào ra dữ liệu song song. Hai trong bốn cổng vào ra song song (P0 1 TIMER 2 (8032, 8052) TIMER 1 TIMER 0 ROM 0K – 8031/32 4K – 8051/8951 8K – 8052/8752 128 Byte RAM 128 byte RAM (8032, 8052) OTHER REGISTER INTERRUPT CONTROL CPU Oscillator BUS CONTROL I/O PORTS SERIAL PORT P0 P2 P1 P3 Address/data TxD RxD ALE PSEN EA RST T0 T1 T2 T2EX Serial Port Timer 0 Timer 1 Timer 2 (8032/52) INT0INT1 Hình 8.2: Sơ đồ khối vi điều khiển MCS – 51. và P2) có thể sử dụng làm các Bus địa chỉ và dữ liệu trong chế độ giao tiếp bộ nhớ ngoài. Cổng vào ra nối tiếp có hai đường truyền và nhận dữ liệu nối tiếp với các thiết bị khác. Bộ điều khiển ngắt tích hợp trong chip cho phép nhận hai yêu cầu ngắt cung cấp thẳng từ bên ngoài, hoặc từ cổng nối tiếp và các bộ định thời bên trong. • Các tín hiệu của 8051. 8051/8951 đều có 40 chân tín hiệu giống nhau. Ngoài các chân nhận các nguồn nuôi và các linh kiện tạo dao động, các chân còn lại hoạt động giống như các đường vào ra. Tuy nhiên, trong đó có 24 chân có hai công dụng, mỗi đường này có thể hoạt động như đường xuất nhập, hoặc như đường điều khiển, hoặc là một đường trong của BUS dữ liệu và BUS địa chỉ. Các cổng vào ra song song thường có cấu trúc cài. Các thiết kế của 8051 có thể ở hai chế độ: chế độ tối thiểu, hoặc chế độ mở rộng bộ nhớ hoặc các thành phần khác. Mỗi cổng 8 đường có thể hoạt động giống như một đơn vị giao tiếp với các thiết bị vào ra song song như: máy in, các bộ biến đổi A/D, D/A …, hoặc mỗi đường có thể điều khiển một cách độc lập để có thể giao tiếp với các thiết bị chỉ yêu cầu một bit như: các công tắc, các LED, các solenoid, đóng mở động cơ…. Việc giao tiếp theo từng bit, có thể điều khiển bằng các lệnh thao tác bit là một điểm mạnh của các bộ vi điều khiển so với các bộ vi xử lý thông thường. Cổng 0: Cổng 0 (các chân 32–39) là một cổng hai chức năng. Trong các thiết kế tối thiểu (không dùng bộ nhớ mở rộng), nó có chức năng như các đường I/O. Đối với các thiết kế mở rộng về bộ nhớ, nó là Bus đa hợp giữa BUS địa chỉ và BUS dữ liệu. Cổng 1: Cổng 1 (các chân 1–8) là một cổng vào ra thông thường. Các đường trong cổng được ký hiệu P1.0, P1.1, P1.2,.… Cổng1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị ngoài. Cổng 2: Cổng 2 (các chân 21–28): là một cổng có công dụng kép, nó được dùng như các đường vào ra, hoặc là byte cao của BUS địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng. Cổng 3: Cổng 3 (các chân 10–17): là một cổng công dụng kép. Các đường của cổng này có nhiều chức năng. Ngoài công dụng như các đường vào ra thông thường, chúng còn có các công dụng khác như biểu diễn ở bảng sau: Bit Tên Địa chỉ bit Chức năng P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RxD TxD INT0 INT1 T0 T1 WR RD B0H B1H B2H B3H B4H B5H B6H B7H Nhận dữ liệu cho cổng nối tiếp. Truyền dữ liệu cho cổng nối tiếp. Nhận tín hiệu yêu cầu ngắt (0) từ bên ngoài. Nhận tín hiệu yêu cầu ngắt (1) từ bên ngoài. Ngõ vào bên ngoài cho Timer 0. Ngõ vào bên ngoài cho Timer 1. Tín hiệu điều khiển ghi cho bộ nhớ bên ngoài. Tín hiệu điều khiển đọc cho bộ nhớ bên ngoài. 8051 có 4 tín hiệu điều khiển. 1 PSEN (Program Store Enable): PSEN (chân 29) là tín hiệu ngõ ra, nó là tín hiệu điều khiển để cho phép bộ nhớ chương trình mở rộng, trong hệ thống tín hiệu này thường được nối đến chân OE (Output Enable) của một EPROM, để cho phép đọc các byte mã lệnh. PSEN sẽ ở mức thấp trong thời gian lấy mã lệnh. Các mã nhị phân của chương trình, được đọc từ EPROM qua BUS dữ liệu đưa vào thanh ghi lệnh của 8051 để giải mã. Khi thi hành chương trình trong ROM nội (8051), PSEN sẽ ở mức không tích cực (mức cao). ALE (Address Latch Enable): Tín hiệu ra ALE (chân 30), có chức năng tương tự như trong các vi xử lý 8085, 8088, 8086, nó được dùng cho việc tách kênh các Bus đa hợp (địa chỉ và dữ liệu). Trong cấu hình bộ nhớ mở rộng (tín hiệu EA = 1), cổng 0 vừa là BUS dữ liệu vừa là byte thấp của BUS địa chỉ, ALE được sử dụng để chốt địa chỉ vào một bộ cài bên ngoài trong chu kỳ xung nhịp đầu tiên của chu kỳ truy cập bộ nhớ. Sau đó, các đường cổng 0 dùng để xuất hoặc nhập dữ liệu trong thời gian còn lại của chu kỳ truy cập bộ nhớ. Tín hiệu ALE có tần số bằng 1/6 lần tần số dao động trên chip, nó có thể được dùng làm nguồn xung nhịp cho các phần khác của hệ thống. Nếu xung nhịp trên 8051 là 12 MHz, thì ALE có tần số 2 MHz, chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị mất. Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051. EA (External Access): Tín hiệu vào EA (chân 31) thường được nối lên mức cao (+5V) hoặc mức thấp (GND). Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng. Khi dùng 8031, EA luôn được nối mức thấp vì không có bộ nhớ chương trình trong chip. Nếu EA được nối mức thấp, bộ nhớ bên trong chương trình 8051 sẽ bị cấm, và chương trình thi hành từ EPROM mở rộng. EA còn được dùng làm ngõ vào cấp điện áp 21V khi lập trình cho EPROM trong 8051. RST (Reset): Ngõ vào RST (chân 9) là ngõ reset của 8051. Khi tín hiệu này được đưa lên mức cao (trong ít nhất 2 chu kỳ máy), các thanh ghi bên trong 8051 được nạp những giá trị thích hợp để khởi động hệ thống. Các ngõ vào bộ dao động trên chip (X1, X2): Như trong sơ đồ khối, 8051 có một bộ dao động trong chip. Nó thường được nối với một thạch anh giữa hai chân 18 và 19 cùng với các tụ điện. Với 8051 tần số thạch anh thông thường là 12 MHz. Các chân nguồn: 8051 hoạt động với nguồn đơn +5V. V CC được nối vào chân 40 và V SS (GND) được nối vào chân 20. • Tổ chức bộ nhớ của 8051. Các hệ thống vi xử lý thường thực hiện việc phân biệt các vùng nhớ riêng cho dữ liệu và chương trình, vì vậy trong máy tính thông thường chương trình và dữ liệu sẽ được nạp từ đĩa vào các vùng nhớ khác nhau của RAM hệ thống. Các bộ vi điều khiển thực hiện việc quản lý bộ nhớ theo một cách khác. 8051 không có đĩa để lưu trữ các chương trình, nó có dung lượng nhớ giới hạn ngay bên trong chip. Dung lượng nhớ này sẽ được sử dụng riêng rẽ cho chương trình và dữ liệu. Tuy nhiên chúng có thể được mở rộng bên ngoài lên đến tối đa 64 Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu. Bộ nhớ RAM trên chip được sử dụng cho rất nhiều mục đích như: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hoá từng bit, các thanh ghi đa năng và các thanh ghi chức năng đặc biệt. Có hai đặc tính nổi bật trong vi điều khiển là: Các thanh ghi và các cổng vào ra được 1 bản đồ hoá trong bộ nhớ RAM, chúng có thể truy cập giống như các ô nhớ bất kỳ khác. Ngăn xếp cũng nằm ở bộ nhớ RAM bên trong chip, mà không ở RAM ngoài như các hệ thống vi xử lý thông thường • Mô tả về bộ nhớ RAM trong chip của 8051. RAM bên trong 8051 mô tả trên hình 8.3 bao gồm: 4 tập thanh có địa chỉ 00H tới 1FH, mỗi tập có 8 thanh ghi được ký hiệu từ R0 tới R7, việc đổi qua các tập thanh ghi khác nhau được thực hiện bằng hai bit của thanh ghi trạng thái. Vùng nhớ địa chỉ hoá theo bit có địa chỉ từ 20H tới 2FH, việc truy cập các bit này theo các địa chỉ từ 00 tới 7FH. Vùng nhớ đa dụng từ 30H tới 7FH. Và các thanh ghi chức năng đặc biệt từ 80H tới FFH, một số thanh ghi trong vùng này cũng được địa chỉ hoá theo bit. RAM đa dụng: Ngoài 80 byte RAM đa dụng chiếm các địa chỉ từ 30H–7FH, 32 byte dưới cùng từ 00H đến 1FH cũng có thể được dùng với mục đích tương tự (mặc dù các địa chỉ này đã có mục đích khác). Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất với chế độ địa chỉ trực tiếp hoặc gián tiếp. Ví dụ, để đọc nội dung ở địa chỉ 5FH của RAM nội vào thanh ghi tích lũy, có thể dùng lệnh sau: MOV A, 5FH Lệnh này di chuyển 1 byte dữ liệu dùng định vị địa chỉ trực tiếp để xác định “địa chỉ nguồn” (5FH). Đích nhận dữ liệu là thanh ghi tích lũy A. RAM nội cũng có thể được truy xuất bằng định vị địa chỉ gián tiếp qua R0 hay R1. Ví dụ, hai lệnh sau thi hành cùng nhiệm vụ như lệnh ở trên: MOV R0, #5FH MOV A, @R0 Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0, và lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh ghi tích lũy A. RAM địa chỉ hoá từng bit: 8051 chứa 210 bit được địa chỉ hoá, trong đó 128 bit là ở các địa chỉ byte 20H đến 2FH, và phần còn lại là trong các thanh ghi chức năng đặc biệt. Ý tưởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính tiện lợi của vi điều khiển nói chung. Các bit có thể được đặt, xóa, AND, OR, . bằng một lệnh. Đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc-sửa-ghi để đạt được hiệu quả tương tự. Ngoài ra, các cổng vào ra cũng được địa chỉ hoá từng bit, làm đơn giản phần mềm xuất nhập từng bit. Có 128 bit được địa chỉ hoá đa dụng ở các byte 20H đến 2FH. Các địa chỉ này được truy xuất như các byte hoặc như các bit phụ thuộc vào lệnh được dùng. Ví dụ, để lập bit 67H, ta dùng lệnh sau: Chú ý rằng “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “địa chỉ byte 2CH”. Lệnh trên sẽ không tác động đến các bit khác ở địa chỉ này. Ở các vi xử lý công việc tương tự sẽ phải thi hành như sau: MOV A, 2CH ; đọc cả byte ORL A, #10000000B ; set MSB MOV 2CH,A ; ghi lại cả byte SETB 67H 1 Các tập thanh ghi (register banks): 32 byte thấp của bộ nhớ nội là dành cho các tập thanh ghi. Tập lệnh của 8051 cho phép truy cập 8 thanh ghi (R0 đến R7), và theo mặc định (sau khi reset hệ thống) các thanh ghi này ở các địa chỉ 00H–07H. Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05H của RAM vào thanh ghi tích lũy: MOV A, R5 Đây là lệnh 1 byte dùng định vị địa chỉ trực tiếp thanh ghi. Tất nhiên, công việc trên cũng̣ có thể thực hiện bằng lệnh 2 byte dùng định vị địa chỉ trực tiếp nằm trong byte thứ hai: MOV A, 05H Các lệnh dùng các định vị trực tiếp thanh ghi (R0 đến R7) sẽ ngắn hơn và nhanh hơn các lệnh tương ứng nhưng dùng định vị địa chỉ trực tiếp. Các dữ liệu được sử dụng thường xuyên trong chương trình, nên dùng một trong các thanh ghi này. 1 General Purpose RAM 7F 7E 7D 7C 7B 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B 6A 69 68 67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58 57 56 55 54 53 52 51 50 4F 4E 4D 6C 4B 4A 49 48 47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 68 37 36 35 34 33 36 2 31 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00 Bank 3 Bank 2 Bank 1 Bank 0 (default) 87 86 85 84 83 82 81 80 Not bit addressable Not bit addressable Not bit addressable Not bit addressable 8F 8E 8D 8C 8B 8A 89 88 Not bit addressable Not bit addressable Not bit addressable Not bit addressable Not bit addressable 97 96 95 94 93 92 91 90 Not bit addressable A7 A6 A5 A4 A3 A2 A1 A0 B7 B6 B5 B4 B3 B2 B1 B0 9F 9E 9D 9C 9B 9A 99 98 A7 A6 A5 A4 A3 A2 A1 A0 AF AE ADAC ABAA A9 A8 BC BB BA B9 B8 D7 D6 D5 D4 D3 D2 - D0 E7 E6 E5 E4 E3 E2 E1 E0 F7 F6 F5 F4 F3 F2 F1 F0 P0 SP DPL DPH PCON TCON TMOD TL0 TL1 TH0 TH1 P1 SCON SBUF P2 IE P3 IP PSW Acc B Hình 8.3: Vùng nhớ RAM trong chip của 8051 00 07 08 0F 10 17 18 1F 20 2F 30 7F FF F0 E0 D0 B8 B0 A8 A0 99 98 90 8D 87 88 89 8A 8B 8C 80 81 82 83 Tập thanh ghi có thể chuyển đổi, bằng cách thay đổi các bit chọn tập thanh ghi trong từ trạng thái (PSW). Giả sử rằng tập thanh ghi thứ 3 được chọn, thì lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H: MOV R0, A Ý tưởng dùng “các tập thanh ghi” cho phép “chuyển hướng” chương trình nhanh và hiệu quả, từng phần của chương trình sẽ có một bộ thanh ghi riêng không phụ thuộc vào các phần khác. • Các thanh ghi chức năng đặc biệt: Các thanh ghi nội của trong hầu hết các vi xử lý được truy xuất ngầm định trong tập lệnh. Ví dụ lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1. Tác động này được ngầm định trong mã lệnh. Các thanh ghi trong 8051 là một phần của RAM nội. Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị truy cập trực tiếp, nên chúng không được đặt trong RAM nội). Đây là lý do giải thích tại sao 8051 có nhiều thanh ghi. Cũng như R0 đến R7, 21 thanh ghi chức năng đặc biệt (SFR: Special Function Register) của 8051 nằm trong RAM nội từ địa chỉ 80H đến FFH. Chú ý rằng hầu hết 128 địa chỉ từ 80H đến FFH không được đặt tên. Chỉ có 21 địa chỉ SFR là được định nghĩa. Ngoài thanh ghi tích lũy (A) có thể được truy xuất ngầm bằng định vị ngầm định, đa số các SFR được truy xuất bằng định vị địa chỉ trực tiếp. Một số SFR có thể được địa chỉ hoá theo bit hoặc theo byte. Người lập trình phải chú ý khi truy xuất theo bit và theo byte. Ví dụ lệnh: SETB 0E0H Sẽ lập bit 0 trong thanh ghi tích lũy, các bit khác không đổi. Có thể thấy rằng E0H đồng thời là địa chỉ byte của thanh ghi tích lũy, và là địa chỉ bit của bit có trọng số nhỏ nhất trong thanh ghi tích lũy. Nhưng vì lệnh SETB chỉ tác động trên bit, nên địa chỉ bit sẽ tác động trong lệnh. Từ trạng thái chương trình (PSW: Program Status Word): nằm ở địa chỉ D0H chứa các bit trạng thái như trong bảng sau: BIT Tên Địa chỉ Chức năng PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 CY AC F0 RS1 RS0 OV - P D7 D6 D5 D4 D3 D2 D1 D0 Cờ nhớ. Cờ nhớ phụ. Cờ Zero. Chọn tập thanh ghi. Chọn tập thanh ghi. Cờ tràn. Dự phòng. Cờ chẵn lẻ. * Cờ nhớ (CY): Thông thường được dùng cho các lệnh số học: nó sẽ được lập nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn bởi phép trừ. Ví dụ, nếu thanh ghi tích lũy chứa FFH thì lệnh: 1 ADD A, #1 sẽ trả về thanh ghi tích lũy kết quả 00H và lập cờ nhớ trong PSW. Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh xử lý bit. Ví dụ, lệnh sau sẽ AND bit 25H với cờ nhớ và đặt kết quả nằm trong cờ nhớ: ANL C, 25H * Cờ nhớ phụ: Khi cộng các số BCD, cờ nhớ phụ (AC) được lập nếu kết quả của 4 bit thấp trong khoảng 0AH đến 0FH. Nếu các giá trị được cộng là số BCD, thì sau lệnh cộng cần hiệu chỉnh thập phân bằng lệnh DAA, để các kết quả lớn hơn 9 trở về tầm từ 0 ÷ 9. * Cờ Zero (F0): là1 bit cờ được sử dụng trong nhiều chức năng, nó được lập bằng 1 khi kết quả các phép tính bằng 0. * Các bit chọn tập thanh ghi (RS0 và RS1): xác định tập thanh ghi được tích cực. Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu cần. Ví dụ, ba lệnh sau cho phép truy cập tập thanh ghi thứ 3, và di chuyển nội dung của thanh ghi R7 (địa chỉ byte 1FH) đến thanh ghi tích lũy: SETB RS1 SETB RS0 MOV A, R7 Khi chương trình được hợp dịch, các địa chỉ bit đúng được thay thế cho các ký hiệu “RS1” và “RS0”. Tức là, lệnh SETB RS1 hoàn toàn giống như lệnh SETB 0D4H. * Cờ tràn (OV): được lập sau một lệnh cộng hoặc trừ nếu xảy ra tràn số học. Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit này để xác định dải kết quả thích hợp. Khi cộng các số không dấu thì không cần xét tới OV. Các kết quả lớn hơn +127 hoặc nhỏ hơn -128 sẽ lập OV. Ví dụ, phép cộng sau bị tràn và bit OV được lập: 0FH + 7FH = 8EH tức là 15 +127 = 142. Kết quả là một số có dấu 8EH được xem như -116, không phải là kết quả đúng (142), vì vậy bit OV được lập, khi kiểm tra cờ OV chúng ta có thể hiệu chỉnh lại kết quả cho thích hợp. Thanh ghi B: nằm ở địa chỉ F0H được dùng cùng với thanh ghi tích lũy A trong các lệnh nhân và chia. Lệnh MUL AB, sẽ nhân các giá trị không dấu 8 bit trong A và B, rồi trả về kết quả 16 bit trong A (byte thấp) và B (byte cao). Lệnh DIV AB sẽ chia A cho B, rồi trả về kết quả nguyên trong A và phần dư trong B. Thanh ghi B cũng có thể được xem như một thanh ghi đa dụng. Nó được địa chỉ hoá theo bit (F0H đến F7H). Con trỏ ngăn xếp (SP): là một thanh ghi 8 bit có địa chỉ 81H. Nó chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh của ngăn xếp. Các lệnh trên ngăn xếp bao gồm: cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp. Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP, và lệnh lấy dữ liệu ra khỏi ngăn xếp sẽ giảm SP. Ngăn xếp của 8051 được giữ trong RAM nội, và được giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp. Chúng là128 byte đầu của 8051. Lệnh sau sẽ khởi động lại SP để đỉnh ngăn xếp bắt đầu tại 60H: MOV SP, #5FH Sau lệnh trên ngăn xếp của 8051 bị giới hạn trong 32 byte, vì địa chỉ cao nhất của RAM trên chip là 7FH. Giá trị 5FH được dùng vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu đầu tiên. 1 [...]... bit Vi dụ nếu một động cơ được nối qua một cuộn dây có transistor lái đến bit 7 của Cổng 1, nó có thể được bật và tắt bằng một lệnh: SETB P1.7 ; bật motor CLR P1.7 ; tắt motor Dấu chấm trong lệnh để xác định một bit trong cổng Trình hợp dịch sẽ thực hiện vi ̣c chuyển đổi ra địa chỉ tương ứng của bit đó, vi dụ hai lệnh sau thực hiện cùng một công vi ̣c:... khi reset TRx được đặt lên 1 bằng phần mềm để cho các timer chạy Vi TRx ở trong thanh ghi TCON có địa chỉ theo bit, nên vi ̣c cho chạy và dừng timer có thể thực hiện dễ dàng trong chương trình Vi dụ, cho timer 0 chạy bằng lệnh: SETB TR0 Và dừng bằng lệnh: CLR TR0 Trình hợp dịch sẽ thực hiện vi ̣c chuyển đổi ký hiệu cần thiết từ “TR0” sang địa chỉ bit tương... tràn của Timer 1 ÷ 32 Vi dụ, muốn làm vi ̣c với tốc độ baud là 1200 baud, thì tốc độ tràn của Timer 1 phải là: 1200 × 32 = 38.4 KHz Nếu dùng thạch anh 12 MHz, Timer 1 được cấp xung nhịp 1 MHz hay 1000 KHz Vi tốc độ tràn của Timer 1 là 38.4 KHz và timer được cấp xung nhịp 1000 KHz, thì cần tràn sau 1000 ÷ 38.4 = 26.04 xung nhịp (làm tròn là 26) Vi timer đếm lên và... timer thay đổi như trong một bộ đếm nhị phân, nó sử dụng cho vi ̣c đếm số xung nhịp (hoặc các sự kiện) từ thời điểm timer được khởi động Vi dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H 8051 có hai timer 16 bit, mỗi timer có bốn chế độ làm vi ̣c Các timer được sử dụng để: định khoảng thời gian, đếm... RAM ngoài ở địa chỉ 1000H: MOV A, #55H MOV DPTR, #1000H MOVX @DPTR, A Lệnh đầu tiên dùng định vi tức thời để nạp dữ liệu 55H vào thanh ghi A Lệnh thứ hai cũng dùng định vi tức thời, lần này để nạp dữ liệu 16 bit (1000H) vào con trỏ dữ liệu Lệnh thứ ba dùng định vi gián tiếp để di chuyển dữ liệu trong A (55H) đến RAM ngoài có địa chỉ chứa trong DPTR... SETB 8CH Một cách khác để điều khiển các timer là dùng bit GATE trong TMOD và ngõ vào bên ngoài INTx Đặt GATE = 1 cho phép timer sẽ được điều khiển bằng INTx Vi ̣c này hữu dụng cho vi ̣c đo độ rộng xung Vi dụ để đo mức cao của xung ngõ vào INT0: Khởi động Timer 0 ở chế độ 2 (chế độ timer 16 bit), với TL0/TH0 = 0000H, GATE = 1 và TR0 = 1 Khi INT0 ở mức cao, timer... thanh ghi timer được đọc và cập nhật …, theo yêu cầu của các ứng dụng TMOD là thanh ghi đầu tiên được khởi động, vi nó đặt chế độ hoạt động cho timer Vi dụ các lệnh sau khởi động Timer 1 ở chế độ 1 có xung nhịp cung cấp từ bộ dao động nội cho vi ̣c định khoảng thời gian: MOV TMOD, #00010000B Lệnh trên đặt M1 = 0 và M0 = 1 cho chế độ 1, C/T = 0 và GATE = 0... ngoài, thì cần phải giải mã địa chỉ Mạch giải mã cũng tương tự như các hệ vi xử lý khác Vi dụ trên hình 1 8.8 mô tả một hệ thống với nhiều bộ nhớ EPROM 2764 (8 KB) cho chương trình, và nhiều bộ nhớ RAM 6264 (8KB) cho dữ liệu Bộ nhớ ngoài sử dụng chung cho chương trình và dữ liệu: Vi bộ nhớ chương trình là ROM, nên nảy sinh một vấn đề bất tiện khi phát... vi ̣c một cách đồng thời Dĩ nhiên CPU mỗi lần không thể thực thi nhiều hơn một lệnh Nhưng nó có thể tạm ngưng vi ̣c thực hiện một chương trình này, để thực hiện chương trình khác, rồi quay về chương trình thứ nhất Vi ̣c phục vụ ngắt giống như vi ̣c gọi một chương trình con, CPU chuyển qua thực hiện chương trình con, sau đó quay trở lại chương trình chính... phần mềm Thông thường sẽ có một lệnh rẽ nhánh thích hợp tuỳ theo nguồn ngắt Vi các vector ngắt ở phần đầu của bộ nhớ chương trình, nên lệnh đầu tiên của chương trình chính thường là lệnh nhảy qua vùng nhớ này, vi dụ như LJMP 0030H • Thiết kế chương trình dùng các ngắt Các vi dụ về timer và cổng nối tiếp trong các phần trước không sử dụng các ngắt, . VI ĐIỀU KHIỂN (MICROCONTROLLER). 1 VI ĐIỀU KHIỂN (MICROCONTROLLER). 1. CẤU TRÚC CỦA BỘ VI ĐIỀU KHIỂN. 1.1 Giới thiệu về các bộ vi điều. hiện vi ̣c chuyển đổi ra địa chỉ tương ứng của bit đó, vi dụ hai lệnh sau thực hiện cùng một công vi ̣c: CLR P1.7 CLR 97H Xét một vi dụ

Ngày đăng: 22/12/2013, 15:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan