Hẹn giờ ngắt trong Python

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Bộ hẹn giờ là một trong những tính năng phần cứng phổ biến trong tất cả các bộ vi điều khiển. Bộ hẹn giờ và ngắt hẹn giờ được sử dụng rất nhiều trong các ứng dụng vi điều khiển. Các ngắt hẹn giờ thường được sử dụng khi yêu cầu thời gian chính xác mà không có một phần sai số nào. Tất cả các cổng MicroPython đều có một hoặc nhiều bộ hẹn giờ. Một số bộ hẹn giờ này có thể được dành riêng cho các chức năng cụ thể như kết nối mạng hoặc Wi-Fi, trong khi những bộ hẹn giờ còn lại có thể được sử dụng trong ứng dụng của người dùng. Bài viết này sẽ khám phá các bộ định thời và việc triển khai các ngắt của bộ định thời trong MicroPython. Sau đó, chúng tôi sẽ kiểm tra bộ hẹn giờ có sẵn trong ESP8266 và ESP32. Cuối cùng, chúng tôi sẽ sử dụng các khái niệm đã nói ở trên để thiết kế mã đánh dấu ESP8266

Các chức năng liên quan đến thời gian của MicroPython
MicroPython cung cấp một mô-đun thời gian để trì hoãn thời gian, khoảng thời gian và bảo trì ngày giờ. Mô-đun này là sự triển khai lại của mô-đun CPython cùng tên. Các chức năng liên quan đến thời gian của MicroPython tương thích với các cổng được nhúng, sử dụng kỷ nguyên 2000-01-01 00. 00. 00 UTC thay vì kỷ nguyên hệ thống POSIX 1970-01-01 00. 00. 00 UTC. Điều quan trọng cần lưu ý là cài đặt và duy trì thời gian theo lịch phụ thuộc vào HĐH hoặc RTOS được cài đặt trên cổng được hỗ trợ như trong Raspberry Pico. RTC tích hợp có thể quản lý điều này trong trường hợp cổng vi điều khiển. Các chức năng liên quan đến thời gian của MicroPython truy vấn OS/RTOS hoặc RTC để duy trì hoặc cài đặt ngày giờ. Cài đặt thời gian có thể được thực hiện thủ công thông qua giao thức mạng hoặc pin dự phòng

Mô-đun thời gian cung cấp các chức năng liên quan đến thời gian, ngày tháng và độ trễ sau

thời gian. ngủ (giây). Phương thức chặn này cung cấp độ trễ tính bằng giây. Một số cổng cho phép chỉ định thời gian trễ dưới dạng số dấu phẩy động. Khi phương thức được gọi, bộ điều khiển sẽ dừng thực thi chương trình người dùng trong số giây đã đặt

thời gian. sleep_ms(ms). Đây là một phương pháp chặn khác cung cấp độ trễ tính bằng mili giây. So với thời gian. sleep(), phương pháp này chính xác hơn. Một số dương hoặc số 0 có thể được truyền làm đối số cho phương thức này. Nếu nó được sử dụng cho ngắt hẹn giờ, thời gian trễ có thể kéo dài cho đến khi quá trình thực thi chương trình phục vụ ngắt kết thúc. Nếu 0 được truyền làm đối số, độ trễ sẽ bằng thời gian thực hiện quy trình dịch vụ ngắt

thời gian. sleep_us(chúng tôi). Đây là một phương pháp chặn khác cung cấp độ trễ tính bằng micro giây. Một số dương hoặc số 0 có thể được chuyển thành đối số. Nếu được sử dụng cho ngắt hẹn giờ, thời gian trễ có thể kéo dài cho đến khi quá trình thực thi quy trình phục vụ ngắt kết thúc. Nếu 0 được truyền làm đối số, độ trễ sẽ bằng thời gian thực hiện quy trình dịch vụ ngắt

