Các ví dụ trong các mục trưĩc đã khơng sử dụng các ngắt nhưng đã cĩ vịng lặp đợi để kiểm tra các cờ báo tràn (TF0 hoặc TF1) hoặc các cờ thu và cờ phát Port nối tiếp (TI và RI). Vấn đề trong phương pháp này là thời gian thực thi cĩ gía trị của CPU hồn tồn khơng bị tiêu tốn trong việc đợi các cờ. Điều này hồn tồn khơng thích hợp với các ứng dụng của vi điều khiển, trong đĩ bộ vi điều khiển phải tương tác với nhiều thiết bị xuất nhập đồng thời.
Trong phần này ta sẽ khảo sát cách phát triển chương trình dùng vi điều khiển.
Khung đề nghị cho một chương trình phục vụ ngắt như sau: ORS 0000H ; điểm vào Reset.
Ljmp main; các điểm vào ISR.
Org 0030H; điểm vào chương trình chính. Main: chương trình chính bắt đầu.
Lệnh thứ nhất nhảy tới địa chỉ 0030H, vừa trên các vị trí mà các ISR bắt đầu. Như được vẽ hình sau, chương trình chính bắt đầu ở địa chỉ 0030H.
Chương trình chính Các điểm vào Reset và ngắt LJMP main FFFFH 0030H 002fH 0000H
1.Chương trình phục vụ ngắt cĩ kích thước nhỏ:
Các chương trình phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớ chương trình ở các địa chỉ trong bảng các vectơr ngắt. Mặt dù cĩ 8 byte ở các điểm vào ngắt, thường đủ bộ nhớ để thực hiện các hoạt động mong muốn và quay về chương trình chính từ IRS.
Nếu chỉ cĩ một nguồn ngắt được sử dụng, ví dụ timer 0, thì cĩ thể sử dụng khung sau:
ORS 000H; Reset LJMP MAIN
ORG 000BH; điểm vào time 0 TOIRS: ; ISR cho time 0 bắt đầu. RETI; quay về chương trình chính. MAIN: Chương trình chính.
Nếu sử dụng nhiều ngắt phải đảm bảo là chúng phải bắt đầu từ vị trí đúng và khơng chạy qua ISR kế. Vì chỉ cĩ một ngắt được sử dụng trong ví dụ trên, chương trình chính cĩ thể bắt ngay sau lệnh RETI.
2. Các chương trình phục vụ ngắt cĩ kích thước lớn:
Nếu ISR dài hơn 8 byte, cĩ thể cần chuyển nĩ tới một nơi nào đĩ trong bộ nhớ chương trình hoặc cĩ thể để nĩ đi lố qua điểm vào của ngắt kế. Tiêu biểu là ISR bắt đầu với lệnh nhảy đến vùng nhớ khác ở đĩ cĩ thể mở rộng chiều dài các ISR. Ví dụ lúc này chỉ xét timer 0, cĩ thể sử dụng khung sau:
ORS 000H; Reset LJMP MAIN
ORG 000BH; các vector ngắt tiếp theo. MAIN:
TOISR: ; ISR cho time 0.
Để đơn giản chương trình chỉ làm việc một lúc ban đầu. Chương trình khởi động Timer, Port nối tiếp và các thanh ghi ngắt cho thích hợp và rồi khơng làm gì cả. Cơng việc được hồn tồn làm trong ISR. Sau các khởi động, chương trình chứa các lệnh sau:
HERE: SJMP HERE
Hay dạng viết gắn gọn: SJMP
Khi ngắt xảy ra, chương trình chính bị ngắt quãng tạm thời trong khi ISR thực thi. Lệnh RETI ở cuối ISR trả điều khiển về chương trình chính và nĩ tiếp tục khơng làm gì cả. Trong nhiều ứng dụng điều khiển, nhiều cơng việc thật ra được thực hiện hồn tồn trong ISR.
Vì sử dụng ngắt, nên lệnh SJMP (HERE:SJMP HERE) cĩ thể được thay thế bằng các lệnh thực hiện cơng việc khác trong ứng dụng.
CHƯƠNG III: KHẢO SÁT IC THU PHÁT TONE MT8880:MT8880 là một IC thu phát DTMF trọn bộ kèm theo một bộ lọc thoại (Call MT8880 là một IC thu phát DTMF trọn bộ kèm theo một bộ lọc thoại (Call
Progress Filter). Bộ thu DTMF dựa trên kỹ thuật chuẩn của IC MT8870, cịn gọi là bộ phát DTMF sử dụng phương pháp biến đổi D/A biến dung (Switched Capacitor) cho ra tín hệu DTMF chính xác, ít nhiễu. Các bộ đếm bên trong giúp hình thành chế độ Brust Mode nhờ vậy các cặp tone xuất ra với thời hằng chính xác. Bộ lọc Call Progress cho phép bộ vi xử lý phân tích các tone trạng thái đường dây. Bus chuẩn của nĩ kết hợp MPU và đặc biệt thích hợp họ 6800 của Motorola. MT8880 cĩ 5 thanh ghi bên trong ể giao tiếp với P, cĩ thể chia làm 3 loại:
Nhận phát data: 2 thanh ghi. Thanh ghi trạng thái.
Nhận từ điều khiển: 2 thanh ghi.