You are on page 1of 52

Khoa Điện – Điện Tử

Lớp DHDT1_K1 TRƯỜNG ĐẠI HỌC THÀNH ĐÔ KHOA ĐIỆN - ĐIỆN TỬ

BÀI TẬP LỚN MÔN KĨ THUẬT VI XỬ LÝ

Họ và tên:  Nguyễn Văn Thức  Nguyễn Thanh Thi  Nguyễn Thị Thùy  Nguyễn Khắc Sáng  Nguyễn Đình Sỹ Lớp: …ĐT1… Khóa: 1…

Hà Nội 2012 Bài tập lớn môn Điện tử số 1

Khoa Điện – Điện Tử MỤC LỤC

Lớp DHDT1_K1

Bài tập lớn môn Điện tử số

2

Khoa Điện – Điện Tử LỜI NÓI ĐẦU

Lớp DHDT1_K1

Trong sự phát triển của đất nước ta hiện nay, điện- điện tử là ngành có vai trò rất quan trọng trong sự phát triển chung đó. Các hệ thống điện- điện tử được ứng dụng trong mọi lĩnh vực của đời sống cũng như trong các dây truyền sản xuất hiện đại. Để xây dựng lên các hệ thống điện- điện tử phải cần rất nhiều kiến thức như: Phân tích hệ thống, thiết kế đánh giá hệ thống, kiến thức về phần cứng, kiến thức về phần mềm…Vì vậy đòi hỏi các kỹ sư điện tử phải có một kiến thức vững vàng. Bản báo cáo này cung cấp những kiến thức cơ bản nhất về vi điều khiển 8051. Đồng thời qua những kiến thức cơ bản đó, các bạn sinh viên sẽ có cái nhìn tổng quát nhất về vi xử lý và vi điều khiển. Nội dung của bản báo cáo gồm 3 chương: Chương 1: Họ vi điều khiển 8051. Chương 2: Ngắt và Timer trong 8051. Chương 3: Một số bài ứng dụng của 8051. Vì thời lượng biên soạn có hạn nên trong bản báo cáo này, nhóm em chỉ đưa ra những vấn đề cơ bản nhất. Nhóm em mong các quí thầy cô có những lời khuyên giúp nhóm em hoàn thiện hơn bản báo cáo này. Chúng em xin chân thành cảm ơn !

Bài tập lớn môn Điện tử số

3

Khoa Điện – Điện Tử Chương 1 HỌ VI ĐIỀU KHIỂN 8051 1.1. Một số khái niệm cơ bản:

Lớp DHDT1_K1

1.1.1.Vi xử lí (VXL): Là thuật ngữ chung dùng để ứng dụng các công nghệ vi xử lí, công nghệ tích hợp và xử lí theo chương trình vớ các chip được chế tạo chỉ tích hợp những phần cứng thiết yếu như CPU cùng với các giao tiếp với CPU và các phần cứng khác. Các phần cứng còn lại (kể cả bộ nhớ) không được tích hợp lên chip mà được ghép nối bên ngoài. 1.1.2. Vi điều khiển (VĐK): Là thuật ngữ dùng để chỉ các chíp được tích hợp các thiết bị ngoại vi lên trên cùng 1 IC, việc tích hợp thêm các thiết bị ngoại vi như vậy tạo ra nhiều lợi ích như : giảm thiểu các ghép nối bên ngoài, giảm thiểu các linh kiện điện tử phụ, giảm chi phí cho thiết kế hệ thống, nâng cao hiệu xuất và tính năng sử dụng. 1.1.3. Các phương pháp lựa chọn một bộ vi điều khiển: Hiện nay, có 4 bộ vi điều khiển 8 bit chính. Đó là : 6811 của Motorola, 8051 của Intel, Z8 của Xilog và Pic16 x của Microchip Technology . Mỗi một loại trên điều có một tập lệnh và thanh ghi riêng duy nhất, nếu chúng không tương thích lẫn nhau. Và cũng có rất nhiều các nhà sản suất khác có cùng loại như trên, vậy đâu sẽ là tiêu chuẩn lựa chọn một bộ vi điều khiển cơ bản. Gồm có 3 tiêu chuẩn chính trong việc lựa chọn một bộ vi điều khiển là : - Tiêu chuẩn thứ nhất: Là phải đáp ứng nhu cầu tính toán của bài toán một cách hiệu quả về mặt giá thành và đầy đủ chức năng có thể nhìn thấy được. Trong khi phân tích bài toán thì trước hết bộ vi điều khiển mà ta chọn phải đáp ứng được nhu cầu đặt ra về mặt công suất và giá thành. Chúng ta phải biết được bộ vi điều khiển nào là 8 bit,16 bit hay 32 bit để có thể đáp ứng tốt nhất nhu cầu bài toán, các tiêu chuẩn được đưa ra để cân nhắc là: + Tốc độ: Tốc độ lớn nhất mà bộ vi điều khiển hỗ trợ là bao nhiêu. + Kiểu đóng vỏ: Đó là kiểu đóng 40 chân DIP hay QEP hay là kiểu khác 4

Bài tập lớn môn Điện tử số

Khoa Điện – Điện Tử

Lớp DHDT1_K1

+ Công suất tiêu thụ: Điều này đặc biệt khắt khe đối với những sản phẩm dùng pin,acquy… + Dung lượng bộ nhớ ROM và RAM trên chíp + Số chân vào - ra và bộ định thời trên chíp. + Khả năng dễ dàng nâng cấp công suất cao hoặc giảm công suất tiêu thụ. + Giá thành cho một đơn vị: Điều này quyết định giá thành cuối cùng của bộ sản phẩm mà một bộ vi điều khiển được sử dụng - Tiêu chuẩn thứ hai: Là khả năng phát triển các sản phẩm xung quanh nó dễ ràng như thế nào? Các cân nhắc chủ yếu trong tiêu chuẩn này bao gồm: khả năng có sẵn trình lượng ngữ,gỡ rối, trình biên dịch ngôn ngữ C hiệu quả về mã nguồn, trình mô phỏng hỗ trợ kĩ thuật và khả năng sử dụng trong nhà và ngoài môi trường, Trong nhiều trường hợp sự hỗ trợ của nhà cung cấp thứ ba (không phải nhà sản xuất chip) cho chíp cũng tốt như nhau. - Tiêu chuẩn thứ ba: Là khả năng sẵn sàng đáp ứng về số lượng trong hiện tại và tương lai. Đối với một số nhà thiết kế tiêu chuẩn này còn quan trọng hơn hai tiêu chuẩn trước. Hiện nay, các bộ vi điều khiển 8 bit dấu đầu, hộ 8051 có số lượng lớn các nhà cung cấp(nhiều nguồn). Trong trường hợp 8051 nhà sáng chế của nó là Intel, nhưng hiện nay có rất nhiều nhà sản xuất nó (bao gồm: Intel,Atmel, AMD…) 1.2. Tổng quan về họ vi điều khiển 8051 1.2.1. Lịch sử ra đời và phát triển Vào năm 1981. Hãng Intel giới thiệu bộ vi điều khiển được gọi là 8051.Bộ vi điều khiển này bao gồm: 128 byte RAM ,4K byte ROM trên chip, 2 bộ đinh thời, 1 cổng nối tiếp và 4 cổng vào ra tất cả được đặt trong cùng một chíp. Họ 8051 là một bộ vi xử lí 8 bit, nghĩa là CPU xử lí được 8 bit dữ liệu trong cùng một thời điểm, còn những dữ liệu nào lớn hơn 8 bit sẽ được chia ra thành các dữ liệu 8 bit cho CPU xử lí. Họ vi điều khiển 8051 đã trở nên phổ biến khi Intel cho phép các nhà sản xuất khác cùng sản xuất ra 8051 và bán bất kỳ dạng biến thể nào của nó nhưng tất cả những chíp biến thể đó đều phải tương thích với 8051 ban đầu về các lệnh. Điều này có nghĩa Bài tập lớn môn Điện tử số 5