thời gian. ticks_ms(). Phương thức này trả về số mili giây được truyền trở đi một tham chiếu tùy ý. Nó hơi giống hàm millis() trong Arduino. Mặc dù vậy, hàm millis() trong Arduino trả về một khoảng thời gian tính bằng mili giây kể từ khi khởi động bo mạch Arduino, thời gian. ticks_ms() giả định một thời điểm tùy ý để tham khảo. Giá trị bao quanh được sử dụng làm phạm vi tối đa luôn ở mức lũy thừa 2 để nó giữ nguyên trong quá trình triển khai MicroPython bất kể cổng. Nó được gọi là TICKS_PERIOD, lớn hơn TICKS_MAX một. Do đó, lệnh gọi hàm này luôn trả về một giá trị không âm nằm trong khoảng từ 0 đến TICKS_MAX, biểu thị cho số mili giây trong phạm vi đã đề cập được chuyển sang một thời điểm tùy ý. Điều quan trọng cần lưu ý là, không giống như Arduino, các toán tử toán học tiêu chuẩn hoặc toán tử quan hệ, trực tiếp hoặc làm đối số cho các phương thức ticks_diff() hoặc ticks_add() trên các giá trị được phương thức này trả về hoặc đánh dấu như các phương thức đã đề cập ở trên đều không được phép. Các hoạt động như vậy có thể dẫn đến lỗi cú pháp (tùy thuộc vào IDE) hoặc kết quả sai

thời gian. ve_us(). Phương pháp này tương tự như thời gian. ticks_ms() ngoại trừ việc nó trả về thời gian đã trôi qua tính bằng micro giây từ một thời điểm tùy ý

thời gian. ve_cpu(). Phương pháp này tương tự như thời gian. ticks_ms() và thời gian. ticks_us() ngoại trừ việc nó trả về các chu kỳ xung nhịp CPU được truyền từ một thời điểm tùy ý. Nó cung cấp độ phân giải cao nhất có thể. Thay vì chu kỳ đồng hồ, một đơn vị có độ phân giải cao nhất khác được cung cấp bởi bộ hẹn giờ tích hợp có thể được trả về ở một số cổng. Cần lưu ý rằng phương pháp này không khả dụng cho tất cả các cổng MicroPython. Do đó, phải kiểm tra tài liệu dành riêng cho cổng trước khi sử dụng phương pháp này trong tập lệnh MicroPython

thời gian. ticks_add(tích, delta). Phương pháp này tính toán thời hạn cho các sự kiện và tác vụ của vi điều khiển. Tùy thuộc vào thời gian, nó trả về thời hạn tính bằng mili giây, micro giây hoặc chu kỳ CPU. ticks_ms(), thời gian. ticks_us() hoặc thời gian. ticks_cpu() được sử dụng làm tham số tick tương ứng. Đối số delta có thể là một số nguyên hoặc một đối số số. Nó bằng với số tick, trong đó tick có thể là mili giây, micro giây hoặc chu kỳ CPU được đặt làm thời hạn. Ví dụ: câu lệnh sau trả về thời hạn 200 mili giây
hạn chót = ticks_add(thời gian. ve_ms(), 200)

Câu lệnh sau trả về thời hạn 100 micro giây
hạn chót = ticks_add(thời gian. ve_us(), 100)

Câu lệnh sau trả về thời hạn 20 chu kỳ CPU
hạn chót = ticks_add(thời gian. ve_cpu(), 20)

thời gian. ticks_diff(tick1, tick2). Phương thức này trả về sự khác biệt giữa hai tick. Sự khác biệt về số lần đánh dấu có thể tính bằng mili giây, micro giây hoặc chu kỳ CPU tùy thuộc vào thời gian được trả về. ticks_ms(), thời gian. ticks_us() hoặc thời gian. ticks_cpu() chức năng được sử dụng như tick tương ứng. Giá trị được trả về là ticks1-ticks2, có thể nằm trong khoảng từ -TICKS_PERIOD/2 đến TICKS_PERIOD/2 – 1. Thời gian. ticks_diff() rất hữu ích trong việc bỏ phiếu hết thời gian chờ, lên lịch cho một tác vụ được nhúng hoặc tính toán thời hạn

thời gian. thời gian(). Phương thức này trả về số giây kể từ khi epoch cung cấp RTC của cổng đã cho được đặt và duy trì. Kỷ nguyên tương thích với nhúng và thời gian trả về là số giây kể từ 2000-01-01 lúc 00. 00. 00 UTC. Kỷ nguyên có thể là tham chiếu dành riêng cho cổng như thời gian kể từ khi bật nguồn hoặc đặt lại ở một số cổng

thời gian. time_ns(). Phương thức này trả về số micro giây kể từ kỷ nguyên. Nó rất hữu ích trong việc xác định thời gian tuyệt đối. Giá trị trả về của phương thức này là một số nguyên

