Các lưu đồ cho vi điều khiển

Một phần của tài liệu Thiết kế và thi công tổng đài số dung lượng nhỏ (Trang 82 - 122)

CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG

4.2 Các lưu đồ cho vi điều khiển

4.2.1 Ý tưởng xây dựng phần mềm

Trong đồ án này người viết chọn điều khiển tổng đài bằng phương pháp điều khiển tập trung. Nghĩa là CPU sẽ điều khiển mọi hoạt động của tổng đài bằng chương trình được lập trình trước.

Các chương trình cần xây dựng là : - Điều khiển cuộc gọi nội đài

- Điều khiển cuộc gọi ra ngoài - Điều khiển cuộc gọi từ ngoài vào.

4.2.2 Tóm tắt ý tưởng xây dưng phần mềm a. Điều khiển cuộc gọi nội hạt

Ta quy định thuê bao chủ gọi là thuê bao A, thuê bao bị gọi là thuê bao B và cả hai thuê bao đều là thuê bao nội bộ. Khi A nhấc máy CPU sẽ nhận biết được bằng cách đọc trạng thái HSO của thuê bao A. Nếu thuê bao A nhấc máy, CPU tiến hành thăm dò DTMF có rảnh không, ngƣợc lại CPU bỏ qua. Nếu DTMF rảnh thì cấp âm hiệu mời quay số Dial Tone cho thuê bao A, đồng thời kết nối DTMF với thuê bao A,

ngược lại sẽ cấp âm hiệu báo bận Busy Tone cho thuê bao A. Sau khi kết nối DTMF, thuê bao A sẽ tiến hành quay số thuê bao muốn gọi (thuê bao B), còn CPU sẽ sẵn sàng nhận số qua chương trình /INT1. Chương trình /INT1 sẽ kiểm tra và xác định số này có đúng hay không. Nếu số đúng, CPU sẽ tiến hành thăm dò xem thuê bao B có rảnh hay không bằng cách xem trạng thái của thuê bao B, đồng thời giải tỏa DTMF. Nếu thuê bao B bận, CPU cấp Busy Tone cho thuê bao A, nếu thuê bao B rảnh, CPU sẽ cấp Ringback Tone cho thuê bao A, đồng thời cấp Ringing cho thuê bao B. Khi thuê bao B nghe chuông và nhấc máy, CPU lập tức ngắt chuông cho thuê bao B và Ringback Tone cho thuê bao A, đồng thời kết nối thông thoại giữa thuê bao A và B.

Trong quá trình thông thoại, một trong hai thuê bao gác máy thì CPU sẽ giải tỏa thông thoại đưa thuê bao đó về trạng thái ban đầu, đồng thời cấp Busy Tone cho thuê bao kia. CPU chờ thuê bao còn lại gác máy, nếu thuê bao gác máy CPU sẽ đưa thuê bao về trạng thái gác máy và kết thúc cuộc gọi.

b. Điều khiển cuộc gọi ra ngoài mạng

Ta quy định thuê bao chủ gọi là thuê bao nội bộ A, thuê bao bị gọi là B – thuê bao của tổng đài bên ngoài.

Khi thuê bao muốn thiết lập một cuộc gọi với thuê bao bên ngoài thì phải quay một số đặc biệt để chiếm trung kế. CPU sẽ nhận biết số này và tiến hành thăm dò trung kế có rảnh hay không, nếu trung kế không rảnh thì cấp Busy Tone cho thuê bao A, ngược lại sẽ nối thuê bao A với trung kế, đồng thời điều khiển trung kế giả nhấc máy đối với tổng đài bên ngoài. Khi đó thuê bao A sẽ nhận đƣợc âm hiệu mời quay số Dial Tone từ tổng đài bên ngoài cấp và tiến hành quay số thuê bao B. Thực chất tổng đài bên ngoài cấp Dial Tone cho trung kế, nhưng do trung kế đã thông thoại với thuê bao A nên xem như thuê bao nhận được âm hiệu này.

Sau khi kết nối trung kế với thuê bao A, vai trò của CPU chấm dứt, mọi hoạtđộng kết nối thuê bao A (thực chất là trung kế) với thuê bao B do tổng đài bên ngoài thực hiện.

Khi thuê bao A gác máy để chấm dứt cuộc gọi, CPU sẽ giải tỏa kết nối giữa thuê bao A và trung kế, đồng thời điều khiển trung kế giả gác máy với tổng đài bênngoài. Tổng đài bên ngoài sẽ cấp Busy Tone cho thuê bao B. Ngược lại, thuê bao B gác máy, tổng đài bên ngoài sẽ cấp Busy Tone cho trung kế - thuê bao A. Kết thúc cuộc gọi ra ngoài mạch trở về trạng thái ban đầu.