chúng ta còn có bộ vi điều khiển 8052.2. Các đặc tính của họ 8051: . Bố trí bên trong của sơ đồ khối 8051: Bài tập lớn môn Điện tử số 6 .2.3.Ngoài bộ vi điều khiển 8051.8031 và các dạng biến thể khác. 1.Khoa Điện – Điện Tử Lớp DHDT1_K1 là nếu ta viết chương trình điều khiển cho phiên bản của họ 8051 thì tất cả những dạng biến thể đó điều hoạt động được.Bảng so sánh các đặc tính của họ 8051 với các loại khác: 1.Các đặc tính riêng của họ 8051 Đặc tính Ram trên chip Rom Bộ định thời Chân vào ra Cổng nối tiếp Nguồn ngắt Số lượng 128 byte 4k byte 2 32 1 6 . .

các biến tạm thời…). PROM. I2C. Trong đó.Chức năng: CPU tiến hành các thao tác tính toán xử lý. Bộ nhớ dữ liệu dùng để chứa dữ liệu (bao gồm các tham số.Khoa Điện – Điện Tử Lớp DHDT1_K1 1. Thí dụ có thể kể đến như: ROM. một giao thức hay một nguyên tắc nhất định. Đơn vị xử lí trung tâm CPU: . Cổng vào/ ra nối tiếp: . . các thanh ghi.Khái niệm: Cổng nối tiếp có thể được hiểu đơn giản là việc truyền lần lượt các bít dữ liệu trên cùng một đường tín hiệu. EEPROM.2.3. Tùy vào dạng dữ liệu mà loại bộ nhớ này có thể mất hoặc không mất dữ liệu khi dừng cấp nguồn nuôi. đưa ra các tín hiệu địa chỉ. SCI… 7 Bài tập lớn môn Điện tử số . Thí dụ một số giao thức như: SPI. bộ nhớ chương trình dùng để chứa mã chương trình hướng dẫn cho CPU thực hiện một nhiệm vụ nào đó. Thông thường bộ nhớ chương trình không bị mất dữ liệu khi dừng cung cấp nguồn nuôi. Bộ nhớ : Hiện nay. dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các lệnh. Flash. bộ nhớ của vi điều khiển 8051 gồm có hai dạng chính.Cấu tạo: CPU được xem như bộ não của vi điều khiển và nó có cấu tạo bao gồm đơn vị xử lí số học và lôgic(ALU). Đó là bộ nhớ chương trinh và bộ nhớ dữ liệu.3. 1.3.3. 1. EPROM. các khối lôgic và các mạch giao tiếp. Đồng thời việc truyền dữ liệu bằng cổng nối tiếp phải tuân theo một cơ chế.1.

Từ đó. + Mỗi cổng vào/ra song song thường vào/ra khác nhau và gọi là các cổng 08 bít.4.3. ta có thể đưa ra hay đọc vào các giá trị lôgic khác nhau đối với từng đường tín hiệu vào/ra.Khoa Điện – Điện Tử .Đặc điểm: + Đây là cổng bao gồm các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp với thế giới bên ngoài IC. + Bán song công: Thiết bị có thể truyền và nhận dữ liệu nhưng tại một thời điểm chỉ có thể làm một trong hai việc đó.Phân loại: Cổng nối tiếp gồm có 02 kiểu dữ liệu chính: Lớp DHDT1_K1 + Truyền đồng bộ: Thiết bị truyền và nhận đều dùng chung một xung nhịp. hoặc là nhận dữ liệu. Các đường tín hiệu vào/ra của các cổng và thuộc cùng một cổng là độc lập với nhau. Bài tập lớn môn Điện tử số 8 . xung nhịp là yếu tố không thể thiếu và nó có vai trò xác định giá trị của bít dữ liệu hay nói một cách khác là xác định thời điểm đọc mức lôgic trên đường truyền dữ liệu. Lưu ý: Trong truyền dữ liệu nối tiếp. 1. + Truyền dị bộ: Thiết bị truyền và nhận sử dụng hai nguồn xung nhịp riêng với độ chênh lệch nhau không nhiều. + Các cổng vào/ra song song có thể được tích hợp thêm các chức năng đặc biệt liên quan đến các ngoại vi khác. . Cổng vào/ ra song song: . + Song công: Thiết bị có thể đồng thời truyền và nhận dữ liệu.Khái niệm: Cổng song song có thể được hiểu là cổng gồm các bít dữ liệu được truyền cùng một lúc trên các đường tín hiệu khác nhau.Chức năng: Cổng nối tiếp gồm 03 chức năng cơ bản: + Đơn công: Thiết bị chỉ có thể hoặc là truyền. . Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị điện áp tại chân cổng tương ứng với giá trị lôgic 0(mức điện áp thấp xấp xỉ 0 VDC)hoặc 1(mức điện áp cao xấp xỉ +5 VDC).

Chức năng: Dùng để ghép nối giữa các bus bên trong chip và các chân đưa ra ngoài chip. tín hiệu địa chỉ sẽ xuất hiện trước và tín hiệu dữ liệu xuất hiên sau trên cùng một tập hợp các đường tín hiệu.Nhiệm vụ : Dùng để đếm các xung nhịp và giá trị của bộ đếm sẽ được tăng lên 01 đơn vị hay giảm đi 01 đơn vị mỗi khi có thêm một xung nhịp tại đầu vào đếm. Ngoài ra.5.Đặc điểm của các đường tín hiệu: + Thông thường thì số lượng các đường tín hiệu là giữ nguyên khi đưa ra ngoài chip. 1. Bộ đếm/Bộ định thời: Lớp DHDT1_K1 .4.3. các tín hiệu địa chỉ và dữ liệu có thể được ghép với nhau (cùng sử dụng chung một số chân nào đó) hoặc được tách riêng (tín hiệu địa chỉ dùng một số chân. Lúc đó. + Xung nhịp bên ngoài IC:Là các tín hiệu lôgic thay đổi liên tục giữa 02 mức 0-1và không nhất thiết phải là đều đặn hay còn được gọi là các bộ đếm (counters). .Phân loại xung nhịp: Gồm 02 loại chính: + Xung nhịp bên trong IC: Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC hay còn được gọi là các bộ định thời (Timers). tín hiệu dữ liệu dùng một số chân khác). + Người ta thường “dồn kênh” hay còn gọi là ghép chức năng giữa bus địa chỉ và bus dữ liệu để giảm thiểu số chân cần thiết. + Khi đưa ra ngoài.Khoa Điện – Điện Tử 1. tuy nhiên trong một số trường hợp số lượng các đường tín hiệu có thể nhỏ hơn số lượng thực bên trong (ví dụ như trường hợp của vi xử lý 8088.3. Khối giao tiếp bus: . việc đưa các tín hiệu địa chỉ và dữ liệu ra ngoài là nhằm mở rộng khả năng phối ghép thêm của vi xử lý với các ngoại vi khác (chủ yếu là các bộ nhớ ngoài) ngoài các ngoại vi được tích hợp trên IC. Kiểu đóng vỏ của chíp 8051 Bài tập lớn môn Điện tử số 9 . 1. .6. bus dữ liệu bên trong là 16 bit nhưng đưa ra ngoài chỉ có 8 bit).

.Phân loại: Hiện nay có 2 kiểu đóng vỏ đối với họ 8051: + Đóng theo kiểu hai hàng chân PDIP/Cerdip: + Đóng theo kiểu vuông dẹt PQFP/TQFP: Bài tập lớn môn Điện tử số 10 .Khoa Điện – Điện Tử Lớp DHDT1_K1 .Cấu tạo: Một bộ chíp 8051 có tất cả 40 chân với các chức năng riêng và được đóng vào trong một hộp theo các cách khác nhau.

Khoa Điện – Điện Tử Lớp DHDT1_K1 + Đóng theo kiểu vuông dẹt PLCC/LCC: 1.5. Chức năng các chân của 8051: Bài tập lớn môn Điện tử số 11 .

đất GND. Và 8 chân còn lại dùng cho nguồn VCC. . các chân giao động XTAL1 và XTAL2 tái lập RST cho phép chốt địa chỉ ALE truy cập địa chỉ ngoài cho phép cất chương trình.Chân RST: Đó là chân số 9 còn gọi là chân tái lập RESET cho chíp 8051. . Trong đó. Cần phải lưu ý rằng có nhiều tốc độ khác nhau của họ 8051.Chân GND: Đó là chân số 20 và còn được gọi là chân nối Mass. Một phía của tụ điện được nối xuống đất. P1. Bộ giao động thạch anh được nối tới XTAL1 và XTAL2 cũng cần hai tụ điện giá trị 30pF. Nó là đầu vào có mức tích cực cao (bình thường ở mức thấp). P3 với mỗi cổng có 8 chân. .Khoa Điện – Điện Tử Lớp DHDT1_K1 Chíp AT89C51 gồm có 40 chân.Chân VCC: Đó là chân số 40 dùng để cấp điện áp nguồn (+5V) cho chíp. Cụ thể là: . Dưới đây là sơ đồ cấu tạo chân RST: Bài tập lớn môn Điện tử số 12 . có 32 chân dành cho 4 cổng P0. P2. Khi chân này được cấp một xung cao thì vi điều khiển sẽ hiểu rằng phải thiết lập lại trạng thái.Chân XTAL1 và XTAL2: Lần lượt là hai chân đầu vào 19 và 18 được nối với bộ giao động thạch anh. Tốc độ được coi như là tần số cực đại của bộ giao động được nối tới chân XTAL.

Chân ALE: Đó là chân số 30. Hay nói cách khác nó không được để hở. Ngoài ra. chân này cho phép xuất giá trị vào bộ nhớ ngoài. chân PSEN 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. như vậy có thể dùng tín hiệu chân ALE làm tín hiệu xung nhịp cho các phần khác của hệ thống.Chân EA : Đó là chân số 31 có nghĩa là truy cập ngoài (External Access). . P2 và P3. Ngoài ra.Chân PSEN : Đó là chân số 29. để sử dụng các chân của cổng 0 vừa làm đầu ra. Dưới đây là sơ đồ cổng P0: Bài tập lớn môn Điện tử số 13 . .Cổng P0: Đây là cổng chiếm tất cả 8 chân (từ chân số 32 đến 39). khi nối 8051/31 tới bộ nhớ ngoài thì cổng 0 cung cấp cả địa chỉ và dữ liệu 8051 dồn dữ liệu và địa chỉ qua cổng P0 để tiết kiệm số chân. nó là một chân đầu vào và phải được nối hoặc với VCC hoặc GND. vừa làm đầu vào thì mỗi chân phải được nối tới một điện trở kéo bên ngoài 10kΩ vì cổng P0 là một màng mở khác với các cổng P1. 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 chung với IC chốt. chân này được nối với chân OE (Output Enable) của Rom ngoài. chân này cho phép chốt địa chỉ ngoài và được tích cực cao. Khi vi điều khiển làm việc với bộ nhớ ngoài. chân ALE được sử dụng để phân kênh địa chỉ và dữ liệu bằng cách nối tới chân G của chíp 74LS373.Khoa Điện – Điện Tử Lớp DHDT1_K1 . Nó có thể được dùng như cổng đầu ra. . Ngoài ra. Các xung đưa vào chân ALE có tốc độ bằng 1/6 tần số dao động đưa vào vi điều khiển.

So với cổng P0 thì cổng này không cần đến điện trở kéo vì nó đã có các điện trở kéo bên trong.0 cung cấp 8 bit thấp qua A0 – A7. . Trong khi P.Khoa Điện – Điện Tử Lớp DHDT1_K1 . Còn để biến cổng P1 thành đầu vào thì nó phải được lập trình ở mức logic cao đến tất cả các bit của nó. .Cổng P1: Cổng P1 cũng chiếm tất cả 8 chân (từ chân 1 đến chân 8) nó có thể được sử dụng như đầu vào hoặc đầu ra. Vì một bộ 8051/31 có khả năng cung cấp 64kbyte bộ nhớ ngoài. Và nó có chức năng bổ sung là cung cấp một số tín hiệu quan trọng đặc biệt Bài tập lớn môn Điện tử số 14 . Vai trò kép của P2: Cổng P2 được dùng như đầu ra đơn giản trong các hệ thống dựa trên 8751. Còn để tạo cổng P2 như đầu vào thì nó phải được lập trình bằng mức logic cao tới tất cả các chân của nó. 89C51 và DS5000. Công việc của P2 là khi 8051/31được nối tới bộ nhớ ngoài thì P2 được dùng cho 8 bít của địa chỉ 16 bit và nó không thể dùng cho vào ra.A15 báo chức năng kép của nó.Cổng P3: Đây là cổng chiếm tổng cộng là 8 chân (từ chân 10 đến chân 17) nó có thể được sử dụng như đầu vào hoặc đầu ra. Khi tái lập. Cổng P2 cũng được chỉ định như là A8 . cổng P2 cũng không cần điện trở kéo vì nó đã có các điện trở kéo bên trong. nó cần một đường địa chỉ 16 bít. Nó có thể được sử dụng như đầu vào hoặc đầu ra giống như cổng P1. Cống P3 không cần các điện trở kéo cũng như P1 và P2. Trong quá trình tái lập thì cổng P1 được cấu hình như một cổng đầu ra.Cổng P2: Cổng P2 cũng chiếm 8 chân (các chân từ 21 đến 28). thì cổng P2 được cấu hình như một cổng đầu ra.

Bảng dưới đây cung cấp các chức năng khác của cống P3 trong cả 8051 và 8031.0 và P3. được dùng với chức năng vào ra trong các hệ thống dựa trên 8751. + Bit P3. 89C51 hoặc D35000.3 được dành cho các ngắt ngoài. Hai bit này.4 và P3. + Cuối cùng các bit P3. Sơ đồ mạch điện cơ bản để chíp 8051 có thể hoạt động được: Bài tập lớn môn Điện tử số 15 .Khoa Điện – Điện Tử Lớp DHDT1_K1 chẳng hạn như các ngắt.5 được dùng cho các bộ định thời 0 và 1.6 và P3.7 được cấp cho các tín hiệu ghi và đọc các bộ nhớ ngoài được nối tới các hệ thống dựa trên 8051/31. Nhìn vào bảng trên ta thấy: + Các bit P3.1 được dùng cho các tín hiệu nhận và phát dữ liệu trong truyền thông dữ liệu nối tiếp.6. + Các bit P3. 1.2 và P3.

Khoa Điện – Điện Tử Lớp DHDT1_K1 Chương 2 Bài tập lớn môn Điện tử số 16 .

Các thanh ghi của Timer: .1.1. Vì mỗi tầng kế tiếp phải chia cho 2 nên timer n tầng phải chia tần số xung nhịp cho 2n. xung nhịp của Flip –Flop thứ nhất cũng là xung nhịp của Flip – Flop thứ 2 mà nó cũng chia tần số của xung đó cho 2 và cứ tiếp tục cho đến hết.1. Timer là gì? .Timer là một chuỗi các Flip-Flop đươc chia làm 2. . + Đếm sự kiện dùng để xác định số lần xảy ra của sự kiện. + Chức năng các bít trên thanh ghi chế độ định thời (TMOD): Bài tập lớn môn Điện tử số 17 . Tìm hiểu các bộ timer: 2.Khoa Điện – Điện Tử Lớp DHDT1_K1 NGẮT VÀ TIMER TRONG 8051 2.Các bộ định thời (timer) được sử dụng rất rộng rãi như: + Trong trong ứng dụng đo lường và điều khiển.2. nó nhận tín hiệu vào là một xung nhịp. 2.Thanh ghi chế độ định thời (TMOD): + Đặc điểm: Thanh ghi TMOD chứa 2 nhóm 4 bít dùng để đặt chế độ làm việc cho Timer 0 và Timer 1. + Định khoảng thời gian (hẹn giờ) thông qua việc thiết lập cờ trŕn bằng 1. Đó chính là việc đưa các sự kiện thành sự chuyển mức từ 1 xuống 0 trên các chân T0.Tùy thuộc vào mỗi ứng dụng mà đầu vào bộ định thời có thể là nguồn xung lấy từ xung nhịp của vi điều khiển hoặc nguồn xung từ bên ngoài đưa vào. T1 hoặc T2 để dùng các Timer tương ứng đếm các sự kiện đó. + Dùng để tạo xung nhịp hoặc đo độ rộng của xung. .1.

11) . C/#T0:Bít chọn chế độ Counter/Timer của Timer 0.10. được xóa bởi phần mềm hoặc phần cứng khi bị xử lý chỉ đến trình phục vụ ngắt. nếu bằng 0(timer) dùng để định khoảng thời gian <lấy xung từ bên trong vi điều khiển.2 TCON . được xóa bởi phần mềm hoặc phần cứng khi bị xử lấy chỉ đến trình phục vụ ngắt.4 TCON . GATE 0: Bít mở cổng cho Timer 0.5 TCON . Nếu bít này được đặt là 0 thì hoạt động của Timer 0 không bị ảnh hưởng bởi mức logic trên chân INT 0.Thanh ghi điều khiển Timer (TCON) + Đặc điểm: Thanh ghi TCON chứa các bít trạng thái và các bít điều khiển cho Timer 0 và Timer 1. C/#T1: Bít chọn chế độ Counter/Timer của Timer 1.1 TCON . M1-M0: Hai bít chọn chế độ làm việc của Timer (00. khi được đặt bằng 1 thì Timer 1 chỉ chạy khi chân INT 1 ở mức cao. Nếu 1 là đếm sự kiện. TR0: Bít điều khiển Timer 0 hoạt động được đặt/xóa bằng phần mềm để điều khiển cho Timer chạy/dừng. Nếu bít này được cài đặt là 0 thì hoạt động của Timer 1 không bị ảnh hưởng bởi mức logic trên chân INT 1.7 TCON .01. nếu 0 là định thời gian.Khoa Điện – Điện Tử Lớp DHDT1_K1 GATE 1: Bít mở cổng cho Timer 1. TCON .0 TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0 + Chức năng các bít trên thanh ghi điều khiển Timer (TCON): TF1: Cờ báo tràn của Timer 1 được đặt bởi phần cứng khi cờ tràn.6 TCON . khi được cài đặt bằng 1 thì Timer 0 chỉ chạy khi chân INT 0 ở mức cao.Nếu bằng 1(couter) đếm sự kiện <lấy xung từ bên ngoài >.3 TCON . 18 Bài tập lớn môn Điện tử số . TR1: Bít điều khiển Timer 1 hoạt động được đặt/xóa bằng phần mềm để điều khiển cho Timer chạy/dừng. TF0: Cờ báo tràn của Timer 0 được đặt bởi phần cứng khi cờ tràn.