thời gian. mktime(). Phương thức này trả về một số giây được truyền giữa các kỷ nguyên (i. e. , 2000-01-01 00. 00. 00 UTC) và giờ địa phương được thông qua dưới dạng đối số. Phương thức lấy toàn bộ 8-bộ làm giờ địa phương, trong đó bộ có định dạng sau - (năm, tháng, ngày, giờ, phút, giây, ngày trong tuần, ngày trong năm) trong đó các giá trị của bộ phải nằm trong phạm vi sau

Nămnăm sau Công Nguyêntháng1~12mngày1~31giờ0~23phút0~59giây0~59ngày trong tuần0~6 cho Thứ Hai~Chủ Nhật1~366

 

thời gian. gmtime([giây]). Phương thức này trả về ngày giờ theo UTC kể từ giây được chỉ định làm đối số. Thời gian được trả về là một bộ có định dạng (năm, tháng, ngày, giờ, phút, giây, ngày trong tuần, ngày trong năm)

thời gian. giờ địa phương([giây]). Phương thức này trả về ngày giờ theo giờ địa phương vì giây được chỉ định làm đối số. Thời gian được trả về là một bộ có định dạng (năm, tháng, ngày, giờ, phút, giây, ngày trong tuần, ngày trong năm). Giờ địa phương có thể được đặt theo OS/RTOS hoặc RTC

Sử dụng chức năng đánh dấu
Các chức năng đánh dấu rất hữu ích khi yêu cầu thời gian chính xác trong chương trình người dùng MicroPython. Các chức năng đánh dấu có thể tính toán thời gian dành cho việc thực hiện tác vụ nhúng, đặt thời hạn cho tác vụ nhúng, đặt thời gian chờ và lên lịch cho tác vụ nhúng

Sau đây là một ví dụ hợp lệ về thời gian tính toán dành cho việc thực thi một phần của tập lệnh MicroPython
thời gian nhập khẩu
bắt đầu = thời gian. ve_us()
… # Câu lệnh MicroPython để kiểm tra thời gian
in (thời gian. ticks_diff(thời gian. ticks_us(), bắt đầu))

Sau đây là một ví dụ hợp lệ về việc tìm TICKS_MAX của một cổng nhất định
in(tick_add(0, -1))

Sau đây là một ví dụ hợp lệ về việc đặt thời hạn cho một tác vụ được nhúng
hạn chót = ticks_add(thời gian. ve_ms(), 200)
trong khi ticks_diff(thời hạn, thời gian. ve_ms()) > 0
do_a_little_of_something()

Sau đây là một ví dụ hợp lệ về việc bỏ phiếu một sự kiện có thời gian chờ
bắt đầu = thời gian. ve_us()
trong khi ghim. giá trị() == 0

nếu thời gian. ticks_diff(thời gian. ticks_us(), bắt đầu) > 500
tăng TimeoutError

Sau đây là ví dụ hợp lệ về lập lịch tác vụ nhúng bằng cách sử dụng chức năng đánh dấu
bây giờ = thời gian. ticks_ms()
schedule_time = nhiệm vụ. đã lên lịch ()
nếu ticks_diff(thời gian đã lên lịch, ngay bây giờ) == 0
print(“thời gian thực hiện nhiệm vụ. ”)
nhiệm vụ. chạy()

Vấn đề với các chức năng liên quan đến thời gian
Các chức năng đánh dấu khá chính xác. Các chức năng đánh dấu rất hữu ích trong việc tính toán khoảng thời gian, đặt thời gian chờ cho các sự kiện và thậm chí lên lịch tác vụ. Mặc dù không chặn, các chức năng này thường không được sử dụng để cung cấp độ trễ hoặc lên lịch tác vụ. Lý do chính đằng sau điều này là sự phụ thuộc của mô-đun thời gian vào OS/RTOS hoặc RTC. Thứ hai, các phương pháp này có thể bị gián đoạn bởi các sự kiện ưu tiên cao hơn khác của vi điều khiển

Mặt khác, các chức năng liên quan đến độ trễ của mô-đun thời gian như thời gian. giờ ngủ. sleep_ms() và thời gian. sleep_us() có hai vấn đề đáng chú ý. Đầu tiên, các phương thức này có tính chất chặn và dừng tập lệnh khi được gọi. Thứ hai, các phương pháp này không cung cấp độ trễ chính xác. Ví dụ: độ trễ vài giây so với thời gian. phương thức sleep() có thể có lỗi vài mili giây. Những lỗi này có thể cao tới 1 hoặc 2 phần trăm