c. Điều khiển cuộc gọi từ ngoại mạng vào

Ta quy định thuê bao chủ gọi bên ngoài là thuê bao A, thuê bao bị gọi là thuê bao nội bộ B. Để đơn giản, trung kế sẽ được kết nối trực tiếp đến một thuê bao nội bộ cố định. Khi thuê bao bên ngoài muốn kết nối với tổng đài nội bộ, tổng đài bên ngoài

sẽ cấp tín hiệu Ringing cho trung kế, lúc đó tổng đài nội bộ sẽ kiểm tra trạng thái HSO của trung kế để biết có cuộc gọi từ bên ngoài hay không. Khi có cuộc gọi từ bên ngoài, HSOTK=0, CPU nhận biết được trạng thái này và sẽ kiểm tra trung kế có rảnh hay không. Nếu trung kế rảnh, CPU tiếp tục kiểm tra thuê bao nội bộ được kết nối trực tiếp với trung kế khi có cuộc gọi từ bên ngoài. Nếu thuê bao này rảnh thì CPU sẽ điều khiển trung kế giả nhấc máy đồng thời kết nối trung kế và thuê bao nội bộ. Nếu trung kế bận hoặc thuê bao nội bộ bận thì CPU bỏ qua, lúc này trung kế vẫn đang ở trạng thái giả gác máy, tổng đài bên ngoài sẽ nhận biết được trạng thái bận của tổng đài nội bộ.

Một lưu ý quan trọng là sự khác nhau giữa trạng thái HSO của thuê bao nội bộ và trung kế. HSO của thuê bao nội bộ sẽ bằng 0 trong suốt thời gian thuê bao nhấc máy. Trong khi HSO của trung kế chỉ bằng 0 trong thời gian tổng đài bên ngoài đổ chuông cho trung kế. Do vậy, trạng thái HSO bằng 1 sẽ chiếm phần lớn thời gian cho dù trung kế đang nhấc máy hay gác máy.

4.2.3 Lưu đồ giải thuật

Sau khi reset CPU sẽ thực hiện chương trình khởi động hệ thống bao gồm khởi động nạp các giá trị mặ định vào Ram. Sau đó bắt đầu kiểm tra vòng từ thuê bao thứ nhất đến thuê bao cuối cùng.

Chu kì được chọn là 10ms, như vậy, giá trị nạp vào timer là 10000.

Thanh ghi trong RAM nội được giữ nguyên giá trị trong quá trình xử lý các thuê bao.

Lưu đồ tổng quát

Hình 4.1: Lưu đồ tổng quát

4.2.3.1 Lưu đồ xử lý các trạng thái thuê bao và trung kế a. Thuê bao gác máy

Hình 4.2: Lưu đồ xử lý thuê bao gác máy(Start=00H) Cấp phát vùng nhớ :

Count1 : 1 byte đếm thời gian nhỏ ( chống rung khi thuê bao nhấc máy, gác máy).

Count2 : byte đếm thời gian rung chuông âm hiệu ( ring back tone ) Count3 : byte đếm thời gian dịch vụ

Ngoài ra còn có một số byte chứa giá trị nhập vào, số dịch vụ …

Trong mỗi chương trình xử lý đều có xử lý chống rung những cảm biến HSO của thuê bao và HSO của trung kế.Giá trị này chọn theo thực tế (ta chọn 10ms cho nhấc máy và 10ms cho gác máy) và có thể thay đổi linh hoạt bằng phần mềm lập trình.

HSO = 0 : thuê bao nhấc máy.

HSO = 1 : thuê bao gác máy

HSOTK = 0 : có chuông từ tổng đài ngoài HSOTK = 1 : trung kế rỗi

Count1 =10, sau 10ms ( để chống nhiễu HSO ) xem như thuê bao nhấc máy ( offHook )

b. Thuê bao nhấc máy