Khoa Điện – Điện Tử IT1: Cờ ngắt do Timer 1.Thanh ghi T2CON : + Đặc điểm: Thanh ghi T2CON chứa các bít trạng thái và các bít điều khiển cho Timer 0 và Timer 1.0 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/#T2 CP/#RL2 + Chức năng các bít trên thanh T2CON: TF2: Cờ báo tràn của Timer 2. Timer TH1 và TL1. TF2 được đặt khi Timer 2 tràn và được xóa bằng phần mềm TF2 không được thiết lập khi TCLK hoặc RCLK được đặt bằng 1.6 T2CON. EXF2 được xóa bởi phần mềm. Cụ thể Timer 0 có TH0 và TL0.5 T2CON. mỗi Timer có thanh ghi 8 bít dùng để chứa giá trị khởi tạo hoặc giá trị hiện thời của các Timer.3 T2CON. .2 T2CON. TXF2=1. RCLK: Bít chọn Timer cung cấp xung nhịp cho đường nhận cổng nối tiếp. RCLK=1 thì Timer 2 sẽ cung cấp tốc độ baud cho cổng nối tiếp (ở chế độ 1 và 3) RCLK=0 thì Timer sẽ cung cấp tốc độ baud cho cổng nối tiếp (ở chế độ 1 và 3). EXF2=1cũng gây ra ngắt do Timer 2 nếu như ngắt này được lập trình cho phép.Các thanh ghi chứa giá trị của các bộ định thời: Lớp DHDT1_K1 + Đặc điểm: Các Timer 0 và Timer 1 đều là các Timer 16 bít. Timer 0 TH0 (8 bít) TL0 (8 bít) TH1 (8 bít) Timer 1 TL1 (8 bít) . IE1: Cờ ngắt ngoài 1. Bài tập lớn môn Điện tử số 19 . T2CON.4 T2CON.1 T2CON. khi xảy ra sự nạp lại hoặc thu nhận.7 T2CON. IE0: Cờ ngắt ngoài 0. EXF2: Cờ ngắt ngoài của Timer 2. IT0: Cờ ngắt do Timer 0.

