Chương 9: THIẾT KẾ PHẦN MỀM I. CHƯƠNG TRÌNH CHÍNH: 1. Lưu đồ giải thuật BEGIN LCALL RESET — MT8880 LCALL DTMF ĐỊNH NGHĨA XÓA CÁC DỮ LIỆU ĐẶT NGẮT CẠNH ÂM ƯU TIÊN NGẮT 0 CHO PHÉP NGẮT 1 HOẠT ĐỘNG LCALL CHAY LCALL TROM P3.0 = 1 ? S Đ P3.1 = 1 ? s Đ 2. Giải thích: Khi reset CPU hay khi mới cấp điện thì chương trình chính bắt đầu. Đầu tiên chương trình sẽ khởi tạo các giá trò ban đầu cho các timer, các ngắt bên ngoài và xóa các port P0, P1, P2 về mức logic 0. Đònh nghóa timer 0 hoạt động ở mode 1 tức mode đếm 16 bit. Đònh nghóa ngắt ngoài 0, ngắt ngoài 1, ưu tiên ngắt 0 và đều là tác động cạnh âm. Sau khi khởi tạo các giá trò ban đầu thì chương trình chính cho phép ngắt 1 hoạt động để đợi tín hiệu chuông, sau đó kiểm tra ở chân P3.0 có tín hiệu cháy hay không, nếu không có thì kiểm tra ở chân P3.1 có tín hiệu trộm hay không. Nếu không có tín hiệu trộm thì sẽ nhảy về kiểm tra lại tín hiệu cháy. Quá trình như vậy sẽ đi vào vòng lặp vô tận để kiểm tra các tín hiệu cháyvà trộm. Lúc này ngắt 1 đang chờ sự tác động chuông. Nếu có tín hiệu chuông tác động đến ngắt ngoài 1 thì sẽ gọi chương trình phục vụ ngắt ngoài 1. Sau khi chương trình ngắt ngoài 1 được thực hiện xong, nếu ta ấn 1 phím bất kì, chân IRQ/CP của MT8880 sẽ tác động đến ngắt ngoài 0 để gọi chương trình phục vụ ngắt ngoài 0. Do 2 tác động chuông và tác động ấn phím là bất thường không theo qui luật, do đó phải sử dụng chương trình phục vụ ngắt tức khi có tác động mới xử lí. Nếu không chương trình sẽ ở vòng lặp lại chương trình chính để đợi. II. CHƯƠNG TRÌNH PHỤC VỤ NGẮT 1.EXT1ISR 1. Lưu đồ giải thuật : BEGIN KIỂM TRA CÓ CHUÔNG ? R6 = 0 ? S Đ DE LAY 1S CẤM 2 NGẮT 0 VÀ 1 LCALL DELAY 20S ĐÓNG TẢI GIẢ R5 = 30 LCALL RESET_MT8880 LCALL DTMF CHO PHÉP NGẮT 0 DELAY 1S MỞ TẢI GIẢ R6 GIẢM R6 S GIAÛM R5 R5 = 0 ? Ñ RETI 2. Giải thích: Khi tổng đài gởi tín hiệu chuông tới, chân INT1 xuống mức thấp tác động vào vi điều khiển gọi chương trình phục vụ ngắt 1, chương trình này thoạt đầu cấm 2 ngắt: ngắt 0 và ngắt1, tức là không cho sự tác động chuông và ấn phím cho tới khi cho phép trở lại, nhằm tránh sự rối loạn. Sau đó chương trình vào vòng lặp 20giây xem có ai nhấc máy không? Nếu không thì tín hiệu chuông vẫn còn. Chương trình sẽ kiểm tra tín hiệu này sau khi đợi 20giây. Nếu không có tín hiệu chuông, chương trình sẽ vào vòng lặp 5giây cứ hễ 1 giây chương trình quay về kiểm tra lại và sau khi lặp hết 5giây mà vẫn không có tín hiệu chuông thì chương trình sẽ thoát về chương trình chính. Nếu khi chương trình kiểm tra thấy còn chuông thì sẽ tác động đóng tải giả nhấc máy, bằng cách cấp mức logic 1 ở chân P1.4. sau đó cho phép ngắt không hoạt động và đi vào vòng lặp 30 giây để ấn phím. Khi 1 phím bất kì được nhấn thì chương trình phục vụ ngắt 0 sẽ reset lại 30 giây để đợi 30giây tiếp theo đó. Sau khi điều khiển ợi 30 giây kể từ lần ấn phím cuối cùng, chương trình sẽ tắt kết nối thuê bao và sẽ thoát về chương trình chính kết thúc chương trình phục vụ ngắt 1. . xuống mức thấp tác động vào vi điều khiển gọi chương trình phục vụ ngắt 1, chương trình này thoạt đầu cấm 2 ngắt: ngắt 0 và ngắt1, tức là không cho sự tác động chuông và ấn phím cho tới khi. sẽ vào vòng lặp 5giây cứ hễ 1 giây chương trình quay về kiểm tra lại và sau khi lặp hết 5giây mà vẫn không có tín hiệu chuông thì chương trình sẽ thoát về chương trình chính. Nếu khi chương. 30giây tiếp theo đó. Sau khi điều khiển ợi 30 giây kể từ lần ấn phím cuối cùng, chương trình sẽ tắt kết nối thuê bao và sẽ thoát về chương trình chính kết thúc chương trình phục vụ ngắt 1.