Trong những tình huống như vậy, bộ hẹn giờ đến khu nghỉ mát. Bộ hẹn giờ có các ngắt có mức độ ưu tiên cao hơn thường không thể bị ghi đè trừ khi đặt lại. Các ngắt của chúng sử dụng phần cứng bên dưới, tôi. e. , các thanh ghi hẹn giờ không để lại phạm vi lỗi nào. Để đặt thời gian chờ hoặc lên lịch cho các tác vụ nhúng quan trọng về thời gian, ngắt hẹn giờ là các tùy chọn tốt nhất. Đồng thời, các chức năng đánh dấu có thể được sử dụng để đặt thời hạn hoặc tính toán thời gian dành cho việc thực hiện các phần quan trọng của tập lệnh MicroPython

hẹn giờ là gì?
Mỗi bộ vi điều khiển có một số tính năng phần cứng tích hợp. Timer/Counter là một trong những thiết bị ngoại vi tích hợp quan trọng hầu như có mặt trong mọi bộ vi điều khiển. Bộ hẹn giờ/bộ đếm được sử dụng để đo các sự kiện thời gian hoặc hoạt động như một bộ đếm. Một bộ đếm thời gian được liên kết với đồng hồ hệ thống của vi điều khiển, cho phép nó theo dõi thời gian với độ chính xác cao và chính xác. Có thể có nhiều bộ hẹn giờ trong một vi điều khiển. Mỗi bộ đếm thời gian được cấu hình, theo dõi và điều khiển bởi một bộ thanh ghi bên trong

Ngắt hẹn giờ là gì?
Một trong những chức năng quan trọng của bộ hẹn giờ là định thời gian cho các sự kiện. Điều này được thực hiện với sự trợ giúp của các ngắt hẹn giờ. Một sự kiện không là gì ngoài việc thực thi một khối mã cụ thể trong bộ vi điều khiển. Khối mã này được đặt trong chức năng Định tuyến Dịch vụ Ngắt (ISR). Một ISR được thực hiện khi một ngắt được nâng lên

Thông thường, bộ vi điều khiển thực hiện các lệnh theo cách tuần tự. Khi một ngắt được đưa ra, bộ vi điều khiển sẽ bỏ qua quá trình thực thi mã hiện tại và thực hiện ISR trước. Sau khi hoàn thành ISR, nó sẽ tiếp tục thực thi mã bình thường

Các ngắt hẹn giờ được nâng lên khi bộ hẹn giờ đạt đến số lượng đã đặt. Một thanh ghi cập nhật số đếm thời gian thường được gọi là thanh ghi hẹn giờ. Có một thanh ghi khác nơi người dùng đặt số lượng tham chiếu. Điều này thường được gọi là thanh ghi so sánh và đối sánh. Có thể có một hoặc nhiều thanh ghi liên quan đến cài đặt cấu hình hẹn giờ. Có một thanh ghi duy trì các giá trị của các mặt nạ ngắt khác nhau. Bất cứ khi nào một ngắt hẹn giờ được nâng lên, bit mặt nạ tương ứng của nó sẽ được bật trong thanh ghi mặt nạ ngắt. Bằng cách theo dõi bit mặt nạ ngắt, một ngắt hẹn giờ được phát hiện. Điều này có thể cung cấp độ trễ, đặt thời gian chờ hoặc lên lịch cho các tác vụ trong quy trình dịch vụ ngắt

Lớp hẹn giờ MicroPython
MicroPython cung cấp một lớp bộ đếm thời gian để xử lý bộ đếm thời gian và ngắt bộ đếm thời gian từ các cổng được hỗ trợ. Lớp bộ đếm thời gian là một phần của mô-đun máy. Nó được nhập trong tập lệnh MicroPython bằng cách sử dụng câu lệnh sau
từ máy nhập hẹn giờ

Trong trường hợp cổng là WiPy, phải sử dụng câu lệnh sau
từ máy nhập TimerWiPy

