Luận văn Thiết kế mạch tính cước điện thoại

LỜI MỞ ĐẦU Ngày nay, công nghệ thông tin liên lạc trên Thế giới nói chung và nước ta nói riêng đã và đang phát triển không ngừng, điện thoại di động đã được sử dụng một cách rộng rãi. Tuy vậy, điện thoại công cộng vẫn là dịch vụ không thể thiếu để phục vụ cho người dân.Vì vậy, vấn đề ở đây là làm thế nào để các trung tâm Bưu điện, các bưu cục có thể tính cước phí cuộc gọi một cách hiệu quả. Mạch tính cước cho điện thoại cố định đã xuất hiện để giải quyết vấn đề này. Đó cũng là lý do mà em đã chọn đề tài này. Một máy tính cước phải đảm bảo được các yêu cầu sau: Hiện số bị gọi ra Cabin.Hiện thời gian tính từ lúc thuê bao bị gọi nhấc máy.Hiện tiền cuộc gọi khi kết thúc đàm thoại.Lưu trữ dữ liệu khi có sự cố mất điện.Đồng thời tất cả phải được hiện lên giao diện máy tính để bưu cục dễ quản lý. Với các yêu cầu đó và kiến thức em đã được học tại trường ĐH Kỹ Thuật Công Nghệ, em chọn chip vi điều khiển của hãng ATMEL cùng với các IC chuyên dùng khác, AT89C51 được chọn vì những ưu điểm sau: AT89C51 trên thị trường được sử dụng khá phổ biến và giá thành hợp lý.Các bus địa chỉ và bus dữ liệu rộng, khả năng chuyển đổi cho nhau linh hoạt bởi phần mềm.Đơn giản hơn ở phần cứng mạch tính cước là không cần thêm mạch nhận biết quay số Pulse. Visual Basic là ngôn ngữ để lập trình cho phần giao diện với máy tính. Tuy nhiên, vì kiến thức và kinh nghiệm còn hạn chế nên đề tài lần này chắc chắn sẽ không tránh khỏi những thiếu sót. Em rất mong được sự chỉ bảo của thầy cô cũng như những ý kiến đóng góp quí báo của các bạn để lần sau, những đề tài sau này được hoàn thiện hơn. Em xin chân thành cảm ơn!