Hình 4.3.Lưu đồ xử lý thuê bao nhấc máy (Stat=01H

c. Thuê bao đang nghe Dial Tone

Hình 4.4. Lưu đồ xử lý đang nghe Dial Tone(Start=02H) d. Thuê bao đang nghe Ring Back Tone

Hình 4.5. Lưu đồ giải thuật đang nghe Ring Back Tone (Start = 04h) e. giải thuật mã số quay

Hình 4.6: Lưu đồ giải thuật mã số quay (Start = 05h) f. thuê bao đang được đổ chuông

Hình 4.7: Lưu đồ xử lý thuê bao đang được đổ chuông (Start = 07h) g. thuê bao đang được đổ chuông nhấc máy

Hình 4.8: Lưu đồ xử lý thuê bao đang được đổ chuông nhấc máy h. thuê bao đang thông thoại

Hình 4.9: Lưu đồ xử lý thuê bao đang thông thoại (Start 09h) i. Chương trình xử lý nhận số thứ 2

Hình 4.10: Lưu đồ chương trình xử lý nhận số thứ 2 4.2.3.2 Chương trình khởi động hệ thống

Sau khi được reset, CPU trước tien phải thực hiện một số công việc nhằm khởi động hệ thống: xác lập chế độ ban đầu và nạp giá trị mặc định cho toàn bộ chương trình. Đó là bước cần thiết, nhất là đối với một chương trình lớn rất hữu ích cho việc

Các công việc cần thực hiện để khởi động tổng đài như sau:

- Xuất thông báo CPU đã khởi động ( thông qua led ở Port1).

- Khởi động timer 0 (T0) và ngắt ngoài Interrupt 1(/ INT1) với /INT1 có đọ ưu tiên cao hơn.

- Khởi động Timer 0

- Tạo tín hiệu ngắt ngoài /INT1 =1 (không tích cực, không ngắt).

- Khởi động vùng stack: 60H÷ 7FH.

- Xuất các RL xuống thấp (cấm relay đóng).

- Xóa các biến đếm Count0, Count1. Counti.

- Nạp giá trị mặc định cho Statei, Desi, Sourcei.

Trong đó : Desi = Sourcei, Statei = 00H. Tức là thuê bao, trung kế và DTMF ở trạng thái rỗi, thuê bao và trung kế tự gọi chính nó.

- Mặc định kết nối thông thoại, mỗi thuê bao trung kế sẽ kết nối với chính nó.

- Ép ngắt.

- Chờ ngắt.

Một số điểm cần chú ý: Phải quy định khe thời gian TS bằng cách ghi vào RAM1 (Ram địa chỉ), việ mặc định kết nối thông thoại, mõi thuê bao và trung kế sẽ kết nối với chính nó. Điểm thứ hai cần lưu ý tạo tín hiệu ngắt ngoài mặc định /INT1 và ép ngắt ngay T0 khi thực hiện xong mọi công việc ở phần này tránh mất thời gian.

Hình 4.11: Lưu đồ khởi động hệ thống 4.2.3.3 Chương trình xử lý ngắt Timer 0

Chọn chu kỳ ngắt 10ms, xây dựng lưu đồ giải thuật cho chương trình xử lý ngắt timer 0 như sau:

Giải thích nguyên lý hoạt động của lưu đồ giải thuật:

Cứ 10ms, CPU lại đọc lần lượt theo thứ tự các HSO một lần và kiểm tra xem trạng thái HSO của thuê bao (TB) ứng với i = 0,1,2 có thay đổi hay không. Nếu thấy thuê bao vừa đổi trạng thái từ nhấc máy sang gác máy (HSO từ 0(1) hay ngược lại) thì CPU sẽ kiểm tra xem TB có nhấc máy hay gác máy thực sự không bằng biến đếm Count0 : biến đếm dùng để đếm thời gian xem thuê bao cso thực sự nhấc máy hay không, thời gian đếm 0,1s và Count1 biến đếm xem thuê bao có gác máy thực sự hay không, thời gian đếm 0,1s. Nếu thời gian đếm đủ 0, 1s thì CPU ghi nhận trạng thái HSO mới này, ngược lại coi như HSO không đổi.

Tùy vào trạng thái HSO, CPU sẽ nhảy đến chương trình xử lý nhấc máy (HSO

= 0) hay gác máy ( HSO = 1).

Riêng trường hợp HSO = 1 mà thuê bao ở trạng thái rỗi Stati = 00H (thuê bao đang gác máy) hay Stati = 0AH ( thuê bao đang nghe chuông) thì CPU không làm gì cả và chuyển sang xét TB kế tiếp.

Sau khi xét đủ 3 thuê bao, CPU sẽ xét đến trung kế. Tương tự như thuê bao, CPU cũng ghi nhận trạng thái HSO của trung kế (TK). Nếu trung kế đang nhận chuông (HSOTK = 0), vừa nhận chuông xong thì giả nhấc máy( HSOTK = 1) thì CPU nhảy vào chương trình xử lý trung kế.

Riêng trường hợp HSOTK = 1 mà trung kế ở trạng thái rỗi Stati = 00H( trung kế đang giả gác máy) CPU không làm gì và thoát ngắt T0.

Chú ý :

Điểm khác biệt giữa trung kế và thuê bao là HSOTK = 0 chỉ khi Tk nhận được chuông từ tổng đài bưu điện, các trường hợp còn lại HSOTK = 1, kể cả khi thông thoại, còn HSOTB = 0 khi thuê bao nhấc máy và HSOTB = 1 khi thuê bao gác máy.

Hình 4.12: Lưu đồ xử lý ngắt Timer 0 4.2.3.4 Chương trình xử lý ngắt /INT1

Chương trình này không phân biệt thuê bao trung kế, khi nhận được tín hiệu tone gửi đến (thuê bao nhấn số), mạch DTMF sẽ giải mã số này và dưa vào CPU để xử lý, đồng thời tác động cạnh xuống chân /INT1 của 8951 tạo ngắt ngoài. Do /INT1 có mức ưu tiên cao hơn nên cương trình đang thực hiện tạm dừng lại để chuyển sang chương trình ngắt /INT1. Để tránh nhầm lẫn, các thanh ghi Rn có liên quan được cất vào vùng stack. Sau khi kết thúc chương trình ngắt /INT1, chương trình chính sẽ tiếp tục thực hiện, các thanh ghi Rn có liên quan được lấy ra.

Chương trình /INT1 cón hiệm vụ nhận các xử lý các số đo do DTMF gửi tối.

Thay đổi các gía trị State, Des, xóa các Count và giải tỏa DTMF khi đã nhận đủ số.

Nếu số thứ nhất là 9 thì DTMF sẽ giải tỏa ngay, còn nếu số thứ nhất là 1 thì DTMF chỉ được giải tỏa ngay khi nhận số thứ 2, trong trường hợp sau 15s mà không nhận được số thứ 2 thì DTMF được giả tỏa trong chương trình NM_ST03 (chương trình chờ nhấn số thứ hai).

Tùy theo State mà chương trình sẽ xử lý thích hợp : - Nếu state i = 02H thì chương trình sẽ xử lý số thứ nhất.

- Nếu state I = 03H thì chương trình sẽ xử lý số thứ hai.

Riêng trương hợp nếu số thứ nhất là số 8 ( dùng cho cịch vụ) thì DTMF chỉ được giải tỏa ngay sau khi nhận đủ số quy định cho dịch vụ. Tùy từng dịch vụ mà số nhấn thêm nhiều hay ít. Tuy nhiên phương cách giải thuật không khác với trường hợp nhấn số thứ nhất là số 1.

Ta chia thêm nhiều nhánh trong lưu đò giải thuật bằng cách gán cho các lần nhấn số thêm các trạng thái khác nhau và nhấn thêm số sẽ được coi là nhấn số thứ nhất so với lần nhấn số kế tiếp. Như vậy, các lần nhấn thêm số dều được quy về cho chương trình xử lý số thứ hai N_S_2.

4.2.3.5 chương trình xử lý nhấn số thứ nhất (N_S_1)

Do ta quy định ba thuê bao 0,1, 2 có các mã số thuê bao lần lượt 10,11, 12 và trung kế là số 9, số 8 là số đầu tiên của dịch vụ. Ngoài ra nếu DesDTMF = 09H ( thuê bao bên ngoài gọi vào) mà số thư nhất là 9 thì cũng báo sai, để đơn giản chúng em thay bằng âm báo hiệu bận. Các trường hợp còn lại CPU sẽ gán state sang trạng thái thích hợp. Ghi số thứ nhất vào trạng thái 0CH, số nhấn được thông báo bằng led.

Sau chương trình N_S_1, State có thể nhận các giá trị 03H, 05H,08H,09H.

- State = 03H ( thuê bao đã nhấn số thứ nhất là số 1, chờ nhấn số thứ hai) - State = 05H ( thuê bao đã nhấn sai số, số thứ nhất không phải số 1,8 hoặc 9).

- State = 08H ( thuê bao đã nhấn số thứ nhất là số 8,chờ nhấn thêm số để sử dụng dịch vụ).

- State = 09H ( thuê bao đã nhấn số thứ nhất là số 9, cuộc gọi ra ngoài).

Ta xây dựng lưu đồ như sau:

Hình 4.13: Lưu đồ xử lý số thứ nhất

4.2.3.6 Chương trình xử lý số thứ hai Lưu đồ được giải thích như sau :

Nếu số nhấn thứ hai (số II) lớn hơn 2 thì báo số sai, ngược lại CPU sẽ gán : - Source → Des.

- State = 04H.

Hình 4.14: Lưu đồ xử lý số thứ hai

Do số 0 được DTMF giải mà thành 0AH, nên số II = 0AH thì phải ghi lại giá trị 00H vào ô nhớ 2AH, còn các số khác thì được ghi trực tiếp vào ô nhớ 2CH.

Sau chương trình N_S_2, State có thể nhận các giá trị : 04H hoặc 05H. Với State

= 04H là trạng thái thuê bao đã nhấn xong 2 số.

Lúc này địa chỉ 2CH và Desi đang chứa mã số thuê bao được gọi.

4.2.3.7 Chương trình xử lý nhấc máy

- Chương trình sẽ xử lý thuê bao có trạng thái HSO=0, tức thuê bao nhấc máy.

- Căn cứ vào trạng thái State của thuê bao mà CPU sẽ gọi các chương trình xử lý tương ứng.

- Đối với thuê bao, ta có các trạng thái State cơ bản từ 00H đến 0BH. Các trạng thái này đã liệt kê ở mục trước.

- Lưu đồ giải thuật khái quát cho chương trình này như sau:

Hình 4.15: Lưu đồ xử lý nhấc máy 4.2.3.8 Chương trình xử lý thuê bao trong từng trạng thái

a. Chương trình NM_ST00

State = 00H (thuê bao nhấc máy trước đó gác máy) :

Hình 4.16: Lưu đồ NM_ST00

Đầu tiên, CPU xét trạng thái DTMF, nếu DTMF rảnh, CPU sẽ kết nối thuê bao đó với DTMF, gán trạng thái DTMF bận và gán cho thuê bao trạng thái State=01H. Ngược lại, DTMF bận CPU sẽ gọi chương trình BAO_BAN (báo bận).

Sau đó, CPU kết thúc chương trình này và tiếp tục xử lý cho thuê bao khác.

b. Chương trình BAO_BAN (báo bận):

Khi không thể thiết lập hoặc tiếp tục cuộc gọi ta thông báo cho thuê bao biết rằng âm hiệu Busy tone, đồng thời ta phải gán cho thuê bao lúc này trạng thái State = 07H.

Hình 4.17: Lưu đồ báo bận

c. Chương trình NM_ST01

State = 01H (thuê bao mới nhấc máy, chưa làm gì cả).

CPU cấp Dial tone và gán trạng thái State = 02H cho thuê bao. Tương tự chương trình NM_ST00

Hình 4.18: Lưu đồ NM_ST01

d. Chương trình NM_ST02

State = 02H (thuê bao đang nghe Dial tone, chuẩn bị nhấn số thứ nhất) :

Trong trạng thái này thuê bao sẽ nhấn số thứ nhất, do đó nếu thời gian 15s mà thuê bao không nhấn số thì CPU sẽ giải phóng DTMF và gọi chương trình BAO_BAN.

Ngược lại, khi đang nghe chương trình Dial tone (trong khoảng 15s cho phép) mà thuê bao nhấn số bất kỳ thì chương trình N_S_1 (trong chương trình ngắt /INT1) sẽ thục hiện.

Lưu đồ thuật toán được minh họa bằng hình dưới:

Hình 4.19: Lưu đồ MN_ST02 e. Chương trình NM_ST03

State = 03H (thuê bao đã nhấn số thứ nhất là số 1, chuẩn bị nhấn số thứ 2) : Chương trình này hoàn toàn giống nhấc máy NM_ST02. Nghĩa là nếu trong thời gian 10s mà thuê bao chưa nhấn số thứ hai thì CPU sẽ giải tỏa DTMF và báo bận cho thuê bao.

Trong lúc State = 03H, nếu thuê bao ấn tiếp 1 số thì chương trình N_S_2 (trong ngắt /INT1) sẽ được thực hiện.

f. Chương trình NM_ST04

State = 04H (thuê bao đã nhấn xong hai số của thuê bao) : Đặt thuê bao gọi là i, thuê bao được gọi là n.

CPU xem thuê bao được gọi có rảnh không, nếu thuê bao không rảnh thì CPU gọi chương trình BAO_BAN. Ngược lại, nếu thuê bao rảnh thì CPU sẽ cấp chuông và gán Staten = 0AH cho thuê bao được gọi, đồng thời gọi chương trình CAP_RBT cho thuê bao gọi.

Lưu đồ thuật toán được minh họa bằng hình dưới:

Một phần của tài liệu Thiết kế và thi công tổng đài số dung lượng nhỏ (Trang 82 - 122)

Tải bản đầy đủ (DOC)

(128 trang)
w