Điều quan trọng cần lưu ý là nếu có lỗi xảy ra trong quá trình thực thi quy trình dịch vụ ngắt, MicroPython sẽ không tạo báo cáo lỗi trừ khi bộ đệm đặc biệt được tạo cho nó. Do đó, một bộ đệm phải được tạo để gỡ lỗi khi ngắt hẹn giờ hoặc các ngắt khác được sử dụng trong tập lệnh MicroPython. Bộ đệm có thể được tạo bằng các câu lệnh sau
nhập khẩu micropython
trăn siêu nhỏ. alloc_emergency_Exception_buf(100)

Điều quan trọng cần lưu ý là bộ đệm chỉ lưu trữ dấu vết ngăn xếp ngoại lệ mới nhất tại đây. Nếu một ngoại lệ thứ hai được ném ra trong khi heap bị khóa, dấu vết ngăn xếp của ngoại lệ thứ hai sẽ thay thế dấu vết ban đầu

Sau khi nhập lớp bộ đếm thời gian, một đối tượng bộ đếm thời gian phải được tạo. Điều này được thực hiện bằng cách gọi phương thức khởi tạo. Phương thức khởi tạo có nguyên mẫu sau
máy lớp. Hẹn giờ(id, /,…)

Phương thức khởi tạo lấy id của bộ đếm thời gian làm đối số. Nó có thể là một số dương 0, 1, 2, v.v. , đối với bộ hẹn giờ phần cứng hoặc -1 đối với bộ hẹn giờ ảo, miễn là cổng hỗ trợ nó. Các tham số cấu hình khác cũng có thể được đặt trong lệnh gọi phương thức khởi tạo. Mặt khác, đối tượng hẹn giờ có thể được cấu hình rõ ràng bằng cách sử dụng bộ hẹn giờ. phương thức init(). đồng hồ bấm giờ. phương thức init() có nguyên mẫu sau
hẹn giờ. init(*, mode=Hẹn giờ. ĐỊNH KỲ, khoảng thời gian=- 1, gọi lại=Không có)

Chế độ có thể được đặt thành hẹn giờ. ONE_SHOT hoặc Hẹn giờ. ĐỊNH KỲ. Nếu được đặt thành hẹn giờ. ONE_SHOT, bộ hẹn giờ chỉ chạy một lần cho đến khi hết khoảng thời gian đã chỉ định tính bằng mili giây. Nếu được đặt thành hẹn giờ. ĐỊNH KỲ, bộ hẹn giờ chạy định kỳ với khoảng thời gian tính bằng mili giây được chuyển thành khoảng thời gian đối số. Khoảng thời gian đối số là khoảng thời gian tính bằng mili giây được sử dụng làm thời gian chờ để thực thi chức năng gọi lại một lần hoặc định kỳ, tùy thuộc vào chế độ được đặt. Cuộc gọi lại là một cuộc gọi có thể gọi được thực hiện khi hết khoảng thời gian. Quy trình dịch vụ ngắt được gọi để thực thi các tác vụ nhúng mong muốn khi tăng ngắt hẹn giờ. Có thể gọi được có thể là một hàm hoặc thậm chí là một phương thức thuộc về một đối tượng lớp

Lớp hẹn giờ cho phép dừng hẹn giờ và vô hiệu hóa thiết bị ngoại vi hẹn giờ. Điều này được thực hiện bằng cách gọi bộ đếm thời gian. phương thức deinit(). Một cuộc gọi đến phương thức này sẽ ngay lập tức dừng bộ hẹn giờ nếu đang chạy, hủy khởi tạo đối tượng bộ hẹn giờ và vô hiệu hóa thiết bị ngoại vi hẹn giờ. Nó có nguyên mẫu sau
hẹn giờ. deinit()

Nếu phải bật lại bộ đếm thời gian đã tắt, đối tượng bộ đếm thời gian có cùng ID phải được tạo lại trong chương trình người dùng

Trình xử lý ngắt MicroPython
Hàm gọi lại được chỉ định làm đối số trong quá trình khởi tạo hoặc tạo đối tượng hẹn giờ là quy trình dịch vụ ngắt chạy khi ngắt hẹn giờ được nâng lên. Thật thú vị, MicroPython không hiển thị lập trình cấp đăng ký cho bộ hẹn giờ. Thay vào đó, nó sử dụng các ngắt hẹn giờ để cung cấp thời gian chờ tính bằng mili giây. Các phương pháp có sẵn thông qua máy. Bộ hẹn giờ thường được áp dụng cho tất cả các cổng được hỗ trợ