doc76 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2808 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Luận văn Thiết kế mạch tính cước điện thoại, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ộng, phương thức thực hiện tiêu chuẩn là tính cước cuộc gọi khi thuê bao bị gọi nhấc náy trả lời, nghĩa là bắt đầu thời gian đàm thoại. Các đồng hồ tính cước (bộ phận ghi cước của thuê bao) hoạt động theo nguyên lý điện từ và được thiết kế và ghi nhận một đơn vị cước mỗi lần nam châm điện hoạt động. Điều quan trọng nhất là các mạch tính cước của một tổng đài tự động phải có độ tin cậy với mức sai số thấp, và đặc biệt phải bảo đảm tránh được hoạt động bất thường của đồng hồ tính cước do các hư hỏng của mạch điện hoặc do sử dụng sai lệch của thuê bao. Tính cước bằng phương pháp đảo cực nguồn điện: Khi nhận ra thuê bao bị gọi nhấc máy trả lời thì tổng đài sẽ đổi chiều dòng điện DC trên đôi dây của thuê bao gọi. Trong hệ tổng đài điện thoại tự động, tín hiệu đảo cực khởi động đồng hồ tính cước của thuê bao gọi. Khi cuộc đàm thoại kết thúc (một trong 2 bên gác máy) điện áp trên đôi dây lại được đảo chiều lần nữa và chấm dứt hoạt động của đồng hồ tính cước. Tính cước bằng phương pháp đếm xung: Sau khi thực hiện kết nối thông thoại cho 2 thuê bao, tổng đài sẽ cấp các xung gián đoạn có tần số qui định tính cước, số xung hiện diện trong một đơn vị thời gian cơ bản sẽ tỉ lệ với giá cước. Tùy theo khoảng cách giữa 2 thuê bao mà số xung trong mỗi đơn vị thời gian cơ bản khác nhau. Nếu thuê bao gọi đếm một vùng càng xa thì số xung nhận được để tính cước trong một đơn vị thời gian cơ bản sẽ càng nhiều. Bộ phận tính cước sẽ nhận các xung này và quy ra giá cước cuộc gọi. Tính cước bằng cách phát hiện Ring back tone: Trong 2 cách trên, thuê bao phải được tổng đài cung cấp cho dịch vụ: tín hiệu đảo cực hoặc xung tuần hoàn. Tại các thuê bao không có 2 dịch vụ trên, người ta có thể tính cước bằng cách kiểm tra tín hiệu hồi âm chuông (ring back tone). Khi số quay được gởi đi, tổng đài sẽ kết nối 2 thuê bao, bên thuê bao gọi sẽ nghe được hồi âm chuông (có tần số f = 425 Hz và chu kỳ 1s có 4s không). Khi thuê bao bị gọi nhấc máy, tín hiệu này sẽ mất. Do đó việc phát hiện hết hồi âm chuông chính là việc phát hiện thông thoại. Tín hiệu này sẽ khởi động bộ đếm thời gian thực. Khi giải tỏa cuộc gọi thì nội dung bộ đếm chính là khoảng thời gian thông thoại cần tính cước. PHƯƠNG THỨC QUAY SỐ VÀ TÍNH CƯỚC Ở VIỆT NAM HIỆN NAY: Phương thức quay số: Gọi nội hạt: Sau khi nhấc máy, nếu tín hiệu mời quay số (dial tone), quay số máy cần gọi, nếu nghe ring back tone thì tiếp tục chờ máy bị gọi nhấc máy. Nếu nghe busy tone thì có nghĩa là cuộc gọi không thực hiện được, người gọi đặt máy trở lại rồi sau đó gọi lại. Nhấc máy Nghe Dial tone Quay số Gọi liên tỉnh: Gọi tự động liên tỉnh: Nhấc máy Nghe Dial tone 0 Mã vùng Số thuê bao Ngoài ra, với cách gọi trực tiếp thường dùng còn có các dịch vụ điện thoại giảm giá cước đường dài liên tỉnh như: 171, 178, 177, 179… ta tiến hành như sau: 171_0_mã tỉnh_số thuê bao… Cước điện thoại đường dài liên tỉnh tại các điểm công cộng như tại thuê bao và thu thêm 454 VNĐ/cuộc (chưa bao gồm thuế VAT). Nhấc máy Nghe Dial tone 0 Mã vùng Số thuê bao Mã nước Gọi quốc tế: Nhấc máy Nghe Dial tone 0 Mã mạng điện thoại Số thuê bao Gọi vào các mạng di động: Mã gọi vào các mạng Mobiphone (VMS) 90 93 122 Vina Phone 91 94 Viettel 98 97 Sfone 95 EVN 96 HT mobile 92 Bộ công an, bộ quốc phòng 69 Cục bưu điện Trung ương 80 VSAT 99 Giá cước các tỉnh thành trong nước và quốc tế: Cước điện thoại đường dài trong nước: Đơn vị tính đồng/ Block (áp dụng từ ngày 15/8/2006) Vùng cước Đường dài liên tỉnh PSTN Đường dài liên tỉnh VOIP (171) Thứ 2-7 Chủ nhật, ngày lễ Thứ 2-7 Chủ nhật, ngày lễ An Giang, Bà Rịa-Vũng Tàu, Lâm Đồng, Long An, Bến Tre, Bạc Liêu, Bình Dương,Bình Phước,Bình Thuận, Ninh Thuận,Cà Mau, Cần Thơ-Hậu Giang,Đồng Nai, Đồng Tháp, Sóc Trăng, Kiên Giang, Tiền Giang, Trà Vinh, Vĩnh Long, Tây Ninh. 90,90 81,82 76,36 72,72 Kon Tum, Bình Định, Phú Yên, Đà Nẵng, Đắk Lắk - Đắk Nông, Quảng Ngãi, Quảng Nam, Quảng Trị, Gia Lai, Khánh Hòa, Thừa Thiên Huế. 136,36 118,20 120 90,9 Bắc Cạn, Bắc Giang, Bắc Ninh, Lai Châu - Điện Biên, Lạng Sơn, Lào Cai, Nam Định, Nghệ An, Ninh Bình, Phú Thọ, Cao Bằng, Quảng Bình, Quảng Ninh, Hà Giang, Hà Nam, Hà Nội, Hà Tây, Hà Tĩnh, Hải Dương, Hải Phòng, Hòa Bình, Hưng Yên, Sơn La, Thái Nguyên, Thái Bình, Thanh Hóa, Tuyên Quang, Yên Bái, Vĩnh Phúc. 136,36 136,36 118,20 118,20 120 120 90,9 90,9 Cước điện thoại nội hạt: Khu vực gọi đến Cách tính cước Giá cước Thời gian tối thiểu Thời gian tiếp theo Thời gian tối thiểu Thời gian tiếp theo Toàn thành phố 3 phút đầu Tính tròn 1 phút 1092 364 City Phone 3 phút đầu Tính tròn 1 phút 1092 364 1080 1 phút đầu Tính tròn 1 phút 1364 1364 1081 1 phút đầu Tính tròn 1 phút 1364 1364 Cước điện thoại di động: (Chưa có VAT) Thứ 2 – 7 Ngày lễ - Chủ nhật Thời gian tối thiểu Thời gian tiếp theo Thời gian tối thiểu Thời gian tiếp theo 6 giây 6 giây tiếp 6 giây 6 giây tiếp 136,36 136,36 95 95 CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG MẠCH Sơ đồ khối hệ thống - Chức năng từng khối: Khối xử lý trung tâm: Là khối xử lý chính của mạch tính cước. Nhiệm vụ là quản lý tất cả các khối còn lại : khối hiển thị, khối giao tiếp máy tính, khối giải mã DTMF, khối nhận biết tín hiệu đảo cực và khối bộ nhớ Ram ngoài. Nó là mạch logic tổ hợp được lập trình cho IC vi điều khiển AT89C51. Khối giải mã DTMF: Giải mã các tín hiệu quay số ra các mức logic để cấp cho khối xử lý trung tâm làm việc. Khối hiển thị: Hiển thị số được quay, tính thời gian và tiền cho cuộc gọi ra led 7 đoạn. Khối nhận biết nhấc máy: Nhận biết thuê bao có nhấc máy không và cung cấp tín hiệu quay số cho khối giải mã. Khối nhận biết tín hiệu đảo cực: Ở đây là dùng 1 Switch để tạo tín hiệu giả đảo cực báo cho khối xử lý trung tâm biết. Thông thường nếu thuê bao gọi có đăng ký tín hiệu đảo cực với tổng đài thì khi thuê bao bị gọi nhấc máy, tổng đài sẽ cung cấp 1 tín hiệu đảo cực đến khối xử lý trung tâm để xử lý tính tiền cho cuộc gọi. Khối bộ nhớ Ram ngoài: Được nạp sẵn bảng giá tiền cho từng block thời gian gọi của từng vùng trong nước, từng mạng điện thoại di động, quốc tế, nội hạt… Khối giao tiếp máy tính: Kết nối mạch tính cước với máy tính, nhằm chuyển đổi tín hiệu TTL sang RS232 để xuất số gọi đi, thời gian gọi, tiền lên máy tính để bưu cục dễ quản lý. Tính toán thiết kế: Tính toán cho 2 Module là tính cước và giao tiếp máy tính. Module tính cước: Mạch xử lý trung tâm: Sơ đồ nguyên lý: Nhiệm vụ của mạch này là điều khiển mọi hoạt động của Module tính cước như: Nhận biết thuê bao nhấc máy. Nhận biết tín hiệu đảo cực. Kiểm tra xem số gọi đi là nội hạt, liên tỉnh hay di động. Đếm thời gian và tính tiền cuộc gọi. Xuất dữ liệu ra led 7 đoạn: số bị gọi, thời gian và tiền cuộc gọi. Xuất các dữ liệu này qua Module giao tiếp. Nạp bảng giá cước vào Rom ngoại. Trong máy tính cước, tất cả các hoạt động của mạch đều liên quan đến xung clock cung cấp cho CPU vì các bộ Timers/Counters sẽ dựa vào tần số xung clock này mà thực hiện các công việc được lập trình sẵn (ngắt Timer, chương trình delay, đếm). Do xung clock đóng một vai trò rất quan trọng nên mạch tạo xung phải bảo đảm các yêu cầu như có độ ổn định cao, sai số tần số phải nhỏ đồng thời tần số xung phải phù hợp với tần số của tất cả các linh kiện trong mạch. Vi điều khiển AT89C51 có bộ dao động nằm bên trong vi mạch, do đó độ ổn định về tần số của mạch coi như thỏa. Mặt khác độ ổn định của mạch còn phụ thuộc vào thạch anh hay mạch dao động RC bên ngoài, ta chọn thạch anh vì nó dao động với tần số chuẩn và đơn giản mạch. Ngoài ra, ở điều kiện lý tưởng, tần số làm việc của CPU phải hoàn toàn tương thích với tốc độ truy xuất dữ liệu của bộ nhớ. Dựa vào các yếu tố trên và thêm vào đó là sự phổ biến trên thị trường, giá cả hợp lý, ta chọn thạch anh 12Mhz. Các tụ C2 và C3 dùng để ổn định tần số dao động của thạch anh. Port 1 và 2 bit P2.7, P2.6 dùng cho quét led. Port 0 là port data cho led. Chân 12 (INT0) được nối với chân STD của MT8870. Khi MT8870 giải mã xong 1 cặp tone, chân STD sẽ lên cao rồi xuống thấp tạo ngắt tại chân INT0 của CPU để xử lý đọc số. Chân 17 được nối đến chân TOE của MT8870 để điều khiển cho phép xuất dữ liệu sang CPU xử lý. Thông thường tại các bưu điện công cộng, thường được tổng đài cung cấp tín hiệu đảo cực (như đã trình bày ở chương 2) để tính cước cuộc gọi. Ở đây, do việc đăng ký tổng đài khó khăn nên em dùng 1 Switch nhấn giả đảo cực như sau: Sau khi quay số xong, ta nhấn Switch thì CPU sẽ nhận biết là đã bắt đầu cuộc đàm thoại và bắt đầu đếm thời gian tính tiền. 2 chân 14, 15 được nối với Opto cảm biến nhấc máy, sẽ trình bày ở phần sau. 2 điện trở thanh 10K mắc dạng cực thu hở để lấy mức tín hiệu cho các bit xử lý của 89C51. Khi mạch được cấp nguồn +5V, thì tụ nạp với thời hằng nạp điện là: τ = RC. Sau đó phóng điện vào chân RST của 89C51 và mạch được Reset lại từ đầu. Điện trở R22 = 100 Ω để tránh trường hợp dòng nạp cho tụ phân cực bên trong 89C51. Để reset CPU chân RST ở mức cao ít nhất 24 xung clock, tần số mỗi xung clock. Tần số mỗi xung clock là 12Mhz. Suy ra T= 24.(1/12.106) = 2 µs_ khoảng 2 chu kỳ máy. Mạch Reset: Tính giá trị cho R23 và C1: Điện áp ở chân RST chính là điện áp xả trên tụ C3 khi nạp đầy. Ta có: VRST = Vcc .e – T/τ. T/τ = ln(Vcc/VRST). è τ = T/ln(Vcc/VRST). Ta lại có: τ = R.C. è C = T/(R.ln(Vcc/VRST), với T = 2 µs, Vcc = 5V. Giả sử khi tụ nạp gần Vcc thì xả, ta chọn VRST ≈ 5 V, với R = 10K, ta có: C = 10 µF. Phần cảm biến nhấc máy : Khi nhấc máy, có dòng từ tổng đài qua 1 trong 2 Opto làm chân 5 dẫn xuống Mass, tín hiệu ở chân 5 của 2 Opto được đưa tới chân P3.4, P3.5 của 89C51 sẽ xử lý nhận biết tín hiệu nhấc máy. 2 Opto 4N35 là 2 cảm biến nhấc máy: Sở dĩ dùng 2 Opto là vì để khi ta có mắc ngược đường line so với tổng đài thì đều có thể nhận biết được. Điện trở R25 dùng để phân cực cho Opto dẫn. Với dòng của tổng đài khi nhấc máy là 20mA – 40mA, dòng qua led của Opto là 4mA, điện áp rơi trên led Opto là 2V thì ta có: R25 = 2V/(0,02 – 0,004) = 125 Ω. Ta chọn R25 = 150 Ω. Tụ C6 là tụ liên lạc, dùng để ngăn dòng DC. L1_Fit44_1 là biến thế cách ly 1:1, để chống quá áp ngõ vào bảo vệ cho các linh kiện bên trong mạch. 2 diode Zenner 4,7V dùng để ổn định điện áp ngõ vào IC MT8870 là: 4,7 + 0,6 = 5,3V. Mạch giải mã DTMF: Khi có tín hiệu quay số, một cặp tone sẽ đến ngõ vào của MT8870 và được giải mã ra 4 bit từ Q0 à Q3 để cấp cho CPU xử lý. Các tụ điện, điện trở, thạch anh được sắp xếp theo tính toán của nhà sản xuất. Chân STD khi có tone nhấn sẽ lên cao rồi xuống thấp để tạo ngắt tại chân INT0 của 89C51 xử lý. Chân TOE sẽ được set lên cao khi MT8870 giải mã xong 1 cặp tone. Mạch hiển thị: Là mạch gồm 10 led 7 đoạn dùng để hiển thị số khi quay số điện thoại gọi đi. Sau đó, khi bắt đầu tính tiền cuộc gọi, 6 led bên trái dùng để hiển thị tiền, 4 led bên phải dùng để hiển thị thời gian. Tính toán điện trở phân cực cho cực B của transistor: Theo đặc tuyến ở ngõ ra của transitor ta có, khi dòng IB tăng thì dòng IC cũng tăng theo, đến một lúc nào đó khi dòng IB tăng thì IC sẽ không tăng nữa, khi đó transistor hoạt động ở chế độ bão hòa. Khi transistor hoạt động ở chế độ bão hòa thì ta được ICmax ≤ β.IB.k với k là hệ số bão hòa. Trong tính toán thường chọn k = 2 à 5. ICmax è IB > (*) β.k Khi cực B tích cực mức thấp, thì mối nối B-E được phân cực thuận, lúc này: Vcc = Vγ + IB.RB Vcc - Vγ è IB = RB Vcc - Vγ ICmax Từ (*) ta suy ra: > RB β.k (Vcc - Vγ). β.k (5-0.6).1000.2 è RB < = = 4,56 kΩ ICmax 1920.10-3 à Chọn RB = 4,7 kΩ. Bên trong led 7 đoạn 8 bit data của Port 0 được đưa đến các chân từ a à g và chân p của led 7 đoạn. Các led này sẽ sáng khi chân tương ứng của nó ở mức 0 và transistor được kích dẫn. _ Dòng quét led khoảng 10 mA là led sáng, ta chọn dòng để quét led là 20 mA để led được sáng rõ: Ta có: Vcc - VLed 5V – 2V R = = = 150Ω. Iled 0.02 Chọn giá trị cho điện trở là 150 Ω. Chọn điện trở hạn dòng cho led: Bộ nhớ Rom ngoài AT24C04: Do bộ nhớ Rom của 89C51 không đủ, nên phần thiết kế em đã sử dụng thêm Rom AT24C04. Đây là Rom có bộ nhớ 4Kb, được sử dụng để lưu bảng giá cước - A0, A1, A2: Dùng để chọn bộ nhớ nếu có sử dụng nhiều Rom ngoài. Ở đây chỉ sử dụng 1 Rom nên 3 chân này được nối mass. - SCL : Chuỗi xung ngõ vào - SDA : Chuỗi dữ liệu Phần truyền tín hiệu đi xa : Do máy tính có thể để ở xa so với cabin, vì vậy cần phải có phần này nhằm đảm bảo tín hiệu không bị suy hao. SN75176 có chức năng tương đương như MAX485 (giá thành rẻ hơn tuy nhiên tính ổn định không cao), là IC dùng để chuyển đổi tín hiệu TTL sang RS485 để truyền tín hiệu đi xa, đường truyền tối đa lên đến 15Km. 2 chân TXD và RXD là 2 chân truyền nhận được kết nối trực tiếp với 89C51. Khi truyền xong hoặc nhận xong 1 chuỗi dữ liệu sẽ tạo ra 1 xung ở chân 2 và 3, xung này sẽ kích hoạt ngắt ở chân INT1của 89C51 để phục vụ phần mềm xử lý. 2 chân 6 và 7 là ngõ ra hoặc vào của tín hiệu RS485. Phần nguồn: Sở dĩ phải dùng nguồn 12V, rồi sau đó biến đổi ra 5V để sử dụng cho các linh kiện là vì khi truyền tín hiệu đi xa (từ mạch RS232_Nguồn đến mạch tính cước) mà dùng nguồn 5V sẽ bị suy hao bớt dẫn đến không đủ điện áp để sử dụng. Nguyên lý hoạt động của Module tính cước: Khi thuê bao gác máy (on hook), trở kháng của điện thoại rất cao, không có dòng qua mạch cảm biến nhấc máy. Khi thuê bao nhấc máy (off hook), trở kháng này giảm dẫn đến có dòng chạy qua mạch cảm biến, dòng này làm cho 1 trong 2 Opto dẫn à CPU nhận biết thuê bao đang nhấc máy. Khi nhận biết được thuê bao đang nhấc máy, CPU sẽ hiển thị “An So” báo cho người dùng biết để quay số. Khi thuê bao quay số, tín hiệu tone sẽ qua biến thế cách ly đến ngõ vào IN-, sau đó tín hiệu quay ra theo đường chân GS của MT8870, qua R27 rồi về tổng đài. Sau khi nhấn 1 số, 1 tín hiệu từ cao xuống thấp tại chân STD sẽ kích hoạt ngắt cạnh xuống báo cho CPU biết đã thực hiện xong việc giải mã 1 cặp tone. Sau khi thuê bao quay số xong, CPU sẽ đợi tín hiệu đảo cực. Khi có tín hiệu đảo cực, CPU bắt đầu kiểm tra xem số gọi đi là nội hạt, liên tỉnh hay di động sau đó lấy bảng giá từ Rom ngoài áp vào để tính cước. Tất cả các dữ liệu như: số bị gọi, thời gian hay tiền đều được xuất ra led 7 đoạn và máy tính để người sử dụng dễ quản lý. Module giao tiếp máy tính: Đề tài này em thiết kế một máy tính có thể quản lý được 4 Cabin, nên phải cần có module này. Đây là module trung gian để kết nối máy tính với các cabin. Sơ đồ mạch Module giao tiếp: Phần xử lý trung tâm: Mạch xử lý trung tâm. Đây là module trung tâm để giao tiếp giữa các module tính cước và máy tính. Nhiệm vụ của module này là nhận dữ liệu từ module tính cước rồi xuất ra đúng từng cabin lên máy tính để chủ bưu cục dễ quản lý. Ở đây em thiết kế sử dụng cho 2 module tính cước. 2 chân TXD và RXD là 2 chân truyền và nhận dữ liệu. Bit P1.0 là bit nhận biết dữ liệu nhận được từ module tính cước để xuất ra máy tính. Phần giao tiếp RS232: Đây là phần kết nối giữa máy tính và phần cứng tính cước. Trong đề tài này do không cần tốc độ truyền cao nên ta chọn giao tiếp mạch với máy tính thông qua cổng nối tiếp, thông thường có 2 cách ghép nối: Cách đơn giản là dùng Transistor làm bộ đệm. Ghép nối các đường truyền và nhận (TXD và RXD) của vi điều khiển với bộ đệm dùng vi mạch. Đề tài này em dùng MAX232. Vi mạch MAX232 chuyển đổi mức TTL ở ngõ vào thành mức +10V (mức 1) hoặc -10V (mức 0) ở phía truyền và mức logic 1 (mức dấu) thành mức +3V à 15V hoặc mức logic 0 (mức trống) thành mức -3V à -15V thành mức TTL ở phía nhận. Do trong đề tài ta sử dụng việc bắt tay giữa vi điều khiển và máy tính bằng phần mềm nên ta chỉ cần 3 đường truyền để truyền dữ liệu từ máy tính và ngược lại. Đó là 1 đường Mass được nối chung với Mass của mạch, 1 đường TXD và 1 đường RXD của máy tính được nối với vi mạch MAX232. Nhiệm vụ của phần này, em xin được tóm tắt như sau: Dữ liệu từ module tính cước được truyền đi theo chuẩn RS485 tới module giao tiếp qua IC SN75176 để chuyển sang tín hiệu TTL đưa đến phần xử lý trung tâm. Từ đây lại đưa đến Max232 để đổi TTL à RS232 sau đó truyền qua cổng Com máy tính. Các tụ được mắc theo thiết kế của nhà sản xuất. Giao diện kết nối với vi tính _ dùng Visual Basic: Đây là giao diện dành cho chủ bưu cục quản lý. Khi Cabin nào gọi thì tất cả dữ liệu về cuộc gọi sẽ xuất lên Cabin đó. Ví dụ: Cabin 1 đang gọi số thuê bao là 0907706660. Thời gian cuộc gọi là 0 phút và 47 giây. Tiền cuộc gọi là: 1800 VNĐ. 0907706660 00:47 1800 VNĐ Lưu đồ giải thuật: Lưu đồ giải thuật của phần tính cước: Lưu đồ giải thuật của phần giao tiếp máy tính: KẾT LUẬN Ở đề tài luận văn này, em đã hoàn thành được những yêu cầu sau: Hiển thị số bị gọi. Hiển thị thời gian cuộc gọi. Tính tiền và hiển thị tiền cuộc gọi. Hiển thị số bị gọi, thời gian đàm thoại và tiền cuộc gọi lên giao diện máy tính. Máy tính có thể quản lý được nhiều Cabin tính cước. Mặc dù em đã cố gắng rất nhiều, nhưng vì kiến thức và kinh nghiệm còn hạn chế, vì vậy luận văn lần này còn nhiều thiếu sót như: Không lưu được các cuộc gọi trước đó. Không nạp được bảng giá cước từ máy vi tính. Giao diện máy tính chưa đẹp. Tính thẩm mỹ của mạch chưa cao. Những thiếu sót này sẽ là hướng phát triển cho đề tài của em sau này. Em rất mong những ý kiến đóng góp của thầy cô và các bạn để bổ sung vào phần kiến thức còn hạn chế của mình. Em xin chân thành cảm ơn ! TÀI LIỆU THAM KHẢO CẤU TRÚC VÀ LẬP TRÌNH HỌ VI ĐIỀU KHIỂN 8051 - NGUYỄN TĂNG CƯỜNG, PHAN QUỐC THẮNG. TRANG WEB GOOGLE: TRA CỨU DATASHEET CÁC LINH KIỆN: AT89C51, MT8870, OPTO 4N35,SN75176, MAX232, MAX485. LUẬN VĂN TỐT NGHIỆP CỦA CÁC KHÓA TRƯỚC. PHỤ LỤC: CÁC LINH KIỆN CHÍNH SỬ DỤNG TRONG MẠCH AT89C51: CẤU TRÚC PHẦN CỨNG: Đặc điểm và chức năng hoạt động của các IC họ MSC- 51 hoàn toàn tương tự như nhau. Ở đây giới thiệu IC89C51 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất. Chúng có các đặc điểm được tóm tắt như sau: 8 KB EPROM bên trong. 128 Byte RAM nội. 4 Port xuất/nhập I/O 8 bit. Giao tiếp nối tiếp. 64 KB vùng nhớ mã ngoài. 64 KB vùng nhớ dữ liệu ngoại. Xử lý Boolean (hoạt động trên bit đơn). 210 vị trí nhớ có thể định vị bit. 4 µs cho hoạt động nhân hoặc chia. KHẢO SÁT SƠ ĐỒ CHÂN AT89C51, CHỨC NĂNG TỪNG CHÂN: 40 Sơ đồ chân: Vcc XTAL.1 XTAL.2 PSEN\ ALE EA\ RST Vss P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 18 19 12 MHz P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 17 16 15 14 13 12 11 10 RD WR T1 T0 INT1 INT0 TXD RXD 89C51 29 30 31 9 20 30pF 32 33 34 35 36 37 38 39 8 7 6 5 4 3 2 1 28 27 26 25 24 23 22 21 30pF Chức năng các chân của AT89C51: AT89C51 có tất cả 40 chân có chức năng như các đưng72 xuất nhập. Trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ. Các Port: Port 0: là Port có 2 chức năng ở các chân 32 – 39 của 89C51. Trong các thiết kế cờ nhớ không dùng bộ nhớ mở rộng, nó có chức năng như các đường I/O. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa các bus địa chỉ và bus dữ liệu. Port 1: là Port I/O trên các chân 1 – 8. Các chân được ký hiệu từ P1.0,.., P1.7 có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho các thiết bị bên ngoài. Port 2: là Port có tác dụng kép nên các chân 21 – 28 được dùng như các đường I/O hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng. Port 3: là Port có tác dụng kép nên các chân từ 10 – 17. Các chân của Port này có nhiều chức năng, các công dụng chuyển đổi liên hệ với các đặc tính đặc tính đặc biệt của 89C51 như ở bản sau: Bit Tên Chức năng chuyển đổi P3.0 RXT Ngõ vào dữ liệu nối tiếp. P3.1 TXD Ngõ xuất dữ liệu nối tiếp. P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 INT0\ INT1\ T0 T1 WR\ RD\ Ngõ vào ngắt cứng thứ 0. Ngõ vào ngắt cứng thứ 1. Ngõ vào của TIMER/COUNTER thứ 0. Ngõ vào của TIMER/COUNTER thứ 1. Tín hiệu ghi dữ liệu lên bộ nhớ ngoài. Tín hiệu đọc bộ nhớ dữ liệu ngoài. Các ngõ tín hiệu điều khiển: Ngõ tín hiệu PSEN (Program Store Enable): PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nối đến chân OE\ (Output Enable) của EPROM cho phép đọc các byte mã lệnh. PSEN ở mức thấp trong thời gian Microcontroller 89C51 lấy lệnh. Các mã lệnh của chương trình được đọc vào từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 89C51 để giải mã lệnh. Khi 89C51 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1. Ngõ tín hiệu điều khiển ALE (Address Latch Enable): Khi 89C51 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và bus dữ liệu, do đó phải tách các đường địa chỉ và dữ liệu. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt. Tín hiệu ra ở chân ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. Chân ALE được dùng làm ngõ vào xung lập trình cho EPROM trong 89C51. Ngõ tín hiệu EA\ (External Access): Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc 0. Nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8 Kbyte. Nếu ở mức 0, 89C51 sẽ thi hành chương trình từ bộ nhớ mở rộng. Chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho EPROM trong 89C51. Ngõ tín hiệu RST (Reset): Ngõ vào RST ở chân 9 là ngõ vào Reset của 89C51. Khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. Khi cấp điện, mạch tự động Reset. Các ngõ vào bộ dao động X1, X2: Bộ dao động được tích hợp bên trong 89C51, khi sử dụng 89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số Thạch anh thường được sử dụng là 12Mhz. Các chân nguồn: 89C51 vận hành với nguồn đơn 5V, Vcc (nguồn) được nối vào chân 40 và Vss (GND) được nối vào chân 20. CẤU TRÚC BÊN TRONG 89C51: Tổ chức bộ nhớ: DATA Memory Enable via RD & WR CODE Memory Enable via PSEN FFFF FFFF FF 00 On – Chip 0000 0000 Memory Bộ nhớ trên Chip Hình : Tóm tắt các vùng nhớ của 89C51. Hai đặc tính cần lưu ý: Các thanh ghi và các Port xuất nhập đã được sắp xếp trong bộ nhớ và có thể được truy xuất trực tiếp như các địa chỉ bộ nhớ khác. Ngăn sếp bên trong Ram nội nhỏ hơn so với RAM ngoài như trong các bộ vi xử lý khác. Chi tiết về bộ nhớ RAM trên Chip: RAM bên trong 89C51 được phân chia giữa các bank thanh ghi (00H à 1FH), RAM địa chỉ hoá từng bit (20H à 2FH), RAM đa dụng (30H à 7FH), và các thanh ghi chức năng đặc biệt (08H à FFH). Bảng tóm tắt các vùng nhớ 89C51. Bản đồ bộ nhớ data trên Chip như sau : 7F RAM đa dụng FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 Không được địa chỉ hoá bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D Không được địa chỉ hoá bit TH1 22 17 16 15 14 13 12 11 10 8C Không được địa chỉ hoá bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B Không được địa chỉ hoá bit TL1 20 07 06 05 04 03 02 01 00 8A Không được địa chỉ hoá bit TL0 1F Bank 3 89 Không được địa chỉ hoá bit TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 Bank 2 87 Không được địa chỉ hoá bit PCON 10 0F Bank 1 83 Không được địa chỉ hoá bit DPH 08 82 Không được địa chỉ hoá bit DPL 07 Bank thanh ghi 0 81 Không được địa chỉ hoá bit SP 00 (mặc định cho R0 –R7) 88 87 86 85 84 83 82 81 80 P0 Bộ nhớ trong 89C51 bao gồm ROM và RAM. RAM trong 89C51 bao gồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hoá từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt. 89C51 có bộ nhớ theo cấu trúc Harvard: Có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong 89C51 nhưng 89C51 vẫn có thể kết nối với 64Kbyte dữ liệu. Hai đặc tính cần chú ý là: Các thanh ghi và các Port xuất nhập đã được định vị (xác định) trong bộ nhớ và có thể truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác. Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoại như trong các bộ Microcontroller khác. RAM bên trong 89C51 được phân chia như sau: Các bank thanh ghi có địa chỉ từ 00H đến 1FH. RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH. RAM đa dụng từ 30H đến 7FH. Các thanh ghi chức năng đặc biệt từ 80H đến FFH. RAM đa dụng: Mặc dù trên hình vẽ cho thấy 80 byte đa dụng chiếm các địa chỉ từ 30H đến 7FH, 32 byte dưới từ 00H đến 1FH cũng có thể dùng với mục đích tương tự (mặc dù các địa chỉ này đã có mục đích khác). Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu địa chỉ trực tiếp hoặc gián tiếp. RAM có thể truy xuất từng bit: 89C51 chứa 210 bit được địa chỉ hóa, trong đó có 128 bit có chứa các byte chứa địa chỉ từ 20H đến 2FH và các bit còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt. Ý tưởng truy xuất bit bằng phần mềm là các đặc tính mạnh của Microcontroller xử lý chung. Các bit có thể được đặt, xóa, AND, OR …, với 1 lệnh đơn. Đa số các Microcontroller xử lý đòi hỏi một chuỗi lệnh đọc- sửa- ghi để đạt được mục đích tương tự. Ngoài ra các Port cũng có thể truy xuất được từng bit. 128 bit truy xuất từng bit này cũng có thể truy xuất như các byte hoặc như các bit phụ thuộc vào lệnh được dùng. Các bank thanh ghi: 32 bit thấp của bộ nhớ nội được dành cho các bank thanh ghi. Bộ lệnh 89C51 hổ trợ 8 thanh ghi có tên là R0 đến R7 và theo mặc định sau khi reset hệ thống, các thanh ghi này có địa chỉ từ 00H đến 07H. Các lệnh dùng các thanh ghi từ R0 à R7 sẽ ngắn hơn và nhanh hơn so với các lệnh có chức năng tương ứng dùng kiểu địa chỉ trực tiếp. Các dữ liệu được dùng thường xuyên nên dùng một trong các thanh ghi này Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 à R7 để chuyển đổi việc truy xuất các bank thanh ghi ta phải thay đổi các bit chọn bank trong thanh ghi trạng thái. Các thanh ghi có chức năng đặc biệt: Các thanh ghi nội của 89C51 được truy xuất ngầm định bởi bộ lệnh. Các thanh ghi trong 89C51 được định dạng như một phần của RAM trên chip, vì vậy mỗi thanh ghi sẽ có một địa chỉ. Chú ý: Tất cả 128 địa chỉ từ 80H đến FFH khônh được định nghĩa, chỉ có 21 thanh ghi có chức năng đặc biệt được định nghĩa sẵn các địa chỉ. Thanh ghi trạng thái chương trình (PSW: Program Status Word)): Từ trạng thái chương trình ở địa chỉ D0H được tóm tắt như sau: BIT SYMBOL ADDRESS DESCRIPTION PSW.7 CY D7H Cary Flag PSW.6 AC D6H Auxiliary Cary Flag PSW.5 F0 D5H Flag 0 PSW4 RS1 D4H Register Bank Select 1 PSW.3 RS0 D3H Register Bank Select 0 00=Bank 0; address 00H¸07H 01=Bank 1; address 08H¸0FH 10=Bank 2; address 10H¸17H 11=Bank 3; address 18H¸1FH PSW.2 OV D2H Overlow Flag PSW.1 - D1H Reserved PSW.0 P DOH Even Parity Flag Chức năng từng bit trạng thái chương trình. Cờ Carry CY (Carry Flag): Cờ nhớ có tác dụng kép. Thông thường nó được dùng cho các lệnh toán học: C=1 nếu phép toán cộng có sự tràn hoặc phép trừ có mượn và ngược lại C=0 nếu phép toán cộng không tràn và phép trừ không có mượn. Bit Parity (P): Bit tự động được Set hay Clear ở mỗi chu kỳ máy để lập P chẵn với thanh ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit P luôn luôn chẵn. Ví dụ: A chứa 10101101B thì bit P Set lên 1 để tổng số bit 1 trong A và P tạo thành số chẵn. Bit P thường được dùng trong sự kết hợp với những thủ tục của Port nối tiếp để tạo ra bit P trước khi phát đi hoặc kiểm tra bit P sau khi thu. Thanh ghi B: Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A cho các phép toán nhân chia. Lệnh MUL AB è sẽ nhận những giá trị không dấu 8 bit trong 2 thanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte cao) và B (byte thấp). Lệnh DIV AB è lấy A chia B, kết quả phần nguyên đặt vào A, phần dư đặt vào B. Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục đích. Nó là những bit định vị thông qua những địa chỉ từ F0H à F7H. Con trỏ ngăn xếp SP (Stack Pointer): Con trỏ ngăn xếp là một thanh ghi 8 bit ở địa chỉ 81H. Nó chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh trên ngăn xếp bao gồm các lệnh cất dữ liệu vào ngăn xếp (PUSH) và lấy dữ liệu ra khỏi ngăn xếp (POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP. Ngăn xếp của 89C51 được giữ trong RAM nội và giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp, chúng là 128 byte đầu của 89C51. Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, các lệnh sau đây được dùng: MOV SP,#5FH. Với lệnh trên thì ngăn xếp của 89C51 chỉ có 32 byte vì địa chỉ cao nhất của RAM trên chip là 7FH. Sở dĩ giá trị 5FH được nạp vào SP là vì SP tăng lên 60H trước khi cất byte dữ liệu. Khi reset 89C51, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ 08H. Nếu phần mềm ứng dụng không khởi động SP một giá trị mới thì bank thanh ghi 1 có thể cả 2 và 3 sẽ không dùng được vì vùng RAM này đã được dùng làm ngăn xếp. Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc truy xuất ngầm bằng lệnh gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con. Con trò dữ liệu DPTR (Data Pointer): Được dùng để truy xuất bộ nhớ ngoài là 1 thanh ghi 16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao). Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở địa chỉ 1000H: MOV A,#55H MOV DPTR,#1000H MOV @DPTR,A Lệnh đầu tiên dùng để nạp 55H vào thanh ghi A. Lệnh thứ 2 dùng để nạp địa chỉ của ô nhớ cần lưu giá trị 55H vào DPTR. Lệnh thứ 3 sẽ di chuyển nội dung của thanh ghi A (là 55H) vào ô nhớ RAM bên ngoài có địa chỉ chứa trong DPTR (là 1000H). Các thanh ghi Port (Port Register): Các Port của 89C51 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ 90H, Port 2 ở địa chỉ A0H, Port 3 ở địa chỉ B0H. Tất cả các Port này đều có thề truy xuất từng bit nên rất thuận tiện trong khả năng giao tiếp. Các thanh ghi Timer (Timer Register): 89C51 có chứa 2 bộ Timer/Counter 16 bit được dùng cho việc định thời được đếm sự kiện. Timer 0/1 ở địa chỉ 8AH/8BH (TL0/1: byte thấp), 8CH/8DH (TH0/1: byte cao). Việc khởi động Timer được Set bởi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển Timer (TCON) ở địa chỉ 88H. Chỉ có TCON được địa chỉ hóa từng bit. Các thanh ghi Port nối tiếp (Serial Port Register): 89C51 chứa 1 Port nối tiếp cho việc trao đổi thông tin với các thiết bị nối tiếp như máy tính, Modem hoặc giao tiếp nối tiếp với các IC khác. Một thanh ghi đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả 2 dữ liệu truyền và nhận. Khi truyền dữ liệu ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận khác nhau được lập trình qua thanh ghi điều khiển Port nối tiếp (SCON) được địa chỉ hóa từng bit ở địa chỉ 98H. Các thanh ghi ngắt (Interrupt Register): 89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi bị reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả 2 được địa chỉ hóa từng bit. Bộ nhớ ngoài (External Memory): 89C51 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64K byte bộ nhớ dữ liệu ngoài. Do đó, có thể dùng thêm ROM và RAM nếu cần. Khi dùng bộ nhớ ngoài, Port 0 không còn chức năng I/O nữa. Nó được kết hợp giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để chốt byte của bus địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ. Port được cho là byte cao của bus địa chỉ. Truy xuất bộ nhớ mã ngoài (Accessing External Code Memory): Bộ nhớ chương trình bên ngoài là bộ nhớ ROM được cho phép của tín hiuệ PSEN\. Sự kết nối phần cứng của bộ nhớ EPROM như sau: Port 0 EA ALE Port 2 PSEN 89C51 D0 ¸ D7 A0 ¸ A7 A8 ¸ A15 OE 74HC373 O D G EPROM Trong 1 chu kỳ máy tiêu biểu, tín hiệu ALE tích 2 lần. Lần thứ 1 cho phép 74HC373 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp và byte cao của bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN\ chưa tích cực, khi tín hiệu lên 1 trở lại thì Port 0 đã có dữ liệu là Opcode. ALE tích cực lần thứ 2 được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang hiện hành là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ 2 bỏ đi. HOẠT ĐỘNG CỦA TIMER: Giới thiệu: Bộ định thời của Timer là một chuỗi các Flip Flop được chia làm 2, nó nhận tín hiệu vào là một nguồn xung clock, xung clock được đưa vào Flip Flop thứ nhất là xung clock của Flip Flop thứ 2 mà nó cũng chia tần số clock này cho 2 và cứ tiếp tục. Vì mỗi tầng kế tiếp chia cho 2, nên Timer n tầng phải chia tần số clock ngõ vào cho 2n. Ngõ ra của tầng cuối cùng là clock của Flip Flop tràn Timer hoặc cờ mà nó kiểm tra bởi phần mềm hoặc sinh ra ngắt. Giá trị nhị phân trong các FF của bộ Timer có thể được nghĩ như đếm xung clock hoặc các sự kiện quan trọng bởi vì Timer được khởi động. Ví dụ Timer 16 bit có thể đếm đến từ FFFFH sang 0000H. Hoạt động của Timer đơn giản 3 bit được minh họa như sau: D Q Q0 D Q Q1 D Q Q2 D Q Q3 Flag FF Clock Q0 (LSB) Q1 Q2 (MSB) Count Flag LSB MSB Flag Timer Flip Flops. 0 1 2 3 4 5 6 7 Trong hình trên mỗi tầng là 1 FF loại D phủ định tác động cạnh xuống được hoạt động ở mode chia cho 2 (ngõ ra Q\ được nối vào D). FF cờ là một bộ chốt đơn giản loại D được set bởi tầng cuối cùng trong Timer. Trong biểu đồ thời gian, tầng đầu đổi trạng thái ở 1/2 tần số clock, tầng thứ 2 đổi trạng thái ở tần số 1/4 tần số clock… Số đếm được biết ở dạng thập phân và được kiểm tra lại dễ dàng bởi việc kiểm tra các tần số của 3 FF. Ví dụ số đếm “4” xuất hiện khi Q2 = 1, Q1 = 0, Q0 = 0 ( 410 = 1002). Các Timer được ứng dụng thực tế cho các hoạt động định hướng. 89C51 có 2 bộ Timer 16 bit, mỗi Timer có 4 mode hoạt động. Các Timer dùng để đếm giờ, đếm các sự kiện cần thiết và sự sinh ra tốc độ của tốc độ Baud bởi ự gắn liền Port nối tiếp. Mỗi sự định thời là một Timer 16 bit, do đó tầng cuối cùng là tầng thứ 16 sẽ chia tần số clock vào cho 216 = 65.536. Trong các ứng dụng định thời, 1 Timer được lập trình để tràn ở một khoảng thời gian đều đặn và được set cờ tràn Timer. Cờ được dùng để đồng bộ chương trình để thực hiện một hoạt động như việc đưa tới 1 tầng các ngõ vào hoặc gửi dữ liệu đếm ngõ ra. Các ứng dụng khác có sử dụng việc ghi giờ đều đều của Timer để đo thời gian đã trôi qua 2 trạng thái (ví dụ đo độ rộng xung). Việc đếm 1 sự kiện đựoc dùng để xác định số lần xuất hiện của sự kiện đó, tức thời gian trôi qua giữa các sự kiện. Các Timer của 89C51 được truy xuất bởi việc dùng 6 thanh ghi chức năng đặc biệt: Timer SFR Purpose Address Bit-Addressable TCON Control 88H YES TMOD Mode 89H NO TL0 Timer 0 low-byte 8AH NO TL1 Timer 1 low-byte 8BH NO TH0 Timer 0 high-byte 8CH NO TH1 Timer 1 high-byte 8DH NO CÁC THANH GHI ĐIỀU KHIỂN TIMER: Thanh ghi điều khiển chế độ Timer - TMOD (Timer Mode Register): Thanh ghi TMOD gồm 2 nhóm 4 bit là: 4 bit thấp đặt mode hoạt động dho Timer 0 và 4 bit cao đặt mode hoạt động cho Timer 1. 8 bit của thanh ghi TMOD được tóm tắt như sau: Bit Name Timer Description 7 GATE 1 Khi GATE = 1, Timer chỉ làm việc khi INT1=1 6 C/T 1 Bit cho đếm sự kiện hay ghi giờ C/T = 1 : Đếm sự kiện C/T = 0 : Ghi giờ đều đặn 5 M1 1 Bit chọn mode của Timer 1 4 M0 1 Bit chọn mode của Timer 1 3 GATE 0 Bit cổng của Timer 0 2 C/T 0 Bit chọn Counter/Timer của Timer 0 1 M1 0 Bit chọn mode của Timer 0 0 M0 0 Bit chọn mode của Timer 0 Hai bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer 1. M1 M0 MODE DESCRIPTION 0 0 0 Mode Timer 13 bit (mode 8048) 0 1 1 Mode Timer 16 bit 1 0 2 Mode tự động nạp 8 bit 1 1 3 Mode Timer tách ra : Timer 0 : TL0 là Timer 8 bit được điều khiển bởi các bit của Timer 0. TH0 tương tự nhưng được điều khiển bởi các bit của mode Timer 1. Timer 1 : Được ngừng lại. TMOD không có bit định vị, nó thường được load một lần bởi phần mềm ở đầu chương trình để khởi động mode Timer. Sau đó sự định giờ có thể dừng lại, được khởi động lại như thế bởi sự truy xuất các thanh ghi chức năng đạc biệt của Timer khác. Thanh ghi điều khiển Timer - TCON (Timer Control Register): Thanh ghi điều khiển bao gồm các bit trạng thái và các bit điều khiển bởi Timer 0 và Timer 1. Thanh ghi TCON có bit định vị. Hoạt động của từng bit được tóm tắt như sau : Bit Symbol Bit Address Description TCON.7 TF1 8FH Cờ tràn Timer 1 được set bởi phần cứng ở sự tràn, được xóa bởi phần mềm hoặc bởi phần cứng khi các vector xử lý đến thủ tục phục vụ ngắt ISR TCON.6 TR1 8EH Bit điều khiển chạy Timer 1 được set hoặc xóa bởi phần mềm để chạy hoặc ngưng chạy Timer. TCON.5 TF0 8DH Cờ tràn Timer 0 (hoạt động tương tự TF1) TCON.4 TR0 8CH Bit điều khiển chạy Timer 0 (giống TR1) TCON.3 IE1 8BH Cờ kiểu ngắt 1 ngoài. Khi cạnh xuống xuất hiện trên ÍNT thì ÍE được xóa bởi phần mềm hoặc phần cứng khi CPU định hướng đến thủ tục phục vụ ngắt ngoài. TCON.2 IT1 8AH Cờ kiểu ngắt 1 ngoài được set hoặc xóa bằng phần mềm bởi cạnh kích hoạt bởi sự ngắt ngoài. TCON.1 IE0 89H Cờ cạnh ngắt ngoài 0 TCON IT0 88H Cờ kiểu ngắt ngoài 0. II. MT8870 _IC GIẢI MÃ DTMF : MT8870 là linh kiện được sản xuất theo công nghệ ISO2-CMOS. Nó thực hiện chức năng giải mã cặp 16 tone DTMF thành mã 4 bit. Năng lượng thấp và tối thiểu hoá linh kiện mắc bên ngoài. Mô tả chân linh kiện: Pin Tên Mô tả 1 IN+ Ngõ vào không đảo 2 IN- Ngõ vào đảo 3 GS Chân hồi tiếp của ngõ ra mạch khuếch đại để gắn với điện trở bên ngoài để điều khiển hệ số của mạch khuếch đại 4 Vref Ngõ ra dùng để phân cực các ngõ vào tại điểm giữa, thường là 1/2 VDD 5 INH Ngõ vào, chân này ở mức cao sẽ cấm sự tách dò các tone đại diện cho các ký tự A, B, C, D. Thông thường nối VSS 6 PWDN (Power Down) Ngõ vào tích cực mức cao sẽ ngát nguồn IC và cấm ngõ vào dao động. Thường nối VSS 7 OSC1 Chân tạo xung clock (input) 8 OSC2 Chân tạo xung clock (output), thạch anh 3,58 Mhz được nối giữa OSC1 và OSC2 tạo thành mạch dao động 9 VSS Nguồn 0V 10 TOE Ngõ vào tích cực mức cao cho phép ngõ ra Q1-Q4 11 14 Q1 – Q4 Ngõ ra data, TOE =1 cung cấp mã tương ứng của cặp tone thu được, TOE = 0 ngõ ra trở kháng cao. 15 StD (Delay Steering) Ngõ ra, STD ở mức cao khi hoàn thành việc giải mã 1 cặp tone, trở lại mức thấp khi điện áp trên chân St/Gt nhỏ hơn điện áp ngưỡng VRef . 16 ESt (Early Steering) Ngõ ra sẽ ở mức cao khi thuật toán số dò tìm được cặp tone có giá trị (signal codition). Bất kỳ sự mất mát signal condition sẽ là nguyên nhân làm Est trở về mức thấp. 17 St/Gt Khi điện áp chân này lớn hơn điện áp ngưỡng (VRef ) thì ghi nhận giải mã một tone và chốt dữ liệu ở ngõ ra. Khi điện áp nhỏ hơn VRef thì giải phóng thiết bị để nhận một tone mới 18 VDD Nguồn 5V NC Để hở Sơ đồ khối chức năng của MT8870 Phần lọc (Filter Section): Tín hiệu Analog đưa qua bộ lọc để loại bỏ tone có tần số từ 350Hz đến 480Hz. Sau đó tín hiệu được chia thành 2 băng tần bởi 2 bộ lọc thông dải, 1 từ 697Hz đến 941 Hz và 1 từ 1209Hz đến 1633Hz. Hai nhóm tín hiệu này được biến thành xung vuông bởi bộ dò Zero Crossing. Phần giải mã (Decoder Section): Dùng kỹ thuật đếm số để xác định tần số các tone nhận được và kiểm tra chúng tương ứng với tần số chuẩn DTMF. Thuật toán trung bình phức bảo vệ chống lại tone giả bởi một tín hiệu từ bên ngoài khi mà dung sai cho phép của sự biến thiên và lệch tần số nhỏ. Khi bộ giải mã nhận diện được sự hiện diện của 2 giá trị tone, ngõ ra Est chuyển sang trạng thái tích cực. Mạch Steering( Steering Circuit): Est ở mức cao làm cho Vc tăng lên như sự phóng điện của tụ Signal Condition được duy trì. Khi Vc đạt đến ngưỡng VRef thì cặp tone được ghi nhận và 4 bit dữ liệu được đưa đến ngõ ra bộ chốt. Lúc đó Gt ở mức cao, cùng lúc Est ở mức cao. Sau khoảng thời gian trễ ngắn để kết thúc chốt ngõ ra cho đến khi STD ở mức cao thì cặp tone đã được ghi nhận. Khi TOE ở mức cao thì 4 bit dữ liệu được xuất ra ngoài. Bảng giải mã 4 bit tương ứng với cặp tone nhận được: Flow (Hz) FHigh (Hz) Key TOE Q4 Q3 Q2 Q1 697 1290 1 H 0 0 0 0 697 1336 2 H 0 0 0 1 697 1477 3 H 0 0 1 0 770 1290 4 H 0 0 1 1 770 1336 5 H 0 1 0 0 770 1477 6 H 0 1 0 1 852 1290 7 H 0 1 1 0 852 1336 8 H 0 1 1 1 852 1477 9 H 1 0 0 0 941 1290 0 H 1 0 0 1 941 1336 * H 1 0 1 0 941 1477 # H 1 0 1 1 697 1633 A H 1 1 0 0 770 1633 B H 1 1 0 1 852 1633 C H 1 1 1 0 941 1633 D H 1 1 1 1 - - ? L Z Z Z Z H: mức trở kháng cao L:mức trở kháng thấp ?: không xác định Bộ tạo dao động Thạch anh: Gắn 1 thạch anh 3,5795Mhz vào giữa 2 chân OSC1 và OSC2 để hoàn tất mạch dao động. Nếu có nhiều bộ giải mã DTMF, ta có thể nối tiếp dao động bằng cách lấy xung đồng hồ từ OSC2 thông qua tụ 30p đưa vào OSC1 của bộ giải mã DTMF thứ 2 như sau: MT8870 là IC dùng để giải mã DTMF từ bàn phím điện thoại đưa đến CPU để xuất ra led 7 đoạn. BẢNG MÃ VÙNG CÁC TỈNH Stt Tên tỉnh Mã vùng Stt Tên tỉnh Mã vùng 1 An Giang 076 31 Kom Tum 060 2 Bạc Liêu 781 32 Lai Châu 023 3 Vũng Tàu 064 33 Lạng Sơn 025 4 Bắc Cạn 281 34 Lào Cai 020 5 Bắc Giang 240 35 Lâm Đồng 063 6 Bắc Ninh 241 36 Long An 072 7 Bến Tre 075 37 Nam Định 350 8 Bình Dương 650 38 Nghệ An 038 9 Bình Định 056 39 Ninh Bình 030 10 Bình Phước 651 40 Ninh Thuận 068 11 Bình Thuận 062 41 Phú Thọ 210 12 Cao Bằng 026 42 Phú yên 057 13 Cà Mau 780 43 Quãng Bình 052 14 Cần Thơ 071 44 Quãng Nam 510 15 Đà Nẵng 511 45 Quãng Ngãi 055 16 Đắc Lắc 050 46 Quãng Ninh 033 17 Đồng Nai 061 47 Quãng Trị 053 18 Đồng Tháp 067 48 Sóc Trăng 079 19 Gia Lai 059 49 Sơn La 022 20 Hà Giang 019 50 Tây Ninh 066 21 Hà Nam 351 51 Thái Bình 036 22 Hà Nội 04 52 Thái Nguyên 280 23 Hà Tây 034 53 Thanh Hóa 037 24 Hà Tĩnh 039 54 Thừa Thiên Huế 054 25 Hải Dương 320 55 Tiền Giang 073 26 Hải Phòng 031 56 Trà Vinh 074 27 Hòa Bình 018 57 Tuyên Quang 027 28 Hưng Yên 321 58 Vĩnh Long 070 29 Khánh Hòa 058 59 Vĩnh Phúc 211 30 Kiên Giang 077 60 Yên Bái 029 PHẦN MỀM NẠP CHO AT89C51 TRAMNGAN EQU 127 CHUCNGAN EQU 126 NGAN EQU 125 TRAM EQU 124 LED1 EQU 123 LED2 EQU 122 LED3 EQU 121 LED4 EQU 120 LED5 EQU 119 LED6 EQU 118 LED7 EQU 117 LED8 EQU 116 LED9 EQU 115 LED10 EQU 114 NGAT EQU 113 POS EQU 112 QUET EQU 111 PHUT EQU 110 GIAY EQU 109 KT EQU 108 TIEN EQU 107 NH EQU 106 DD EQU 105 L_T EQU 104 NHO10 EQU 103 NHO9 EQU 102 BAPHUT EQU 101 TIEN_LT EQU 100 TIEN_DD EQU 99 LJMP MAIN ORG 0003H LJMP HIENTHI ORG 000BH LJMP DEM ORG 001BH LJMP QUETLED MAIN: MOV TMOD,#11H MOV TH0,#HIGH(-49995) MOV TL0,#LOW(-49995) MOV TH1,#HIGH(-2500) MOV TL1,#LOW(-2500) SETB TR1 MOV IE,#10001011B SETB IT0 MOV SP,#60 MOV IP,#00000010B MOV R0,#LED10 MOV R1,#LED10 MOV R6,#20 MOV QUET,#01111111B MOV POS,#01111111B MOV PHUT,#0 MOV GIAY,#0 MOV TRAMNGAN,#0 MOV CHUCNGAN,#0 MOV NGAN,#0 MOV TRAM,#0 MOV NH,#0 MOV DD,#0 MOV L_T,#0 MOV BAPHUT,#0 BEGIN: SETB EX0 MOV NGAT,#0 MOV TIEN_LT,#13 MOV TIEN_DD,#3 CALL TAT JNB P3.4,KIEMTRA JNB P3.5,KIEMTRA MOV R0,#LED10 MOV R6,#20 MOV GIAY,#0 MOV PHUT,#0 MOV TRAMNGAN,#0 MOV CHUCNGAN,#0 MOV NGAN,#0 MOV TRAM,#0 MOV NH,#0 MOV DD,#0 MOV L_T,#0 MOV BAPHUT,#0 SJMP BEGIN TAT: MOV LED10,#15 MOV LED9,#15 MOV LED8,#15 MOV LED7,#15 MOV LED6,#15 MOV LED5,#15 MOV LED4,#15 MOV LED3,#15 MOV LED2,#15 MOV LED1,#15 RET KIEMTRA: JNB P3.4,DOWN JNB P3.5,DOWN CLR TR0 BACK: JNB P3.6,BEGIN SJMP BACK DOWN: MOV A,NH CJNE A,#0,A_NH MOV A,DD CJNE A,#0,B_DD MOV A,L_T CJNE A,#0,LIENTINH MOV A,NGAT CJNE A,#0,THOAT MOV LED10,#15 MOV LED9,#15 MOV LED8,#15 MOV LED7,#15 MOV LED6,#15 MOV LED5,#15 MOV LED4,#11 MOV LED3,#12 MOV LED2,#13 MOV LED1,#14 THOAT: JNB P3.6,TINHGIO LJMP KIEMTRA TINHGIO: CLR EX0 MOV A,NHO10 CJNE A,#10,A_NH MOV A,NHO9 CJNE A,#8,SST A_NH: LJMP NOIHAT SST: CJNE A,#9,LIENTINH B_DD: LJMP DIDONG LIENTINH: PUSH PSW PUSH ACC PUSH B PUSH 03 PUSH 04 SETB TR0 MOV L_T,#1 MOV A,TIEN_LT MOV B,#10 DIV AB MOV R3,A MOV A,B MOV R4,A MOV A,GIAY MOV KT,A MOV B,#30 DIV AB MOV A,B CJNE A,#0,ESC_LT CONG_LT: CJNE R6,#1,CONG_LT MOV A,R3 ADD A,NGAN MOV NGAN,A MOV A,R4 ADD A,TRAM MOV TRAM,A CJNE A,#10,TIEP_LT MOV TRAM,#0 INC NGAN KT_LT: MOV A,NGAN CJNE A,#10,SO_LT MOV NGAN,#0 CUOI_LT: INC CHUCNGAN MOV A,CHUCNGAN CJNE A,#10,CHO_LT MOV CHUCNGAN,#0 INC TRAMNGAN SJMP CHO_LT TIEP_LT: JC CHO_LT MOV B,#10 DIV AB ADD A,NGAN MOV NGAN,A MOV A,B MOV TRAM,A SJMP KT_LT SO_LT: JC CHO_LT MOV B,#10 DIV AB MOV A,B MOV NGAN,A SJMP CUOI_LT CHO_LT: MOV A,KT CJNE A,GIAY,ESC_LT SJMP CHO_LT ESC_LT: POP 04 POP 03 POP B POP ACC POP PSW LJMP KIEMTRA DIDONG: PUSH PSW PUSH ACC PUSH B PUSH 03 PUSH 04 SETB TR0 MOV DD,#1 MOV A,TIEN_DD MOV B,#10 DIV AB MOV R3,A MOV A,B MOV R4,A MOV A,GIAY MOV KT,A MOV B,#6 DIV AB MOV A,B CJNE A,#0,ESC_DD CONG_DD: CJNE R6,#1,CONG_DD MOV A,R3 ADD A,NGAN MOV NGAN,A MOV A,R4 ADD A,TRAM MOV TRAM,A CJNE A,#10,TIEP_DD MOV TRAM,#0 INC NGAN KT_DD: MOV A,NGAN CJNE A,#10,SO_DD MOV NGAN,#0 CUOI_DD: INC CHUCNGAN MOV A,CHUCNGAN CJNE A,#10,CHO_DD MOV CHUCNGAN,#0 INC TRAMNGAN SJMP CHO_DD TIEP_DD: JC CHO_DD MOV B,#10 DIV AB ADD A,NGAN MOV NGAN,A MOV A,B MOV TRAM,A SJMP KT_DD SO_DD: JC CHO_DD MOV B,#10 DIV AB MOV A,B MOV NGAN,A SJMP CUOI_DD CHO_DD: MOV A,KT CJNE A,GIAY,ESC_DD SJMP CHO_DD ESC_DD: POP 04 POP 03 POP B POP ACC POP PSW LJMP KIEMTRA NOIHAT: SETB TR0 MOV NH,#1 MOV A,PHUT CJNE A,#3,KT3 MOV A,GIAY CJNE A,#0,CUOCBAN SJMP TINH1200 KT3: JC TINH1200 SJMP CUOCBAN TINH1200: MOV A,BAPHUT CJNE A,#0,BIEN MOV TRAM,#2 MOV NGAN,#1 MOV CHUCNGAN,#0 MOV TRAMNGAN,#0 MOV BAPHUT,#1 BIEN: LJMP KIEMTRA CUOCBAN: PUSH 02 MOV A,GIAY MOV KT,A CJNE A,#59,ESC_BAN CONGTHEM: CJNE R6,#19,CONGTHEM MOV A,TRAM ADD A,#4 MOV B,#10 DIV AB ADD A,NGAN CJNE A,#10,TINHTHEM MOV A,#0 INC CHUCNGAN MOV R2,CHUCNGAN CJNE R2,#10,TINHTHEM MOV CHUCNGAN,#0 INC TRAMNGAN TINHTHEM: MOV NGAN,A MOV A,B MOV TRAM,A CHO_BAN: MOV A,KT CJNE A,GIAY,ESC_BAN SJMP CHO_BAN ESC_BAN: POP 02 LJMP KIEMTRA ;------ TINH THOI GIAN CUOC GOI ----- DEM: PUSH PSW PUSH ACC MOV TH0,#HIGH(-49995) MOV TL0,#LOW(-49995) CALL DOISO DJNZ R6,EXIT MOV R6,#20 INC GIAY MOV A,GIAY CJNE A,#60,EXIT MOV GIAY,#0 INC PHUT EXIT: POP ACC POP PSW RETI DOISO: PUSH ACC PUSH B MOV A,GIAY MOV B,#10 DIV AB MOV LED2,A MOV A,B MOV LED1,A MOV A,PHUT MOV B,#10 DIV AB MOV LED4,A MOV A,B MOV LED3,A MOV LED5,#16 MOV LED6,#0 MOV A,TRAM MOV LED7,A MOV A,NGAN MOV LED8,A MOV A,TRAMNGAN CJNE A,#0,DS1 MOV LED10,#15 MOV A,CHUCNGAN CJNE A,#0,DS2 MOV LED9,#15 SJMP THOATDS DS1: MOV LED10,A DS2: MOV A,CHUCNGAN MOV LED9,A THOATDS: POP B POP ACC RET ;-------CHUONG TRINH NGAT DE DOC SO------------ HIENTHI: PUSH PSW PUSH ACC MOV A,NGAT CJNE A,#0,DOCSO LCALL TAT DOCSO: MOV NGAT,#1 MOV A,P2 ANL A,#0FH MOV @R0,A CJNE R0,#114,N MOV NHO10,@R0 SJMP M N: CJNE R0,#115,M MOV NHO9,@R0 M: INC R0 CJNE R0,#124,EXITNGAT MOV R0,#LED10 EXITNGAT: POP ACC POP PSW RETI ;-------CHUONG TRINH QUET 10 LED DUNG NGAT TIMER(0)------------ QUETLED: PUSH PSW PUSH ACC MOV TH1,#HIGH(-2500) MOV TL1,#LOW(-2500) MOV P1,#0FFH SETB P2.7 SETB P2.6 MOV DPTR,#MALED CJNE R1,#116,SS MOV QUET,#01111111B SJMP TIEP SS: JNC TIEP MOV A,@R1 MOVC A,@A+DPTR MOV P0,A MOV A,QUET CJNE A,#01111111B,X2 CLR P2.7 SJMP X1 X2: CLR P2.6 X1: RR A MOV QUET,A INC R1 SJMP EXITQUET TIEP: MOV A,@R1 MOVC A,@A+DPTR MOV P0,A MOV A,POS MOV P1,A RR A MOV POS,A INC R1 CJNE R1,#124,EXITQUET MOV POS,#01111111B MOV R1,#LED10 EXITQUET: POP ACC POP PSW RETI MALED: DB 11h, 0d7h, 32h, 92h, 0d4h, 98h, 18h, 0d3h ,10h, 90h, 11h, 50h, 5eh, 98h, 1eh, 0ffh, 01h END

Các file đính kèm theo tài liệu này:

  • docBaoCaoTotNghiep.doc
  • doc1-loicamon.doc
  • rar189021_Thiết kế mạc_.rar
  • doc2-LIMD~1.DOC
  • pptLVTN_Le Quang Huy.ppt
  • docSODMCH~1.DOC
  • docSODMCH~2.DOC
Luận văn liên quan