1. Các chế độ hoạt động của Timer: .1 có thể dùng THx để chứa giá trị nạp lại còn Timer 2 lại dùng RCAP2H và RCAP2L để chứa giá trị cần nạp lại. CP/#RL2: Bít chọn chế độ thu nhận hay nạp lại của Timer 2. Nế RCLK và TCLK =1.Bít T2MOD. TR2: Bít điều khiển hoạt động của Timer 2( giống như TR0 và TR1) C/#T2: Bít chọn chế độ Counter/Timer của Timer 2.1 và TL0. ít được sử dụng.7 đến T2MOD.TL2. tuy nhiên khác nhau là Timer 0. Khi CP/#RL2C =0 việc nạp lại được thực hiện khi hoặc là Timer 2 tràn hoặc là có sườn xuống ở chân T2EX và bít EXEN2 được đặt ở mức 1. TH2 và TL2 chứa các giá trị đếm của Timer 2. TCLK=1 thì Timer 2 sẽ cung cấp cho tốc độ baud cho cổng nối tiếp ở đường truyền TCLK thì Timer 1 sẽ cung cấp tốc độ baud cho cổng nối tiếp ở đường truyền.RCAP2H và RCAP2L: Giống như TH0. 20 Bài tập lớn môn Điện tử số .1. Trong chế độ này bộ định thời dùng 13 bít (8 bít TH và 5 bít TL) để chứa giá trị đếm. 2. Bít T2MOD. . Khi CP/#RL2C=1 việc thu nhận được thực hiện khi có xườn xuống ở chân T2EX và bít EXEN2 được đặt là 1.Thanh ghi TH2.1 ký hiệu là DCEN cho phép đầu ra khi sử dụng Timer 2 để tạo xung(chế độ tạo xung – Clock out). bít này được bỏ qua.0 ký hiệu là DXEN bít này cho phép Timer 2 hoạt động nhu 1 bộ đếm tiến/lùi. Timer 2 tự nạp lại khi tràn.Khoa Điện – Điện Tử Lớp DHDT1_K1 TCLK: Bít chọn Timer cung cấp xung nhịp cho đường truyền cổng nối tiếp. .Thanh ghi T2MOD: Các bít từ T2MOD. chế độ này chỉ tương thích với các bị vị điều khiển trước kia. giờ chế độ này không còn thích hợp. 3 bít thấp của TL không được sử dụng.2 không được sử dụng. EXEN2: Bít điều khiển hoạt động của Timer 2.3. khi EXEN2=1 việc nạp lại hoặc thu nhận (Capture) diễn ra khi có sự chuyển trạng thái từ 1 sang 0 ở chân T2EX nếu T2 không sử dụng để cung cấp tốc độ baud cho cổng nối tiếp.Chế độ 0: + Đặc điểm: Chế độ 0 là chế độ định thời 13 bít.

