intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Ch ương III: Chương trình điều khiển

Chia sẻ: Le Quang Luan | Ngày: | Loại File: DOCX | Số trang:14

428
lượt xem
125
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Giới thiệu về ngôn ngữ C và keilC: 1. Ngôn ngữ C: C là một Ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao. Hơn thế, C đôi khi được đánh giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler...

Chủ đề:
Lưu

Nội dung Text: Ch ương III: Chương trình điều khiển

  1. Chương III: Chương trình điều khiển Giới thiệu về ngôn ngữ C và keilC: I. 1. Ngôn ngữ C: C là một Ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao. Hơn thế, C đôi khi được đánh giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler chỉ có thể chạy trong một số máy tính đặc biệt. Vì lý do này C được xem là ngôn ngữ bậc trung. C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại không đặt gánh nặng lên vai người viết ra trình dịch C, là những người bề bộn với các đặc tả phức tạp của ngôn ngữ. Cuối cùng C có thêm những chức năng sau: • Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan tr ọng chẳng hạn như là những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các thủ tục. • Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập trình theo kiểu cấu trúc. • Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa thực dụng. • Dùng ngôn ngữ tiền xử lý, tức là các câu lệnh Tiền xử lý C, cho các nhiệm vụ như là định nghĩa các macro và hàm chứa nhiều tập tin mã nguồn (bằng cách dùng câu lệnh tiền xử lý dạng#include chẳng hạn). • Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc sử dụng kiểu dữ liệu pointer. • Số lượng từ khóa rất nhỏ gọn. • Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ. • Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho tính đóng và tính đa hình. • Hỗ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng từ khóa định nghĩa struct cho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và được điều chỉnh như là toàn bộ. Mặc dù C còn thiếu nhiều chức năng hữu ích nhưng lý do quan trọng để C được chấp nhận vì nó cho phép các trình dịch mới được tạo ra một cách nhanh chóng trên các nền tảng mới và vì nó cho phép người lập trình dễ kiểm soát được những gì mà chương trình (do họ viết) thực thi. Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ khác. Thường thì chỉ có ngôn ngữ ASM chỉnh bằng tay chạy nhanh hơn (ngôn ngữ C), bởi vì ASM kiểm soát được toàn bộ máy. Mặc dù vậy, với sự phát triển các trình dịch C, và với sự phức tạp của các CPU hiện đại, C đã dần thu nhỏ khoảng cách khác biệt về vận tốc này. Một lý do nữa cho việc C được sử dụng rộng rãi và hiệu quả là do các trình dịch, các thư viện và các phần mềm thông dịch của các ngôn ngữ bậc cao khác lại thường được tạo nên từ C. C thường được dùng trong việc lập trình các hệ thống bậc thấp, ở đó có thể cần thiết để xem số nguyên như là một địa chỉ của bộ nhớ, là một giá trị double precision, hay là một kiểu con trỏ. Trong các trường hợp này, C cung cấp việc hoán chuyển, mà phép toán này sẽ bắt buộc chuyển đổi giá trị từ một kiểu sang một kiểu khác. Dùng phép hoán chuyển sẽ làm mất đi phần nào tính an toàn mà thường được cung cấp bởi hệ thống kiểu. Nhiều công cụ đã được tạo ra để giúp người lập trình C tránh dược các lỗi. Việc kiểm tra và kiểm toán mã nguồn tự động thì rất hiệu quả trong mọi ngôn ngữ. Chẳng hạn cho C là Lint. Một thực tế là sử dụng Lint để phát hiện các mã có nghi vấn khi một chương trình được viết lần đầu. Một khi chương trình đã qua được Lint, thì nó được chuyển dịch bởi một trình dịch C. Cũng có một thư viện cho việc tiến hành kiểm tra các biên của mảng và một dạng giới hạn của việc tự động dọn rác, nhưng đó không phải là một phần tiêu chuẩn của C.
  2. Điều nên nhận thức là các công cụ này không phải là vạn năng. Bởi vì sự linh hoạt của C, nhiều kiểu lỗi như là việc dùng sai các hàm tham lượng động, việc dùng chỉ số ngoài biên của mảng và quản lý bộ nhớ không đúng thì không thể phát hiện được. Mặc dù vậy, nhiều trường hợp (lỗi) thông thường đều có thể được nhận ra. Những trình dịch về C ngày nay thương được cung cấp kèm chung với C++ và ngay cả trình dịch cho ngôn ngữ Assmebly. Những sản phẩm trình dịch được bán phổ biến trên thị trường cũng thường cung cấp thêm nhiều công cụ trợ giúp cho người lập trình như là IDE , debuger, Keil C... 2. Phần mềm lập trình Keil C ............ Sau khi cài đặt: a. Khi tạo cho Project: Để tạo 1 project mới chọn Project -> New project như sau: b. Đánh tên và chuyển đến thư mục bạn lưu project. Bạn nên tạo mỗi một thư mục cho 1 project. Rồi chọn save.
  3. Được hình sau:
  4. Trong này co 1 loạt các hãng điện tử sản xuất 8051. Bạn lập trình cho con IC nào thì chọn con đấy, kích chuột vào các dấu + để mở rộng con IC của các hãng. Ở đây ta lập trình cho AT89S52 của hãng Atmel nên ta chọn như sau: khi chọn chip thì ngay lập tức hiện ra bảng 1 số tính năng của chip. Nhấn OK được cửa sổ như sau:
  5. Chọn No. Sau đó được cửa sổ sau: Để tạo 1 file code các bạn chọn File -> New hoặc ấn Ctrl+N. Như sau:
  6. Được cửa sổ sau:
  7. Tiếp theo bạn chọn File -> Save As... hoặc Ctrl+S để nhớ file mặc dù chưa có gì. Các bạn nhập tên vào text box file name. Chú ý tên gì cũng được nhưng không được thiếu đuôi mở rộng .C. Nhấn save. Được cửa sổ: Trong ô bên trái màn hình, cửa sổ project workspace, các bạn mở rộng
  8. Target 1 ra, nhấn chuột phải vào thư mục Source Group 1 chọn Add file to Group “Source Group1” để add file vào project. Chọn file .C mà các bạn vừa nhớ. ở đây là file tên là vidu . nhấn Add 1 lần rồi ấn Close. Được như sau:
  9. Bây giờ nhìn trong Source Group 1 đã thấy file vidu.C. các bạn nhấp chuột phải vào vùng soạn thảo file vidu.C để thêm file thư viện. Chọn Insert “#include ” Cuối cùng của công việc khởi tạo là các bạn viết code cho dự án của mình. Sau khi viết xong code ta vào file -> Save để nhớ file vừa soạn thảo. Tiếp theo để dịch chương trình thì ấn F7 hoặc chọn biểu tượng Build target trên cửa sổ workspace. Sau khi kiểm tra nếu chương trình đúng thì ta tiến hành debug. Trước khi debug ta vào option for target, 1 bảng hiện ra ta nhập tần sồ thạch anh là 12MHz, tiếp đó chon tab output tích chuột vào ô create HEX File để xuất ra file .HEX. Sau đó nhấn ctrl+F5 để debug. Sau khi chạy debug ta sẽ được file .HEX. với file .HEX này ta có thể nạp vào IC để nó hoạt động. II. VI ĐIỀU KHIỂN 8051: 1.1.GIỚI THIỆU CHUNG: Hiện nay có rất nhiều họ Vi điều khiển trên thị trường v ới nhi ều ứng d ụng khác nhau, trong đó họ Vi điều khiển họ MCS-51 được sử dụng rất rộng rãi trên thế giới và ở Việt nam Vào năm 1980 Intel công bố chíp 8051(80C51), b ộ vi đi ều khi ển đ ầu tiên c ủa h ọ vi đi ều khiển MCS-51. Nó bao gồm 4KB ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit. Tiếp theo sau đó là sự ra đời c ủa chip 8052,8053,8055 v ới nhi ều tính năng đ ược c ải tiến Hiện nay Intel không còn cung c ấp các lo ại Vi đi ều khiển h ọ MCS-51 n ữa, thay vào đó các nhà sản xuất khác như Atmel, Philips/signetics, AMD, Siemens, Matra&Dallas, Semiconductors đ ược cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Chip Vi đi ều khi ển đ ược sử d ụng rộng rãi trên thế giới cũng như ở Việt Nam hiện nay là Vi đi ều khi ển c ủa hãng Atmel v ới nhi ều chủng loại vi điều khiển khác nhau. Hãng Atmel có các chip Vi điều khiển có tính năng tương tự như chip Vi điều khiển MCS-51 của Intel, các mã số chip được thay đổi chút ít khi đ ược Atmel s ản xu ất. Mã s ố 80 chuy ển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ở Atmel mã số thành 89C52 (Mã s ố đ ầy đ ủ: AT89C52) v ới tính năng chương trình tương tự như nhau. Tương tự 8051,8053,8055 có mã s ố t ương đ ương ở
  10. Atmel là 89C51,89C53,89C55. Vi điều khiển Atmel sau này ngày càng đ ược c ải ti ến và đ ược b ổ sung thêm nhiều chức năng tiện lợi hơn cho người dùng. Bảng 1 Dung lượng RAM Dung lượng ROM Chế độ nạp 89C51 128 byte 4 Kbyte song song 89C52 128 byte 8 Kbyte song song 89C53 128 byte 12 Kbyte song song 89C55 128 byte 20 Kbyte song song Sau khoảng thời gian cải tiến và phát triển, hãng Atmel tung ra th ị tr ường dòng Vi đi ều khi ển mang số hiệu 89Sxx với nhiều cải tiến và đặc biệt là có thêm khả năng n ạp ch ương trình theo ch ế độ nối tiếp rất đơn giản và tiện lợi cho người sử dụng. Bảng 2 Dung lượng RAM Dung lượng ROM Chế độ nạp nối tiếp 89S51 128 byte 4 Kbyte nối tiếp 89S52 128 byte 8 Kbyte nối tiếp 89S53 128 byte 12 Kbyte nối tiếp 89S55 128 byte 20 Kbyte Tất cả các Vi điều khiển trên đều có đặc tính cơ bản gi ống nhau v ề ph ần m ềm (các t ập l ệnh lập trình như nhau), còn phần cứng được bổ sung với chip có mã s ố ở hai s ố cu ối cao h ơn, các Vi điều khiển sau này có nhiều tính năng vượt tr ội hơn Vi đi ều khi ển thế hệ tr ước. Các Vi đi ều khi ển 89Cxx như trong bảng 1 có cấu tạoROM và RAM như 98Sxx trong b ảng 2, tuy nhiên 98Sxx đ ược bổ sung một số tính năng và có thêm chế độ nạp nối tiếp. 1.2.SƠ LƯỢC PHẦN CỨNG VI ĐIỀU KHIỂN Các thành viên của họ MCS-51 (Atmel) có các đặc điểm chung như sau: + Có 4/8/12/20 Kbyte bộ nhớ FLASH ROM bên trong để lưu chương trình. Nhờ vậy Vi điều khiển có khả năng nạp xoá chương trình bằng điện đến 10000 lần. + 128 Byte RAM nội + 4 Port xuất/nhập 8 bit + Từ 2 đến 3 bộ định thời 16-bit + Có khả năng giao tiếp truyền dữ liệu nối tiếp + Có thể mở rộng không gian nhớ chương trình ngoài 64KByte (bộ nhớ ROM ngoại): khi chương trình do người lập trình viết ra có dung lượng lớn hơn dung lượng bộ nhớ ROM nội, để lưu được chương trình này cần bộ nhớ ROM lớn hơn, cách giải quyết là kết nối Vi điều khiển với bộ nhớ ROM từ bên ngoài (hay còn gọi là ROM ngoại). Dung lượng bộ nhớ ROM ngoại lớn nhất mà Vi điều khiển có thể kết nối là 64KByte + Có thể mở rộng không gian nhớ dữ liệu ngoài 64KByte (bộ nhớ RAM ngoại) + Bộ xử lí bit (thao tác trên các bit riêng rẽ) 1.2.1.KHẢO SÁT SƠ ĐỒ CHÂN Mặc dù các thành viên của họ MSC-51 có nhiều kiểu đóng v ỏ khác nhau, ch ẳng h ạn nh ư hai hàng chân DIP (Dual In-Line Pakage) dạng vỏ dẹt vuông QFP (Quad Flat Pakage) và d ạng chíp không có chân đỡ LLC (Leadless Chip Carrier) và đều có 40 chân cho các ch ức năng khác nhau nh ư vào ra I/0, đọc , ghi , địa chỉ, dữ liệu và ngắt. Tuy nhiên, vì h ầu h ết các nhà phát tri ển chính d ụng chíp đóng v ỏ 40 chân với hai hàng chân DIP, nên chúng ta khảo sát Vi điều khiển với 40 chân dạng DIP :
  11. : +Chân VCC: Chân số 40 là VCC cấp điện áp nguồn cho Vi điều khiển Nguồn điện cấp là +5V±0.5. +Chân GND:Chân số 20 nối GND(hay nối Mass). Khi thiết kế cần sử dụng một mạch ổn áp để bảo vệ cho Vi điều khiển, cách đơn giản là sử dụng IC ổn áp 7805. +Port 0 (P0) Port 0 gồm 8 chân (từ chân 32 đến 39) có hai chức năng: _ Chức năng xuất/nhập :các chân này được dùng để nhận tín hiệu từ bên ngoài vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tín hiệu để điều khiển led đơn sáng tắt. _ Chức năng là bus dữ liệu và bus địa chỉ (AD7-AD0) : 8 chân này (hoặc Port 0) còn làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại (nếu có kết nối với bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớ ngoài. +Port 1 (P1) Port P1 gồm 8 chân (từ chân 1 đến chân 8), chỉ có chức năng làm các đường xuất/nhập, không có chức năng khác. +Port 2 (P2) Port 2 gồm 8 chân (từ chân 21 đến chân 28) có hai chức năng: _ Chức năng xuất/nhập _ Chức năng là bus địa chỉ cao (A8-A15): khi kết nối với bộ nhớ ngoài có dung lượng lớn,cần 2 byte để định địa chỉ của bộ nhớ, byte thấp do P0 đảm nhận, byte cao do P2 này đảm nhận. +Port 3 (P3) Port 3 gồm 8 chân (từ chân 10 đến 17): _ Chức năng xuất/nhập _ Với mỗi chân có một chức năng riêng thứ hai như trong bảng sau Chức năng Bit Tên Ngõ vào nhận dữ liệu nối tiếp P3.0 RxD
  12. Ngõ xuất dữ liệu nối tiếp P3.1 TxD Ngõ vào ngắt cứng thứ 0 P3.2 INT0 Ngõ vào ngắt cứng thứ 1 P3.3 INT1 Ngõ vào của Timer/Counter thứ 0 P3.4 T0 Ngõ vào của Timer/Counter thứ 1 P3.5 T1 Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài P3.6 WR Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài P3.7 RD Ngõ vào của Timer/Counter thứ 2 P1.0 T2 Ngõ Nạp lại/thu nhận của Timer/Counter thứ 2 P1.1 T2X +Chân RESET (RST) Ngõ vào RST ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái ban đầu cho vi đi ều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy +Chân XTAL1 và XTAL2 Hai chân này có vị trí chân là 18 và 19 được sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định. Chân cho phép bộ nhớ chương trình PSEN PSEN ( program store enable) tín hiệu được xuất ra ở chân 29 dùng để truy xuất bộ nhớ chương trình ngoài. Chân này thường được nối với chân OE (output enable) của ROM ngoài. Khi vi điều khiển làm việc với bộ nhớ chương trình ngoài, chân này phát ra tín hiệu kích hoạt ở mức thấp và được kích hoạt 2 lần trong một chu kì máy Khi thực thi một chương trình ở ROM nội, chân này được duy trì ở mức logic không tích cực (logic 1) Chân ALE : (chân cho phép chốt địa chỉ-chân 30) Khi Vi điều khiển truy xuất bộ nhớ từ bên ngoài, port 0 vừa có chức năng là bus địa chỉ, vừa có chức năng là bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt. Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào Vi điều khiển, như vậy có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung cấp cho các phần khác của hệ thống. 1.3. CẤU TRÚC BÊN TRONG CỦA VI ĐIỀU KHIỂN 1.3.1.BỘ NHỚ CHƯƠNG TRÌNH- BỘ NHỚ ROM Bộ nhớ ROM dùng để lưu chương trình do người viết chương trình viết ra. Ch ương trình là t ập hợp các câu lệnh thể hiện các thuật toán để giải quyết các công việc cụ thể, chương trình do người thiết kế viết trên máy vi tính, sau đó được đưa vào lưu trong ROM của vi đi ều khi ển, khi ho ạt động, vi điều khiển truy xuất từng câu lệnh trong ROM để thực hi ện chương trình. ROM còn dùng để chứa số liệu các bảng, các tham số hệ thống, các số liệu cố định của hệ thống. Trong quá trình hoạt động nội dung ROM là cố định, không thể thay đổi, nội dung ROM ch ỉ thay đ ổi khi ROM ở chế độ xóa hoặc nạp chương trình (do các mạch điện riêng biệt thực hiện). Bộ nhớ ROM được tích hợp trong chip Vi điều khi ển với dung lượng tùy vào ch ủng lo ại c ần dùng, chẳng hạn đối với 89S52 là 8KByte, với 89S53 là 12KByte. Bộ nhớ bên trong Vi điều khiển 89Sxx là bộ nhớ Flash ROM cho phép xóa b ộ nh ớ ROM b ằng điện và nạp vào chương trình mới cũng bằng điện và có thể nạp xóa nhiều lần Bộ nhớ ROM được định địa chỉ theo từng Byte, các byte đ ược đánh đ ịa ch ỉ theo s ố hex-s ố th ập lục phân, bắt đầu từ địa chỉ 0000H, khi viết chương trình cần chú ý đ ến đ ịa ch ỉ l ớn nh ất trên ROM, chương trình được lưu sẽ bị mất khi địa chỉ lưu vượt qua vùng này. Ví d ụ: AT89S52 có
  13. 8KByte bộ nhớ ROM nội, địa chỉ lớn nhất là 1FFFH, n ếu ch ương trình vi ết ra có dung l ượng l ớn hơn 8KByte các byte trong các địa chỉ lớn hơn 1FFFH sẽ bị mất. Ngoài ra Vi điều khiển còn có khả năng m ở rộng b ộ nh ớ ROM v ới vi ệc giao ti ếp v ới b ộ nh ớ ROM bên ngoài lên đến 64KByte(địa chỉ từ 0000H đến FFFFH). 1.3.2.BỘ NHỚ DỮ LIỆU- BỘ NHỚ RAM Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lí thông tin. Nó cũng dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu. RAM nội trong Vi điều khiển được tổ chức như sau: _ Các vị trí trên RAM được định địa chỉ theo từng Byte bằng các số thập lục phân (số Hex) _ Các bank thanh ghi có địa chỉ 00H đến 1FH _ 210 vị trí được định địa chỉ bit _ các vị trí RAM bình thường _ Các thanh ghi có chức năng đặc biệt có địa chỉ từ 80H đến FFH. 1.3.3.CỔNG VÀO RA SONG SONG (I/O PORT) 8051 có 4 cổng vào ra song song, có tên lần lượt là P0, P1, P2 và P3. T ất c ảcác c ổng này đ ều là cổng vào ra hai chiều 8bit. Các bit của m ỗi c ổng là m ột chân trên chip, nh ư v ậy m ỗi c ổng s ẽ có 8 chân trên chip. Hướng dữ liệu dùng cổng đó làm c ổng ra hay c ổng vào) là đ ộc l ập gi ữa các c ổng và giữa các chân (các bit) trong cùng một cổng. Ví dụ, ta có thể đ ịnh nghĩa c ổng P0 là c ổng ra, P1 là cổng vào hoặc ngược lại một cách tùy ý, với cả 2 cổng P2 và P3 còn lại cũng vậy. Trong cùng một c ổng P0, ta cũng có th ể đ ịnh nghĩa chân P0.0 là c ổng vào, P0.1 lại là cổng ra tùy ý. Cổng P0 không có điện trở treo cao (pullup resistor) bên trong, m ạch lái t ạom ức cao ch ỉ có khi s ử dụng cổng này với tính năng là bus dồn kênh địa ch ỉ/d ữ li ệu. Nh ư v ậy v ới ch ức năng ra thông thường, P0 là cổng ra open drain, với chức năng vào, P0 là c ổng vào cao tr ở (high impedance). N ếu muốn sử dụng cổng P0 làm cổng vào/ra thông thường, ta phải thêm điện trở pullup bên ngoài. Giá trị điện trở pullup bên ngoài thường từ 4K7 đến 10K. Các cổng P1, P2 và P3 đều có điện tr ở pullup bên trong, do đó có th ể dùng v ới ch ức năng c ổng vào/ra thông thường mà không cần có thêm điện trở pullup bên ngoài. Thực chất, đi ện trở pullup bên trong là các FET, không phải điện trở tuyến tính thông thường, tuy v ậy nhưng kh ả năng phun dòng ra của mạch lái khi đầu ra ở mức cao (hoặc khi là đầu vào) rất nhỏ, chỉ khoảng 100 micro Ampe. 1.3.4.CỔNG VÀO RA NỐI TIẾP (SERIAL PORT) Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng d ụng có yêu c ầu truy ền thông v ới máy tính, hoặc với một vi điều khiển khác. Liên quan đến c ổng n ối ti ếp ch ủ y ếu có 2 thanh ghi: SCON và SBUF. Ngoài ra, một thanh ghi khác là thanh ghi PCON (không đánh đ ịa ch ỉ bit) có bit 7 tên là SMOD quy định tốc độ truyền của cổng nối tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD = 0). 1.3.5.BỘ ĐỊNH THỜI/BỘ ĐẾM (TIMER/COUNTER) Để sử dụng timer của 8051,thực hiện các bước sau: - Quy định chế độ hoạt động cho timer bằng cách tính toán và ghi giá trị cho các bit trong thanh ghi TMOD. - Ghi giá trị đếm khởi đầu mong muốn vào 2 thanh ghi đếm THx và TLx. Đôi khi ta không muốn timer/counter bắt đầu đếm từ 0 mà từ m ột giá tr ị nào đó đ ể th ời đi ểm tràn g ần hơn, hoặc chẵn hơn trong tính toán sau này. Ví dụ nếu cho timer đếm từ 15535 thì sau 50000 xung nhịp (tức 50000 micro giây với thạch anh 12MHz) timer sẽ tràn, và thời gian một giây có thể dễ dàng tính ra khá chính xác = 20 lần tràn của timer (đương nhiên mỗi lần tràn lại phải nạp
  14. lại giá trị 15535). - Đặt mức ưu tiên ngắt và cho phép ngắt tràn timer (nếu muốn). - Dùng bit TRx trong thanh ghi TCON để cho timer chạy hay dừng theo ý muốn.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2