Bài giảng Vi xử lý (Phần 1)

pdf 99 trang phuongnguyen 4200
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý (Phần 1)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_vi_xu_ly_phan_1.pdf

Nội dung text: Bài giảng Vi xử lý (Phần 1)

  1. Trường Đại học Cơng nghiệp Tp. Hồ Chí Minh Khoa Cơng nghệ Điện tử Bộ mơn Điện tử Cơng nghiệp Bài giảng Vi xử lý Lưu hành nội bộ
  2. 2 Mục lục Chương 1: Giới thiệu chung về hệ vi xử lí. Giới thiệu chung về vi điều khiển PIC Chương 2: Giới thiệu phần cứng của PIC 16F84 và PIC 16F877A Chương 3: Tập lệnh của PIC 16F877A Chương 4: Vào ra. Hoạt động của bộ định thời . Lập trình vi điều khiển PIC 16F84 và PIC 16F877A. Chương 5: Truyền thơng nối tiếp USART Chương 6: Ngắt Chương 7: Bộ chuyển đổi tương tự sang số (ADC). Chương 8: Bộ nhớ dữ liệu EEPROM, PWM, SPI/I2C. Chương 9: Thiết kế hệ vi xử lí và hệ phát triển vi điều khiển.
  3. 3 Bài giảng số 1: Giới thiệu chung về hệ vi xử lí . Giới thiệu chung về vi điều khiển PIC ( Số tiết: 5) I. Ổn định lớp: . II. Kiểm tra bài cũ: III. Tên bài giảng: Giới thiệu chung về hệ vi xử lí. Giới thiệu chung về vi điều khiển PIC III.1. Mục tiêu: -Giới thiệu hệ đếm. Lịch sử phát triển của các bộ vi xử lí. Cấu trúc và chức năng hoạt động của hệ vi xử lí. Chức năng và các thành phần bên trong của hệ vi xử lí. Giới thiệu vi điều khiển. Các họ vi xử lí thong dụng. -Giới thiệu vi điều khiển PIC: bộ nhớ chương trình, xung đồng hồ vi điều khiển, hệ thống vi điều khiển. Đặc tính của vi điều khiển. Các loại vi điều khiển. Sử dụng vi điều khiển: phần cứng vi điều khiển và lập trình vi điều khiển. III.2. Đồ dung và phương tiện dạy học: -Phấn trắng, khăn, bảng, bút long, micro cĩ dây(hay khơng dây), máy tính, và đèn chiếu (hay máy chiếu). III.3. Giáo trình và tài liệu tham khảo: Giáo trình Vi xử lí của trường Đại học cơng nghiệp Tp. HCM. D.W. Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006. Trương Trác, Chip đơn 16C84 và ứng dụng của chúng. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003. Tài liệu về vi điều khiển PIC của bọ mơn Điện tử cơng nghiệp. Website: Myke Predko, Programming and customizing the PIC microcontroller, 3rd edition, Tab Electronics, McGrawHill, 2008(Ebook). Douglass V.Hall, Microprocessors and interfacing: Programming and Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992. III.4.Nội dung bài giảng: Nội dung chi tiết : xem bài giảng chi tiết. Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh viên. Chương 1: Giới thiệu chung về hệ vi xử lí. Giới thiệu chung về vi điều khiển PIC. 1.1. Hệ nhị phân, hệ thập phân và hệ thập lục phân. Hệ nhị phân dung cơ số 2, dung hai số 0 và 1 để biểu diễn. Thí dụ: 01001010=0x27+1x26+0x25+0x24+1x23+0x22+1x21+0x20=64+8+2=74 Hệ thập phân, cơ số là 10 dùng các số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 để biểu diễn. Thí dụ: 125=1x102+2x101+5x100=100+20+5. Hệ thập lục phân, cơ số là 16 dùng các số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Thí dụ: 32H=3x161+2x160=48+2=50.
  4. 4 Bảng chuyển đổi giữa số nhị phân, thập phân và thập lục phân: Hệ nhị phân (8 chữ số) Hệ thập phân (3 chữ số) Hệ thập lục phân (2 chữ số) 00000000 000 00h 00000001 001 01h 00000010 002 02h 00000011 003 03h 00000100 004 04h 00000101 005 05h 00000110 006 06h 00000111 007 07h 00001000 008 08h 00001001 009 09h 00001010 010 0Ah 00001011 011 0Bh 00001100 012 0Ch 00001101 013 0Dh 00001110 014 0Eh 00001111 015 0Fh 1.2. Lịch sử phát triển của kỹ thuật vi xử lí. 1.2.1.Họ vi mạch số và công nghệ : IC dựa theo số transistor hoặc các cổng thường được chia làm : -SSI : tích hợp cỡ nhỏ -MSI: tích hợp cỡ trung bình -LSI: tích hợp cỡ lớn -VLSI: tích hợp cỡ rất lớn -ULSI: tích hợp cỡ cực lớn Ví dụ : MSI như counter, multiplexer, LSI như các vi xử lý 8 bit : 8085, Z80 VLSI như các vi xử lý 16 bit , 32 bit: 80386 Giới thiệu công nghệ sản xuất chip : Về công nghệ có các công nghệ chế tạo vi mạch sau : MOS : - NMOS ⇒ HMOS - PMOS - CMOS⇒ HCMOS Với H : high-performance TTL, IIL (integrated injection logic) thuộc Bipolar Trong đó công nghệ MOS thường được ưa chuộng do tích hợp được nhiều, tiết kiệm năng lượng
  5. 5 1.2.2. TỪ MÁY TÍNH LỚN ĐẾN MÁY VI TÍNH: a.Máy tính lớn : Là loại máy tính được thiết kế để giải các bài toán lớn với tốc độ rất nhanh -Nó làm việc với số liệu có độ dài từ 64 bit hoặc hơn và được trang bị bộ nhớ rất lớn, vì vậy kích thước lớn. -Chúng thường được dùng để điều khiển các hệ thống thiết bị dùng trong quân sự hoặc các hệ thống máy móc của chương trình nghiên cứu vũ trụ, để xử lý thông tin trong ngành ngân hàng, vv Ví dụ : IBM 4381, Honeywell DSP8 Loại mạnh nhất trong các máy tính lớn gọi là siêu máy tính (supercomputer). Ví dụ : Y-MP/832 của Gray. b.Máy tính con : Là dạng thu nhỏ về kích thước cũng như tính năng của máy tính lớn. - Làm việc với dữ liệu có độ dài dữ liệu 32 bit với tốc độ chậm hơn và bộ nhớ hạn chế - Máy tính con thường dùng cho các tính toán khoa học kỹ thuật, gia công dữ liệu qui mô nhỏ hay để điều khiển quá trình công nghệ. Ví dụ : Vax 6360 của DEC, MV/8000II của Data general c.Máy vi tính : Máy vi tính là máy thông dụng hiện nay. Một máy vi tính có thể là 1 bộ vi điều khiển (micro controller) hoặc là một vỏ vi mạch (one-chip microcomputer). Ví dụ : vi điều khiển 68HC11 của Motorola, MCS-8051 -Có khả năng làm việc với độ dài dữ liệu là 4, 8, 16, 32, 64 bit -CPU của máy đều được chế tạo bằng công nghệ mạch vi điện tử với mức độ tổ hợp lớn VLSI. -Trên thị trường hiện nay có các họ vi xử lý nổi bật như : Intel dùng vi xử lý 80x86 : 8086 (16 bit) 8088( 8bit) 80286 (16bit) 80386(32 bit) 80486(32 bit) 80586(32 bit) Motorola dùng vi xử lý 680x0 Zilog : Z80 (8bit), Z8000 (16 bit) 1.2.3. Lịch sử phát triển của các bộ vi xử lý : a.Thế hệ 1 : (1971-1973) -Vi xử lý Intel 4004 (4 bit) dùng trong máy tính xách tay. Sau đó xuất hiện 4040 (4 bit) Ỉ 8008 (8bit) Đặc điểm : -Độ dài từ thường là 4 bit. -Công nghệ chế tạo PMOS với đặc điểm mật độ phần tử nhỏ, tốc độ thấp, giá rẻ và chỉ có khả năng đưa ra dòng tải nhỏ. -Tốc độ thực hiện lệnh là 10-60 micro-sec/lệnh với tần số đồng hồ (xung clock)fclk= 0,1-0,8 Mhz -Tập lệnh đơn giản và phải cần 1 số mạch phụ trợ để tạo nên 1 hệ vi xử lý hoàn chỉnh b.Thế hệ 2 : (1974-1977) Z80 của hãng Zilog (8 bit)
  6. 6 6800 của hãng Motorola (8bit) 6502 của hãng Mos technology (8bit) 8080 và 8085 của hãng Intel -Công nghệ chế tạo là NMOS (mật độ tích hợp lớn hoặc CMOS (tiết kiệm điện năng tiêu thụ) -Tần số xung clock từ 1-5 Mhz và tốc độ thực hiện lệnh là tứ 1-8 microsec/lệnh c.Thế hệ 3 : (1978-1982) Vi xử lý Intel 8086, 8088, 80186, 80286, (16 bit), MP 68000/68010 của Motorola (16 bit) Đây là bộ vi xử lý dùng trong máy tính IBM PC, PC/XT, PC/AT và các máy Macintosh của hãng Apple. -Tần số xung clock từ 5-10 Mhz, tốc độ thực hiện lệnh là 0,1-1 microsec/lệnh -Công nghệ chế tạo là HMOS d.Thế hệ 4 : (1983-?) -Các bộ vi xử lý đại diện trong thế hệ này là các vi xử ký 32 bit của Intel 80386, 80486, và 32 bit Pentium 80586, MP 32 bit 68020/68030/68040.68060 của Motorola. Đăc điểm : -Bus địa chỉ đều là 32 bit (phân biệt 4GB bộ nhớ) và có khả năng làm việc bộ nhớ ảo -Aùp dụng cơ chế xử lý xen kẻ liên tục dòng mã lệnh (pipe line), bộ nhớ cache(bộ nhớ ẩn), bộ nhớ ảo. Các bộ vi xử lý này đều có bộ quản lý bộ nhớ (MMU) và cả bộ đồng xử lý toán học. Bên cạnh các bộ vi xử lý được dùng để xây dựng máy tính với tập lệnh đầu đủ (CISC-complete instruction set computer), người ta còn chế tạo ra các bộ vi xử lý cải tiến dùng cho máy tính với tập lệnh rút gọn (RISC- reduced instruction set computer). Xem bảng : các bộ vi xử lý 16/32 bit của Intel, Motorola. e. Máy tính dùng bộ vi xử lý Pentium II, PIII, PIV: -Độ dài dữ liệu 32-64 bit - Tốc độ 1.8 Ghz-4.0 Ghz Các bộ vi xử lý 16 bit của Intel Các bộ vi xử lý 32 bit của Intel Các bộ vi xử lý 16/32 bit của Motorola Từ thập niên 1990 trở lại đây 1990 Microsoft WIndows 3.0 ra đời Motorola 68040 được triển khai. 1991 Apple và IBM hợp tác để khảo sát RISC 1992 Microsoft WIndows 3.1 đã trở thành chuẩn cho các PC. 1993 Intel Pentium (80586) ra đời, công nghệ MMX được cung cấp sau. 1995 Microsoft Indows 95 1995 Intel Pentium pro (P6) 1997 Intel Pentium II 1998 Intel Pentium II Xeon 1999 Intel Pentium III 2001Intel Pentium IV
  7. 7 1.3. Cấu trúc và hoạt động của hệ vi xử lí. 1.3.1. Sơ đồ khối SƠ ĐỒ KHỐI MỘT HỆ VI XỬ LÝ CƠ BẢN Address bus Data bus T Thiếtbị vào CPU Bộ nhớ Vào ra I/O Thiết bị ra Control bus Hình 1.1 :Sơ đồ khối của hệ vi xử lý 1.3.2. Nguyên lý hoạt động: -CPU (central processing unit) đơn vị xử lý trung tâm. MP (mocroprocessor) : Đây là bộ não của máy tính, điều khiển toàn bộ hoạt động của hệ. MP sẽ lấy lệnh, phân tích và thi hành lệnh. -Bộ nhớ : (memory) là nơi lưu trữ dữ liệu và chương trình cần cho quá trình thực hiện lệnh. Bộ nhớ trong : rom, ram. Bộ nhớ ngoài : băng từ, đĩa từ -Vào ra (input/output) : là mạch giao tiếp giữa CPU với thiết bị vào (bàn phím, chuột), thiết bị ra(màn hình, máy in) -Ba bộ phận này được liên lạc với nhau thông qua bus hệ thống (system bus). Bus hệ thống gồm có : +Bus địa chỉ : (address bus) cho phép xác định địa chỉ của ô nhớ hoặc ngoại vi cần truy xuất (đọc /ghi). Bus địa chỉ có thể là 16, 20, 24 bit +Bus dữ liệu (data bus) : cho phép trao đổi thông tin giữa Cpu và bộ nhớ hay ngoại vi. Bus dữ liệu có thể là 8, 16, 32 bit +Bus điều khiển (control bus) :là các đường tín hiệu do CPU đưa ra để điều khiển bộ nhớ hay ngoại vi hoặc là tín hiệu đưa vào CPU. Ví dụ : RD (read-đọc ), WR (write-ghi) , INTR (interrupt-ngắt) Bus địa chỉ chỉ có 1 chiều từ CPU đưa ra, bus dữ liệu có tính chất 2 chiều (vào/ra), bus điều khiển chỉ có 1 chiều vào, 1 chiều ra. 1.4. Chức năng của các thành phần trong hệ vi xử lí. 1.4.1. Bộ xử lí CPU. 1.4.1.1.Nhiệm vụ của CPU : -Điều hành hoạt động của hệ thống theo ý định của người sử dụng. –Thi hành chương trình theo vòng kín gọi là chu kì lấy lệnh.
  8. 8 Thi hành Lấy lệnh lệnh Chu kỳ lệnh Hình 1.2: Nhiệm vụ của CPU 1.4.1.2.Cấu trúc CPU : Các thành phần chính của CPU gồm có : . Các thành phần lưu trữ: các thanh ghi, các cờ. . Các thành phần thực thi (xử lý) : ALU thực hiện các tính toán số học , logic, dịch/xoay (các) bit. .Các thành phần chuyển [tín hiệu]: bus . Các thành phần điều khiển : Đơn vị điều khiển. CPU IR PC Bộ điều khiển CU Đơn vị số học logic ALU Các thanh ghi Hình 1.3 Cấu trúc bên trong của CPU CPU (central processing unit) : đơn vị xử lý trung tâm ALU (arithmetic logic unit) : đơn vị số học logic Register : thanh ghi CU : control unit, đơn vị điều khiển +ALU : thực hiện các phép tính số học và logic bao gồm +, -, *, /, tăng , giảm, and, or, not, xor, dịch , quay, vv ALU có hai ngõ vào và 1 ngõ ra. Hai ngõ vào lấy dữ liệu từ bus nội cần thiết để thực hiện phép toán và 1 ngõ ra trả kết quả thực hiện phép toán về bus nội. Để tránh dữ liệu chồng nhau ở bus nội, ờ hai ngõ vào của ALU có hai thanh ghi tạm, có chức năng cài dữ liệu trước khi ALU thực hiện phép toán.
  9. 9 IN 1 IN 2 ALU OUT Hình 1.4 : ALU +Thanh ghi : là các ô nhớ có tên tốc độ rất cao nằm bên trong CPU. Số thanh ghi bên trong CPU là rất ít. Một số thanh ghi đã được định sẵn chức năng, một số thanh ghi khác là thanh ghi đa dụng. -Thanh ghi PC -Thanh ghi tích lũy A -Thanh ghi cờ F -Thanh ghi lệnh IR -Thanh ghi địa chỉ bộ nhớ MAR -Thanh ghi đa dụng -Thanh ghi con trỏ stack SP +Bộ điều khiển : - Điều khiển sự hoạt động của các khối khác trong CPU đồng bộ với nhau. - Xuất các tín hiệu điều khiển đọc ghi bộ nhớ và bên ngoài theo 1 trình tự nhất định để đảm bảo cho việc đọc ghi bộ nhớ được thực hiện đúng 1.4.1.3. Thực hiện lệnh : a.Lấy lệnh từ bộ nhớ vào thanh ghi lệnh IR (instruction register) b.Thay đổi thanh ghi PC (program counter: bộ đếm chương trình) để chuyển đến lệnh kế tiếp (thanh ghi PC luôn giữ địa chỉ của lệnh kế tiếp) c.Xác định kiểu lệnh vừa lấy ra d.Xác định kiểu dữ liệu mà lệnh yêu cầu và xác định vị trí dữ liệu trong bộ nhớ. e.Nếu lệnh cần dữ liệu trong bộ nhớ, nạp nó vào thanh ghi của CPU f.Thực hiện lệnh g.Lưu kết quả ở nơi thích hợp h.Trở về bước 1 để thực hiện lệnh kế 1.4.1.4.Dạng lệnh : Các vùng trong lệnh : -Vùng mã lệnh : cho biết tác vụ nào sẽ được thực hiện. - Vùng địa chỉ : chỉ địa chỉ bộ nhớ hoặc thanh ghi của CPU - Vùng cách định địa chỉ : chỉ cách xác định toán hạng hoặc địa chỉ thật. 1.4.1.5. Các cách định địa chỉ : -Cách định địa chỉ hiểu ngầm. - Cách định địa chỉ tức thời.
  10. 10 - Cách định địa chỉ thanh ghi. - Cách định địa chỉ gián tiếp qua thanh ghi. - Cách định địa chỉ trực tiếp. - Cách định địa chỉ gián tiếp. - Cách định địa chỉ tương đối. 1.4.2. Bộ nhớ Địa chỉ 0 3A ô nhớ 1 0F 2 5 n-1 Hình 1.5: Bộ nhớ a.Bit : 0/1 biểu diễn hai trạng thái , là đơn vị cơ bản của bộ nhớ. b.Định vị bộ nhớ : (memory addressing) Bộ nhớ sẻ được đánh số bắt đầu từ 0 cho tới n-1, với n là số ô nhớ trong bộ nhớ. Tất cả các ô nhớ đều có số lượng bit như nhau, nếu 1 ô nhớ có k bit thì nó có thể có từ 1Ỉ 2k tổ hợp bit khác nhau Ví dụ : với bộ nhớ 96 bit ta có 3 kiểu tổ chức bộ nhớ như sau : 12x8 bit, 8x12 bit, 6x16 bit Thường 1 ô nhớ có 8 bit=1byte. Nếu bộ nhớ có m đường địa chỉ thì sẽ có 2m byte (ô nhớ) Ví dụ : bộ nhớ có 10 bit địa chỉ Ỉ dung lượng bộ nhớ là 210 byte=1KB bộ nhớ có 11 bit địa chỉ Ỉ dung lượng bộ nhớ là 211 byte=2KB bộ nhớ có 12 bit địa chỉ Ỉ dung lượng bộ nhớ là 212 byte=4KB Ví dụ : EPROM 2716 2732 2764 2KB 4KB 8KB SRAM 6116 6264 2KB 8KB c. Bộ nhớ chính : ROM (read only memory): bộ nhớ chỉ đọc RAM(random access memory) : bộ nhớ đọc ghi được Bộ nhớ ngoài : băng từ, đĩa từ (đĩa mềm, đĩa cứng) *Chức năng bộ nhớ : -Có nhiệm vụ lưu trữ thông tin gồm có : +Chương trình :- khởi động -giao tiếp cơ bản BIOS -hệ điều hành (hệ thống)
  11. 11 -ứng dụng +Đệm dữ liệu : dùng để chứa dữ liệu vào và lấy dữ liệu ra *ROM : -Chứa dữ liệu lúc chế tạo -Chứa dữ liệu chết : -các chương trình khởi động -thông số hệ thống -giao tiếp bios *Ram : thông tin trong Ram có thể thay đổi được -Đọc thì thông tin cũ vẫn còn -Ghi thì thông tin mới sẽ đè lên -Khi mất điện thì sẽ mất thông tin *ROM gồm có các loại như sau : -EPROM : (erasable programmable ROM) : rom lập trình và xóa được . Lập trình bằng cách đưa xung điện áp cao vào chân Vpp, xóa bằng tia cực tím -PROM (programmable ROM) rom lập trình được -EEPROM (electrical erasableprogrammable rom) rom lập trình và xóa bằng điện. Ví dụ : eeprom 2832 -MROM (maskable ROM)rom mặt nạ *RAM có các loại sau : SRAM (static ram ) ram tĩnh DRAM (dynamic ram ) ram động 1.4.3. Các thiết bị ngoại vi. 1.4.3.1 Phân loại ngoại vi : Các thiết bị I/O có tên gọi khác nhau là các thiết bị ngoại vi (peripheral devices). Bảng sau cho thấy một số thiết bị ngoại vi tiêu biểu theo nhóm nhập (I) và xuất (O). -Thiết bị lưu trữ ngoài: đĩa từ (FDD, HDD), USB, CD-ROM, DVD. -Thiết bị giao tiếp với cong người: Màn hình, máy in. -Thiết bị điều khiển: cảm biến và truyền động. 1.4.3.2 Giao tiếp I/O: Ví dụ : giao tiếp I/O lập trình được 8255, 8250 CPU I/O Thiết bị ngoại vi Vào Ra Cổng (port) + Bàn phím +Màn hình + Chuột + Máy in Hình 1.6 Ví dụ : cổng máy in (LPT1) có địa chỉ 378h
  12. 12 Cổng COM1(RS232) có địa chỉ 3F8h - Thiết bị ngoại vi gồm có : màn hình, bàn phím, chuột, máy in, máy quét, máy vẽ, CD Rom,vv - Mỗi thiết bị ngoại vi có 1 IO riêng nằm trong phần xuất nhập IO - Mỗi IO có địa chỉ cổng riêng - IO không phải là chỗ chứa dữ liệu, mà chỉ là cổng để dữ liệu qua lại - Xuất nhập tùy theo thiết bị ngoại vi 1.4.4. Hệ thống bus. Bus Các hệ thống con của MCU và CPU liên lạc với nhau thông qua “bus” (tuyến), bus là tập hợp các đường tín hiệu mà qua đó có thể truyền đi thông tin về địa chỉ, dữ liệu và điều khiển. Thông thường bus có độ rộng là 8 hay 16 bit( hoặc lớn hơn nữa tuỳ theo CPU hoặc thiết bị I/O). Hệ thống bus gồm bus địa chỉ, bus dữ liệu và bus điều khiển. Cài đặt bus chung : -Bus dồn kênh - Các bộ đệm bus 3 trạng thái - Chu kì đọc bus. - Chu kì ghi bus 1.5. Các họ vi xử lí thong dụng: Intel 80x86. Motorola 680x0. MCS-51. 68HC11, 68HC12. Zilog Z80. Microchip PIC 16F84, PIC 16F877A. 1.6. Vi điều khiển. 1.6.1. Các giới hạn của vi xử lý -Cần bộ nhớ ngoài để thực thi chương trình. -Không thể giao tiếp trực tiếp với các thiết bị I/O. 1.6.2.Vi xử lý và vi điều khiển: So sánh vi xử lý (MPU) và vi điều khiển (MCU) MPU: -Được thiết kế để thực hiện chức năng CPU trong hệ máy vi tính. - Tập lệnh được sắp xếp để cho phép mã và một lượng lớn dữ liệu được chuyển đi giữa vi xử lý với bộ nhớ và thanh ghi ngoài. - Các tác vụ tác động với nhóm bít không nhỏ hơn 4 bit. MCU : -Được thiết kế để làm việc với mạch ngoài tối thiểu. -Tập lệnh đơn giản (khoảng 255 lệnh). -Các tác vụ có thể tác động lên từng bít. MCU là máy tính với tất cả trong một chip :
  13. 13 MCU = CPU + Bộ nhớ + Giao tiếp I/O Sơ đồ khối của một MCU Microcontroller Memory Register I/O port ALU Timing Interrupt Counter & chip control Hình 1.7 : Sơ đồ khối một MCU So với MPU thì MCU có thêm một số mạch làm cho MCU hoạt động như một thiết bị duy nhất. MCU làm việc với các dữ liệu được đưa vào qua các cổng nhập nối tiếp hoặc song song được điều khiển bởi phần mềm được cất trong bộ nhớ chương trình. Các MCU tiêu biểu : . 8051 (intel và các hãng khác) : là MCU thế hệ thứ hai của Intel. . 68HC11 (Motorola và Toshiba) : có kiến trúc bộ nhớ chung trong đó các lệnh , dữ liệu , I/O và các mạch định thì tất cả chia xẻ cùng vùng nhớ. .PIC (Microchip) : Họ MCU RISC đầu tiên ( 35 lệnh).
  14. 14 1.7.Giới thiệu chung về vi điều khiển PIC. 1.7.1. Mục đích của sách Mục đích của sách là dạy bạn làm sao để xây dựng mạch điều khiển sử dụng thiết bị như là nút nhấn, bàn phím, cảm biến, led đơn, loa, led 7 đoạn, Điều này được thực hiện bằng các thí dụ. Chương trình được viết bằng hợp ngữ. Chúng ta cần mạch nạp (loại JDM qua cổng COM, hay loại qua cổng USB) để viết các lệnh vào chip. Phần mềm biên dịch MPASM hay MPLAB chuyển văn bản mã nguồn thành mã máy. 1.7.2. Bộ nhớ chương trình Bên trong vi điều khiển chương trình mà chúng ta viết được lưu trong vùng nhớ EPROM (Electrically Programmable Read Only Memory), bộ nhớ này khơng bay hơi và cĩ nhớ khi nguồn bị tắt. Các lệnh mà chúng ta lập trình vào vi điều khiển làm việc bằng các di chuyển và vận hành dữ liệu trong ơ nhớ được biết như là ơ nhớ (file) và thanh ghi (register). Bộ nhớ này gọi RAM (Random Access Memory). Thí dụ trong điều khiển nhiệt độ phịng, chúng ta đo nhiệt độ phịng bằng cách bằng vi điều khiển thơng qua thanh ghi điều khiển tương tự sang số (ADCON0). Sự đo lường thì được so sánh với dữ liệu của chúng ta lưu trong một ơ nhớ người dùng (user file). Thanh ghi trạng thái sẽ chỉ báo nếu nhiệt độ là lớn hơn hay nhỏ hơn giá trị yêu cầu và thanh ghi cổng (port) sẽ bật/tắt lị nhiệt tương ứng. Bản đồ bộ nhớ của 16F877A được cho ở chuơng sau. Vi điều khiển PIC là 8 bit, nghĩa là ơ nhớ người dung và thanh ghi là 8 bit nhị phân như hình 2.1. Bit 7 6 5 4 3 2 1 bit 0 1 0 1 1 0 0 1 0 Hình 1.7.1: Dạng thanh ghi và ơ nhớ người dung. Trong đĩ LSB là bit cĩ trọng số thấp nhất (bit 0), MSB là bit cĩ trọng số cao nhất (bit 7). 1.7.3. Xung đồng hồ vi điều khiển Để chạy từng bước qua các lệnh, vi điều khiển cần xung clock để đồng bộ việc di chuyển dữ liệu vịng quanh mạch điện tử. Điều này được cung cấp bởi hai tụ điện và thạch anh hay bởi mạch dao động bên trong. Trong 16F84 cĩ 4 lựa chọn dao động: . Mạch RC dao động mà cung cấp giải pháp giá thành thấp. . Dao động LP, nghĩa là thạch anh 32 KHz, mà tối thiểu hĩa tiêu thụ năng lượng. . XT: cho cấu hình thạch anh chuẩn. . HS là tùy chọn dao động tốc độ cao. Các tần số thạch anh thơng dụng là: 32 Khz, 1 Mhz, 4 Mhz, 10 Mhz và 20 Mhz. PIC 16F877A cịn cĩ them 4 lựa chọn sau (tổng cộng là 8): . EXTRC: điện trở/tụ điện ngồi. . EXTRC điện trở tụ điện ngồi với CLKOUT. . INTRC điện trở/tụ điện 4 Mhz nội. . INTRC điện trở tụ điện nội 4 Mhz với CLKOUT. 1.7.4. Hệ thống vi điều khiển
  15. 15 Sơ đồ khối hệ thống vi điều khiển được cho ở hình 1.7.2. Ngõ Điều Ngõ vào khiển ra Hình 1.7.2: Hệ vi điều khiển cơ bản. . Thành phần ngõ vào gồm cĩ thiết bị số như là cơng tắc, nút nhấn, bàn phím, và cảm biến như là điện trở phụ thuộc ánh sang, thermixtor, cảm biến gas, cảm biến áp suất, . Đơn vị điều khiển hiển nhiên là vi điều khiển, vi điều khiển sẽ giám sát ngõ vào và như là kết quả chương trình sẽ bật (turn on) ngõ ra hay tắt (turn off) ngõ ra. Vi điều khiển lưu chương trình trong bộ nhớ và thực thi lệnh dưới sự điều khiển của mạch đồng hồ (clock). . Thiết bị ngõ ra được làm từ led đơn, loa, động cơ, hiển thị số, led 7 đoạn, lị nhiệt, quạt, Chọn lựa hiển nhiên nhiều nhất cho vi điều khiển là cĩ bao nhiêu ngõ vào số, ngõ vào analog, và ngõ ra mà hệ thống yêu cầu. Điều này chỉ ra số chân tối thiểu vào ra (I/O) mà vi điều khiển phải cĩ. Nếu ngõ vào analog được sử dụng thì vi điều khiển phải cĩ bộ chuyển đổi tương tự -số (A/D). Xem xét kế tiếp là kích cỡ bộ nhớ chương trình là gì. Điều này khơng là vấn đề lớn khi bắt đầu . Các chương trình trong sách phù hợp khơng gian bộ nhớ chương trình 1 KByte (16f84) tới 8 KByte (16f877a). Tần số xung clock xác định tốc độ tại đĩ lệnh được thực thi. Điều này là quan trọng nếu bất kì tính tốn dài là được xem xét. Tần số xung clock càng cao thì vi điều khiển hồn thành hiệm vụ càng nhanh và chuyển sang nhiệm vụ khác. Một xem xét nữa là số ngắt và số mạch timer (định thì) được yêu cầu, bộ nhớ dữ liệu EEPROM yêu cầu là bao nhiêu. Các hoạt động phức tạp hơn sẽ được xem xét sau. Trong sách này, chương trình yêu cầu ngõ vào analog được hiện thực trên PIC 16F84 hay PIC16F 877A. 1.7.5. Các loại vi điều khiển Danh sách các loại vi điều khiển PIC thì được phát triển hang ngày. Chúng bao gồm các thiết bị cho tất cả các ứng dụng. Thí dụ: 18F8722 cĩ 64K bộ nhớ EPROM, 3938 byte RAM (ơ nhớ người dung), 1024 byte EEPROM, 16 kênh A/D 10 bit, điện áp tham chiếu, 72 ngõ vào và ra (I/O), 3 timer 16 bit và 2 timer 8 bit. Về cơ bản cĩ 2 loại vi điều khiển: thiết bị Flash và thiết bị lập trình một lần (one time programmable devices -OTP). Thiết bị Flash cĩ thể lập trình lại trong mạch nạp trong khi đĩ thiết bị lập trình một lần khơng thể lập trình lại. Tất cả thiết bị OTP tuy nhiên cĩ sự phân loại đĩng khung (windowed) mà cho phép chúng bị xĩa dưới ánh sang tia cực tím trong khoảng 15 phút để mà chúng cĩ thể lập trình lại. Thiết bị OTP dung cấu hình dao động RC, LP, XT hay HS. Trong sách này chúng ta dung thiết bị Flash là PIC 16F84 hay PIC 16F877A. 1.7.6. Đặc tính của vi điều khiển Bạn chỉ ra một thiết bị với mã nhận dạng sản phẩm: . Số sản phẩm. . Nếu nĩ là loại đĩng khung, OTP hay thiết bị Flash. Loại đĩng khung được chỉ ra bởi JW. Thiết bị OTP được chỉ ra bởi tần số dao động và thiết bị Flash được chỉ ra bởi chữ F như là 16F84.
  16. 16 . Tần số dao động, thường là 04 cho các thiết bị làm việc lên tới 4 Mhz, 10 cho thiết bị làm việc lên tới 10 Mhz, hay 20 cho thiết bị lên tới 20 Mhz. Thiết bị 20 Mhz thì đắt tiền hơn thiết bị 4Mhz. . Tầm nhiệt độ, cho ứng dụng tổng quát 0 oCỈ70 oC là được chỉ ra. Hệ thống nhận dạng sản phẩm cho vi điều khiển PIC được minh họa ở hình 1.7.3. Part No. –XX X /XX Đĩng gĩi L= PLCC P=PDIP (đĩng gĩi Plastic chuẩn) So=SOIC small outline IC PQ=MQFP JW=Windowed device (CERDIP) Tầm nhiệt độ - =0oCỈ 70 oC I = -40 oCỈ+85 oC E = -40 oCỈ+125 oC Phạm vi tần số: 04= 4Mhz 10 = 10 Mhz 20 = 20 Mhz Thiết bị, thí dụ 16C711 Hình 1.7.3. Hệ thống nhận dạng sản phẩm. 1.7.7. Sử dụng vi điều khiển Để sử dụng vi điều khiển trong mạch, cĩ hai lĩnh vực về cơ bản chúng ta cần hiểu 1. Cách kết nối vi điều khiển với phần cứng. 2. Cách viết chương trình và nạp mã vào vi điều khiển 1.7.1. Phần cứng vi điều khiển: Phần cứng mà vi điều khiển cần để hoạt động thì được minh họa ở hình 1.7.4. Thạch anh và tụ điện được nối với chân 15 và 16 của 16F84 để tạo ra xung clock mà được yêu cầu để vi điều khiển đi qua chương trình và cung cấp xung định thì.
  17. 17 16F84 +5V 14 V+ 68 pF 4 16 MCLR 32 Khz 68pF 15 0V 5 Hình 1.7.4: Mạch vi điều khiển +5V C3 0.1 uF U1 C1 16 V+ OSC2/CLKOUT 17 Y1 RA0 18 68 pF RA1 1 32 Khz RA2 2 4 RA3 3 15 MCLR RA4/TOCKI OSC1/CLKIN 6 C2 RB0/INT 7 RB1 8 RB2 9 RB3 10 68 pF GND RB4 11 RB5 12 RB6 13 RB7 PIC16F84 Mạch vi điều khiển PIC 16F84
  18. 18 Mạch vi điều khiển PIC 16F877A Nguồn cung cấp cho vi điều khiển: Nguồn cung cấp cho vi điều khiển trong khoảng từ 2v tới 6v. Điều này cĩ thể được cung cấp dễ dàng từ chân 6v như hình 1.7.5. V+ + - 16F84 0v Hình 1.7.5: Nguồn cung cấp cho vi điều khiển. Diode trong mạch tạo ra áp 0,7v trên nĩ nên làm giảm điện áp cung cấp cịn 5,3v. Nĩ cung cấp bảo vệ cho vi điều khiển nếu nguồn được nối sai tình cờ. Trong trường hợp này diode sẽ phân cực ngược và khơng cĩ dịng chảy qua. 7805, mạch ổn áp:
  19. 19 Kết nối nguồn cung cấp thong dụng nhất cho vi điều khiển là dung IC ổn áp 7805 cĩ 3 chân. Kết nối được minh họa ở hình 1.7.6. 7805 +5V Vin Vout 0v Hình 1.7.6: Mạch ổn áp 7805 Điện áp vào Vin cho 7805 là từ 7v đến 30v. Cơng suất tiêu tán trong 7805: Sự cẩn trọng phải được xem xét khi sử dụng điện áp Vin cao đưa vào 7805. Thí dụ nếu Vin=24v, ngõ ra 7805 là +5v, thế thì 7805 cĩ 24v-5v=19v rơi trên nĩ. Nếu nĩ cung cấp dịng 0,5A cho mạch thì cơng suất tiêu tán (volt x ampe) là: 19v x 0,5A=9,5 watt. Bộ ổn áp sẽ rất nĩng. Do đĩ ta phải cĩ miếng tản nhiệt (bằng nhơm). Kết nối nút nhấn với vi điều khiển: Cách thong dụng nhất về một nút nhấn tới vi điều khiển là thong qua điện trở kéo lên tới +5V như minh họa ở hình 1.7.7. +5V Vi điều khiển 0v Hình 1.7.7: Kết nối nút nhấn với vi điều khiển. Khi nút nhấn là hở, logic 1 được nối với vi điều khiển. Khi nhấn nút, logic 0 được nối với vi điều khiển. Một số vi điều khiển như là 16F84, 16F818, và 16F877a cĩ điện trở kéo lên bên trong nối với một số chân I/O. Port B trong thiết bị trên. Hình 1.7.8 minh họa nút nhấn được nối dung kéo lên bên trong. Vi điều khiển 0V Hình 1.7.8: Kết nối nút nhấn sử dụng điện trở kéo lên bên trong. Kết nối ngõ ra với vi điều khiển:
  20. 20 Vi điều khiển cĩ khả năng cung cấp xấp xỉ 20-25 mA tới chân ngõ ra. Như vậy tải như là led đơn, hay rờle nhỏ cĩ thể được lái trực tiếp. Tải lớn hơn yêu cầu giao tiếp thong qua transistor đối với dc, hay triac đối với ac. Thiết bị cách ly quang (opto-coupled device) là giao tiếp cách li giữa vi điều khiển và tải. Kết nối led đơn với vi điều khiển được minh họa ở hình 1.7.9. Vi điều khiển 680 Ohm 0V Hình 1.7.9: Kết nối 1 led với vi điều khiển. Logic 1: led sang Logic 0: led tắt. 470 Ohmx4 16F877a RB0 RB1 RB2 RB3 0V Hình 1.7.10: Kết nối 4 led với PIC 16F877A 1.7.2.Lập trình vi điều khiển: Để vi điều khiển thực hiện một số hành động điều khiển, bạn cần giao tiếp (truyền thong) với nĩ và yêu cầu vi điều khiển những lệnh phải làm gì. Khi giao tiếp với người khác, chúng ta dung ngơn ngữ nĩi, khi giao tiếp với vi điều khiển chúng ta sử dụng ngơn ngữ lập trình (hợp ngữ). Hợp ngữ cho PIC sử dụng 35 lệnh trong tập lệnh. Thêm vài lệnh được dung trong vi điều khiển lớn. Để giao tiếp với vi điều khiển chúng ta cần biết 35 lệnh này là gì và cách sử dụng chúng. Khơng phải tất cả 35 lệnh được dung trong sách này. Thực tế bạn cĩ thể viết chương trình cĩ ý nghĩa chỉ dung 5 hay 6 lệnh. IV. Tổng kết bài: -Tĩm tắt các ý chính trong bài. -Chuẩn bị bài mới. V. Câu hỏi và bài tập về nhà: Chương 1: Giới thiệu chung về hệ vi xử lí. Giới thiệu chung về PIC. 1.Các hệ đếm dung trong máy tính. Mã BCD là gì? Mã ASCII là gì? 2.So sánh máy vi tính với các thế hệ máy trước đây.
  21. 21 3. Trình bày lịch sử phát triển của các bộ vi xử lí. 4. Trình bày cấu trúc và hoạt động của một hệ vi xử lí. 5. Trình bày cấu trúc và hoạt động của một CPU 8 bit. 6. Bộ nhớ là gì? Phân biệt ROM và RAM. Phân biệt MROM, PROM, EPROM, EEPROM. Phân biêt RAM tĩnh và RAM động. 7. Thiết bị ngoại vi gồm những gì? 8. Giải thích các từ SSI, MSI, LSI và VLSI. 9. Trình bày sơ đồ khối một MCU (vi điều khiển). So sánh MCU và CPU (vi xử lí). 10. Kể tên các họ vi xử lí thong dụng. 11. Trình bày hệ thống vi điều khiển . 12. Cách sử dụng vi điều khiển PIC: phần cứng và viết chương trình. 13.Các thiết bị/dụng cụ 3 trạng thái là gì? Và tại sao chúng lại cần thiết trong các hệ thống dung bus? 14.Cần bao nhiêu byte để làm thành 1 word 32 bit? 15. Một chip bộ nhớ cĩ dung lượng 2K (2048 byte). Hỏi số chân địa chỉ của chip nhớ này. 16. Hãy định vị bộ nhớ 96 bit theo 3 cách. 17. Trình bày sơ đồ khối của Z80 CPU. 18. Nêu các phương pháp địa chỉ hĩa của Z80 CPU. 19. Nếu một chip bộ nhớ có kích thước là 1024x 4 bits, ta phải cần bao nhiêu chip như vậy để tạo 2K (2048) byte bộ nhớ ? VI. Rút kinh nghiệm: (về thời gian, nội dung, phương pháp, chuẩn bị) Ngày .tháng năm 2011 Ngày .tháng năm 2011 Bộ mơn Giảng viên soạn
  22. 22 Bài giảng số 2: : Phần cứng vi điều khiển PIC 16F84 và PIC 16F877A( Số tiết: 5) I.Ổn định lớp: . II.Kiểm tra bài cũ: III.Tên bài giảng: : Phần cứng vi điều khiển PIC 16F84 và PIC 16F877A III.1. Mục tiêu: - Vi điều khiển 16F84. - Vi điều khiển 16F877A : sơ đồ khối PIC 16F877A, bộ nhớ chương trình, bộ đếm chương trình (PC) và ngăn xếp (stack), bản đồ bộ nhớ dữ liệu, các thanh ghi chức năng đặc biệt (SFR),và thanh ghi trạng thái. III.2. Đồ dung và phương tiện dạy học: -Phấn trắng, khăn, bảng, bút long, micro cĩ dây(hay khơng dây), máy tính, và đèn chiếu (hay máy chiếu). III.3. Giáo trình và tài liệu tham khảo: Giáo trình Vi xử lí của trường Đại học cơng nghiệp Tp. HCM. D.W. Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006. Trương Trác, Chip đơn 16C84 và ứng dụng của chúng. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003. Tài liệu về vi điều khiển PIC của bọ mơn Điện tử cơng nghiệp. Website: Myke Predko, Programming and customizing the PIC microcontroller, 3rd edition, Tab Electronics, McGrawHill, 2008(Ebook). Douglass V.Hall, Microprocessors and interfacing: Programming and Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992. III.4.Nội dung bài giảng: Nội dung chi tiết : xem bài giảng chi tiết. Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh viên. Chương 2: Phần cứng vi điều khiển PIC 16F84 và PIC 16F877A. 2.1.Vi điều khiển PIC 16F84 PIC 16F84A cĩ các đặc tính: -cĩ 35 lệnh, câu lệnh chỉ cần 1 chu kì máy, câu lệnh nhảy cần 2 chu kì máy. Tần số: tối đa 20 Mhz và chu kì máy là 200 ns. Bộ nhớ chương trình 1k x 14 words, bộ nhớ RAM là 68 byte, bộ nhớ dữ liệu dạng EEPROM là 64 byte. Chiều dài câu lệnh là 1 word 14 bit (1 từ =14 bit). Xử lí dữ liệu dạng 8 bit (1 byte). Cĩ 15 thanh ghi chuyên dụng SFR đặt trong bộ nhớ RAM. -dùng ngăn xếp để cất giữ địa chỉ lệnh, ngăn xếp sâu đến 8 lớp. -cĩ thể truy cập bộ nhớ dung địa chỉ trực tiếp, gián tiếp và tương đối. -Cĩ 4 dạng ngắt. -13 chân xuất nhập dữ liệu (PORT A 5 chân, PORT B 8 chân). -Một đồng hồ timer 0, dung hanh đếm 8 bit nên đếm được tối đa 256 nhịp.
  23. 23 Sơ dồ chân: Hình 2.1 U3 16 OSC2/CLKOUT 17 RA0 18 RA1 1 RA2 2 4 RA3 3 15 MCLR RA4/TOCKI OSC1/CLKIN 6 RB0/INT 7 RB1 8 RB2 9 RB3 10 RB4 11 RB5 12 RB6 13 RB7 PIC16F84 Hình 2.1: Sơ đồ chân của PIC 16F84 Ý nghĩa các chân: - OSC1/CLKIN: là chân ngõ vào của mạch dao động thạch anh dung để định tần số xung nhịp và chân này cũng là ngõ vào của xung nhịp (clock input). . OSC2/CLKOUT: là chân ngõ ra của mạch dao động thạch anh và là ngõ ra của xung nhịp (clock output), ở đây tín hiệu xung nhịp đã được khuếch đại. . /MCLR: (Master clear) là chân reset. Tác dụng của lệnh reset là trả chương trình về địa chỉ đầu 0000h, và xác lập lại trạng thái cho các thanh ghi đặc dụng. Lệnh cĩ tác dụng ở mức thấp. . RA0, RA1, RA2: là các chân xuất nhập của port A. . RA4/T0CKI: là chân đa nhiệm , vừa làm chân xuất nhập của portA và lại là chân lấy xung cho thanh đếm của đồng hồ timer 0 (Timer 0 clock input). Chân này cĩ cực Drain của Fet để hở. . RB0/INT: là chân đa nhiệm, vừa làm chân xuất nhập dữ liệu của portB và là chân phát động theo ngắt ngồi. Các chân của portB cĩ thể được lập trình để cĩ trở kháng lớn dung để làm ngõ vào, dung nhập trạng thái ngồi PIC. . RB1, RB2, RB3: là các chân xuất nhập dữ liệu của portB. .RB4, RB5, RB6 và RB7: là các chân xuất nhập của port B và sẽ phát động ngắt khi sự thay đổi trạng thái trên các chân này. . RB6 là 1 chân xuất nhập dữ liệu của portB và cĩ tính phát động ngắt theo sự thay đổi trạng thái trên chân này. Nĩ cịn cĩ thể lập trình để dung chân này phát xung nhịp (serial clock) dung cho truyền bit dạng nối tiếp. . RB7 là 1 chân xuất nhập dữ liệu của portB và phát động ngắt theo sự thay đổi trạng thái trẹn chân này. Nĩ cịn cĩ thể lập trình để dung chân này trao đổi dữ liệu (serial data) dùng cho truyền bit dạng nối tiếp. . Vss là chân nối mass (GND, 0V). . VDD là chân nối với VCC (PIC cĩ thể dung VCC từ 2v đến 5,5v). Sơ đồ khối bên trong của PIC 16F84A
  24. 24 Hình 2.2: Cấu trúc bên trong của PIC 16F84A. 2.2. Vi điều khiển PIC 16F877A: 2.2.1. Sơ đồ khối PIC 16F877A và sơ đồ các chân và ý nghĩa Giới thiệu PIC 16F877A: PIC là viết tắt của “Programmable Intelligent Computer”, cĩ thể dịch là máy tính thong minh lập trình được, là một sản phẩm do hang General Instruments đặt cho dịng sản phẩm đầu tiên của họ là PIC 1650. PIC là một họ vi điều khiển RISC được sản xuất bởi cơng ty Microchip Technology. Dịng PIC đầu tiên là PIC 1650 được phát triển bởi MicroElectronics Division thuộc General Instruments. Lúc này PIC 1650 được dung để giao tiếp với các thiết bị ngoại vi cho máy chủ CP 1600. Hiện nay PIC phát triển mạnh, cĩ rất nhiều loại PIC ra đời. PIC 12 (độ dài mã lệnh 12 bit) như là dịng PIC 12Cxxx (thí dụ : PIC 12F50x, PIC 12F675), PIC 5x ( 16F54), PIC 14 như dịng PIC 16Fxxx (16F84, 16F818, 16F877A, 16F872), PIC 16 như dịng PIC 18Fxxx (PIC 18F4520, 18F2550). PIC 16F877A là vi điều khiển PIC thơng dụng, loại trung (mid- range) cĩ đặc điểm: -Đây là vi điều khiển thuộc họ PIC 16Fxxx với tập lệnh gồm 35 lệnh cĩ độ dài 14 bit. Mỗi lệnh đều được thực thi trong một chu kì xung clock. Tốc độ hoạt động tối đa cho phép là 20 Mhz với một chu kì lệnh 20 ms. Bộ nhớ chương trình Flash là 8k x 14 words, bộ nhớ dữ liệu (RAM) là 368x8 byte, và bộ nhớ EEPROM với dung lượng 256 x 8 byte. Số port I/O là 5 với 33 chân I/O. Các đặc tính ngọai vi bao gồm các khối chức năng sau: -Timer 0: bộ đếm 8 bit bộ đếm với hệ số tỉ lệ trước. -Timer 1: bộ đếm 16 bit, bộ đếm với hệ số tỉ lệ trước. Cĩ thể được tăng đếm thơng qua xung clock/ xung clock thạch anh ngồi ở chế độ phương thức cất giữ sleep.
  25. 25 -Timer 2: bộ đếm 8 bit với thanh ghi chu kì 8 bit, bộ đếm 8 bit của hệ số tỉ lệ trước, hệ số tỉ lệ sau. -Cĩ hai bộ bắt giữ/so sánh/điều rộng xung. -Các cổng giao tiếp nối tiếp đồng bộ (SSP) với SPI phương thức chủ và I2C (chủ/tớ). -Bộ truyền nhận nối tiếp đồng bộ , khơng đồng bộ (UASRT/SCL) cĩ khả năng phát hiện 9 bit địa chỉ. -Cổng phụ song song với 8 bit mở rộng, với các chân điều khiển RD, WR, CS. Các đặc tính analog: -Bộ chuyển đổi tương tự-số 10 bit trên chip với 8 kênh vào. -Hai bộ so sánh, Bên cạnh đĩ là một vài đặc tính của vi điều khiển như : -Bộ nhớ Flash với khả năng ghi xĩa được 100000 lần. -Bộ nhớ dữ liệu EEPROM với khả năng ghi xĩa được 1000000 lần. -Dữ liệu bộ nhớ EEPROM cĩ thể lưu trữ được 40 năm. -Khả năng tự nạp chương trình với sự điều khiển của phần mềm. -Nạp được chương trình ngay trên mạch điện ISP (in circuit programming) thong qua 2 chân. -Bộ đếm xung thời gian (WDT-Watch dog timer) với dao động RC bên trong. -Cĩ mã chương trình bảo vệ (chức năng bảo mật mã chương trình). -Cĩ thể hoạt động hiều dạng dao động khác nhau. Chế độ sleep (phương thức cất giữ) tiết kiệm năng lượng. -Cơng nghệ CMOS Flash/ eeprom với nguồn mức thấp, tốc độ cao. -Dãi điện thế hoạt động rộng : 2VỈ 5,5 V. -Cơng suất tiêu thụ thấp: <0,6 mA với 5V, 4Mhz. 20 μA với nguồn 3V, 32 Khz. <1 μA với nguồn dự phịng. -Khả năng ngắt: lên tới 14 nguồn ngắt trong và ngắt ngồi. -Ngăn xếp được chia làm 8 mức. -Truy cập bộ nhớ bằng địa chỉ trực tiếp hay gián tiếp. -Nguồn khởi động lại (POR-Power on reset). Sơ đồ khối vi điều khiển PIC 16F877A được minh họa ở hình 2.3.
  26. 26 Hình 2.3: Cấu trúc bên trong của PIC 16F877A.
  27. 27 Sơ đồ chân PIC 16F877A : ở hình 2.4. Hình 2.4: Sơ đồ chân PIC 16F877A Ý nghĩa các chân: . OSC1/CLKI: chân ngõa vào mạch dao động, chân 13. . OSC2/CLKO: chân ngõ ra của mạch dao động, chân 14. . /MCLR/Vpp: chân số 1, chân reset, tích cực mức thấp và cịn là xung lập trình cho ROM. . RA0, RA1, RA2, RA3, RA4, RA5: chân 2-7, là các chân xuất nhập của PORTA. . RE0, RE1, RE2: chân 8-10, là các chân xuất nhập của PORTE. . Chân 2-7, 8-10 cịn là ngõ vào analog AN0, AN1, AN2, AN3, AN4, AN5, AN6, AN7. .RA4/T0CKI: vừa là chân xuất nhập dữ liệu của port A, vừa là chân lấy xung cho thanh đếm của timer 0 (timer 0 clock input). . RE0/RD: cịn là xung cho phép đọc bộ nhớ (read), tích cực logic 0. . RE1/WR: cịn là xung cho phép ghi bộ nhớ (write), tích cực logic 0. . RE2/CS: cịn là xung chọn chip (chip select) , tích cực logic 0. . RC0, RC1, RC2, RC3: chân 15-18, RC4, RC5, RC6, RC7:chân 23-26: là các chân xuất nhập của port C. . RC0/T1OSO/T1KCI: cịn là chân lấy xung cho thanh đếm của timer 1, và là chân T1OSO. . RC1/T1OSI: cịn là chân T1OSI. . RC2/CCP1, RC1/T1OSI/CCP2: cịn là chân bắt (capture), so sánh (compare) và điều rộng xung (PWM). Mođun giao tiếp với timer 1 và timer 2.
  28. 28 Tín hiệu bắt: nhân khoảng thời gian của sự kiện bên ngồi sử dụng một chân ngõ vào, dung với timer 1. Tín hiệu so sánh: thay đổi một chân ngõ ra hay tạo ra một ngắt khi lượng thời gian cụ thể trơi qua , dung với timer 1. Tín hiệu điều rộng xung: tạo ra ngõ ra song vuơng, chu kì bổn phận xác lập và cĩ thể cấu hình lại tại một tần số xác định, dung với timer 2. Ton Toff T , PWM = on T T . RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7: chân 33-40 là các chân xuất nhập của PORTB. . RB0/INT: cịn là chân phát động theo ngắt ngồi. . RC6/TX/CK: nĩ cĩ thể được lập trình để dung chân này phát xung nhịp (serial clock) dung cho truyền bit dạng nối tiếp. Đây cịn là chân phát TX (transmit data). Hai chân này dung cho thu phát bất đồng bộ và đồng bộ (USART) ,cĩ thể định địa chỉ. . RC7/RX/DT: nĩ cĩ thể được lập trình để dung chân này trao đổi dữ liệu (serial data). Đây cịn là chân thu dữ liệu (receive data). . RA3/AN3/Vref+, RA2/AN2/Vref-/Cref: là các chân điện áp tham chiếu cho bộ chuyển đổi tương tự-số (ADC) 10 bit. . RC3/SCK/SCL: chân 18, cịn là xung clock nối tiếp (Serial clock-SCK) cho SPI, và là chân clock nối tiếp cho I2C. RC4/SDI/SDA: chân 23, cịn là chân dữ liệu nối tiếp (serial data). RC5/SDO: chân 24, cịn là chân xuất dữ liệu nối tiếp (serial data out). Mơđun nối tiếp đồng bộ chủ (Master synchronous serial port-MSSP) cĩ thể hoạt động ở hai chế độ: -SPI (serial peripheral interface): giao tiếp ngoại vi nối tiếp. SPI dùng 3 chân SDO, SDI, SCK. -I2C: (inter-integrated circuit): mạch tích hợp lien kết, dung 2 chân : SCL, SDA, cĩ thể ở chế độ chủ hồn tồn (full master mode) hay chế độ tớ (slave mode) (với gọi địa chỉ tổng quát). .RD0, RD1, RD2, RD3: chân 19-22, RD4, RD5, RD6, RD7: chân 27-30: là các chân xuất nhập của PORT D. . VDD: chân 11, 32: là nguồn dương Vcc từ 2V đến 6V (5,5 V). . VSS: chân 12, 31, là chân đất (mass, GND, 0V). 2.2.2. Bộ nhớ chương trình: . Từ 8K cực đại -(8k x 14 bit/word)/1 byte= 14 Kbyte bộ nhớ. . Vectơ reset ở 0000h -Bộ đếm chương trình PC sẽ đến địa chỉ này khi reset. . Vectơ ngắt ở 0004h. -Bộ đếm chương trình PC sẽ đến địa chỉ này dựa trên bất kì ngắt nào.
  29. 29 Status register Program counter Pages of proram memory Bank of data memory Mux ADC ALU Timer 0 14 bit USART working register Instruction register MSSP peripherals Hình 2.5: Sơ đồ khối Mid-range PIC ( PIC 16F877A). Reset vect ơ 0000h Interrupt vect ơ 0004h 0005h Page 0 07FFh Page 1 0800h 0FFFh Page 2 1000h 17FFh Page 3 1800h 1FFFh Hình 2.6: Bộ nhớ chương trình. 2.2.3. Bộ đếm chương trình và ngăn xếp:
  30. 30 . độ rộng 13 bit PC: - byte thấp nằm ở thanh ghi PCL Ỉ ALU result (8 bit) hay Opcode (11 bit). PCL là thanh ghi cĩ thể đọc hay ghi được. -PCHỈ bit trang . cập nhật từ PCLATH . chỉ ra trong bộ nhớ chương trình. Bit cao PC là khơng đọc được , nhưng cĩ thể ghi gián tiếp thong qua thanh ghi PCLATH. . 8 level deep stack ( stack 8 mức) Ngăn xếp là một vùng nhớ lien tục cĩ tính chất vào sau ra trước (last in first out-LIFO). Con trỏ ngăn xếp sẽ giữ địa chỉ ở đỉnh ngăn xếp. -lưu trữ nội dung PC . lệnh push (cất nội dung vào đỉnh ngăn xếp) call/interrupt . lệnh pop(lấy nội dung ở đỉnh ngăn xếp ra ) return/retfie/retlw PCLATH PCH PCL PC Call, return, Retfie, retlw Stack level 1 Stack level 8 Program memory Hình 2.7 2.2.4. Bản đồ bộ nhớ dữ liệu:
  31. 31 Thanh ghi 000h SFR 080h SFR 100h SFR 180h chức năng đặc biệt 10Fh 18Fh (SFR) 01Fh 09Fh 110h 190h 020h 0A0h 128 byte Thanh ghi Thanh Thanh Thanh đa năng ghi đa ghi đa ghi đa năng năng năng 0EFh 16Fh 1EFh 70h-7Fh 70h-7Fh 70h-7Fh truy xu ất truy xuất truy xuất 07Fh 0FFh 17Fh 1FFh Bank 0 Bank 1 Bank 2 Bank 3 Hình 2.8 2.2.5. Các thanh ghi chức năng đặc biệt: . Khái niệm ơ nhớ thanh ghi (register file ). -T ất c ả b ộ nh ớ d ữ li ệu l à ph ần c ủa file thanh ghi, v ì v ậy b ất k ì ơ nh ớ trong b ộ nh ớ d ữ li ệu c ĩ th ể ho ạt đ ộng tr ực ti ếp. -T ất c ả ngo ại vi đ ư ợc ánh x ạ v ào b ộ nh ớ d ữ li ệu nh ư l à chu ỗi c ác thanh ghi. -T ập l ệnh tr ực giao: t ất c ả c ác l ệnh c ĩ th ể ho ạt đ ộng tr ên b ất k ì v ị tr í b ộ nh ớ d ữ li ệu. -Khu ơn d ạng l ệnh t ừ d ài cho ph ép file thanh ghi c ĩ th ể đ ịnh đ ịa ch ỉ tr ực ti ếp. . Được truy xuất như bất kì thanh ghi khác. . Một số thanh ghi mang qua tất cả các bank (ví dụ PCLATH, INTCON, ). Thanh ghi PORTB Thanh ghi PORTC Thanh ghi PORTD Thanh ghi PORTE Thanh ghi PORTA Thanh ghi TRISA Thanh ghi TRISB Thanh ghi TRISC Thanh ghi TRISD Thanh ghi TRISE Thanh ghi PCLATH Thanh ghi INTCON Thanh ghi PIR1 Thanh ghi PIR2 Thanh ghi PIE1 Thanh ghi PIE2
  32. 32 PORTA 05h TRISA 85h PORTB 06h TRISB 86h PORTC 07h TRISC 87h PORTD 08h TRISD 88h PORTE 09h TRISE 89h PCLATH 0Ah PCLATH 8Ah INTCON 0Bh INTCON 8Bh PIR1 0Ch PIE1 8Ch PIR2 0Dh PIE2 8Dh Bank 0 Bank 1 Hình 2.9 2.2.6. Thanh ghi trạng thái : STATUS register Bit 7 6 5 4 3 2 1 Bit 0 IRP RP1 RP0 /T0 /PD Z DC C Hình 2.10: Thanh ghi STATUS Thanh ghi trạng thái dung để phản ánh hoạt động của ALU trong CPU (như phép tốn cĩ nhớ, tràn, zero ) thong qua các bit cờ (flags bit) .Thanh ghi trạng thái cứa: -trạng thái số học của ALU (cĩ nhớ, tràn, zero ). -trạng thái reset. -bit chọn bank cho bộ nhớ dữ liệu. .Bit 6 và 5, RP1 và RP0 là bit chọn bank tới địa chỉ bank 0,1,2, và 3 để chọn thanh ghi khác và ơ nhớ người dung . RP1 RP0 Chọn 0 0 Bank 0 0 1 Bank 1 1 0 Bank 2 1 1 Bank 3 .IRP, bit 7: bit chọn bank thanh ghi gián tiếp (dung cho định địa chỉ gián tiếp). 1= bank 2,3 0=bank 0,1
  33. 33 Thanh ghi trạng thái chứa kết quả của phép tốn số học hay logic của chương trình . 8 bit của thanh ghi trạng thái được minh họa ở hình 2.10. . Cờ C (carry flag bit), bit 0: cờ nhớ. Bit này là 1 nếu cĩ nhớ từ lệnh cộng hay trừ (ADDWF, ADDLW, SUBLW, SUBWF). Thí dụ: nếu 1 số 8 bit được cộng với số khác 1 0 1 1 0 0 1 1 + 0 0 1 0 1 0 0 1 1 1 0 1 1 1 0 0 C=0: khơng cĩ nhớ ở cột này. Thí dụ: Cộng hai số 8 bit 1 0 1 1 0 0 1 1 + 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 0 C=1 cĩ nhớ ở cột này ( bit 9 được đưa vào cờ C). Nếu kết quả của phép trừ là +ve hay zero thì cờ nhớ C=1 (bật). Nếu kết quả của phép trừ là là –ve thì cờ nhớ C=0 (xĩa). . Bit 2, cờ Z (zero flag bit): cờ zero. Bit này được bật lên 1 nếu kết quả của phép tốn logic hay số học là 0, nghĩa là đếm xuống về 0. Thí dụ: 0 1 0 0 1 1 0 0 + 1 0 0 0 1 1 0 1 1 1 0 1 1 0 0 1 (khác 0) Cờ Z=0 Thí dụ: 10100001 - 10100001 00000000 (là 0) cờ Z=1 Một sử dụng quan trọng của bit này là kiểm tra nếu một biến trong bộ nhớ là bằng với giá trị cố định, thí dụ là ơ nhớ CARS chứa 150. MOVLW .150; đặt 150 vào thanh ghi làm việc W SUB CARS,W ; trừ W từ CARS, nghĩa là CARS-150 BTFSS STATUS,ZEROBIT; bit zero Z bật lên 1 nếu CARS=150. . Bit 1, cờ DC: bit nhớ/mượn số cho lệnh ADDWF, ADDLW, SUBLW, SUBWF. Đối với mượng, cực tính được giữ. 1= cĩ nhớ từ bit 4 của kết quả. 0=khơng cĩ nhớ từ bit 4 của kết quả. Thí dụ: 28 BCD + 38 BCD tương đương 1 0 0 1 0 1 0 0 0 + 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 cĩ nhớ từ bit 3 sang bit 4 nên cờ DC=1. . Bit 4, /T0: time-out bit
  34. 34 1= sau khi bật điện, lệnh CLRWDT hay SLEEP 0=một WDT time out diễn ra. . Bit 3,/PD: power-down bit 1=sau khi bật điện hay lệnh CLRWDT 0= bằng cách thực thi lệnh SLEEP.
  35. 35 Bản đồ bộ nhớ của 16F84: Địa chỉ Tên ơ nhớ (file name) Tên ơ nhớ (File name) 00 địa chỉ gián tiếp Ind. Add địa chỉ gián tiếp Ind. Add 01 TMR0 OPTION 02 PCL PCL 03 STATUS STATUS 04 FSR FSR 05 PORTA TRISA 06 PORTB TRISB 07 - - 08 EEDATA EECON1 09 EEADR EECON2 0Ah PCLATH PCLATH 0Bh INTCON INTCON 0Ch 68 ơ nhớ người dung (user files) 4Fh Bank 0 Bank 1 Bản đồ bộ nhớ vi điều khiển 16F877A Địa chỉ Tên ơ nhớ bank 0 Tên ơ nhớ bank Tên ơ nhớ bank Tên ơ nhớ bank 1 2 3 00h IND. Add Địa chỉ Ind. Add Ind. Add Ind. Add gián tiếp 01h TMR0 OPTION TMR0 OPTION 02h PCL PCL PCL PCL 03h STATUS STATUS STATUS STATUS 04h FSR FSR FSR FSR 05H PORTA TRISA 06H PORTB TRISB PORTB TRISB 07H PORTC TRISC 08H PORTD TRISD 09H PORTE TRISE 0AH PCLATH PCLATH PCLATH PCLATH 0BH INTCON INTCON INTCON INTCON 0CH PIR1 PIE1 EEDATA EECON1 0DH PIR2 PIE2 EEADR EECON2 0EH TMR1L PCON EEDATH 0FH TMR1H EEDARH 10H T1CON Thanh ghi đa Thanh ghi đa 11H TMR2 SSPCON2 năng 96 byte năng 96 byte 12H T2CON PR2 13H SSPBUF SSPADD 14H SSPCON SSPSTAT 15H CCPR1L 16H CCPR1H 17H CCP1CON 18H RCSTA TXSTA
  36. 36 19H TXREG SPBRG 1AH RCREG 1BH CCPR2L 1CH CCPR2H 1DH CCP2CON 1EH ADRESH ADRESL 1FH ADCON0 ADCON1 Thanh ghi đa Thanh ghi đa năng 96 byte năng 80 byte 6FH 7FH
  37. 37 *Thanh ghi PIE1 (địa cỉ 8CH) Bit 7 6 5 4 3 2 1 0 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE Thanh ghi PIE1 chứa các bit cho phép riêng rẽ cho các ngắt ngoại vi. Bit 7 PSPIE: bit cho phép ngắt đọc /ghi port tớ song song. 1=cho phép ngắt đơc/ghi PSP. 0=cấm ngắt đọc ghi PSP. Chú ý: PSPIE là dành dự trữ trên thiết bị PIC 16F873A/876A; luơn giữ bit này bị xĩa. Bit 6: ADIE: bit cho phép ngắt chuyển đổi A/D. 1=cho phép ngắt chuyển đổi A/D. 0= cấm ngắt chuyển đổi A/D. Bit 5 RCIE: bit cho phép ngắt nhận (thu) USART. 1=cho phép ngắt thu USART. 0=cấm ngắt thu USART. Bit 4: TXIE: bit cho phép ngắt phát USART. 1=cho phép ngắt phát USART. 0=cấm ngắt phát USART. Bit 3 SSPIE: bit cho phép ngắt port nối tiếp đồng bộ. 1=cho phép ngắt SSP. 0=cấm ngắt SSP. Bit 2 CCP1IE: bit cho phép ngắt CCP1. 1=cho phép ngắt CCP1. 0=cấm ngắt CCP1. Bit 1 TMR2IE: bit cho phép ngắt khớp TMR2 tới PR2. 1= cho phép ngắt khớp TMR2 tới PR2. 0=cấm ngắt khớp TMR2 tới PR2. Bit 0 TMR1IE: bit cho phép ngắt tràn (overflow) TMR1. 1=cho phép ngắt tràn TMR1. 0=cấm ngắt tràn TMR1. *Thanh ghi PIR1 (địa chỉ 0CH) Thanh ghi PIR1 chứa các bit cờ riêng rẽ cho các ngắt ngoại vi. Bit 7 6 5 4 3 2 1 0 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF Bit 7 PSPIF: bit cờ ngắt đọc /ghi port tớ song song. 1= một tác vụ đọc hay ghi đã diễn ra (phải được xĩa bằng phần mềm). 0=khơng cĩ đọc hay ghi diễn ra. Chú ý: PSPIF là dành giữ chỗ trên thiết bị PIC 16F873A/876A; luơn giữ bit này bị xĩa. Bit 6 ADIF: bit cờ ngắt chuyển đổi A/D. 1=một chuyển đổi A/D hồn thành.
  38. 38 0=chuyển đổi A/D khơng hồn thành. Bit 5 RCIF: bit cờ ngắt thu USART. 1=bộ đệm nhận USART đầy. 0=bộ đệm nhận USART trống. Bit 4 TXIT: bit cờ ngắt phát USART. 1=bộ đệm phát USART trống. 0= bộ đệm phát USART đầy. Bit 3 SSPIF: bit cờ ngắt port nối tiếp đồng bộ (SSP). 1=điều kiện ngắt SSP đã diễn ra và phải được xĩa bằng phần mềm trước khi trở về từ chương trình phục vụ ngắt (ISR). Điều kiện mà thiết lập bit này(=1) là: .SPI- một sự nhận/phát đã diễn ra. .Tớ I2C -một sự nhận/phát đã diễn ra. .Chủ I2C -Một sự nhận/phát đã diễn ra. -Điều kiện Start khởi động được hồn thành bởi mơđun SSP. -Điều kiện Stop khởi động được hồn thành bởi mơđun SSP. -Điều kiện Restart khởi động được hồn thành bởi nơđun SSP. -Điều kiện chấp nhận khởi động được hồn thành bởi mơđun SSP. -Điều kiện Start diễn ra trong khi mơđun SSP là rãnh rỗi (hệ thống đa(nhiều) chủ). -Điều kiện Stop diễn ra khi mơđun SSP là rãnh rỗi (hệ thống đa chủ). 0=khơng cĩ điều kiện ngắt SSP diễn ra. Bit 2 CCP1IF: bit cờ ngắt CCP1. Chế độ bắt giữ: 1= Bắt giữ thanh ghi TMR1 diễn ra (phải được xĩa bằng phần mềm). 0= khơng diễn ra bắt giữ thanh ghi TMR1. Chế độ so sánh: 1=Một sự khớp so sánh thanh ghi TMR1 diễn ra (phải được xĩa bằng phần mềm). 0=khơng cĩ diễn ra sự khớp so sánh TMR1. Chế độ PWM: Khơng được dung trong chế độ này. Bit 1 TMR2IF: bit cờ ngắt khớp TMR2 tới PR2. 1=khớp TMR2 tới PR2 diễn ra. 0=khơng diễn ra khớp TMR2 tới PR2. Bit 0 TMR1IF: bit cờ ngắt tràn TMR1. 1=thanh ghi TMR1 bị tràn (phải được xĩa bằng phần mềm). 0=Thanh ghi TMR1 khơng cĩ tràn. *Thanh ghi PIE2 (địa chỉ 8DH) Thanh ghi PIE2 chứa các bit cho phép riêng rẽ cho ngắt ngoại vi CCP2, ngắt xung đột bus SSP, ngắt tác vụ ghi EEPROM và ngắt so sánh. Bit 7 6 5 4 3 2 1 0 - CMIE - EEIE BCLIE - - CCP2IE Bit 7 Khơng hiện thực, đọc là ‘0’. Bit 6 CMIE: bit cho phép ngắt bộ so sánh. 1=cho phép ngắt bộ so sánh. 0=cấm ngắt bộ so sánh.
  39. 39 Bit 5 khơng hiện thực, đọc là ‘0’. Bit 4 EEIE: bit cho phép ngắt hoạt động ghi EEPROM. 1=cho phép ngắt ghi EEPROM. 0= cấm ngắt ghi EEPROM. Bit 3 BCLIE: bit cho phép ngắt xung đột bus. 1=cho phép ngắt xung đột bus. 0=cấm ngắt xung đột bus. Bit 2-1 khơng hiện thực, đọc là ‘0’. Bit 0 CCP2IE: bit cho phép ngắt CCP2. 1=cho phép ngắt CCP2. 0=cấm ngắt CCP2. *Thanh ghi PIR2 (địa chỉ 0Dh) Thanh ghi PIR2 chứa các bit cờ cho ngắt CCP2, ngắt xung đột bus SSP, ngắt tác vụ ghi EEPROm và ngắt bộ so sánh. Bit 7 6 5 4 3 2 1 0 - CMIF - EEIF BCLIF - - CCP2IF Bit 7 Khơng hiện thực, đọc là ‘0’. Bit 6 CMIF: bit cờ ngắt bộ so sánh. 1=ngõ vào bộ so sánh đã thay đổi (phải được xĩa bằng phần mềm). 0=ngõ vào bộ so sánh khơng đổi. Bit 5 Khơng hiện thực, đọc là ‘0’. Bit 4 EEIF: bit cờ ngắt tác vụ ghi EEPROM. 1=tác vụ ghi hồn thành (phải được xĩa bằng phần mềm). 0=tác vụ ghi khơng hồn thành. Bit 3 BCLIF: bit cờ ngắt xung đột bus. 1=Một xung đột bus đã diễn ra trong SSP khi cấu hình chế độ chủ I2C. 0=Khơng cĩ xung đột bus diễn ra. Bit 2-1 Khơng hiện thực, đọc là ‘0’. Bit 0 CCP2IF: bit cờ ngắt CCP2. Chế độ bắt giữ: 1=Bắt giữ thanh ghi TMR1 diễn ra (phải được xĩa bằng phần mềm) 0=khơng cĩ diễn ra bắt giữ thanh ghi TMR1. Chế độ So sánh: 1=Một sự khớp so sánh thanh ghi TMR1 diễn ra. 0=khơng cĩ diễn ra khớp so sánh thanh ghi TMR1. Chế độ PWM: Khơng sử dụng . *Thanh ghi PCON: (địa chỉ 8Eh) Thanh ghi PCON chứa các bit cờ cho phép sự khác biệt giữa Reset lúc bật điện và Reset lúc mất ngắt nguồn. Bit 7-2: khơng hiện thực, đọc là ‘0’. Bit 1 POR : bit trạng thái reset lúc bật điện. 1=Khơng cĩ reset lúc bật điện diễn ra.
  40. 40 0=một reset lúc bật điện diễn ra (phải được bật (=1) bằng phần mềm sau khi reset lúc bật điện diễn ra). Bit 0 BOR: bit trạng thái reset lúc mất ngắt nguồn. 1=Khơng cĩ reset Brown-out diễn ra. 0= Một reset brown-out diễn ra (phải được bật bằng phần mềm sua khi reset brown- out diễn ra). IV.Tổng kết bài: -Tĩm tắt các ý chính trong bài. -Chuẩn bị bài mới. V. Câu hỏi và bài tập về nhà: Chương 2: Phần cứng vi điều khiển PIC 16F84 và 16F877A 1.Trình bày cấu trúc và hoạt động của vi điều khiển PIC 16F84. 2. Trình bày cấu trúc và hoạt động của vi điều khiển PIC 16F877A. 3. Trình bày bộ nhớ chương trình. Tổ chức bộ nhớ của PIC 16F877A/16F84 cĩ đặc điểm gì? (lọai Harvard hay Von Neumann). 4. Bộ đếm chương trình PC là gì? 5. Ngăn xếp là gì? Cơng dụng của con trỏ năn xếp. Đặc điểm bộ nhớ ngăn xếp của PIC 16F877A/16F84 (cĩ mấy mức ). 6. Trình bày ý nghĩa các chân ra của PIC 16F84, 16F877A. 7. Kể tên và nêu chức năng của các thanh ghi chức năng đặc biệt (SFR). 8. Thanh ghi STATUS (trạng thái) là gì. Nêu đặc điển các bit của nĩ. 9. Trình bày bản đồ bộ nhớ dữ liệu của PIC 16F877A. 10. Trình bày 6 ứng dụng thực tế của bộ vi xử lí. 11. Cho biết cỡ bộ nhớ gọi địa chỉ được của bộ vi xử lí với 20 đường địa chỉ. 12. Minh họa làm thế nào chuyển nội dung ở địa chỉ 20H vào thanh ghi tích lũy W. 13. Sau đây là một lệnh của PIC 16F877A: MOVWF 06h a)Mã lệnh 14 bit của lệnh này là gì? b)Giải thích mục đích các bit của lệnh này. c)Lệnh này tốn bao nhiêu chu kì máy để thực thi? d)Giả sử PIC 16F877A dùng thạch anh 4 Mhz thì mấy bao lâu để thực thi lệnh này? 14.Bus vi xử lí nào là 2 chiều. 15. Nếu nghi ngờ CPU bị hỏng thì qui trình và những điều cần chú ý cần phải theo để sửa chữa là như thế nào? VI. Rút kinh nghiệm: (về thời gian, nội dung, phương pháp, chuẩn bị) Ngày .tháng năm 2011 Ngày .tháng năm 2011 Bộ mơn Giảng viên soạn
  41. 41 Bài giảng số 3: : Tập lệnh của vi điều khiển PIC( Số tiết: 10) III.1. Mục tiêu: -Giới thiệu. -Các phương pháp địa chỉ hĩa. - Tập lệnh của vi điều khiển PIC : tập lệnh vi điều khiển PIC, các thanh ghi, tĩm tắt tập lệnh. -Các chỉ thị assembler. -Phương pháp lập trình: phương pháp lập trình, chương trình con. III.2. Đồ dung và phương tiện dạy học: -Phấn trắng, bảng, khăn, bút long, micro cĩ dây(hay khơng dây), máy tính, và đèn chiếu (hay máy chiếu). III.3. Giáo trình và tài liệu tham khảo: Giáo trình Vi xử lí của trường Đại học cơng nghiệp Tp. HCM. D.W. Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006. Trương Trác, Chip đơn 16C84 và ứng dụng của chúng. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003. Tài liệu về vi điều khiển PIC của bọ mơn Điện tử cơng nghiệp. Datasheet c ủa PIC 16F84 v à 16F877A. Website: Myke Predko, Programming and customizing the PIC microcontroller, 3rd edition, Tab Electronics, McGrawHill, 2008(Ebook). Douglass V.Hall, Microprocessors and interfacing: Programming and Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992. III.4.Nội dung bài giảng: Nội dung chi tiết : xem bài giảng chi tiết. Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh viên. Chương 3: Tập lệnh của vi điều khiển PIC 3.1.Giới thiệu chung về lập trình hợp ngữ 3.1.1. Chương trình : Thông Mã Hành dịch/Biên Ngôn ngữ nguồn CPU động dịch máy Hình 3.1
  42. 42 -Chương trình : là chuỗi các câu lệnh báo cho máy phải làm gì, làm như thế nào vàkhi nào phải làm. -Ngôn ngữ máy : là chuỗi các số 0/1 mà CPU thực hiện. Ngôn ngữ máy được giải quyết trực tiếp bởi mạch điện tử -Ngôn ngữ cấp cao : gồm có các ngôn ngữ sau . Ngôn ngữ lập trình hướng đối tượng : C++ .Ngôn ngữ lập trình cấp cao : C, Pascal, QBasic .Ngôn ngữ lập trình logic : prolog . Ngôn ngữ lập trình hàm : lisp . Thiết kế giao diện : Visual Basic, Borland Delphi và C++ Builder/Visual C++ - Bộ phận biên dịch : là những chương trình dịch mã nguồn sang mã máy - Ngôn ngữ assembly : dung hòa ngôn ngữ cấp cao và ngôn ngữ máy, ta dùng ngôn ngữ assembly. Chương trình sẽ dùng mã gợi nhớ và dùng các lệnh của CPU Ngôn ngữ Trình Chương trình assembly biên dịch đối tượng Assembly language Assembler Object program Program Hình 3.2: Quá trình assembling 1 chương trình nguồn Ví dụ : MOVWF 6 assembling 00 0000 1000 0110 (mã máy) dữ liệu trong thanh ghi W được đặt vào PORT B. 3.1.2.Giới thiệu quá trình biên dịch : Phần mềm MPLAB MPASM.EXE : dịch mã nguồn thành mã máy , chạy ở MS-DOS. Trong mơi trường Windows, các tập tin cần cĩ trên đĩa là :MPASMWIN.EXE: , MPLINK.exe, và MPLIB.exe. Tạo ra dự án dung MPLAB:
  43. 43 Prog1.asm PxxFyy.inc MPASM (assembler) Prog1.obj MPLIB(librarian) Sub.lib MPLINK Device.lkr (linker) Prog1.lst Prog1.hex Prog1.map Prog1.err Hình 3.3: File Project trong MPLAB. Trong MPLAB, project (dự án) là 1 nhĩm các file (tập tin) được tạo ra hay nhận dạng bởi IDE. Hình 3.3 minh họa cấu trúc của 1 dự án hợp ngữ. 3.1.3. Qui trình xây dựng chương trình: a. Nhìn và nghe: vấn đề gì cần giải quyết, cái gì đã cho, cái gì cần tìm, cĩ thể vẽ một lưu đồ (flow chart) để diễn tả chương trình hoạt động như thế nào. b. Viết chương trình theo ngơn ngữ assembly (hợp ngữ) sử dụng các điều đã cho để giải quyết bài tốn theo yêu cầu đầu ra. c.Nhập chương trình vào máy tính. d. CHuyển mã ngữ cho chương trình (assembling-biên dịch). e. Cho chạy chương trình. f. Đánh giá kết quả. g. Bảo trì. Ví dụ: Viết chương trình nhập một số và in ra trị số tuyệt đối của số đĩ. Vẽ lưu đồ giải thuật: Bắt đầu Nhập 1 số Tính trị tuyệt đối In kết quả Kết thúc
  44. 44 Kí hiệu bắt đầu/kết thúc Nhập/xuất Lệnh/thao tác Lệnh rẽ nhánh Gọi chương trình con 3.1.4. Cấu tạo lệnh: Một lệnh trong ngôn ngữ assembly (hợp ngữ) trong chương trình gồm có 4 khu vực sau : Nhãn Mã lệnh các toán hạng ghi chú LOOPA MOVF TMR0, W ; Đọc TMR0 vào W *Nhãn (label field): là một tên , dùng các chữ cái (a-z), số (0-9) và dấu gạch dưới Nhãn dùng cho tham khảo , làm địa chỉ , gọi chương trình con *Mã lệnh (Op-code) : là những chữ viết tắt, dễ gợi nhớ được dùng đối với lệnh của PIC 16F877A. Ví dụ : movf, movlw, addwf, subwf vv *Toán hạng (operand) : lệnh có thể là một toán hạng hoặc hai toán hạng. Trường hợp 2 toán hạng thì toán hạng thứ 2 gọi là toán hạng đến (destination operand) và toán hạng thứ 1 gọi là toán hạng nguồn (source operand) Ví dụ: IORWF 7,W ; nội dung ơ nhớ 7 được OR với W, kết quả được lưu ở W DECF 12 W : toán hạng đến, 7 : toán hạng nguồn Ví dụ : lệnh 1 toán hạng : COMF 6; đảo bit (bù) ơ nhớ 6. Lệnh NOP ;khơng cĩ tốn hạng. *Ghi chú (comment) : là những lời chú thích cho cho lệnh đó bắt đầu bằng dấu (;). Chương trình sẽ bỏ qua 3.2.Phương pháp địa chỉ hĩa (Phương thức tìm kiếm địa chỉ): Truy xuất bộ nhớ dữ liệu: a.Tìm gián tiếp bộ nhớ Phương thức tìm loại này thực hiện thong qua INDF bộ nhớ và FSR. Địa chỉ thực tế trước tiên đặt vào trong FSR thong qua việc truy cập INDF để thực hiện gián tiếp đọc và viết số liệu bộ nhớ. Phương pháp tìm địa chỉ gián tiếp chủ yếu dùng để viết các chương trình các “bảng tra” hoặc là bảng trị số thực hết sức tiện lợi. Thí dụ: addwf INDF, b. Tìm kiếm địa chỉ số lập tức (tức thời). Số thao tác và số lập tức, cĩ thể nhận được trực tiếp từ trong mã lệnh. Thí dụ: movlw Movlw .122 c.Tìm kiếm địa chỉ trực tiếp.
  45. 45 Cĩ thể phỏng vấn truy cập tìm kiếm địa chỉ trực tiếp với bất kì bộ nhớ nào, tức là trong mã lệnh đã bao gồm địa chỉ của bộ nhớ bị truy cập. Thí dụ: addwf , d. Tìm kiếm địa chỉ byte. Cĩ thể trực tiếp truy cập tìm kiếm một bit bất kì nào trong bộ nhớ bất kì tức là trong mã lệnh đã bao gồm địa chỉ của bộ nhớ bị truy cập đồng thời bao gồm địa chỉ hang số trong bộ nhớ đĩ. Truy xuất bộ nhớ chương trình: e. Địa chỉ tuyệt đối: goto f. Địa chỉ tương đối: addwf PCL,f *Địa chỉ trực tiếp thanh ghi: Thí dụ: khởi động bit 0-3 của port B như ngõ ra. Thanh ghi W F0h 9 bit địa chỉ hiện thực 0 1 0 0 0 0 0 0 0 RP1 RP0 7 bit từ lệnh
  46. 46 Bsf STATUS, RP0 Movlw b’11110000’ Movwf TRISB Bcf STATUS,RP0 Clrf PORTB *Địa chỉ gián tiếp thanh ghi: 2 file (ơ nhớ) : địa chỉ gián tiếp (00h) và FSR (09h)
  47. 47 Thí dụ: Xĩa tất cả vị trí RAM từ 20h tới 7Fh. Thanh ghi W 20h 9 bit địa chỉ hiện thực 0 0 0 0 0 0 0 0 0 IRP FSR Bcf STATUS,IRP Movlw 0x20 Movwf FSR loop clrf INDF Incf FSR,f Btfss FSR,7 Goto loop Lưu số N vào thanh ghi file đa năng: bạn lưu số N vào thanh ghi file 09h. Điều này là địa chỉ trực tiếp. tuy nhiên, ta bảo chương trình chuuyển số N vào vào thanh ghi file X, trong đĩ X giữ giữ giá trị 09h. Điều này là địa chỉ gián tiếp. Thanh ghi file X thực sự được gọi là thanh ghi chọn file (FSR) (bởi vì nĩ là thanh ghi file mà chọn lựa thanh ghi file nào đã chuyển số vào). Thí dụ: chuyển 00h vào ơ nhớ 08h movlw d’08’; nạp số 08 vào FSR Movwf FSR Clrf INDF ; xố địa chỉ gián tiếp *Địa chỉ tức thời: Thí dụ: movlw 0x20
  48. 48 *PC absolute addressing (Địa chỉ tuyệt đối PC): Lệnh call và goto: 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Opcode 0 0 0 0 0 0 0 0 0 0 0 . Địa chỉ tuyệt đối PC (Bộ nhớ chương trình) -Nhảy tới 1 vị trí bộ nhớ chương trình khác ra khỏi chuỗi tuần tự PC. -Gọi chương trình con. -11 bit của địa chỉ 13 bit yêu cầu được mã hĩa trong lệnh. -2 bit them vào sẽ đến từ thanh ghi PCLATH. . Được dung khi thực hiện tác vụ goto tính tốn. -Địa chỉ để nhảy là được tính bởi chương trình. -Địa chỉ được tính tốn là được ghi trực tiếp vào bộ đếm chương trình. Thí dụ: org 0x0000 molw HIGH chuongtrinhcon movwf PCLATH call chuongtrinhcon . org 0x1250 chuongtrinhcon return *Địa chỉ tương đối PC:
  49. 49 Để ghi vào PC: 1)ghi byte cao vào PCLATH. 2)ghi byte thấp vào PCL (PCH sẽ được nạp với giá trị từ PCLATH). Thí dụ: movlw HIGH 0x1250 movwf PCLATH movlw LOW 0x1250 movwf PCL Thí dụ: SỬ dụng bảng tìm kiếm với địa chỉ tương đ61i để lấy mẫu bit để hiển thị con số trên led 7 đoạn. Org 0x0020; trang 0 Movlw HIGH sevensegdecode Movwf PCLATH Movlw .5 Call sevensegdecode Movwf PORTB org 0x1800; trang 3 sevensegdecode: addwf PCL,f retlw b’00111111’ ;0 retlw b’00000110’; 1 retlw b’01011011’; 2 retlw b’01001111’;3 retlw b’01100110’;4 retlw b’01101101’;5 retlw b’01111101’;6 retlw b’00000111’;7 retlw b’01111111’;8 retlw b’01101111’;9
  50. 50 3.3. Tập lệnh của PIC 16F84A và 16F877A Tập lệnh của PIC bao gồm 35 lệnh. Một lệnh thực thi trong 1 chu kì máy, trừ các lệnh nhảy là 2 chu kì máy. Vi điều khiển làm việc chủ yếu bằng vận hành dữ liệu trong ơ nhớ. Một số trong các ơ nhớ này là thanh ghi đặc biệt, cái khác là ơ nhớ người dùng. Trong ứng dụng điều khiển, dữ liệu cĩ thể được đọc từ port (cổng) ngõ vào, vận hành và chuyển tới port ngõ ra. Để sử dụng vi điều khiển bạn cần biết cách di chuyển và vận hành dữ liệu này trong bộ nhớ. Cĩ 35 lệnh trong PIC 16F877A/16F84A để cho phép bạn làm điều này. Sử dụng vi điều khiển là sẽ dung những lệnh này trong chương trình. Giống như bất kì ngơn ngữ mà bạn khơng sử dụng tất cả từ tất cả mọi lúc, đơi khi bạn khơng bao giờ dung cái khác chỉ bây giờ và lặp lại. Tập lệnh của PIC thì giống điều này, bạn cĩ thể quản lí tốt với 15 lệnh mà thơi. Nhiều nhất (đa số) trong các lệnh bao gồm việc sử dụng thanh ghi làm việc (working register) hay W. Thanh ghi W là ở trung tâm (trái tim) của vi điều khiển PIC. Để di chuyển dữ liệu từ ơ nhớ A (file A) sang ơ nhớ B, bạn phải di chuyển nĩ từ ơ nhớ A sang W và sau đĩ từ W sang ơ nhớ B, khá giống hệ thống điện thoại dẫn hướng một cuộc gọi tới nơi khác thơng qua tổng đài. Thanh ghi W cũng vận hành phép tốn logic và số học trên dữ liệu. 3.3.1. Tập lệnh vi điều khiển PIC Để lien lạc (giao tiếp) với vi điều khiển PIC bạn phải học cách lập trình nĩ sử dụng tập lệnh của PIC. PIC 16F84 cĩ 1k x 14 bit word bộ nhớ chương trình EEPROM, 68x8 bit thanh ghi đa năng và 35 lệnh . PIC 16F877A cĩ 8kx14 bit word bộ nhớ chương trình Flash, 368x8 bit thanh ghi đa năng và 35 lệnh làm nên ba nhĩm lệnh : bit, byte và tác vụ điều khiển và số. Các lệnh này cĩ thể được chia làm thành 3 loại: . lệnh bit, mà tác động lên 1 bit trong ơ nhớ (file). . lệnh byte, mà tác động lên 8 bit trong một ơ nhớ. . Tác vụ điều khiển và số , mà hiệu chỉnh ơ nhớ với các biến hay điều khiển sự di chuyển của dữ liệu từ ơ nhớ này đến nơi khác. a.Lệnh bit: Dạng tổng quát của lệnh: Tác vụ thanh ghi file hướng bit: 13 10 9 7 6 0 Opcode b (bit#) f(file#) b=3 bit địa chỉ bit. f=7 bit địa chỉ thanh ghi file. Lệnh bit tác động trên bit cụ thể trong một ơ nhớ, vì vậy lệnh cĩ thể được theo sau bởi dữ liệu mà chỉ ra số ơ nhớ và số bit. Thí dụ BSF 6,3. Mã này khơng cĩ nhiều thong tin để chúng ta cĩ thể sử dụng điều gì đĩ giống như BSF PORTB,BUZZER trong đĩ PORTB là ơ nhớ 6 và BUZZER được nối với bit 3 của port ngõ ra. Trong phần tương đương chúng ta sẽ thấy PORTB equ 6 và BUZZER equ 3. * BCF bit ; xĩa trong ơ nhớ.
  51. 51 Thí dụ: GPIO equ 6; GPIO là ơ nhớ 6 BCF GPIO,4; xố (0)bit 4 của ơ nhớ 6 * BSF bit; bật trong ơ nhớ. Thí dụ: BSF GPIO,2; bật bit 2 lên 1. * BTFSC bit; kiểm tra bit trong ơ nhớ và bỏ qua nếu bit bị xĩa (0). Thí dụ: CHK_ON BTFSC GPIO,0; kiểm tra báo động * BTFSS bit; kiểm tra bit trong tập tin (ơ nhớ) và bỏ qua nếu bit được bật (=1). Thí dụ: zerobit equ 2; zerobit là bit 2 STATUS equ 3; STATUS là ơ nhớ 3. BTFSS STATUS,zerobit b)Lệnh byte: Dạng tổng quát của lệnh: Tác vụ thanh ghi file hướng byte: 13 8 7 6 0 Opcode d f(file#) D=0 cho đích là thanh ghi W. D=1 cho đích là ơ nhớ f. F= 7 bit địa chỉ thanh ghi file. Lệnh byte làm việc trên tất cả 8 bit trong ơ nhớ. Vì vậy một lệnh byte sẽ được theo sau bởi số ơ nhớ phù hợp. THí dụ: DECF 0Ch; lệnh này khơng cĩ nhiều thong tin để chúng ta sẽ chỉ ra tên của ơ nhớ như là DECF COUNT. Dĩ nhiên chúng ta sẽ cần khai báo phần tương đương mà COUNT là ơ nhớ 0Ch bằng lệnh COUNT equ 0Ch. * ADDWF cộng W và F. * ANDWF and logic W và F. * CLRF xĩa ơ nhớ . * CLRW xĩa thanh ghi làm việc W. * COMF lấy bù ơ nhớ. * DECF giảm ơ nhớ đi 1. * DECFSZ giảm ơ nhớ đi 1, bỏ qua nếu bằng khơng (0). * INCF tăng ơ nhớ lên 1. * INCFSZ tăng ơ nhớ lên 1 và bỏ qua nếu bằng khơng (0). * IORWF: I-xor W và F (inclusive or) * MOVF di chuyển F vào W. * MOVWF di chuyển W vào F. * NOP khơng làm gì cả. * RLF quay trái ơ nhớ 1 bit ( 1 vị trí). * RRF quay phải ơ nhớ 1 bit. * SUBWF trừ W từ F , nghĩa là F-W. * SWAPF trao đổi 4 bit thấp và 4 bit cao của F. * XORWF EXOR W và F (exclusive or). c) Tác vụ điều khiển và số: Dạng tổng quát của lệnh:
  52. 52 Tác vụ điều khiển và số: 13 8 7 0 Opcode k(số) K=giá trị tức thời 8 bit. *Chỉ dung cho lệnh CALL và GOTO: 13 11 10 0 Opcode k(số) k=11 bit giá trị tức thời. f=00hỈ7Fh. Tác vụ số và điều khiển vận hành dữ liệu và thực hiện nhảy (rẽ nhánh) chương trình. * ADDLW cộng số với W. * ANDLW AND logic số với W. * CALL gọi chương trình con. * CLRWDT xĩa bộ đếm xung thời gian (bộ định thời chĩ giữ cửa). * GOTO nhảy tới địa chỉ. * IORLW inclusive-or số với W. * MOVLW chuyển số vào W. * RETFIE trở về từ ngắt. * RETLW trở về nơi số trong W *RETURN trở về từ chương trình con. * SLEEP đi vào chế độ chờ (standby). * SUBLW trừ số từ W, nghĩa là số-W. * XORLW EXOR số và W. Những lệnh này làm việc chủ yếu trên 2 thanh ghi 8 bit-thanh ghi làm việc W và ơ nhớ F mà cĩ thể là một trong 15 thanh ghi đặc biệt của 68 thanh ghi ơ nhớ đa dụng mà tạo thành bộ nhớ người dù ng (RAM) của 16F84 hay của 368 byte RAM của 16F877A. Vi điều khiển PIC là thiết bị 8 bit-điều này cĩ nghĩa là số cực đại mà cĩ thể lưu trữ trong bất kì vị trí nhớ là 255. Một số PIC như là 17C43 cĩ 454 byte bộ nhớ dữ liệu. Để định vị ơ nhớ lớn hơn 255, ý tưởng trang hay bank được giới thiệu. Bank 0 giữ địa chỉ ơ nhớ lên tới 255, trong khi bank 1 cĩ thể giữ hơn 255 và bank 2 hơn 255,vv Bạn cần biết thanh ghi hay ơ nhớ nằm ở bank cụ thể. 3.3.2. Thanh ghi: Thanh ghi được tạo thành từ 8 bit như minh họa ở hình sau:
  53. 53 Bit 7 6 5 4 3 2 1 0 1 0 1 1 0 0 1 0 MSB LSB Hình: Cấu tạo thanh ghi. Bit 0 là bit cĩ trọng số thấp nhất (LSB-Least Significant bit) và bit 7 là bit cĩ trọng số cao nhất (MSB-Most Significant bit). *Thanh ghi 00: thanh ghi định địa chỉ dữ liệu gián tiếp. Xem thanh ghi chọn ơ nhớ , thanh ghi 04. *Thanh ghi 01: TMR0, thanh ghi đếm/định thì 0. Thanh ghi này cĩ thể được viết hay đọc giống như bất kì thanh ghi nào khác. Nĩ được dung cho đếm hay định thì sự kiện. Nội dung của thanh ghi cĩ thể được tăng (cộng 1) bởi ứng dụng của 1 xung bên ngồi áp vào chân TOCKI, thí dụ đếm xe đi vào bãi đậu xe hay bởi xung clock chu kì lệnh bên trong mà chạy ờ ¼ của tần số thạch anh tới sự kiện thời gian. *Thanh ghi 02, PCL, bộ đếm chương trình . Bộ đếm chương trình tự động tăng để thực hiện lệnh chương trình. Một ứng dụng của sử dụng bộ đếm chương trình là minh họa ở phần bảng tìm kiếm ở chương “các ví dụ lập trình” (chương 8). *Thanh ghi 03h, thanh ghi trạng thái (STATUS register). *Thanh ghi 04 FSR, thanh ghi lựa chọn ơ nhớ. Thanh ghi lựa chọn ơ nhớ được sử dụng kết hợp với thanh ghi 00. Chúng được dung trong địa chỉ gián tiếp để đọc hay ghi dữ liệu khơng phải từ ơ nhớ cụ thể, nhưng tới hay từ ơ nhớ được chỉ ra bởi dữ liệu trong thanh ghi chọn ơ nhớ. *Thanh gho 05 PORTA và thanh ghi 06 PORTB Port là các kết nối chân mà cho phép vi điều khiển liên lạc (truyền thơng) với thế giới xung quanh (bên ngịai). PortA là port 5 bit ở 16F84 , chỉ cĩ 5 bit thấp được dùng và là port 6 bit ở 16F877A, chỉ cĩ 6 bit thấp được dùng. Bit 0 của portA cĩ thể dung để lập trình là ngõ vào đồng hồ (T0CKI). Port B là port 8 bit. Để thiết lập port, TRIS được dung. TRIS là viết tắt của 3 trạng thái. Ba trạng thái cĩ thể là ngõ vào trở kháng cao, ngõ ra mức cao (5V) hay ngõ ra mức thấp (0V). *Thanh 8Fh: thanh ghi điều khiển dao động (chỉ cĩ ở 16F818) Thanh ghi điều khiển dao động được dung để chọn tần số xung clock khi sử dụng dao động bên trong. Bit 7 6 5 4 3 2 1 0 - IRCF2 IRCF1 IRCF0 - IOFS - - Hình : Thanh ghi điều khiển dao động. Bit 6-4: IRCF2: IRCF0 : các bit chọn tần số dao động bên trong. IRCF2 IRCF1 IRCF0 1 1 1 8 Mhz (nguồn 8 Mhz lái xung clock). 1 1 0 4 Mhz 1 0 1 2 Mhz 1 0 0 1 Mhz 0 1 1 500 khz 0 1 0 250 khz 0 0 1 125 khz
  54. 54 0 0 0 31,25 khz (nguồn INTRC lái xung clock trực tiếp). bit 2: IOFS: INTOSC bit ổn định tần số. *Thanh ghi W: Thanh ghi W giữ kết quả của một tác vụ hay truyền dữ liệu bên trong. Nĩ như là trao đổi điện thoại-dữ liệu đi vào thanh ghi W và được truyền ra tới một ơ nhớ khác. *Thanh ghi tuỳ chọn : OPTION register Thanh ghi này được dung để tỉ lệ trước bộ đếm/đồng hồ thời gian thực. Xung đồng hồ TMR0 chạy ở ¼ tần số thạch anh nhưng cĩ thể được chia tần nhỏ xuống. bởi hệ số tỉ lệ trước cho đo khoảng thời gian dài hơn. *Ngăn xếp (stack) Ngăn xếp là một vùng nhớ lien tục cĩ tính chất vào sau ra trước (last in first out-LIFO). Con trỏ ngăn xếp sẽ giữ địa chỉ ở đỉnh ngăn xếp. Ngăn xếp là tên gán cho ơ nhớ mà giữ vết của địa chỉ chương trình khi lệnh “call” được thực hiện. Cĩ 8 mức ngăn xếp trong 16F84A/16F877A, mà nghĩa là chương trình cĩ thể nhảy tới 1 chương trình con và từ đĩ nhảy tới chương trình con khác, làm thành 8 lần nhảy tổng cộng và ngăn xếp sẽ (cĩ thể) trả về nĩ ngược tới chương trình. 16C54 cĩ ngăn xếp 2 mức. 3.3.3. Tĩm tắt tập lệnh 3.3.3.1. Lệnh bit a/BCF: xố bit trong ơ nhớ F. Thí dụ: BCF 6,4 ; bit 4 được xĩa trong ơ nhớ 6. File 6 là PORTB, điều này xĩa bit 4, nghĩa là bit 4 =0. b/BSF Bật bit trong ơ nhớ F. Thí dụ: BSF 6,4;lệnh này bật bit 4 (=1) trong file 6, nghĩa là bit 4=1. c/BTFSC: kiểm tra bit trong ơ nhớ và nhảy (bỏ qua) nếu bị xĩa (=0). Thí dụ: BTFSC 3,2 ; lệnh này kiểm tra bit 2 trong ơ nhớ 3. Nếu nĩ bị xĩa thì lệnh kế tiếp được bỏ qua. Ơ nhớ 3 là thanh ghi trạng thái STATUS, bit 2 là cờ zero Z. Như vậy chương trình nhảy nếu kết quả của một lệnh là zero. d/BTFSS: kiểm tra bit trong ơ nhớ và nhảy (bỏ qua) nếu bit được bật lên 1. Thí dụ: BTFSS 3,2; nếu bit 2 trong ơ nhớ 3 là bật lên 1 thì lệnh kế tiếp bị bỏ qua. 3.3.3.2. Lệnh byte: a/ADDWF: Cộng nội dung của W vào F. Thí dụ: ADDWF 7; cộng nội dung của thanh ghi W và ơ nhớ 7, chú ý là kết quả đặt vào ơ nhớ 7. Giả sử ơ nhớ 7 chứa số 5, thanh ghi W chứa số 4. Kết quả lệnh cộng là ơ nhớ 7 chứa số 9 Thí dụ: ADDWF 7,W; như trên nhưng kết quả được đặt ở W,w=9. Trạng thái ảnh hưởng cờ C, DC , và Z. Thí dụ: Cộng 3h và 4h với ơ nhớ 20h chứa 3h và ơ nhớ 21h chứa số 4h. Movlw .0; nạp 0h vào thanh ghi W Addwf 32,w; cộng nội dung ơ nhớ 20h (32) với w, kết quả lưu ở w Addwf 33,w; cộng nội dung ơ nhớ 21h (33) với w, kết quả lưu ở w. b/ANDWF: Nội dung của W được and (và) logic với F.
  55. 55 Thí dụ: ANDWF 12,W; nội dung của ơ nhớ 12 được and (và) logic với nội dung của thanh ghi W. Chú ý là nội dung kết quả được đặt vào W. Ơ nhớ 12: 0 1 1 0 0 0 1 0 W: 1 0 0 1 0 1 0 0 andwf W: 1 1 1 1 0 1 1 0 Thí dụ: ANDWF 12; như trên nhưng nội dung kết quả được đặt vào ơ nhớ 12 (=11110110). Trạng thái ảnh hưởng cờ Z. c/CLRF: Lệnh này xĩa ơ nhớ F, nghĩa là 8 bit trong ơ nhớ F bị xĩa (0). Thí dụ: CLRF 5; xĩa ơ nhớ 5. Trạng thái ảnh hưởng cờ Z. d/CLRW: Lệnh này xĩa thanh ghi W. Thí dụ: CLRW Trạng thái ảnh hưởng cờ Z. e/COMF 8 bit trong thanh ghi F được lấy bù, nghĩa là đảo lại. Thí dụ: COMF 6; đảo bit (bù) ơ nhớ 6. Giả sử ơ nhớ 6 là 1 0 1 0 0 0 0 1 Comf 0 1 0 1 1 1 1 0 Trạng thái ảnh hưởng cờ Z. f/DECF: Trừ đi 1 từ ơ nhớ F (F-1). Lệnh này cĩ ích cho đếm xuống về 0. Thí dụ: DECF 12; sẽ giảm ơ nhớ 12 đi 1, kết quả sẽ được lưu trong ơ nhớ 12. Giả sử ơ nhớ 12 chứa số 5, kết quả lệnh decf cho ơ nhớ 12 chứa 4. Thí dụ: DECF 12,W; như trên và sẽ lưu kết quả vào W (=4), để lại ơ nhớ 12 khơng đổi. Trạng thái ảnh hưởng cờ Z. g/DECFSZ: Nội dung của ơ nhớ F được giảm đi 1 và lệnh kế tiếp được bỏ qua nếu kết quả bằng 0. Thí dụ : DECFSZ 12 Hay DECFSZ COUNT h/INCF: Cộng 1 vào ơ nhớ F. Giá trị này sau đĩ được so sánh với cái khác để xem nếu giá trị tổng cộng đã đạt được chưa. Thí dụ: INCF 14; tăng ơ nhớ 14 lên 1 Hay INCF COUNT Giả sử ơ nhớ 14 chứa số 2, sau khi thực hiện lệnh incf ơ nhớ 14 chứa số 3. Trạng thái ảnh hưởng cờ Z. i/INCFSZ: Cộng 1 vào F nếu kết quả bằng 0 thì bỏ qua lệnh kế tiếp. Thí dụ: INCFSZ 19 Hay INCFSZ COUNT j/IORWF: Nội dung của thanh ghi W được OR (hoặc ) logic với (thanh ghi ) ơ nhớ F. Thí dụ: IORWF 7,W; nội dung ơ nhớ 7 được OR với W, kết quả được lưu ở W.
  56. 56 Thí dụ: IORWF 7; như trên nhưng kết quả được lưu ở ơ nhớ 7. Trạng thái ảnh hưởng cờ Z. k/MOVF: Nội dung của ơ nhớ F được di chuyển vào thanh ghi W, từ đĩ dữ liệu cĩ thể được di chuyển tới port ngõ ra. Thí dụ: MOVF 12,W; ơ nhớ 12 được chuyển tới W. Thí dụ MOVF 12; ơ nhớ 12 được chuyển tới ơ nhớ 12? cờ zero bị ảnh hưởng. Trạng thái ảnh hưởng cờ Z. l/MOVWF: Nội dung của thanh ghi W được chuyển vào ơ nhớ F. Thí dụ: MOVWF 6; dữ liệu trong thanh ghi W được đặt vào PORTB. W=11100010, sau lệnh movwf thì ơ nhớ 6 chứa 11100010. m/NOP: (No operation) Khơng làm gì cả. Điều này giống như ý tưởng khơng tốt nhưng rất hữu ích cho trì hỗn nhỏ. Lệnh NOP tạo trễ ¼ của tốc độ xung clock. n/RLF: Nội dung của ơ nhớ F được quay đi 1 bit từ trái qua phải thong qua cờ nhớ. Dịch 1 bit nhị phân về bên trái cĩ nghĩa là số đĩ được nhân với 2. Lệnh này cĩ ích khi nhân số nhị phân. Thí dụ: RLF 12,W; dịch trái ơ nhớ 12 qua cờ nhớ, kết quả được đặt vào W. Thí dụ: RLF 12; như trên nhưng kết quả được đặt vào ơ nhớ 12. Sơ đồ bên dưới minh họa ơ nhớ 12 được dịch trái 0 0 1 0 1 1 0 0 1 Cờ C ơ nhớ 12 trước khi quay trái 0 1 0 1 1 0 0 1 0 Cờ C ơ nhớ 12 sau khi quay o/RRF: Lệnh này quay phải nội dung ơ nhớ F 1 bit về bên phải (Nội dung ơ nhớ F được quay 1 vị trí về bên phải. Thí dụ : RRF 12,W; dịch phải ơ nhớ 12 qua cờ nhớ, kết quả được đặt vào W. Thí dụ: RRF 12; như trên nhưng kết quả được đặt vào ơ nhớ 12. 0 1 0 1 1 0 0 1 0 Ơ nhớ 12 trước khi quay phải Cờ C
  57. 57 0 0 1 0 1 1 0 0 1 Ơ nhớ 12 sau khi quay Cờ C p/SUBWF: Nội dung của thanh ghi W được trừ đi từ nội dung của ơ nhớ F. Thí dụ: SUBWF 14,W; thực hiện F-W, kết quả được đặt vào W. Thí dụ: SUBWF 14; thực thi F-W, kết quả đặt vào F (ơ nhớ 14). Chú ý: nếu W>F thì cờ C=0 và kết quả là âm (-ve). Nếu W<F thì cờ C=1 và kết quả là dương (+ve) hay zero. Nếu W=F thì cờ Z=1, kết quả là zero. Trạng thái ảnh hưởng cờ nhớ C, DC, cờ zero Z. q/SWAPF: 4 bit (nibble) thấp và 4 bit cao của ơ nhớ (file) F được đổi cho nhau. Thí dụ: SWAPF 12,W; đổi 4 bit thấp và 4 bit cao của ơ nhớ 12 cho nhau, kết quả được đặt vào W. Giả sử ơ nhớ 12 chứa 36H, kết quả thực hiện lệnh Swapf là W=63H. Thí dụ: SWAPF 12; kết quả được đặt vào ơ nhớ 12. r/XORWF: Nội dung của thanh ghi W được EXOR (hoặc loại trừ) với nội dung ơ nhớ F. Nếu một số trên port ngõ vào, chỉ báo nhiệt độ, là giống như thanh ghi W thì kết quả là zero (0) và cờ zero Z=1. Chú ý là bạn khơng thể EXOR port ngõ vào trực tiếp với 1 ơ nhớ (file), bạn phải làm điều này bằng cách nạp ơ nhớ vào thanh ghi W bằng lệnh movf. Thí dụ: movf 12,w; nạp nội dung ơ nhớ 12 vào w. Xorwf 6,w; exor w với ơ nhớ 6, kết quả đặt ở w. Thí dụ: XORWF 17,W; nội dung của file 17 được exor với thanh ghi W, kết quả được lưu ở W. Ơ nhớ 17: 1 0 1 0 0 0 1 1 W: 1 1 0 0 0 1 1 1 xorwf W= 0 1 1 0 0 1 0 0. Thí dụ: XORWF 17; như trên nhưng kết quả được đặt ở file 17. Trạng thái ảnh hưởng cờ Z. Bạn đã chú ý thanh ghi W quan trọng như thế nào trong hoạt động của vi điều khiển. Dữ liệu khơng thể đi trực tiếp từ A đến B, nĩ đi từ A sang W và sau đĩ từ W sang B. 3.3.3.3. Các tác vụ số và điều khiển: a)ADDLW: Cộng một số tới thanh ghi W. Thí dụ: ADDLW 7; sẽ cộng số 7 vào W, kết quả được đặt ở W. Số 7 7 W: 3 10 addlw b)ANDLW: Nội dung của W được and (và) logic với một số 8 bit. Kết quả được đặt vào trong W.
  58. 58 Th1i dụ : ANDLW 12H Hay ANDLW B’00010010’ Hay ANDLW .18 Giả sử W= 0 0 1 0 1 0 1 0 12h=0 0 0 1 0 0 1 0 lệnh andlw: W= 0 0 0 0 0 0 1 0=02h Thanh ghi W được and(và) với số 12h. Kết quả là 02h được đặt vào W. c)CALL: Lệnh này sẽ gọi một chương trình con trong chương trình chính. Thí dụ: CALL WAIT1MIN; lệnh này sẽ gọi một chương trình con (bạn đã viết) để đợi 1 phút. Cĩ thể là bật đèn trong một phút và sau đĩ trở lại chương trình chính. d)CLRWDT: Bộ định thời watchdog (bộ đếm xung thời gian) bị xĩa. Bộ đếm xung thời gian là thiết bị an tồn trong vi điều khiển nếu chương trình làm bộ đếm xung thời gian hết thời gian và sau đĩ khởi động lại chương trình. Trạng thái ảnh hưởng cờ T0, PD. e)GOTO: Đây là lệnh nhảy khọng điều kiện tới một vị trí cụ thể trong chương trình. Thí dụ: GOTO SIREN Thí dụ: GOTO MAIN f)IORLW: Nội dung của thanh ghi W được OR (hoặc) logic với một số. Thí dụ: IORLW 27 W= 1 0 0 1 1 0 1 1 L (số)= 0 0 0 1 1 0 0 1 iorlw L+W = 1 0 0 1 1 0 1 1 Điều này là các rất hữu ích để xác định nếu bất kì bit nào trong ơ nhớ được bật lên 1, nghĩa là bằng cách OR một ơ nhớ với 00000000 nếu tất cả các bit là zero, kết quả OR là zero và bit cờ zero được bật trong thanh ghi trạng thái. Trạng thái ảnh hưởng cờ Z. g) MOVLW: Số 8 bit được di chuyển trực tiếp vào W. Thí dụ: MOVLW .127; chuyển số 127 vào W Trạng thái ảnh hưởng cờ Z. h)RETFIE. Lệnh này được dung trở về từ ngắt. i)RETLW: Lệnh này được dung ở cuối một chương trình con để trở về chương trình chính ở theo sau lệnh CALL. Giá trị số được đặt trong thanh ghi W. Lệnh này cĩ thể được dung với bảng tìm kiếm. Thí dụ: RETLW 0 j)RETURN: Lệnh này được dung để trở về từ chương trình con. k)SLEEP Khi thực hiện lệnh này, chip vi điều khiển được đặt vào chế độ nghỉ (sleep). Bit trạng thái giảm cơng suất bị xĩa, trạng thái hết hạn (timeout) được bật lên 1, bộ đếm xung thời gian và bộ chia tần tỉ lệ trước được xĩa và bộ lái dao động bị tắt. Bộ đếm xung thời gian vẫn cịn chạy từ xung clock bên trong của nĩ.
  59. 59 Thí dụ: SLEEP Trạng thái ảnh hưởng cờ T0, PD. l)SUBLW: Nội dung của thanh ghi W được trừ từ 1 số. Thí dụ: SUBLW 14; thực hiện 14-W, kết quả được đặt vào W. Bi cờ nhớ C và cờ zero Z trong thanh ghi trạng thái (STATUS) bị ảnh hưởng. Chú ý: nếu W>14 thì cờ C=0 và kết quả là –ve (âm). Nếu W<14 thì cờ C=1, kết quả là +ve (dương) hay zero Nếu W=14 thì cờ Z=1, kết quả là 0. Điều này là điều kiện rất hữu ích. Để tìm ra nếu điều gì đĩ đã diễn ra 14 lần trừ 14 từ những sự diễn ra đĩ nếu kết quả là zero (0). Trạng thái ảnh hưởng cờ C, DC và Z. m) XORLW: Nội dung của thanh ghi W được EXOR với một số. Nếu kết quả là zero thì nội dung gắn kết, nghĩa là nếu một số trên port ngõ vào, chỉ thị nhiệt độ, là giống với số thì kết quả là zero và bit cờ zero Z được bật lên 1 (Z=1). Nghĩa là : 0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 0 = 1 1 ⊕ 1 = 0 Thí dụ: XORLW 67 Trạng thái ảnh hưởng cờ Z. h)lệnh OPTION: dung cho bộ định thời (timer). nội dung của W được nạp vào thanh ghi OPTION. Lệnh này được dung để chia tỉ lệ trước, nghĩa là bật tốc độ định thời TMR0
  60. 60 *Chương trình nhân hai số nhị phân 8 bit: Start Xố ACC và 2 ơ nhớ chứa kết quả Nạp bộ đếm với 8. Dịch trái ơ chứa số nhân. No C=1? Yes Xố cớ carry (A)=(A)+(20h) No Bộ đếm =0? Quay phải ACC và ơ nhớ 30h yes Gi ả m b ộ đế m (X=X-1) End 20h: số bị nhân. 21h: số nhân. Sauk hi chương trình chạy xong, kết quả sẽ được gửi vào 2 ơ: ơ 30h chứa kết quả byte thấp và ơ 31h chứa kết quả byte cao. Chương trình nhân 2 số 16 bit sẽ cho kết quả 32 bit. Cách thực hiện cũng giống như phép nhân 2 số 8 bit. 3.4.Các chỉ thị assembler : (assembler directive) Các chỉ thị assembler là các lệnh hướng vào chương trình assembly chứ không phải do CPU thực hiện. Chương trình ta viết sẽ bao gồm các chỉ thị assembler, tuy nhiên các chỉ thị assembler này sẽ không được dịch ra mã máy. Ví dụ : ORG, EQU, vv Mỗi chỉ thị assembler gồm có 4 khu vực : Tên Chỉ thị Argument Ghi chú Pi equ 3.14 ;xác định giá trị số pi * Tên : dùng các kí hiệu như chữ, số giống như nhãn, bắt đầu bằng chữ cái * Chỉ thị : tên viết tắt chỉ thị assembler, giống như op-code * Khu vực đối (argument) : chứa 1 địa chỉ nhớ hoặc 1 số để sử dụng cùng với dữ liệu và do dữ liệu xác định Ví dụ : DT=pi*R^2
  61. 61 CV=2*pi*R * Ghi chú : comment Một số chỉ thị assembler : 1.Chỉ dẫn điều khiển trạng thái assembler - ORG (originate) : khởi đầu Chỉ thị org dùng để đặt con trỏ lệnh vào vị trí khởi đầu của chương trình trong bộ nhớ. Ví dụ : org 100h ; chương trình bắt đầu ở vị trí nhớ 0100h - END : phải là phát biểu cuối cùng trong tập tin nguồn. Ta không được sử dụng nhãn trước chỉ dẫn END. Những gì sau chỉ dẫn END sẽ không được xử lý. 2. Chỉ dẫn định nghĩa ký hiệu - EQU(equate) , cân bằng hay SET Được dùng để liên kết 1 tên với một số hoặc một kí hiệu tượng trưng khác. Ví dụ : pi equ 3.14 DT=2*pi*R, trong chương trình assembler sẽ thay pi=3,14 Thí dụ : N38 SET 30 TMR0 EQU 1; TMR0 là file 1 STATUS EQU 3; STATUS là file 3 3. Chỉ dẫn khởi tạo trị trong bộ nhớ 4. Chỉ dẫn dành chỗ trong bộ nhớ 5. Chĩ dẫn liên kết chương trình 3.5. Phương pháp lập trình : 3.5.1. Phương pháp lập trình -Phân tích hệ thống -Lưu đồ giải thuật -Viết chương trình Khi phải viết những chương trình dài và hoàn chỉnh thì vấn đề tổ chức cấu trúc trở nên rất quan trọng. Một phương pháp tổ chức là xây dựng đề cương . Có thể dùng đề cương để chia bài toán thành những phần nhỏ. Những phần này phải theo thứ tự để giải quyết bài toán 1 cách chính xác. Một phương pháp làm đề cương cho bài toán là vẽ lưu đồ. Bài toán : xây dựng 1 lưu đồ cho chương trình ngôn ngữ assembly để điều khiển báo động một trạm cân xe chở hàng. Nếu xe chở quá 1 trọng lượng nào đó thì sẽ có âm thanh báo động, còn nếu gặp được xe dưới hạng qui định thì không có báo động và cho phép xe đi qua Data_in : trọng lượng xe vào Data_out : giá trị xuất để điều khiển , 00h :ngắt báo động, FFh : báo động Data_in max_wt Ỉ data_out=FFh=11111111b Vì trọng lượng cực đại là 10 tấn nên max_wt=10=Ah
  62. 62 Lưu đồ : Bắt đầu STATUS equ 3 Định nghĩa biến CARRY equ 0 Data_in equ 20h Data_out equ 21h Đặt giới hạn trọng lượng Max_wt equ 0Ah Ngắt báo động Alarm_off : movlw .0 Movwf data_out Đọc trọng lượng data_in NEXT : movf data_in,w; ơ nhớ 20h vào w Sublw Max_wt; 10-w So sánh goto Alarm_off NEXT Xuất báo động Alarm_on : movlw b’11111111’ Movwf Data_out Goto NEXT Hình 3.4:Bảng lưu đồ chương trình của trạm kiểm soát trọng lượng xe 3.5.2.Chương trình con : (subroutine) -Chương trình con là một phần nhỏ của chương trình , dùng để thực hiện một nhiệm vụ riêng biệt. Thường nhiệm vụ chương trình con thực hiện là loại lặp lại trong chương trình -Cú pháp : Call nơi đến Lệnh để chúng ta chuyển sang chương trình con là lệnh call. Khi kết thúc chương trình con, muốn quay về chương trình chính thì dùng lệnh RETLW/RETURN. Nơi đến của chương trình con có thể là 1 nhãn, 1 địa chỉ . Lệnh RETURN thường không có toán hạng kèm theo, RETLW cĩ trả về số. Khi CPU thực hiện lệnh call thì địa chỉ kế tiếp của chương trình được gởi cất vào ngăn xếp (stack). Nếu không làm như vậy thì CPU không biết quay về đâu trong chương trình chính. Lệnh call sẽ đẩy nội dung đang hiện diện trong con trỏ lệnh PC vào ngăn xếp, tiếp theo CPU sẽ đưa địa chỉ nhớ của chương trình con vào con trỏ lệnh PC. Quá trình xảy ra như sau : - Lệnh call được CPU đọc và giải mã - Con trỏ lệnh được tăng lên để chỉ vào lệnh kế tiếp trong chương trình chính - Tiếp theo nội dung của con trỏ lệnh được đẩy vào trong ngăn xếp - Địa chỉ xuất phát của chương trình con được nạp vào con trỏ lệnh
  63. 63 - Chương trình con được thực hiện - Lệnh retlw/RETURN là lệnh cuối trong chương trình con sẽ đẩy bật địa chỉ quay về của chương trình chính ra khỏi ngăn xếp - Địa chỉ quay về được nạp vào con trỏ lệnh và chương trình chính được tiếp tục Ví dụ : Call Delay ; gọi chương trình con delay Định nghĩa chương trình con Delay : Delay: clrf tmr0; bắt đầu timer 0 Loopa movf tmr0,w; đọc tmr0 vào w Sublw .32;time-32 Btfss 3,2; kiểm tra time-32=0 Goto loopa; time khơng bằng 32 Retlw 0; time là 32 , trở về Chương trình con weight: Chương trình trạm cân xe 3 thang đo : hình 3.5 start định nghĩa dữ liệu đặt max_wt call nạp data_in1 ngắt báo động weight call weight call ret báo động nạp data_in2 ret call weight call ret nạp data_in3 call weight call jump ret Hình 3.5 IV.Tổng kết bài: -Tĩm tắt các ý chính trong bài. -Chuẩn bị bài mới. V. Câu hỏi và bài tập về nhà: Chương 3: Tập lệnh của PIC 16F877A và 16F84
  64. 64 1.Chương trình là gì? Nêu đặc điểm của ngơn ngữ máy, hợp ngữ và ngơn ngữ cấp cao. 2. Quá trình biên dịch : cách tạo dự án dung MPLAB. 3. Trình bày các bước (qui trình) xây dựng chương trình. 4. Một lệnh hợp ngữ đầy đủ gồm các bộ phận nào? 5. Phương pháp xác định vị trí của một tốn hạng được gọi là gì? 6.Trình bày các phương thức địa chỉ hĩa. Cho ví dụ. 7.TẬp lệnh của PIC được chia làm mấy nhĩm. Kể tên. 8. Giải thích ý nghĩa của lệnh MOVF 12,W. 9. Chỉ thị EQU dung để làm gì. 10. Cho một thí dụ về ngơn ngữ lập trình máy tính bậc cao. 11. Ngơn ngữ lập trình máy tính bậc cao dung . Để dịch các lệnh ra mã máy. 12. Assember là gì? Phần mềm MPLAB (ở Windows) hay MPASM (ở DOS) dung để làm gì? 13. Nêu các lệnh bit và cho ví dụ. 14. Nêu cá lệnh về byte và cho ví dụ. 15. Nêu các lệnh về điều khiển và số. Cho ví dụ. 16. Viết cương trình cộng 4H vào 3H dùng thanh ghi W, ơ nhớ 20H (giữ giá trị 4H) và 21H (giữ giá trị 3H). Nạp kết quả vào địa chỉ nhớ 22H mang nhãn STORE (HD: STORE EQU 22H). 17.Viết chương trình tính 1+2+3+4 dùng lệnh ADDWF và INCF dung thanh ghi W và ơ nhớ 20H. Kết quả lưu ở W. 18. Viết chương trình để tính Z=A.B+(not)C trong đĩ dung ơ nhớ 20H cho lưu giá trị A, ơ nhớ 21H lưu giá trị B, ơ nhớ 22H lưu giá trị C. Lưu kết quả của Z trong vị trí nhớ 23H mang nhãn STORE. 19. Viết chương trình nhân hai số nhị phân 8 bit. Ơ nhớ 20H chứa số bị nhân, ơ nhớ 21H chứa số nhân. Kết quả tích số 16 bit chứa trong 2 ơ nhớ 22H (byte thấp) và 23H (byte cao). 20. Lệnh COMF 12 cho kết quả như thế nào nếu ơ nhớ 12 chúa nội dung FFH. 21. Trình bày các chỉ thị assembler. 22. Viết chương trình phát âm thanh báo động khi nhiệt độ của mơt tủ lạnh vượt quá 50 độ F. Vẽ lưu đồ đối với chương trình và giải thích chương trình đang làm gì bằng các chú giải. Bảo đảm cĩ cả các chỉ thị assembler cần thiết. 23. Viết chương trình cho bài tốn trạm cân xe. 24. Sự khác nhau giữa lệnh và chỉ thị assembler. 25. Định nghĩa chương trình con. 26. Một công tắc DIP 4 bit và 1 LED 7 đoạn anode chung được nối với PIC 16F877A như hình vẽ. Viết 1 chương trình đọc liên tục mã 4 bit từ công tắc DIP và cập nhật các led để hiển thị ký tự hexa thích hợp. Thí dụ, nếu mã 1100B được đọc vào, ký tự hexa “C” sẽ xuất hiện. Như vậy, các segment (đoạn) a đến g, tương ứng sẽ là ON, OFF, OFF, ON, ON, ON, và OFF . Chú ý rằng đặt 1 chân port pic 16f877a lên “1” làm LED tương ứng “ON”. (xem hình vẽ)
  65. 65 PIC 16F877A 74LS244 LED 7 đoạn +5V a RA0 RB0 b RA1 RB1 A c RA2 RB2 F b d G RA3 RB3 e E c RB4 f D RB5 RB6 g RB7 h 8x220 ohm Hình : Giao tiếp với công tắc DIP và LED 7 đoạn 27.Thiết kế một mạch mà đếm và hiển thị trên led 7 đoạn (loại catốt chung), số lần một nút nhấn được ấn tới 10. Mã nhị phân để lái led 7 đoạn như sau: Số PORTB B7 B6 B5 B4 B3 B2 B1 B0 0 0 1 1 1 0 1 1 1 1 0 1 0 0 0 0 0 1 2 0 0 1 1 1 0 1 1 3 0 1 1 0 1 0 1 1 4 0 1 0 0 1 1 0 1 5 0 1 1 0 1 1 1 0 6 0 1 1 1 1 1 0 0 7 0 1 0 0 0 0 1 1 8 0 1 1 1 1 1 1 1 9 0 1 0 0 1 1 1 1 Xét mạch điện như sau: Hình: Sơ đồ mạch của điều khiển led 7 đoạn.
  66. 66 Mở rộng chương trình cho PIC 16F877A. 28.Hãy viết chương trình ngôn ngữ assembly để thực hiện chức năng logic trong 8 lần X0 Y0 W0 Z0 . . . x7 y7 z7 W0 với X=x7 x0 Y=y7 y0 Z=z7 z0 W=w7 w0 29.Viết các chương trình để thực hiện các phép toán logic chỉ ở hình : RB0 RB4 RB1 RB5 RB7 RC7 RB6 RB7 Hình : Các vấn đề lập trình cổng logic: (a) NOR 3 ngõ vào (b) NAND 8 ngõ vào 30. Viết chương trình xĩa 20 ơ nhớ RAM nội cĩ địa chỉ bắt đầu là 30H. 31.Nêu bốn lệnh chuyển dữ liệu và cho ví dụ đối với mỗi loại 32.Nêu một ví dụ về việc sử dụng lệnh số học a. mode địa chỉ gián tiếp b.mode địa chỉ trực tiếp c.mode địa chỉ tức thời
  67. 68 Bài giảng số 4: Vào ra. Bộ định thời. Lập trình vi điều khiển PIC ( Số tiết: 5) I.Ổn định lớp: . II.Kiểm tra bài cũ: III.Tên bài giảng: : Vào ra. Định thời. Lập trình vi điều khiển PIC. III.1. Mục tiêu: -Vào ra của vi điều khiển(I/O) - Định thời với vi điều khiển:timer 0, timer 1, và timer 2 -Lập trình vi điều khiển: nhập dữ liệu, tiêu đề cho 16F84 và 16F877A,thí dụ chương trình, lưu và biên dịch chương trình: giới thiệu phần mềm MPLAB, mạch nạp vi điều khiển PIC và chương trình WinPIC800, lưu đồ lập trình, và bài tốn: chớp tắt hai led đơn, tập tin tiêu đề cho PIC 16F877A III.2. Đồ dung và phương tiện dạy học: -Phấn trắng, bảng, khăn, bút long, micro cĩ dây(hay khơng dây), máy tính, và đèn chiếu (hay máy chiếu). III.3. Giáo trình và tài liệu tham khảo: Giáo trình Vi xử lí của trường Đại học cơng nghiệp Tp. HCM. D.W. Smith, PIC in practice: a project-based approach, Elsevier, 2nd edition, 2006. Trương Trác, Chip đơn 16C84 và ứng dụng của chúng. Hồ Trung Mỹ, Vi xử lí, NXB ĐHQG Tp. HCM, 2003. Tài liệu về vi điều khiển PIC của bọ mơn Điện tử cơng nghiệp. Datasheet c ủa PIC 16F84 v à 16F877A. Website: Myke Predko, Programming and customizing the PIC microcontroller, 3rd edition, Tab Electronics, McGrawHill, 2008(Ebook). Douglass V.Hall, Microprocessors and interfacing: Programming and Hardware, 2nd ed., Macmillan/McGraw-Hill, 1992. III.4.Nội dung bài giảng: Nội dung chi tiết : xem bài giảng chi tiết. Phương pháp giảng dạy: thuyết trình, nêu vấn đề và đàm thoại trao đổi với sinh viên. Chương 4: Vào ra. Định thời. Lập trình vi điều khiển PIC. 4.1. Vào/ra của vi điều khiển: Vi điều khiển là một chip rất linh hoạt và cĩ thể được lập trình để hoạt động trong một số cấu hình khác nhau. 16F84 cĩ 13 thiết bị I/O, mà nghĩa là nĩ cĩ 13 ngõ vào và ngõ ra. I/O cĩ thể được cấu hình trong bất kì kết hợp nào, nghĩa là 1 ngõ vào 12 ngõ ra, 6 ngõ vào 7 ngõ ra, 13 ngõ ra tùy thuộc vào ứng dụng của bạn. Những I/O này được nối với hế giới bên ngồi thơng qua thanh ghi được gọi là port. 16F84 cĩ 2 port, PORTA và PORTB. PortA là port 5 bit, nĩ cĩ 5 đường I/O và port B cĩ 8 I/O. 16F877A cĩ 33 thiết bị I/O. 16F877A cĩ 5 port port A là port 6 bit nĩ cĩ 6 đường I/O, port B cĩ 8 I/O, port C cĩ 8 I/O, port D cĩ 8 I/O, và port E cĩ 3 I/O. 4.1.1.PortA và thanh ghi TRISA
  68. 69 PortA là port 2 chiều , 6 bit. Thanh ghi định hướng dữ liệu tương ứng và TRISA. Bật bit TRISA (=1) sẽ làm cho các chân portA tương ứng là ngõ vào (input)( nghĩa là đặt bộ điều khiển (driver) ngõ tương ứng trong chế độ tổng trở cao Hi-Z). Xĩa bit TRISA (=0) sẽ làm cho chân portA tương ứng là ngõ ra (output) (nghĩa là đặt nội dung của mạch cài ngõ ra trên chân được chọn). Việc đọc thanh ghi portA là đọc trạng thái của các chân, trong khi ghi ra nĩ sẽ ghi ra mạch cài port. Tất cả tác vụ ghi là tác vụ đọc -hiệu chỉnh ghi. Vì thế, một sự ghi ra port ám chỉ rằng chân port là đọc, giá trị được hiệu chỉnh và sau đĩ được ghi ra mạch cài dữ liệu port. Chân RA4 được hợp kênh với ngõ vào clock mơđun timer 0 để trở thành chân RA4/T0CKI. Chân RA 4/T0CKI là ngõ vào Smith-trigơ (Schmitt-trigger) và ngõa ra cưc mán để hở. Tất cả chân khác của port A cĩ mức TTL và bộ lái ngõ ra CMOS đầyđủ. Chân khác của portA là hợp kênh với ngõ vào analog và ngõ vào Vref analog cho cả bộ chuyển đổi A/D (tương tự-số) và bộ so sánh. Tác vụ của mỗi chân được chọn bởi xĩa/bật bit điều khiển phù hợp trong thanh ghi ADCON1 và CMCON. Chú ý: Khi power on reset, các chân này được cấu hình như ngõ vào analog và đọc là’0’. Bộ so sánh là ở off (tắt) (trạng thái). Thanh ghi TRISA điều khiển hướng của cácchân port thậm chí khi chúng được dùng là ngõ vào analog. Người sử dụng phải đảm bảo các bit trong thanh ghi TRISA là bảo trì (giữ nguyên) khi dùng chúng như là ngõ vào analog. Thí dụ: khởi động portA BCF STATUS,RP0; BCF STATUS,RP1; bank 0 CLRF PORTA; khởi động PORTA bằng cách xĩa mạch cài dữ liệu ngõ ra BSF STATUS,RP0 ; chọn bank 1 MOVLW 0x06; cấu hình tất cả các chân như là ngõ vào số MOVWF ADCON1 MOVLW 0xCF; giá trị được dùng hởi động hướng dữ liệu MOVWF TRISA; bật RA như là ngõ vào, RA như là ngõ ra ; RA luơn đọc là 0. 5.1.2. PORTB và thanh ghi TRISB PortB là port 2 chiều, 8 bit. Thanh ghi định hướng dữ liệu tương ứng là TRISB. Bật bit TRISB (=’1’) sẽ làm cho các chân portB tương ứng là ngõ vào (nghĩa là đặt bộ lái ngõ ra tương ứng ở chế độ tổng trở cao Hi-Z). Xĩa bit TRISB (=’0’) sẽ làm cho các chân portB tương ứng là ngõ ra (nghĩa là đặt nội dung của mạch cài ngõ ra trên chân được chọn). Ba chân của port B được hợp kênh với gỡ rối trong mạch (in-circuit debugger) và chức năng lập trình điện áp thấp (low-voltage programming): RB3/PGM, RB6/PGC và RB7/PGD. Chức năng của các chân này được mơ tả sau. Mỗi chân của portB cĩ thể được kéo lên bên trong yếu. Một bit điều khiển cĩ thể bật (turn on) tất cả kéo lên. Điều này cĩ thể thực hiện bằng cách xĩa bit /RBPU (thanh ghi OPTION ). Kéo lên yếu tự động bị tắt (turn off) khi các chân port được cấu hình như ngõ ra. Các kéo lên bị cấm khi reset lúc bật điện (power on reset). Bốn chân port B, RB7-RB4, cĩ đặc điểm ngắt trên thay đổi (interrupt on change). Chỉ cĩ chân được cấu hình như ngõ vào cĩ thể gây ra ngắt (nghĩa là bất cứ chân RB7:RB4 được cấu hình như là ngõ ra thì rút khỏi so sánh ngắt trên thay đổi). Chân ngõ vào (của RB7:RB4) được so sánh với giá trị cũ cài trên việc đọc cuối của portB. Ngõ ra “khơng khớp” (mismatch) của RB7:RB4 là OR (hoặc) với nhau để tạo ra ngắt thay đổi port RB với bit cờ RBIF (INTCON ).
  69. 70 Ngắt này cĩ thể đánh thức thiết bị từ chế độ nghỉ SLEEP. Người sử dụng, trong chương trình phục vụ ngắt ISR, cĩ thể xĩa ngắt theo cách sau: a) bất kì việc đọc hay ghi của portB. Điều này sẽ kết thúc điều kiện khơng khớp. b)xĩa bit cờ RBIF. Điều kiện khơng khớp sẽ tiếp tục để bật cờ RBIF. Đọc portB sẽ kết thúc điều kiện khơng khớp và cho phép bit RBIF bị xĩa. Đặc điểm ngắt trên thay đổi được khuyến cáo cho làm thức dậy trên hoạt động nhấn phím và hoạt động ở đĩ portB chỉ được dùng cho đặc điểm ngắt trên thay đổi. Việc hỏi vịng (polling) của portB thì khơng được khuyến cáo trong khi sử dụng đặc điểm ngắt trên thay đổi. Đặc điểm ngắt trên thay đổi này, cùng với các kéo lên cấu hình bằng phần mềm trên 4 chân này, cho phép giao tiếp dễ dàng với bàn phím và làm nĩ cĩ thể dùng đánh thức trên nhấn phím. RB0/INT là chân ngõ vào ngắt ngồi và được cấu hình sử dụng INTEDG bit (thanh ghi OPTION ). RB0/INT được thảo luận kỹ ở chương ngắt. 4.1.3. PortC và thanh ghi TRISC PortC là port 2 chiều, 8 bit. Thanh ghi định hướng dữ liệu tương ứng là TRISC. Bật bit TRISC (=’1’) sẽ làm cho các chân portC tương ứng là ngõ vào (nghĩa là đặt bộ lái ngõ ra tương ứng ở chế độ tổng trở cao Hi-Z). Xĩa bit TRISC (=’0’) sẽ làm cho các chân portB tương ứng là ngõ ra (nghĩa là đặt nội dung của mạch cài ngõ ra trên chân được chọn). PortC được hợp kênh với nhiều chức năng ngọai vi (bảng 1). Chân portC cĩ đệm ngõ vào Schmitt-trigger. Khi mơđun I2C được cho phép, chân portC được cấu hình với mức I2C chuẩn (thơng thường) hay với mức SMBus, bằng cách dùng bit CKE (SSPSTAT ). Khi cho phép chức năng ngọai vi, điều cẩn trọng lưu ý là định nghĩa bit TRIS cho mỗi chân portC. Một số ngọai vi đè lên bit TRIS để làm cho chân (pin) là ngõ ra, trong khi ngoại vi khác đè lên bit TRIS để làm cho chân là ngõ vào. Vì việc đè lên bit TRIS là trong ảnh hưởng trong khi ngoại vi được cho phép, lệnh đọc- hiệu chỉnh- ghi (BSF, BCF, XORWF) với TRISC như là đích đến, nên bị cấm (tránh). Người sử dụng nên tham khảo tới phần ngoại vi tương ứng để thiết lập bit TRIS đúng đắn. 4.1.4. PortD và thanh ghi TRISD PortD là port 8 bit với đệm ngõ vào Schmitt-trigger. Mỗi chân đượ cấu hình riêng biệt như là ngõ vào hay ngõ ra. PortD cĩ thể được cấu hình như một port vi xử lí 8 bit (port phụ(tớ) song song) bằng cách bật bit điều khiển PSPMODE (TRISE ). Trong mode (chế độ) này, bộ đệm ngõ vào là TTL. Chú ý: PortD và TRISD khơng được hiện thực trên thiết bị 28 chân. 4.1.5. PortE và thanh ghi TRISE Chú ý: PortE và TRISE khơng được hiện thực trên thiết bị 28 chân. PortE CĨ 3 CHÂN (RE0/RD/AN5, RE1/WR/AN6, RE2/CS/AN7) mà cĩ thể được cấu hình riêng biệt như là ngõ vào hay ngõ ra. Chân port E trở thành ngõ vào điều khiển I/O cho port vi xử lí khi bit PSMODE (TRISE ) được bật (=’1’). Trong chế độ này, người sử dụng phải đảm bảo rằng bit TRISE được bật (=’1’) và rằng các chân được cấu hình như ngõ vào số. Cũng vậy, đảm bảo rằng ADCON1 được cấu hình cho I/O số. Trong chế độ này, bộ đệm ngõ vào là TTL.
  70. 71 Thanh ghi TRISE được minh họa và cũng điều khiển tác vụ port tớ song song (xem ở dưới). Chân portE là đa hợp với ngõ vào analog, khi chọn cho ngõ vào analog, những chân này sẽ đọc là ‘0’. TRISE điều khiển hướng của các chân RE, thậm cnhí khi chúng được dùng như ngõ vào analog. Người sử dụng phải đảm bảo giữ các chân được cấu hình ngư ngõ vào khi sử dụng chúng như là ngõ vào analog. Chú ý: khi reset lúc bật điện, những chân này được cấu hình như ngõ vào analog và đọc là ‘0’. Thanh ghi TRISE (địa chỉ 89H) Bit 7 6 5 4 3 2 1 bit 0 IBF OBF IBOV PSPMODE - R/W-1 R/W-1 R/W-1 R-0 R-0 R/W-0 R/W-0 U-0 R/W-1 R/W-1 R/W-1 Bit điều khiển /trạng thái port tớ song song: Bit 7: IBF: bit trạng thái bộ đệm ngõ vào đầy 1=một từ được nhận và đang đợi để đọc bởi CPU. 0=khơng cĩ từ nào được nhận. Bit 6: OBF: bit trạng thái bộ đệm ngõ ra đầy. 1=bộ đệm ngõ ra vẫn giữ từ được ghi trước đĩ. 0=bộ đệm ngõ ra đã được đọc. Bit 5: IBOV: bit dị tìm bộ đệm ngõ vào tràn. 1=việc ghi diễn ra khi 1 từ ngõ vào trước đĩ chưa được đọc (phải bị xĩa bằng phần mềm). 0=khơng cĩ tràn xảy ra. Bit 4: PSPMODE: bit chọn chế độ port tớ song song. 1=portD cĩ chức năng (làm việc) trong chế độ port tớ song song. 0=portD làm việc trong chế độ I/O đa năng. Bit 3: khơng hiện thực, đọc là ‘0’. Bit định hướng dữ liệu: Bit 2: bit điều khiển hướng cho chân RE2/CS/AN7: 1=ngõ vào (input) 0=ngõ ra (output) Bit 1: bit điều khiển hướng cho chân RE1/WR/AN6 1=ngõ vào. 0=ngõ ra. Bit 0: bit điều khiển hướng cho chân RE0/RD/AN5 1=ngõ vào. 0=ngõ ra. Chú thích: R=bit cĩ thể đọc W=bit cĩ thể ghi -n=giá trị cho port ‘1’=bit được bật ‘0’=bit bị xĩa x=bit chưa biết U=bit khơng hiện thực, đọc là ‘0’. 4.2. Định thời với vi điều khiển: Tất cả vi điều khiển cĩ mạch định thời trên chip; một số cĩ 4 timer khác nhau. Vi điều khiển 16F84 cĩ một thanh ghi timer gọi là timer 0. Các timer này chạy ở tốc độ ¼ cua