Chế độ 1: + Đặc điểm: Trong chế độ 1. khi cờ tràn TF sẽ được đặt bằng 1. Nếu C/Tx=1. khi đếm quá giá trị này sẽ xảy ra tràn. Sau khi tràn Bài tập lớn môn Điện tử số 21 . các Timer sẽ bị cấm mà không cần quan tâm đến GATE và mức logic trên các chân INTx (thể hiện là cổng AND). bộ định thời dùng cả hai thanh ghi TH và TL để chứa giá trị đếm.T1 hoặc T2). vì vậy chế độ này còn gọi là chế độ định thời 16 bít. các Timer sẽ hoạt động khi hoặc là bít GATE =0 hoặc là bít GATE=1 và trên chân INTx có mức logic là 1. tần số của xung ở đây là 1/12 tần số của bộ dao động thạnh anh (Fosc). Với chế độ 1 giá trị lớn nhất mà Timer chứa được là 65535 (tương ứng FFFFH). Nếu TRx=0. GATE và mức logic trên các chân INTx. xung Clock được lấy từ bên ngoài qua chân Tx(T0. xung Clock sẽ được lấy từ bộ chia tần trong chíp. Còn nếu TRx=1.Khoa Điện – Điện Tử + Sơ đồ: Lớp DHDT1_K1 + Nguyên lý hoạt động: Nguồn xung Clock được đưa tới Timer từ các nguồn khác nhau phụ thuộc vào bít C/#Tx trong thanh ghi TMOD. . Nguồn xung Clock nói trên sẽ được điều khiển để đưa tới các Timer bằng các bit TR. Còn nếu C/Tx=0.

+ Sơ đồ: .Khoa Điện – Điện Tử Lớp DHDT1_K1 nếu muốn chương trình đếm tiếp ta phải có câu lệnh nạp lại giá trị khởi tạo sau khi dừng Timer. Sau khi đếm quá 255 sẽ xảy ra tràn. khi đó TF được đặt bằng 1 đồng thời giá trị của Timer tự động được nạp lại bằng nội dung TH.Chế độ 2: + Đặc điểm: Trong chế độ 2 bộ Timer dùng TL để chứa các giá trị đếm và TH chứa giá trị nạp lại vì vậy chế độ này được gọi là chế độ tự nạp lại 8 bít. + Sơ đồ: Bài tập lớn môn Điện tử số 22 .

Khoa Điện – Điện Tử Lớp DHDT1_K1 .Chế độ 3: + Đặc điểm: Trong chế độ 3. + Sơ đồ: + Nguyên lý hoạt động: Bộ Timer thứ 1 với nguồn xung Clock được lấy từ bộ chia tần trên chíp hoặc từ bộ dao động bên ngoài qua chân T0 tùy thuộc vào giá trị của bít C/#T0 việc điều khiển Bài tập lớn môn Điện tử số 23 . Timer 0 được tách thành 2 bộ Timer 8 bít hoạt động độc lập chế độ này sẽ giúp cung cấp thêm cho ta 1 bộ Timer nữa.

có 2 cách dể thực hiện điều này đó là sử dụng các ngắt và thăm dò (polling).Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị. bit TL0 và mức lôgic trên chân INT0 (giống chế độ 0.Một bộ phận vi điều khiển có thể khắc phục một vài thiết bị.1. Trong phương pháp này sử dụng các ngắt thì mỗi khi có một thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt. Lập trình cho Timer: . Ngắt là gì? . giá trị đếm chứa trong TH0 khi cờ tràn TH1=1 gây ra ngắt bởi Timer 1. .1. Như vậy trong trường hợp này Timer 1 chỉ có thể sử dụng cho các ứng dụng không cần đến ngắt như tạo tốc độ baud cho port nối tiếp. + Bước 2: Lấy 65536 – n .Như ta đã biết để cho Timer hoạt động trước hết chúng ta phải tính toán hai giá trị TH0 vàTL để nạp vào cho chip.2. Với n là kết quả của bước 1 + Bước 3: Chuyển kết quả ở bước 2 sang hệ thập lục phân dưới dạng: OxAABB + Bước 4: Đặt TL=OxAA.Khi Timer 0 được tách thành 2 Timer 8 bít thì Timer 1 vẫn hoạt động bình thường với các chế độ 0.Khoa Điện – Điện Tử Lớp DHDT1_K1 hoạt động của bộ thứ 1 do bít GATE.2).4.1. Chương trình đi cùng với ngắt được gọi là trình dịch vụ ngắt ISR (Interrupt Service Rouine) hay còn gọi là trình quản lý ngắt (Interruput Handler). 2. TH0=OXBB.1.2. Bộ Timer thứ 2 với nguồn xung Clock được lấy từ bộ chia tần trên chíp việc điều khiển hoạt động chỉ là việc đặt lại giá trị của bít TR0. Giá trị đếm chứa trong TL0.2 tuy nhiên khi xảy ra tràn cờ TF1 không được thiết lập bằng 1. Sau đây là các bước tinh toán để lập trình cho Timer: + Bước 1: Chia thời gian trễ cần thiết (độ rộng xung) cho 1us. Bài tập lớn môn Điện tử số 24 . 2. khi tràn cờ TF0=1 gây bởi Timer 0. Tìm hiểu các ngắt: 2.

+ Nó nhảy đến một số vị trí cố định trong bộ nhớ được gọi là bảng véc tơ ngắt nói lưu giữ địa chỉ của một tình trình phục vụ ngắt.Khoa Điện – Điện Tử Lớp DHDT1_K1 . + Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Lưu ý: Ở bước 5 đến vai trò nhạy cảm của ngăn xếp. 2. Địa chỉ của ngắt này là 001B4.2 và P3. .Hiện nay.Còn trong phương pháp thăm dò thì bộ vi sử điều khiển hiển thị liên tục tình trạng của một thiết bị đã cho và điều kiện thỏa mãn thì nó phục vụ thiết bị. vì lý do này mà chúng ta phải cẩn thận khi thao tác các nội dung của ngăn xếp trong ISR.2. Vị trí trong bảng vector của các ngắt ngoài này lần lượt là 0003H và 0013H gán cho các chân INT0 và INT1. + Ngắt do bộ Timer 2 Bài tập lớn môn Điện tử số 25 . Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt). Địa chỉ của ngắt này là 000B4.Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau: + Nó kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn xếp. + Ngắt do bộ Timer 0.2. + Bộ vi điều khiển nhận địa chỉ ISR từ bảng véc tơ ngắt và nhảy tới đó.3 của cổng P3. + Nó cũng lưu tình trạng hiện tại của tất cả các ngắt vào bên trong ( nghĩa là không lưu vào ngăn xếp). Sau đó nó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được phục vụ. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 02 byte trên đỉnh của ngăn xếp vào PC. chíp AT89C51 có 6 ngắt: + Hai ngắt ngoài đến từ chân #INT0 và từ chân #INT1 tương ứng các chân P3. Các ngắt (Interrupt) của 8051: . Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó. + Ngắt do bộ Timer 1. Đặc biệt trong ISR cũng như bất kỳ chương trình con CALL nào số lần đẩy vào ngăn xếp (Push) và số lần ra từ nó (Pop) và phải bằng nhau.