Chức năng gọi lại hoặc thói quen dịch vụ ngắt cho các đối tượng hẹn giờ yêu cầu các biện pháp phòng ngừa lập trình nhất định để tránh trục trặc thời gian chạy. Chúng tôi đã thảo luận về một trong những cảnh báo như vậy. xác định một đối tượng bộ đệm để lưu trữ lỗi ngoại lệ mới nhất. Hãy để chúng tôi thảo luận thêm về một số đề xuất để viết trình xử lý ngắt trong MicroPython

Phần thân của một thói quen phục vụ ngắt phải càng ngắn gọn và đơn giản càng tốt. Các thói quen dịch vụ ngắt có nghĩa là để thực hiện các hành động quan trọng về thời gian. Không nên lạm dụng chúng để lập lịch trình thường xuyên cho các tác vụ được nhúng. Nếu bất kỳ lịch trình nào của các tác vụ nhúng được yêu cầu trong tập lệnh MicroPython, thì điều đó phải được thực hiện bằng micropython. lịch trình. Không nên có loại cấp phát bộ nhớ trong một thói quen dịch vụ ngắt. Tránh các giá trị dấu chấm động, chèn chúng vào từ điển hoặc nối các mục vào danh sách. Tuy nhiên, các biến toàn cục có thể được cập nhật trong các quy trình dịch vụ ngắt

Hầu hết các nền tảng vi điều khiển không cho phép các thói quen dịch vụ ngắt trả về giá trị. Tuy nhiên, MicroPython cho phép ngắt các quy trình dịch vụ và trả về một hoặc nhiều giá trị. ISR có thể trả về một giá trị duy nhất bằng cách cập nhật một biến toàn cục. Nếu cần trả về nhiều giá trị, một mảng byte được phân bổ trước phải được cập nhật theo thường trình. Một đối tượng mảng được phân bổ trước phải được cập nhật nếu thường trình trả về nhiều giá trị số nguyên. Tuy nhiên, việc chia sẻ các biến và đối tượng này giữa ISR và vòng lặp chính có thể gây ra tình trạng dồn đuổi, trong đó cả vòng lặp chương trình chính và vòng lặp ISR đều thay đổi giá trị của biến. Do đó, việc cập nhật giá trị của các biến này trong vòng lặp chương trình chính cần hết sức thận trọng. Trước khi cập nhật biến/mảng byte/mảng được chia sẻ trong vòng lặp chương trình chính, các ngắt phải được tắt bằng cách gọi pyb. phương thức disable_irq(). Sau khi cập nhật biến/mảng byte/mảng được chia sẻ trong chương trình chính, các ngắt có thể được kích hoạt lại bằng cách gọi pyb. phương thức enable_irq()

Ngắt hẹn giờ là gì?

Ngắt hẹn giờ cho phép bạn thực hiện một tác vụ theo các khoảng thời gian được định thời rất cụ thể bất kể điều gì khác đang diễn ra trong mã của bạn . Trong tài liệu hướng dẫn này, tôi sẽ giải thích cách thiết lập và thực hiện ngắt trong Clear Timer trên So sánh Match hoặc Chế độ CTC.

Làm cách nào để tạo bộ đếm thời gian trong Python?

Làm theo các bước bên dưới để tạo đồng hồ đếm ngược. .
Bước 1. Nhập mô-đun thời gian
Bước 2. Sau đó yêu cầu người dùng nhập thời lượng đếm ngược tính bằng giây
Bước 3. Giá trị này được gửi dưới dạng tham số 't' đến hàm đếm ngược() do người dùng xác định. .
Bước 4. Trong chức năng này, một vòng lặp while chạy cho đến khi thời gian trở thành 0

Sự khác biệt giữa hẹn giờ và ngắt là gì?

nhớ. bộ hẹn giờ độc lập với CPU. khoảng thời gian t (còn gọi là chu kỳ đồng hồ). gián đoạn được tạo ra trong mỗi chu kỳ. bởi người dùng .

Chúng ta có thể tạo ngắt bằng cách sử dụng bộ hẹn giờ không?

Mỗi bộ đếm thời gian có thể tạo ra một hoặc nhiều ngắt . Một loại ngắt là khớp so sánh. Chúng ta có thể viết một giá trị trong một thanh ghi khác và khi giá trị bộ định thời bằng giá trị so sánh, nó sẽ kích hoạt ngắt.