: Không được định nghĩa + ET2 : Cho phép ngắt từ Timer 2 + ES : Cho phép ngắt từ từ Port nối tiếp + ET1 : Cho phép ngắt từ Timer 1 + EX1 : Cho phép ngắt ngoài 1 + ET0 : Cho phép ngắt từ Timer 0 + EX0 : Cho phép ngắt ngoài 0 .2. 2.3.: Không được định nghĩa + PT2 : Ưu tiên cho ngắt từ Timer 2 Bài tập lớn môn Điện tử số 26 .Thanh ghi cho phép ngắt IE (Interrupt Enable) Trong đó: + EA: Cho phép hoặc cấm toàn bộ + . thanh ghi ưu tiên ngắt (IP).Thanh ghi ưu tiên ngắt IP : 7 6 5 4 3 2 1 0 - - PT2 PS PT1 PX1 PT0 PX0 Trong đó : + .Sáu ngắt này được xóa khi Reset và được đặt riêng bằng phần mềm bởi các bít trong các thanh ghi cho phép ngắt (IE). Các thanh ghi của Ngắt: .Khoa Điện – Điện Tử + Ngắt do Port nối tiếp Lớp DHDT1_K1 .: Không được định nghĩa + .

cơ gây ngắt tự động bị xóa bởi phần cứng. Khi chỉ đến một ngắt. Làm việc với Ngắt : Bài tập lớn môn Điện tử số 27 .Các bước cho phép ngắt : + Bước 1: Bit D7 của thanh ghi IE là EA phải được bật lên cao để cho phép các bit còn lại của thanh ghi nhận được hiệu ứng.Các Vector Ngắt : Lớp DHDT1_K1 Khi có một ngắt nào đó được chấp nhận.4. Nó là địa chỉ bắt đầu của chương trình con phục vụ ngắt ISR (Interrupt Service Routine) tương ứng với nguồn tạo ngắt. Nếu EA =0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng của nó ttrong IE là mức cao.Khoa Điện – Điện Tử + PS : Ưu tiên cho ngắt Port nối tiếp + PT 1 : Ưu tiên cho ngắt từ Timer 1 + PX1 : Ưu tiên cho ngắt ngoài 1 + PT0 : Ưu tiên cho ngắt từ Timer 0 + PX0 : Ưu tiên cho ngắt ngoài 0. ngoại trừ RI và TI phải được xóa bằng phần mềm. Dưới đây là bảng Vector ngắt của 8051: . . giá trị được nạp vào PC được gọi là Vector ngắt.2. + Bước 2: Nếu EA =1 thì tất cả mọi ngắt đều được phép và sẽ đáp ứng nếu các bit tương ứng của chúng trong IE có mức cao. 2.

Cờ gây ra ngắt do Port nối tiếp không bị xóa bằng phần cứng khi CPU chuyển tới IR do có 02 nguồn ngắt do cổng nối tiếp TI và RI. ngắt được tích cực bằng mức thấp.Ngắt do các bộ Timer : Thường áp dụng cho các dạng bài tập tạo nhiều xung khác nhau trên các chân điều khiển như : P1. ngắt được tích cực bằng cạnh xuống (sườn âm). nguồn ngắt phải được xác định trong ISR và cờ tạo ngắt sẽ được xóa bởi phần mềm. nếu Itx=0. P1. .2… .Ngắt ngoài : + Các ngắt ngoài xảy ra khi có một mức thấp hoặc cạnh xuống trên chân INT0 hoặc INT1 của bộ vi điều khiển. cờ tạo ra ngắt chỉ được xóa khi ngắt được tích cực bằng cách xuống. ngắt thu xảy ra khi thu xog và đang đợi SBUF để đọc (bộ đệm truyền đầy). + Cách thức tích cựu ngắt được đặt bởi các bít Itx trong thanh ghi SCON.0. + Các ngắt do cổng nối tiếp khác với các ngắt do Timer. Ngắt phát xảy ra khi bộ đếm truyền rỗng. + Các cờ tạo ngắt này là các bít IE0 và IE1 trong TCON. Khi quyền điều khiển đã chuyển đến ISR.Ngắt do cổng nối tiếp : + Ngắt cổng nối tiếp khi hoặc cờ phát (TI) hoặc cờ thu (RI) được đặt lên mức logic 1.Khoa Điện – Điện Tử Lớp DHDT1_K1 . thì nguồn yêu cầu ngắt từ bên ngoài sẽ điều khiển mức của cờ thay đổi ddoit cho phần cứng. Nếu ngắt ngoài được tác động bằng cạnh xuống thì nguồn bên ngoài phải giữ chân INTx ở mức cao tối thiểu trong 1 chu kỳ máy để đảm bảo cho CPU phát hiện được sườn xuống. nếu Itx=1. . + Nếu ngắt ngoài tác động ở mức thấp thì nguồn bên ngoài phải giữ chân INTx ở mức thấp cho đến khi ngắt được đáp ứng và không tác động nữa khi ISR hoàn tất nếu không một ngắt khác sẽ được lặp lại. nếu ngắt được tích cực theo mức.1.Phân loại ngắt ngoài : Gồm 02 loại cơ bản : + Ngắt theo mức : Ở chế độ ngắt theo mức thì các chân INT0 và INT1 bình thường ở mức cao (giống như tất cả các chân của cổng I/O) nếu có một tín hiệu mức thấp đưa Bài tập lớn môn Điện tử số 28 . P1.

nếu không một ngắt khác lại được tạo ra. Khi bật nguồn trở lại thì TCON. Bài tập lớn môn Điện tử số 29 . Sau đó bộ vi điều khiển dừng tất cả mọi công việc của nó đang thực hiện và nhảy đến bảng vector ngắt để phục vụ ngắt .0(IT0) và TCON.2(IT1) đều ở mức thấp (0) . Chúng có thể được biễu diễn như TCON0 và TCON 2 vì thanh ghi TCON có thể đánh địa chỉ theo bit l. Thanh ghi TCON tạm giữ các bit cờ IT0 và IT1 là các bit D0 và D2 của thanh ghi TCON tương ứng . + Ngắt theo sườn : Các chân INT0 và INT1 là các ngắt theo mức thấp. Tín hiệu mức thấp tại chân INT phải được lấy đi trước khi thực hiện lệnh cuối cùng của trình phục vụ ngắt RETI. muốn các chân này thành ngắt theo sườn thì một chương trình sẽ được viết cho thanh ghi TCON.Khoa Điện – Điện Tử Lớp DHDT1_K1 đến chúng thì nó ghi nhãn ngắt . Điều này được gọi là ngắt theo mức và là chế độ ngắt mặc định cho 8051 khi được cấp nguồn.

P2=P3=0xff.} // Trạng thái sáng. } } // Trạng thái dồn led về phía phải void tt2(void) Bài tập lớn môn Điện tử số 30 .j<10.j.t.Khoa Điện – Điện Tử Chương 3 Lớp DHDT1_K1 MỘT SỐ BÀI ỨNG DỤNG CỦA 8051 Bài 1 : Viết chương trình điều khiển 16 LED đơn nháy 4 trạng thái khác nhau? SVTH : Nguyễn Đình Sỹ Bài làm : ⇒ Lý Thuyết // Lấy thư viện #include<reg52. delay(25000). tắt void tt1(void) {for(j=0. delay(25000). // Hàm tạo trễ void delay(unsigned int x) {for(i=0.j++) { P2=P3=0x00.x.h> // Khai báo biến unsigned int i.i<=x.i++).

delay(20000). unsigned int j.0xfc.} } } // Trạng thái đuổi Led void tt3(void) {unsigned int j. for(j=0.Khoa Điện – Điện Tử Lớp DHDT1_K1 {unsigned int M[]={0x01.j++) { P2=P3=M[j].0x80.0x04.t<=7. P2=P3=0xaa.0xf8. delay(25000).j++) { P2=P3=0x55. for(t=0.t.0x20. P2=P3=0x00.0x40. for(t=0. P2=P3=0xff.0xc0.0x00}.t. unsigned int j. delay(25000).j<8. } } // Trạng thái led tắt dần void tt4() {unsigned int N[]={0xfe.0xe0.0x08.t++) 31 Bài tập lớn môn Điện tử số .t++) {for(j=0.0x02.0x80}.j<9.0xf0.t<=7.0x10.

delay(25000). tt4(). tt3().}}} void main() { while(1) { tt1().Khoa Điện – Điện Tử {for(j=0.j++) {P2=P3=N[j]. tt2(). }} ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 32 .j<8.

j<10.j.x. if(sw==0) { for(j=0. sbit ledx=P2^1. // Hàm chính void main() { while(1) { ledd=~ledd. sbit sw=P1^0. // Hàm tạo trễ void delay(unsigned int x) { for(i=0. LED xanh nháy 10 lần mỗi khi nhấn SW? SVTH : Nguyễn Khắc Sáng Bài làm: ⇒ Lý thuyết // Lấy thư viện cho chip #include<reg52.h> // Khai báo biến unsigned int i.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 2: Viết chương trình điều khiển LED đỏ nháy liên tục.j++) Bài tập lớn môn Điện tử số 33 .} // Định nghĩa cho chân Chip sbit ledd=P2^0.i++). delay(30000).i<=x.

} } } } ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 34 . delay(20000). delay(20000). ledd=~ledd. ledx=0.Khoa Điện – Điện Tử { ledx=1.

LED vàng nháy 5 lần mỗi khi nhấn SW2? SVTH : Nguyễn Khắc Sáng Bài làm: Sai (Chưa làm được) ⇒ Lý thuyết // Lấy thư viện #include<reg52.i++).h> // Định nghĩa cho các chân Chip sbit sw1=P1^0. LED xanh nháy 10 lần mỗi khi nhấn SW1. sbit DO=P2^0.i<=x. // Khai báo biến unsigned int i.} // Hàm chính void main(void){ while(1){ DO=~DO. sbit XANH=P2^1. sbit VANG=P2^2. // Hàm tạo trễ void delay(unsigned int x) { for(i=0. sbit sw2=P1^1.h> #include<stdio.}} void ngatT0(void) interrupt 0 {if (sw1==0) Bài tập lớn môn Điện tử số 35 .Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 3: Viết chương trình sử dụng ngắt ngoài điều khiển LED đỏ nháy liên tục.delay(10000).

Khoa Điện – Điện Tử {for(i=1.i++){ XANH=1.}}} void ngatT1(void) interrupt 2 {if(sw2==0) { for(i=1.i<=5.delay(10000).delay(10000).delay(10000).i<=10.}}} ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 36 . VANG=0.delay(10000). XANH=0.i++) {VANG=1.

TH0=-50.h> // Định nghĩa cho chân của Chip sbit F=P2^0.} // Hàm sử dụng ngắt void ngat(void) interrupt 1{ F=~F.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 4: Viết chương trình tạo một xung vuông có tần số 10KHz sử dụng timer? SVTH: Nguyễn Văn Thức Bài làm: ⇒ Lý Thuyết // Lấy thư viện cho Chip #include<reg52. TR0=1. } ⇒ Mô phỏng: Bài tập lớn môn Điện tử số 37 . // Hàm chính void main(){ IE=0x82. TMOD=0x02.

Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 38 .

sbit XUNG2 = P2^1. XUNG2=~XUNG1. unsigned int c=0. // Hàm chính void main(void) { IE=0x82. TH0=-100. /*timer 0 che do 2*/ TR0=1.} // Hàm sử dụng ngắt void ngat(void) interrupt 1 {XUNG1=~XUNG1.v1=0. /*ngat ngoai INTO*/ TMOD = 0x02. } Bài tập lớn môn Điện tử số 39 .h> // Định nghĩa các chân xung sbit XUNG1 = P2^0.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 5: Viết chương trình sử dụng ngắt tạo hai xung vuông có tần số khác nhau? SVTH: Nguyễn Thị Thùy Bài làm: ⇒ Lý thuyết // Lấy thư viện #include<reg52.

Khoa Điện – Điện Tử Lớp DHDT1_K1 ⇒ Mô phỏng: Bài tập lớn môn Điện tử số 40 .

while(1).h> #include<reg52. // Hàm chính void main (void) {TMOD=0x21.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 6: Viết chương trình sử dụng timer tạo hai xung vuông đảo nhau? SVTH: Nguyễn Đình Sỹ Bài làm: ⇒ Lý Thuyết // Lấy thư viện cho Chip #include<stdio.h> // Định nghĩa các chân xung sbit xung1=P2^1. //he so chia 200 TR1=1. Bài tập lớn môn Điện tử số 41 . TH1=-100. IP=0. //khoi tao thanh ghi IE=0x8a.} // Hàm sử dụng ngắt void ngatT0 (void) interrupt 1 { TR0=0. sbit xung2=P2^0. TF0=1.

xung2=~xung2.} // Hàm sử dụng Timer void ngatT1 (void) interrupt 3 { xung1= ~xung1. TL0=-10000%256.Khoa Điện – Điện Tử TH0=-10000/256. TR0=1. } ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 42 .

P2=M[dvi].j.i++).h> // Khai báo biến unsigned int i.} // Hàm con hiển thị void hthi(unsigned int so) { nghin=so/1000.nghin. // Tạo hàm trễ void delay(void) { for(i=0.i<=200.0xf9.dvi. tram=(so%1000)/100.0x78. // Khai báo mảng unsigned int M[]={ 0x40.0x10}. dvi=((so%1000)%100)%10.0x30.0x00.chuc. P3=0x04. /**********quet led**********/ P3=0x08.0x24. delay().Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 7: Viết chương trình quét 4 LED 7 thanh đếm từ 1234 đến 4567? SVTH: Nguyễn Thị Thùy Bài làm: ⇒ Lý thuyết // Lấy thư viện cho Chip #include<reg52. Bài tập lớn môn Điện tử số 43 .tram.0x02. chuc=((so%1000)%100)/10.0x19.0x12.so.

P3=0x01.Khoa Điện – Điện Tử P2=M[chuc].so++) { for(j=0.so<=4567. delay().}}} ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 44 . delay().j++) { hthi(so).j<15. delay(). P3=0x02. P2=M[tram].} // Hàm chính void main() {while(1) {for(so=1234. P2=M[nghin]. delay().

0x19.s3. // Hàm trễ void delay(void) { for(i=0.0x78. } // Hàm con hiển thị void hthi(unsigned long so) { s6=so/100000. s4=((so%100000)%10000)/1000.s1.j. s3=(((so%100000)%10000)%1000)/100. s5=(so%100000)/10000. s2=((((so%100000)%10000)%1000)%100)/10. Bài tập lớn môn Điện tử số 45 .0x02.0xf9.i++).s4.h> // Khai báo các biến unsigned int i. // Khai báo mảng unsigned int M[]={ 0x40.s6.s2.i<=150. /******************quet led********************/ P3=0x20.0x30.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 8: Viết chương trình quét 6 LED 7 thanh đếm từ 123456 đến 252525? SVTH: Nguyễn Thanh Thi Bài làm: ⇒ Lý thuyết: // Lấy thư viện cho Chip #include<reg52.0x24. unsigned long so.0x12. s1=((((so%100000)%10000)%1000)%100)%10.0x00.0x10}.s5.

P2=M[s5]. P3=0x08. delay().j<15. P3=0x10. delay().so<252526. P2=M[s4]. delay(). P2=M[s3].Khoa Điện – Điện Tử P2=M[s1]. Bài tập lớn môn Điện tử số Lớp DHDT1_K1 46 . P2=M[s6]. delay(). delay().so++) { for(j=0. P2=M[s2]. P3=0x01.j++) { hthi(so). P3=0x04. delay(). P3=0x02. } // Hàm chính void main() {while(1) {for(so=123456.

Khoa Điện – Điện Tử delay(). } } }} ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 47 .

0xef.i++). P3=MH[j].0x18}.j++) { P2=MC[j].0xe7. Bài tập lớn môn Điện tử số 48 .0xdf.0xff. } // Hàm chính void main() { while(1) {for(j=0.0xbf.0xc3.0x7e.j<8.0xde.0xfd.0xdb.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 9: Viết chương trình quét Matrix LED 8x8 hiển thị chữ “G”? SVTH: Nguyễn Văn Thức Bài làm: ⇒ Lý thuyết // Lấy thư viện cho Chip #include<reg52. unsigned char MH[]={0x00.i<200.h> // Khai báo biến unsigned int i. // Khai báo mảng unsigned char MC[]={0xfe. // Hàm tạo trễ void delay() { for(i=0.0x7f}.0xdf.j.0xfb.

Khoa Điện – Điện Tử delay(). } } } ⇒ Mô Phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 49 .

0x00 }.j++) {P2=MC[j].0x99.i<200. delay().i++).0xef. // Hàm tạo trễ void delay() {for(i=0.0xff.j<8.0xfb.0xdf.j.Khoa Điện – Điện Tử Lớp DHDT1_K1 Bài 10: Viết chương trình quét Matrix LED 8x8 hiển thị chữ “B”? SVTH: Nguyễn Thanh Thi Bài làm: ⇒ Lý thuyết // Lấy thư viện cho Chip #include<reg52. // Khai báo mảng unsigned int MC[]={0xfe. unsigned int MH[]={0x00.0x66.0xff.0xfd.0xbf. } // Hàm chính void main() {while(1) {for(j=0.0xe7.0x99.h> // Khai báo biến unsigned int i.0xff.0x7f}. P3=MH[j]. } } Bài tập lớn môn Điện tử số 50 .

Khoa Điện – Điện Tử } ⇒ Mô phỏng Lớp DHDT1_K1 Bài tập lớn môn Điện tử số 51 .

Khoa Điện – Điện Tử Lớp DHDT1_K1 CHƯƠNG 4: BÀI TẬP THỰC TẾ Bài tập lớn môn Điện tử số 52 .