PHẦN I GIỚI THIỆU ĐỀ TÀI Chương I TỔNG QUAN VỀ ĐỀ TÀI ĐIỀU KHIỂN VÀ GIÁM SÁT TOÀ NHÀ BẰNG VI XỬ LÝ 89C51 I. Yêu cầu của đề tài: Trong cuộc sống hiện tại, khoa học kỹ thuật phát triển rất nhanh, những công cụ ra đời sẽ giúp giải phóng sự lao động trí óc: nghiên cứu, cải tiến, sáng tạo. Chỉ tiêu của khoa học kỹ thuật là làm sao nâng cao được chất lượng và hiệu suất công việc, hầu như công nghệ tự động ra đời là đáp ứng nhu cầu đó. Cho nên, em đã nghiên cứu về đề tài “ Điều khiển giám sát nhà cao tầng dùng vi xử lý 89C51 qua mạng RS-485. Các kít vi xử lý này có thể hoạt động hoàn toàn độc lập theo một chương trình lập sẵn. Bên cạnh đó, chúng còn có thể được giám sát và điều khiển các thiết bị trong từng phòng thông qua gởi lệnh đến đúng kít vi xử lý cần điều khiển để thi hành lệnh đó. Ngoài việc điều khiển các thiết bị dùng điện trong phòng, ta còn có thể đảm bảo an ninh cho từng phòng bằng hệ thống phát hiện cháy, phát hiện trộm bằng cảm biến quang. Một chuyên gia về công nghệ nhà thông minh ( Home Automation ) – Kenne P.Wacks – đã viết một bài báo giới thiệu về ngôi nhà thông minh như sau: “ Hơn 6 năm qua, một công nghệ mới gọi là công nghệ nhà thông minh đã được nghiên cứu và phát triển. Công nghệ này sẽ tạo nên một thế hệ mới của các thiết bị cung cấp cho người dùng chúng. Những công nghệ trước đó cùng với khái niệm ngôi nhà thông minh sau này sẽ tạo nên những sản phẩm và loại hình dịch vụ mới mẻ trong tương lai. Một số ít các công ty đang giới thiệu về ngôi nhà tự động. Một vài công ty lớn và các viện nghiện cứu đang thăm dò công nghệ mới nhưng đầy tiềm năng này. Mạng truyền thông trong nhà sẽ cung cấp những cơ sở hạ tầng để liên kết các thiết bị cảm biến, bộ điều khiển và bảng điều khiển trong nhà. Điều này sẽ trở nên khả thi bằng cách tạo ra sự phát triển công nghệ truyền thông trong những ngôi nhà tự động. Trong ngôi nhà thông minh từ “thiết bị” không chỉ đề cập đến các dụng cụ trong nhà bếp, thiết bị video/audio, các hệ thống có thể dịch chuyển , các thiết bị chiếu sáng, thiết bị sưởi ấm, làm lạnh, hệ thống an ninh... Công nghệ này sẽ bật đèn xanh cho các công ty nghiên cứu cho ra đời những sản phẩm và hình thức dịch vụ mới. Các sản phẩm này sẽ có chung điểm tương đồng nào đó hay là những thuộc tính tương tự nhau. Các thuộc tính đó là: Vai trò của các thiết bị trong nhà thông minh: hầu hết các thiết bị trong nhà đều có vỏ bằng nhựa hay kim loại. Một vài thiết bị vận hành độc lập với các thiết bị khác. Tuy nhiên cũng có những dụng cụ cần có một thiết bị khác điều khiển nó. Các thiết bị trong ngôi nhà thông minh đều có thể truyền dữ liệu. Ta sẽ nhóm các thiết bị này lại chung một nhóm. Ví dụ: hệ thống an
ninh, hệ thống Audio/Video. Trong tương lai các hệ thống này có thể cho phép máy giặt hay máy rửa chén yêu cầu bộ phận nung nóng nước, chuẩn bị nước nóng khi chúng cần đến. Sự hợp nhất các chuẩn truyền thông: các thiết bị trong tương lai đều có một chuẩn truyền thông chung, có cùng dây nối đặc biệt. Tiêu chuẩn của ngôi nhà thông minh là sẽ làm nhẹ bớt đi công việc của các nhà sản xuất về việc phải sáng chế ra giao thức truyền thông và cung cấp các đường dây dẫn dữ liệu. Yêu cầu của đề tài mà em được giao: Thiết kế phần cứng mạch báo cháy tự động. Mạch động lực điều khiển thiết bị dùng điện bằng vi xử lý. Mạch phát hiện trộm bằng cảm biến: dùng LED hồng ngoại. Mạch giao tiếp máy tính của từng vi xử lý. Lập trình giao tiếp bằng ngôn ngữ visual basic. II. Hướng thực hiện đề tài Để thực hiện được phần cứng đảm bảo yêu cầu như trên, em đã thiết kế mạch mô phỏng cảm biến quang phát hiện trộm và cảm biến quang đếm người ra vào phòng. Do mạch cảm biến cháy có giá trị rất cao nên em đã dùng một IC đo nhiệt độ để mô phỏng. Đó là IC nhiệt LM 335. Dùng vi xử lý 89C51 để điều khiển mạch động lực đóng tắt các thiết bị. Chuẩn truyền thông nối tiếp thông dụng hiện nay là RS-232C, tuy nhiên chuẩn truyền thông này chỉ dùng truyền số liệu trên khoảng cách ngắn (15m). Nên để có thể truyền dữ liệu từ kit vi xử lý về máy tính ở khoảng cách xa hơn ta dùng chuẩn RS485. Để chuyển đổi từ chuẩn RS-232C sang chuẩn RS-485 ta cần phải có một mạch điện chuyển đổi. 3 PC 7 2 TXD RTS RXD Max 232 75176 Kit vi xử lí I
Kit vi xử lí II Sơ đồ khối mạch kết nối giữa máy tính và các kit vi xử lí Sơ đồ khối mạch chuyển đổi như sau:
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 2
Kit vi xử lý em thiết kế có những chức năng sau: Đo nhiệt độ hiện tại trong phòng hiển thị lên LED 7 đoạn, ngoài chức năng đo nhiệt độ, mạch này còn thay thế cho cảm biến cháy. Khi nhiệt độ trên IC LM335 tăng lên, tùy theo từng mức được lập sẵn trong chương trình mà nó sẽ báo chuông, hay sẽ gởi dữ liệu về máy tính để cho biết trạng thái hiện tại trong phòng theo giao thức truyền dữ liệu theo kiểu hỏi vòng. Ngoài ra, mạch còn có chức năng đếm số người đi ra hay vào phòng. Trong phòng để đảm bảo tính tự động hoàn toàn sẽ không có công tắc điện của những thiết bị mà vi xử lý có thể điều khiển. Nếu số người trong phòng lớn hơn hay bằng 1 thì vi xử lý sẽ gởi một tín hiệu đến mạch động lực kích đóng các thiết bị như quạt, máy lạnh, đèn. Nếu người trong phòng là không thì vi xử lý sẽ gởi một tín hiệu đến mạch động lực tắt các thiết bị trong phòng. Tuy nhiên, trên mạch có hai nút nhấn hay một số nút nhấn để người trong phòng có thể điều khiển có tín hiệu hồi tiếp về cho nên vi xử lý sẽ nhận biết các thiết bị đó đang đóng hay mở. Khi người dùng nhấn nút tương ứng thì tùy vào trạng thái của thiết bị mà vi xử lý sẽ kích đóng hay ngắt thiết bị đó. Phần này sẽ làm cho mạch được linh động, không tuân theo chương trình phần mềm cài sẵn một cách cứng ngắt. Giả sử khi nhiệt độ ngoài trời giảm xuống khoảng 15oC thì cũng không cần bật máy lạnh làm gì . Tuy nhiên, vi xử lý cứ nhận thấy có người trong phòng là nó sẽ đóng nguồn cho máy lạnh hoạt động. Người trong phòng có thể tắt máy lạnh bằng nút nhấn trên mạch vi xử lý. Ta có thể khắc phục được nhược điểm này bằng cách viết chương trình cho vi xử lý so sánh nhiệt độ hiện tại trong phòng với nhiệt độ chuẩn ( 15oC chẳng hạn ). Nếu nhiệt độ đo được bé hơn 15oC thì sẽ tắt máy lạnh đi. Do mạch sử dụng ADC 0809 sai số tương đối không nhiều, tuy nhiên do mạch gia công tín hiệu ra của IC nhiệt LM335 cho nên nhiệt độ càng thấp thì áp ra càng nhỏ và ADC sẽ đổi ra sai số tương đối cao. Sai số này là do mạch gia công gây ra đồng thời cộng thêm sai số của chính bản thân ADC 0809. Cho nên không đảm bảo rằng mạch hoạt động đúng như thiết kế ở nhiệt độ nhỏ hơn 15oC. Mạch cảm biến quang dùng để phát hiện trộm đặt ở những thiết bị hay dụng cụ cần gìn giữ. III. Vấn đề kết nối mạng Thuật ngữ mạng đã trở nên rất quen thuộc khi mạng thông tin Internet ngày càng trở nên rất gần gũi với con người chúng ta. Nếu quản lý thiết bị trong phòng theo phương pháp thông thường sẽ không kinh tế và tiết kiệm. Ta
cần phải làm sao để tiết kiệm cho được càng nhiều càng tốt. Cho nên để tránh lãng phí ta nên điều khiển các thiết bị bằng máy tính. Chỉ cần một nhân viên cũng có thể tắt hay mở thiết bị trong từng phòng. Nếu ta tắt các thiết bị bằng tay thì sẽ không kinh tế, khi khách ra khỏi phòng mà quên tắt các thiết bị thì sẽ lãng phí rất nhiều năng lượng điện. Tiết kiệm được phần năng lượng hao phí đó ta sẽ giúp cho việc giảm giá thành khi kinh doanh cho thuê phòng chẳng hạn. Máy tính có khả năng đóng tắt các thiết bị thông qua vi xử lý, đồng lưu trữ trạng thái các thiết bị trước đó.
RXD
PC TXD RTS
Khối chuyển đổi RS-485 sang R-232 B A
A
B
B
A
B
A
Khối chuyển đổi Khối chuyển đổi mức TTL sang RSmức TTL sang RS485 485 RXD TXD Điều Điều D khiển RXTXD XD khiển Kit vi xử lí phòng 1 Kit vi xử lí phòng 2
Khối chuyển đổi mức TTL sang RS485 TXD
R
Điều khiển
Kit vi xử lí phòng 3
Sơ đồ khối mạch kết nối giữa máy tính và các kit vi
Chương II GIỚI THIỆU VỀ CÁC MẠCH BÁO CHÁY Cảm biến dựa vào các đặc tính vật lý của vật liệu, các hiện tượng vật lý để chuyển đổi các đại lượng phi điện thành các tín hiệu điện để đơn giản trong quá trình đo lường và tính toán. Mô tả toán học của các cảm biến là một hàm truyền được ký hiệu là H. Phương trình mô tả cảm biến được biểu diễn như sau: Đại lượng ra (điện)=H x đại lượng vào (phi điện) · Các đặc tính chuẩn của cảm biến: _ Độ nhạy. _ Độ ổn định _ Nhiễu (có khả năng hoạt động trong mọi trường có tín hiệu gây nhiễu hay nhiễu do chính cảm biến sinh ra trong quá trình hoạt động). _ Tầm đo . _ Độ tuyến tính (cảm biến có độ tuyến tính càng cao càng tốt). · Hệ thống báo cháy thường gồm 3 loại mạch báo cháy thông dụng: _ Mạch báo cháy nhiệt. _ Mạch báo cháy khói. _ Mạch báo cháy lửa. Hầu hết các linh kiện điện tử đều có đặc tính nhiệt thay đổi theo nhiệt độ. Nhưng để làm cảm biến ta chỉ chọn vật liệu có độ nhạy cao và hàm truyền tốt mà thôi. Đây là loại cảm biến tương đối phức tạp và tinh vi, sử dụng các linh kiện điện tử chuyên dụng. Các linh kiện điện tử này có khá nhiều trên thị trường linh, kiện ở Việt Nam hiện nay. Nó sử dung nguyên tắc dòng hay áp trên các linh, kiện này sẽ thay đổi khi nhiệt độ tại nơi đặt thiết bị thay đổi. Tùy theo loại mà có thể sẽ tăng hay giảm các đại lượng điện theo nhiệt độ. Loại cảm biến này rất nhạy nhưng nó sẽ rất gây ra tình trạng báo động nhầm khi có một nguồn nhiệt để gần cảm biến. Ví dụ như thân nhiệt con người chẳng hạn. I. Chuyển đổi nhiệt điện : Chuyển đổi nhiệt điện là những chuyển đổi dựa trên các quá trình nhiệt như đốt nóng, làm lạnh, trao đổi nhiệt… Thực tế khi đo lường các đại lượng không điện theo phương pháp điện thường dùng hai hiện tượng, đó ( là hiệu ứng nhiệt điện và hiệu ứng thay đổi nhiệt trở của dây dẫn hay chất bán dẫn khi nhiệt độ thay đổi. Tương ứng với hai hiện tượng trên, người ta phân thành hai loại: chuyển đổi cặp nhiệt điện và chuyển đổi nhiệt điện trở.
1. Chuyển đổi cặp nhiệt điện: a. Nguyên lý làm việc của cặp nhiệt điện : chủ yếu dựa trên hai hiện tượng sau: Nếu hai dây dẫn khác nhau nối với nhau tại hai điểm 1 và 2, và một trong hai điểm đó ( ví dụ ta lấy tại điểm 1) được đốt nóng thì trong mạch sẽ xuất hiện một dòng điện gây bởi sức điện động gọi là sức điện động nhiệt điện, là hiệu số các hàm số nhiệt độ ET = f(t1)- f(t2) Mạch điện như còn gọi là cặp nhiệt điện hay cặp điện ngẫu. Điểm được đốt nóng gọi là đầu công tắc ( điểm 1 ), điểm còn lại gọi là đầu tự do( điểm thứ 2 ) là hằng số f(t2)=const thì: ET = f(t1) – C Biểu thức trên là cơ sở của phép đo nhiệt độ bằng cặp nhiệt điện. Theo phương pháp này, việc đo nhiệt độ t1 sẽ dẫn đến việc đo sức điện động của cặp nhiệt điện khi giữ cố định nhiệt độ đầu tự do của nó. Vật liệu dùng để chế tạo cặp nhiệt điện ngẫu cần đảm bảo các yêu cầu sau: quan hệ giữa sức điện động nhiệt điện với nhiệt độ là một hàm đơn trị, tính chất nhiệt điện không thay đổi, độ bền hóa học và cơ học phải cao, dẫn nhiệt tốt, có trị số suất điện động nhiệt lớn. Cặp nhiệt điện được nối với nhau bằng phương pháp hàn đặc biệt và đặt trong thiết bị bảo vệ nhằm tránh bị ăn mòn hóa học, thiết bị này được chế tạo từ vật liệu bền cơ học, không thấm khí, không bị ăn mòn. Thiết bị trên thường là các ống được chế tạo bằng thép đặc biệt. Đối với cặp nhiệt điện quí , ống bảo vệ chế tạo bằng thạch anh và gốm. Để cách điện người ta dùng Amian (3000C ), ống thạch anh ( với 10000C ) hoặc ống sứ đến 1400C. Những nguyên nhân gây sai số và hiệu chỉnh cho đúng: Ta biết rằng phương trình biến đổi của cặp nhiệt điện trong trường hợp chung, một cách gần đúng có thể biểu diễn dưới dạng : ET =A.t+B.t2 +C.t3 ET : là sức điện động nhiệt . T: hiệu nhiệt độ giữa đầu công tắc và đầu tự do. A, B, C :các hằng số phụ thuộc vào vật liệu của dây làm cặp nhiệt điện. Và độ nhạy của nó được tính như sau: ST » A+2Bt +3Ct Độ nhạy không phải là hằng số mà phụ thuộc vào nhiệt độ. Do vậy các cặp nhiệt điện công nghiệp thường cho trước một bảng sức điện động ứng với các nhiệt độ khác nhau trong khoảng 10C với đầu tự do ở 00C.
c. Chuyển đổi nhiệt điện trở: Nhiệt điện trở là chuyển đổi có điện trở thay đổi theo sự thay đổi nhiệt độ của nó. Tùy theo tác dụng nhiệt của dòng điện cung cấp chạy qua chuyển đổi người ta phân ra: nhiệt điện trở đốt nóng và nhiệt điện trở không đốt nóng. Trong nhiệt điện trở không đốt nóng dòng điện chạy qua rất nhỏ không làm tăng nhiệt độ của điện trở và nhiệt độ của nó bằng nhiệt độ môi trường. Nhiệt điện trở loại này dùng để đo nhiệt độ và các đại lượng cơ học như đo sự dịch chuyển. Nhiệt điện trở đốt nóng, dòng điện chạy qua rất lớn làm nhiệt độ của nó tăng lên cao hơn nhiệt độ môi trường , nên có sự tỏa nhiệt ra môi trường xung quanh. Nhiệt điện trở loại này được dùng trong việc đo lưu lượng, lưu tốc của dòng chảy, phân tích các chất hóa học… Nhiệt điện trở được chế tạo bằng dây hoặc chất bán dẫn. Yêu cầu đối với vật liệu chế tạo là có hệ số nhiệt độ lớn, bền hóa học, điện trở suất rất lớn, khó nóng chảy… Để giảm tổn hao nhiệt dẫn, chiều dài của nhiệt điện trở cần phải lớn hơn đường kính dây gấp nhiều lần . 2. Các loại cảm biến nhiệt: a. Thermocouples: Thermocouples biến đổi đại lượng nhiệt độ thành dòng điện hay điện áp DC nhỏ. Nó gồm có hai dây kim loại khác nhau nối với nhau tại hai đầu mối nối. Khi các mối nối được đặt tại các vị trí khác nhau, trong dây dẫn xuất hiện sức điện động. Sức điện động này tỉ lệ với chênh lệch nhiệt độ giữa hai đầu mối nối. Thermocouples có hệ số nhiệt dương. b. Thermistor: Thermistor là điện trở có độ nhạy nhiệt rất cao nhưng phi tuyến vả có hệ số nhiệt âm. Điện trở giảm phi tuyến đối với sự tăng nhiệt độ vì Thermistor là điện trở nên dòng điện qua nó sinh ra nhiệt gây nên sai số rất lớn. Do đó phải hạn chế dòng qua nó rất nhỏ. c. Điện trở dò nhiệt (RTDs): Cảm biến loại này dựa vào đặc tính trở phụ thuộc nhiệt độ của vật liệu. Nó có hệ số nhiệt dương nhỏ, nhưng đo rất chính xác. d. IC cảm biến nhiệt độ bán dẫn: IC cảm biến bán dẫn kết hợp với mạch gia công bên trong. Nhờ đó IC có thể tạo tín hiệu điện áp ra tỷ lệ với nhiệt độ tuyệt đối, với độ nhạy nhiệt và độ chính xác cao. IC loại này khá phổ biến trên thị trường hiện nay. Với IC thông dụng hiện nay là LM335. Mạch phát hiện khói ( dùng cảm biến quang hay cảm biến ion ): Mạch phát hiện khói dùng phương pháp quang ( cảm biến quang):
Loại này được sử dụng linh kiện thu phát quang . Người ta sử dụng linh kiện phát quang ( LED hồng ngoại ) chiếu một tia sáng qua vùng cần bảo vệ và một linh kiện thu quang ( Photodiode, Phototransistor, quang trở…). Khi có khói bay lên vùng cần bảo vệ sẽ che chắn hay làm yếu đi cường độ ánh sáng chiếu vào linh kiện thu. Khi cường độ ánh sáng thay đổi đến một giá trị nào đó thì bộ cảm biến sẽ nhận dạng được và phát ra tín hiệu báo động. a. Điện trở quang: Điện trở quang là một linh kiện bán dẫn thụ động không có lớp chuyển tiếp PN. Vật liệu để chế tạo điện trở quang là Cds (Cadmiun Sulfid) , CdSe (Cadmiun Selenid ), ZnS ( Zine Sulfid ) hoặc các tinh thể khác. Khi bị chiếu ánh sáng, độ dẫn điện ( điện dẫn suất ) của vật liệu bán dẫn gia tăng do các hạt mang điện tích được gia tăng ra thêm. s=e(nmn + pmp ) n và p : là mật độ electron và lỗ trống mn , mp : là độ di động của electron và lổ trống Với phương trình trên đô dẫn điện có thể gia tăng nhờ hai cách: _ Gia tăng mật độ các hạt mang điện tích. _ Gia tăng độ di động hiệu dụng. Các đặc tính quan trọng của một điện trở quang : Điện trở quang có ba đặc tính quan trọng: Ÿ Độ dẫn suất ( sphot ): Là hàm số của mật độ năng lượng u với độ dài sóng không thay đổi của ánh sáng : sphot (u); l=const. Ÿ Độ nhạy của quang trở đối với quang phổ: Đó chính là sự thay đổi dẫn suất sphot hàm số của l khi mật độ năng lượng không thay đổi : u= const Srel( )= Vận tốc làm việc: phot ( ) phot max Vận tốc làm việc là thời gian hồi đáp ( Reponse times) của một quang trở khi có sự thay đổi từ sáng sang tối hay từ tối sang sáng (rise ). Thời gian lên được xác định là thời gian cần thiết để quang trở đạt 65 % trị số cuối cùng khi được chiếu sáng từ 0 lux sang 10 lux. Thời gian trễ được xác định là khoảng thời gian cần thiết để một quang trở thay đổi còn 35% giá trị của nó (so với lúc được chiếu sáng – khoảng 10 lux trong 1 s) khi không còn được chiếu sáng. Với cường độ ánh sáng mạnh, quang trở làm việc nhanh hơn. Quang trở có khuynh hướng làm việc chậm đi khi trời lạnh. Quang trở làm việc chậm hơn
nếu được cất giữ trong bóng tối và làm việc nhanh hơn nếu được cất giữ ngoài ánh sáng. Các đặc tính quan trọng khác của điện trở quang: Tiếng ồn –NEP. Hệ số nhiệt độ của quang trở Điện trở tối ( Dark Reasistance ) Đặc tính độ dốc Điện thế hoạt động Công suất tiêu tán cao nhất Độ nhạy R[VW-1) Điện trở quang với sự gia tăng độ di động mn,p Điện trở quang với vật liệu không pha tạp chất 1. Mạch phát hiện khói dùng nguyên lý ion (cảm biến ion): Dưới tác dụng của các tia phóng xạ và tia Rơnghen, chất khí (khói ) sẽ bị ion hoá. Nếu bình ion hoá được đặt một điện áp thì các điện tử và ion sẽ chuyển động có hướng và khi đó sẽ tạo thành dòng điện ion. Khi có dòng điện sẽ kích hoạt tín hiệu báo động. Dòng ion phụ thuộc vào điện áp đặt lên bình, tính chất của tác nhân ion, môi trường ion hóa, vật liệu của thành bình và các vật thể khác nằm trên đường đi của các tác nhân ion hóa. Các tác nhân ion hóa là các tia phóng xạ như tia a, tia b, tia g, tia Ronghen. Chuyển đổi ion hóa có thể nhiều loại khác nhau, song bất kỳ loại nào cũng cần có nguồn phóng xạ và thiết bị thu các suất phẩm của quá trình ion hóa để tạo thành dòng điện. Thiết bị đó gọi là bộ thu bức xạ. Bộ thu bức xạ có nhiệm vụ biến đổi năng lượng bức xạ hạt nhân thành điện năng. Bộ thu bức xạ dựa vào hiện tượng ion hóa các tia phóng xạ đi qua nó hoặc dựa vào hiện tượng ion hóa chất khí khi cho tia phóng xạ đi qua nó hoặc dựa vào hiện tượng phát quang của một số chất dưới tác dụng của năng lượng bức xạ hạt nhân. Có ba loại bình thu bức xạ: Bình ion hóa . Máy đếm phóng điện trong chất khí. Máy đếm nhấp nháy. Trong hình đặc tính Volt Ampere của bình ion hóa và cấu tạo của một bình ion hóa bằng tia a. Dòng quang điện thường rất nhỏ( 10-3 _10-7 )mA. Điện áp đặt lên điện cực cao áp ( vỏ bình) cỡ hàng nghìn Volt, dòng điện ion lấy qua cực lưới được khuếch đại bằng các bộ khuếch đại đo lường. Để tránh dòng điện rò, cách điện giữa các cực lưới và vỏ (cực cao áp) phải đạt 8 tới (10 – 1013 ) MW, vì thế điện cực lưới được bọc bởi cực bảo vệ nối đất với mạch đo lường để thu dòng điện rò từ cực cao áp. Người ta sử dụng một lượng nhỏ chất phóng xạ để ion hóa không khí trong hộp cảm biến. Không khí bị ion hóa sẽ dẫn điện và tạo thành một dòng
điện chạy giữa hai điện cực đã được nạp điện. Khi các phần tử khói lọt vào trong vùng cảm nhận được ion hóa sẽ làm tăng điện trở trong vùng cảm nhận và làm giảm luồng điện giữa hai điện cực. Khi luồng điện giảm xuống tới một giá trị nào đó thì bộ cảm biến sẽ phát điện và phát tín hiệu báo động. Nói chung thì loại cảm biến phát hiện khói kiểu ion hóa nhạy hơn và hiệu quả hơn loại dùng các linh kiện quang điện tử, nhưng linh kiện và vật liệu rất khó kiếm. Loại phát hiện khói dùng quang dù ít nhạy hơn nhưng linh kiện rất dễ tìm và lắp đặt tương đối dễ dàng. Tuy nhiên cả hai loại này có thể báo động nhằm do bụi hay khói lan vào. Cho nên khi thiết kế cần phải xem xét và qui định nồng độ khói nhất định để thiết bị hoạt động chính xác. III. Mạch phát hiện cháy : Dưới tác động của các dòng ánh sáng với bước sóng thích hợp chiếu vào Catot, điện tử đi từ Catot bị bắn ra, tạo thành dòng điện. Chuyển đổi quang điện được phân chia thành ba loại: 1. Tế bào quang điện: Là phần tử quang điện sử dụng hiệu ứng quang điện ngoài. Đó là một đèn chân không hay có khí mà Catot của nó sẽ phát ra các điện tử dưới tác dụng của dòng ánh sáng. 2. Quang điện trở: Là loại chuyển đổi quang điện dựa vào hiệu ứng quang điện. Điện trở của một vài chất bán dẫn thay đổi dưới tác dụng của dòng ánh sáng. Các chất có hiệu ứng quang điện trong mạch đó là muối Sunfil Cadmi,… 3. Photo diode: Là chuyển đổi quang điện, dưới tác dụng của ánh sáng, lớp khóa của một số mặt ghép các chất bán dẫn sẽ trở thành nguồn dòng điện. Với hiệu ứng quang điện, ta có thể phát sinh một điện áp ở lớp chuyển tiếp pn, khi lớp chuyển tiếp này được chiếu sáng. Tùy theo chức năng và cấu trúc, có thể phân Photodiode thành nhiều loại: Diode quang pn. Diode quang pin. Diode quang loại Schockley. Diode quang với các hiệu ứng khác. Photodiode được dùng với mạch khuếch đại có tổng trở cao: Rất tuyến tính. Ít nhiễu. Dãi tần rộng. Nhẹ và có sức bền cơ học. Tuổi thọ cao. IV. Đo nhiệt độ bằng thạch anh: Một ứng dụng cổ điển của thạch anh là thực hiện bộ dao động có độ vững lớn, chỉ phụ thuộc vào nhiệt độ. Với tinh thể thạch anh có phương tinh
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 10
thể xác định trước nó đặc trưng cho sự thay đổi nhiệt độ ảnh hưởng tần số dao động. Ngược lại, khi dùng làm cảm biến đo nhiệt độ, thạch anh có phương tinh thể làm sao cho tần số dao động gần như tuyến tính với nhiệt độ tinh thể của thạch anh. Cảm biến này rất chính xác và nhạy, mặt khác việc xác định nhiệt độ dẫn đến việc đếm tần số có hai điều lợi: _ Việc đo rất chính xác. _ Việc chuyển đổi ra dạng số rất dễ dàng với thông tin liên quan đến tần số. 1. Cộng hưởng cơ của thạch anh: Trong tinh thể thạch anh được cắt theo dạng tiết diện vuông, tam giác hoặc tròn, các đặc tính phụ thuộc vào dạng hình học, và kích thước của chúng cũng như phương tinh thể. Thạch anh là một chất áp điện. Trong trường hợp mặt phẳng thu điện tích thẳng góc với trục điện sẽ xuất hiện các điện tích trái dấu trên mặt phẳng. Đó là hiệu ứng áp điện trực tiếp. _ Một sự thay đổi bề dày của bản thạch anh, nén lại hoặc bè ra tùy thuộc theo dấu của điện áp khi đưa vào các bề mặt, đó là hiệu ứng áp điện ngược. _ Một bản thạch anh có thể xảy ra các dao động cơ liên quan đến các loại biến dạng khác nhau: sự kéo dài ra, uốn cong, cắt. Tần số dao động được xác định bởi dạng thức hình học, kích thước và phương của tinh thể và có thể diễn tả bởi công thức sau: n c l c: Độ lớn đàn hồi, phụ thuộc vào phương tinh thể. r: Trọng lượng riêng của thạch anh. l: Kích thước của bản thạch anh theo phương truyền động. n: Số nguyên ; 1<n <5. Khi áp vào hai mặt của bản thạch anh 1 điện áp xoay chiều tần số bằng với tần số dao động có thể, hiệu ứng áp điện ngược xảy ra kéo theo sự dao động của bản thạch anh. Như thế có thể xây dựng một hiện tượng dao động cơ điện với sự biến đổi tuần hoàn năng lượng cơ ra năng lượng điện và ngược lại, và năng lượng mất mát rất bé. Hệ số phẩm chất Q đặc trưng cho hiện tượng cộng hưởng có được: Năng lượng cơ hoặc điện cực đại f Q 2 x Năng lượng tiêu tán tuần hoàn
Đối với bản thạch anh, Q có giá trị rất cao, thường từ 104 đến 105. Phương của dao động thạch anh so với trục của tinh thể xác định lực cắt. Thí dụ:
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 11
_ Lực cắt X gọi là mẫu Curie: 2 bản cực thẳng góc với trục X. một điện áp xoay chiều được áp vào 2 mặt đối diện, bản dao động có thể dao động theo chiều dài và 2 tần số cộng hưởng quan trọng là: 2860 2860 f1 va f2 ; f tính bằng KHz. e l e và l : Bề dày và bề rộng của bản tính bằng mm _ Lực cắt At, hai mặt bản cực quay chung quanh trục X và tạo thành một góc gần bằng 350 so với trục Z, bản dao động có thể dao động theo lực cắt bề dày và tần số dao động có trị giá: ; f:KHz 1675 n. e n: số nguyên ≤ 5 _ Với những lực cắt khác được sử dụng : Tần số dao động cơ luôn luôn tỉ lệ nghịch vơi1 trong những kích thước của chúng. Các điện cực cho phép đặt một điện áp vào bản dao động, nó được cấu tạo bởi thanh kim loại đặt tiếp xúc với bản dao động. Chung quanh tần số cộng hưởng cơ, về phương diện điện bản thân thạch anh có thể được biểu thị bằng một lưỡng cực cấu tạo bởi hai nhánh song song. L R C C0 Một nhánh L, R, C. Các phần tử này có giá trị được xác định bởi đặc tính hình học, cơ khí và tinh thể của bản dao động và có độ lớn: L: Từ vài H đến 104H C: Từ 10-2 pF đến 10-1 pF R: Từ vài KW đến vài chục KW. _ Một nhánh gồm điện dung C0 đó là điện dung được hình thành bởi các điện cực kim loại có giá trị khoảng: 1 đến 100 pF, tỉ số C/C0 có giá trị tổng quát từ 10-2 đến 10-3 . Lưỡng cực này có thể có hai tần số cộng hưởng điện: _ Cộng hưởng nối tiếp của nhánh L,R ,C tần số fs: fs= 1 2 LC _ Cộng hưởng song song, giữa C0 và nhánh L, C, R tần số fp: 1 fp= 2 CL. C / C 0) 1 (1 f
Các tần số này rất gần nhau: (fp-fs)/fs = C/2C0 2. Độ nhạy nhiệt: Tất cả sự thay đổi nhiệt độ kéo theo 1 sự thay đổi kích thước của bản dao động, trong lượng riêng và hệ số đàn hồi, kết quả: n c _ Một sự thay đổi tần số cộng hưởng cơ: f l _ Một sự thay đổi các giá trị thành phần L,C, R đặc trưng của bản dao động, về phương diện điện . Một cách tổng quát: f(T)=f0(1+ aT+bT2+ cT3);T:0C f /f0 = aT+ bT2 +cT3 ;với f=f(T)-f0 ` Các hệ số a, b, c tùy thuộc lực cắt bản dao động. Với lực cắt LC ( tuyến tính ) về nguyên tắc các hệ số b và c bằng 0. Độ nhạy nhiệt của tần số cộng hưởng là một hằng số: f S =a.f0 T Với a=35,45.10-6/0C và f0= 28,208 MHz thì: S=1000Hz/0C Lực cắt LC thường dùng đối với bản thạch anh dùng làm cảm biến đo nhiệt độ. 3. Cách thực hiện nhiệt kế và đo: Nhiệt kế được thực hiện bằng cách đặt bản thạch anh bên trong hộp thép chứa Helium mục đích làm tăng sự dẫn nhiệt thạch anh và hộp. Thạch anh được nối với các phần tử tác động nhờ dây cáp và sẽ tạo nên dao động với tín hiệu đo em: em=EmcosWm t với Wm= 2 fm fm=f0+ f và f=S(T-T0)=ST khi T0 =00C Với mạch dao động chuẩn bằng thạch anh, tạo nên tín hiệu chuẩn er tần số f0 độc lập với môi trường. er=ErcosW0t(W0=2 f0) Các tín hiệu em, er được đưa vào mạch thay đổi tần số, mạch nhân chẳng hạn, sẽ tạo nên tín hiệu V’0 : V’0=Kemer=E’0[ cos(Wm-W0)t+cos (Wm+W0)t] Với một mạch lọc thông thấp qua nó giới hạn tần số cao ở đầu ra: V0=E0cos(Wm-Wr)t=E0 cos 2. . f.t Một bộ đệm tần số cho phép xác định tần số f và với S biết được, sẽ biết T= f/S. Đặc tính đo lường của tinh thể thạch anh : _ Khoảng đo:-80 đến 2500C. _ Khoảng cách tuyến tính: 0,05% khoảng đo.
_ Độ nhạy : 1000Hz/0C. _ Khả năng đo:0,00010C. _ Độ nhanh: hằng số thời gian nhiệt 2,5 giây trong nước có vận tốc 2m/giây.
PHẦN II THIẾT KẾ MẠCH ĐIỀU KHIỂN GIÁM SÁT NHÀ CAO TẦNG DÙNG VI XỬ LÝ 89C51 A. Thiết kế mạch : I. Tổng quan về đề tài: 1. Sơ lược về đề tài: Trên cơ sở thiết kế một thiết bị bằng cơ điện tử để có thể tạo thành ngôi nhà thông minh khi gắn thiết bị này vào. Nhờ vào bộ xử lý trung tâm mà thiết bị này có thể hoạt động một cách chính xác theo chương trình đã lập sẵn. Trong ngôi nhà càng có nhiều thiết bị thông minh thì càng làm cho cuộc sống tiện nghi hơn. Do tính mềm dẻo của bộ xử lý trung tâm nên ta có thể nạp lại chương trình điều khiển cho nó tùy theo từng nhu cầu ứng dụng riêng biệt, cũng như có thể cho phép 1 hay nhiều thiết bị cùng hoạt động khi đến giờ định sẵn. Đèn, quạt gió và máy lạnh sẽ tự động bật lên khi có người vào phòng. Máy đun nước nóng, máy giặt sẽ tự động hoạt động khi đến giờ quy định. Hệ thống tưới cây trong vườn cũng được điều khiển từ thiết bị này. Cửa gara sẽ tự mở ra khi xe vừa đến trước cổng và cũng tự đóng lại khi xe ra khỏi gara. Do sự hạn chế về thời gian cho nên em chỉ thiết kế mạch có một số tính năng nêu trên: _ Đèn và quạt gió bật lên khi có người vào nhà.
_ Đèn và quạt gió tắt khi người trong nhà đi ra ngoài hết. _ Phát hiện nguy cơ gây ra hỏa hoạn và phát tín hiệu chuông báo động. _ Đo nhiệt độ hiện tại trong phòng và hiển thị lên panel. _ Có khả năng phát hiện trộm xâm nhập và phát tín hiệu chuông báo động. Như theo yêu cầu của đề tài: tất cả các kit vi xử lý sẽ được giám sát và có thể ra lệnh từ máy tính. Máy tính truyền lệnh cần vi xử lý thi hành đến đúng kit vi xử lý mà nó cần tác động. Có thể là lệnh yêu cầu tắt đèn , quạt, hay là yêu cầu gởi dữ liệu từ phòng, nhiệt độ, đèn tắt hay mở, bao nhiêu người trong phòng. Theo lý thuyết, thì các thành viên trong một hệ thống mạng đều có thể liên kết dữ liệu với nhau bằng cách thông qua Master là PC. Nhưng do mạng trong đề tài em thiết kế không cần tốc độ cao và cũng không có nhu cầu trao đổi dữ liệu giữa các kit vi xử lý riêng lẻ, cho nên em dùng phương pháp hỏi vòng từ PC. Qua đó, PC sẽ lần lượt hỏi vòng tuần tự qua từng kit vi xử lý. Dữ liệu từ PC gửi về kit vi xử lý gồm có các byte yêu cầu cộng thêm hai byte thêm vào: một byte đầu tiên xác định địa chỉ nơi đến, byte tiếp theo sẽ xác định nội dung giao tiếp giữa vi xử lý và PC, chẳng hạn gởi nhiệt độ, số người trong phòng…Chương trình giao diện và điều khiển truyền số liệu dùng ngôn ngữ lập trình Visual Basic 6.0 P RS-485 BUS RS-485
RS-485
KIT VI XỬ LÝ PHÒNG 1
KIT VI XỬ LÝ PHÒNG 2
Sơ đồ khối toàn bộ hệ thống điều khiển và giám sát ngôi nhà Kit vi xử lý trong phòng 1 và phòng có cùng sơ đồ khối như sau
Mạch động lực đóng cắt các thiết bị Vi xử lí Atmel 89C51
Mạch hiển thị nhiệt độ
Mạch hồi tiếp trạng thái thiết bị
Cảm biến quang
Mạch gia công tín hiệu đo IC đo nhiệt độ Sơ đồ khối kit vi xử lý
Mạch nguồn
Chức năng của từng khối: a. Vi xử lý 89C51: Đây là bộ xứ lý trung tâm của mạch đặt tại từng phòng trong ngôi nhà. 89C51 là loại IC có khả xử lý và điều khiển theo một chương trình đã lập sẵn và có khả năng thực hiện các yêu cầu gởi đến từ máy tính. Vi xử lý 89C51 trong mạch thiết kế có thể thực hiện các chức năng như sau: _ Phát tín hiệu báo động bằng chuông khi phát hiện có trộm xâm nhập. _ Đo nhiệt độ trong phòng và hiển thị lên một panel đặt trong phòng, khi nhiệt độ trong phòng khá cao thì nó sẽ ra lệnh bật máy điều hòa nhiệt độ hay quạt gió hoạt động. _ Khi phát hiện có nguy cơ hỏa hoạn nó sẽ báo động bằng chuông, sau đó nó sẽ ngắt CB của nguồn điện. _ Bật đèn lên khi có người vào phòng. _ Tắt đèn khi người trong phòng ra ngoài hết. b. Khối cảm biến quang: Dùng đề tạo một tín hiệu đưa về vi xử lý, tùy theo mức của tín hiệu này mà thiết bị sẽ biết được có trômg xâm nhập hay không. c. Khối hiển thị nhiệt độ: Khối này có dạng một panel hình chữ nhật được gắn trên từng phòng, nhiệt độ trong phòng sẽ được hiển thị trên panel này. d. Mạch động lực: Dùng để đóng các thiết bị, nhận tín hiệu kích đóng từ vi xử lý. Mạch hồi tiếp trạng thái các thiết bị:
2.
Dựa vào mức của tín hiệu hồi tiếp về mà vi xử lý sẽ biết đươc thiết bị nào đang bật, thiết bị nào đang tắt. II. Thiết kế phần cứng 1. Mạch cảm biến quang: Sơ đồ mạch như sau: VCC R3 3 30 U1 + 6 I N T0 ZE N ER 5. 1 V
R 5 22 0
3
L ED PHAT
LED TH U R4 1 00
2 R7 A D 741 1 k R6 1k
Bình thường không có gì che chắn giữa LED phát và LED thu thì áp ra sẽ là 5V. Khi có vật che chắn giữa LED phát và LED thu thì mạch sẽ cho ra áp là 0V. Do khi LED thu dẫn thì áp rơi trên R4, chỉ từ 1V – 1,5V nên ta phải đệm thêm mạch khuếch đại dùng OPAMP. Tùy theo đặc tính của từng con LED phát và LED thu mà áp đặt trên trở 100 ohm sẽ khác nhau. Bình thường áp đặt trên điện trở 100 ohm là 1V, dùng mạch khuếch đại OPAMP để áp đủ 5V đưa vào vi xử lý. Để đảm bảo rằng áp đưa trở về vi xử lí sẽ không lớn hơn 5V( tránh hư vi xử lí khi ta đặt áp vào lớn hơn áp hoạt động cuả nó), ta mắc thêm một Diode Zenner ổn áp 5.1V vào ngõ ra của mạch khuếch đại.
Tính toán mạch khuếch đại: Dòng qua LED: 10 mA – 20 mA để giúp cho LED hoạt động được lâu dài. Dòng cực đại mà ta có thể đưa vào chạy qua LED là 20 mA. Thông
thường trong tính toán mạch để đơn giản ta cứ cho dòng chạy qua LED là 15 mA. Khi LED dẫn, áp trên LED sẽ nằm trong khoảng từ 1,7-2V. Cho nên dòng qua LED: ILED = 5 2 = 9 mA 330 Khi LED thu dẫn, dòng qua LED = 5 2 =9mA 320 Ap đưa vào mạch khuếch đại LM741: ILEDTHU Vin = I LED thu x100 = 1 V Để áp ra LM 741 đúng 5V khi LED thu dẫn ta chọn hệ số khuếch đại như sau: AV =1+ RI /RF RI /RF =5 =6
Chọn Rf = 2.2 kW Þ RI = 5*2.2 = 11 kW Khi mạch chạy bão hòa thì áp ra trên Diode Zenner 5V là: Vout = Vin x Av = 1 x 5 = 5V Ta dùng Zenner 5.1V để ổn áp ngõ ra ổn định ở mức 5V. Bình thường, LED phát phátliên tục, khi không có vật che chắn giữa LED phát và LED thu thì áp ra mạch khuếch đại sẽ đúng 5 V. Vi xử lý sẽ nhận biết đây là trạng thái mức cao (tích cực). Nếu có vật che chắn giữa LED phát và LED thu thì áp ra sẽ không phải chính xác là 0 V, mà có thể từ 0 V – 2V. Nằm trong tầm điện áp này thì vi xử lý sẽ phát hiện ra đây là mức không tích cực (mức thấp ). Tín hiệu này đưa vào chân INT0 của vi xử lý. Ta sẽ thiết lập chế độ hoạt động ngắt ở cạnh xuống. Nghĩa là có sự chuyển đổi từ 5V sang 0V thì mạch sẽ xãy ra 1 ngắt. Để thiết lập chế độ này ta dùng lệnh sau gán cho vi xử lý: SETB IT0 Lệnh này sẽ cho phép vi xử lí đáp ứng ngắt theo cạnh xuống của tín hiệu áp đưa vào chân INT0. 2. Mạch mô phỏng cảm biến quang phát hiện người:
VC C
R 2 SW 1 C A M B IE N Q UANG 1 SW 2 C A M B IE N Q UANG 2 4. 7 K
R 1 4. 7 K U 2A 1 2 3
P 1 .0
I N T1
740 8 P 1 .1
Thông thường để phát hiện người đi vào hay đi ra ta dùng một cảm biến quang. Cách này thông dụng dễ lắp đặt nhưng nó không phân biệt được người vào người ra. Nó chỉ có thể nhận biết có người thông qua sự thay đổi trạng thái đầu vào là mức cao hay mức thấp. Bên cạnh đó, còn có một nhược điểm nữa là sẽ gây cho chương trình chạy sai khi có người vô hình đứng chắn ngang cảm biến quang trong khoảng thời gian tương đối lâu. Lúc đó vi xử lý sẽ hiểu rằng có rất nhiều người ra vào nó sẽ bị đếm lầm . Để khắc phục tình trạng này ta dùng cùng lúc hai cảm biến quang đặt cách nhau ở một khoảng cách xác định. Dựa vào sự thay đổi trạng thái của cảm biến quang nào trước, cảm biến quang nào sau ta sẽ nhận biết được người ra hay vào phòng. Phương pháp này rất hiệu quả, nhưng cũng có thể không nhận ra số người một cách chính xác như ta mong muốn. Giả sử khi có hai người cùng sóng bước thì cảm biến quang chỉ phát hiện ra một người mà thôi. Ta cũng có thể khắc phục tình trạng này bằng cách thiết kế cửa sao cho chỉ cho một người qua lọt mà thôi. Chức năng mạch đếm người được em thiết kế như sau: khi có một cảm biến quang tác động sẽ làm cho áp trên chân INT1 chuyển từ 1 sang 0. Vi xử lý sẽ nhảy đến chương trình ngắt kiểm tra giữa hai chân P1.0 và P1.1 xem chân nào xuống mức 0 trước: Nếu P 1.0 tác động trước, P1.1 tác động sau thì ta sẽ nhận biết có người vào. Nếu P1.1 tác động trước thì ta nhận biết có người ra. Bình thường khi không nhấn các SW1 và SW2 thì INT1 ở trạng thái tích cực. Khi một trong hai nút nhấn SW1 và SW2 được nhấn tức là có một chân đưa vào IC 7408 xuống mức 0. Cho nên áp sau khi qua 7408 sẽ là mức 0 (do IC 7408 là IC thực hiện chức năng logic AND). Tùy thuộc vào ta nhấn nút nhấn nào trước, nút nhấn nào sau, vi xử lý sẽ phát hiện người ra hay vào mà xử lý chương trình điều khiển. 3. Mạch động lực đóng cắt thiết bị:
Sơ đồ nguyên lý mạch động lực như sau:
+1 2V D4
1 1 0ohm , 3 W JP 1 1 DIEU KHIE N DEN R1 U1 33 0 2 4N 26 5 D2 R2 4 D3 2. 2K 1
12 2 D 5 2 1 4
1
2
1
2 D1
K2
3 2
1
3
2
Q1
2
VCC R5 6 2 3 U2 R 4 1 k 1 5 2
3
P1 .3 5 .1 V
6 R6 22k
Q2 1 4 R3 1k
2
1
1
4N 26
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 20
Nguyên lý hoạt động của mạch như sau: Khi cần đóng đèn thì vi xử lý sẽ đặt chân điều khiển đèn lên mức tích cực. Khi đó Opto sẽ dẫn làm cho Phototransistor dẫn bão hòa, áp VC1 » 0.2V, sẽ kéo theo Q1 dẫn. Khi Q1 dẫn sẽ cho phép rơ le đóng. Khi Relay đóng thì đèn sẽ được cấp nguồn: đèn sáng. Do mạch thiết kế dựa trên nguyên tắc kiểm tra áp trên đèn sẽ biết đèn đóng hay mở. Khi đèn được đóng bằng Relay điện trở công suất RW sẽ chia áp trên đèn, do điện trở công suất mắc nối tiếp đèn nên đèn sáng thì trên điện trở công suất sẽ có áp. Ap này sau khi qua cầu Diode chỉnh lưu sẽ được đưa trở về vi xử lý. Tính toán mạnh như sau: R1 = 330 W : đảm bảo dòng qua Opto đủ nhỏ để Opto hoạt động tốt. R2 = 2.2 k để giảm dòng giúp cho Phototransistor được hoạt động bình thường, không rơi vào tình trạng quá dòng. Diode D5 dùng để xả dòng điện cảm ứng trong cuộn dây Relay khi ta kick ngắt Relay. Điện trở công suất RW, do đèn dùng để thiết kế cho mạch có các thông số định mức như sau: U = 220 V P = 10 W Þ I = 0.046 A Ta cần lấy áp ra trong khoảng 5 V, nên chọn RW như sau: RW xI=5V Þ RW = 5/0.046 =110 W Chọn RW = 120 W, 5 W Sau khi qua cầu chỉnh lưu, áp này sẽ thành áp DC, nếu cần ta dùng tụ 1000m để cho áp ra được thẳng. Qua bộ đệm LM741 để cho áp ra ổn định thì tín hiệu nối tiếp về được đưa vào một chân của vi xử lý. Nguyên nhân tại sao khi thiết kế mạch động lực đóng ngắt nguồn ta dùng nguồn +12V riêng và dùng Opto để kích. Do khi relay đóng ngắt sẽ gây ra nhiễu điện từ, nhiễu này sẽ ảnh hưởng trực tiếp lên nguồn cung cấp cho vi xử lý. Nó sẽ làm cho áp cấp cho vi xử lý có dạng gai áp. Nếu không truyền số liệu về máy tính thì điều này không quan trọng. Nhưng ta thiết kế mạch có truyền dữ liệu nên cần phải dùng nguồn riêng và Opto để tránh gây nhiễu sẽ ảnh hưởng đến việc truyền dữ liệu. Đồng thời Opto cũng thực hiện việc cách ly mạch giữa 2 kit cho nên mạch sẽ hoạt động tốt hơn. Mạch khuếch đại Opamp dùng để ổn định áp hồi tiếp về khi có nhiều thiết bị mắc trên cùng đường dây. Khi đó dòng sẽ giảm và áp đặt vào điện trở công suất cũng giảm theo. Để đảm bảo mạch hoạt động tốt ta dùng mạch khuếch đại áp sau đó dùng Diode Zenner để ổn áp ở mức +5V đưa vào vi xử lý. 4. Mạch nguồn cung cấp:
Mạch nguồn thiết kế trên nguyên tắc tạo ra nguồn đôi: +/-12V, +/-5V. Để có thể được như vậy ta dùng biến áp loại 6 đầu ra: 0V, 6V, 9V, 15V, 18V và 24V. Ta sẽ dùng điểm chuẩn 12V là mass. Cho điện xoay chiều đi qua 2 cầu Diode chỉnh lưu.
220V
Nắn dòng
Lọc áp
IC ổn áp
Lọc bỏ Các gợn Sóng
5V -5V +12 V -12V
Sơ đồ khối nguồn cung cấp cho các kit vi xử lý Mạch dùng áp lưới chỉnh lưu thành dòng một chiều biến áp chọn loại 3A. Cầu Diode sẽ chỉnh lưu áp xoay chiều thành dòng một chiều. Bộ phận nắm dòng là tụ 220 mF (25V), nó sẽ làm cho dòng DC được thẳng hơn. Lọc áp giúp giảm đi các gợn sóng cao tần. IC ổn áp là các họ IC: 7805 ( ổn áp +5V), 7905 (ổn áp –5), 7912 (ổn áp – 12V), và 7812 ( ổn áp +12). Do mạch không dùng đến công suất lớn nên không cần dùng đến transistor bổ trợ dòng cho mạch. Với các Diode chỉnh lưu chọn loại 3A, thì các IC ổn áp sẽ hoạt động tốt. Ta nên gắng thêm tấm tỏa nhiệt cho 4 IC ổn áp này. Vì khi IC càng nóng thì áp ra sẽ không ổn định và có nguy cơ chết IC. 5. Mạch hiển thị nhiệt độ bằng LED 7 đoạn: Để hiển thị nhiệt độ đo được ta dùng các LED 7 đoạn để hiển thị. Dùng IC 74247 để giải mã sang LED 7 đoạn. Mạch hiển thị được nối với Port 2 của vi xử lý. 4 bit thấp của Port2 dùng cho giải mã LED, 4 bit dùng để tạo tín hiệu chọn LED. Ta dùng phương pháp quét để hiển thị LED. Thời gian giữa hai lần quét cách nhau 1ms để đảm bảo cho LED đủ sáng. LED được chọn để dùng LED Anode chung.Sơ đồ mạch kích như sau:
R2 TI N H I E U C H O N L E D 1k
o d Conve e
R 1 10 k 2
A10 15
3 8 3 8
5 wo. d conve e Un eg ste ed h p www Trang 22
3 edcb f g
7S E G
IC giải mã LED
a
1
Hoàng Dũ
74247 (W r rt r r i r ) tt :// 0 . r rt r.net SVTH: Lê ng
r
Khi tín hiệu chọn LED = 0, Transistor Q1sẽ dẫn đến VC » Vcc =5V, tương ứng với áp để LED sáng. Tín hiệu chọn LED =1 (+5 V) thì transistor sẽ ngưng dẫn, các LED sẽ tắt vì không có áp. 6. Công tắc đóng ngắt thiết bị theo yêu cầu: Mạch này mô phỏng chức năng của 1 công tắc đóng ngắt thiết bị. Khi SW3 không được VCC nhấn thì P2.7 ở mức cao. Vi xử lý sẽ kiểm tra chân P2.7=0 nghĩa là ta đã nhấn nút SW thì nó 4.7K sẽ thực hiện một chương trình con có nhiệm vụ R3 SW đóng đèn khi đèn đang tắt, và tắt đèn khi đèn 3 P2 đang đóng. Đây là phần thiết kế thêm giúp cho .7 mạch phần cứng và ngay cả chương trình phần D IE U K H mềm điều khiển một IE N D E N cách linh động không quá cứng. Nếu để cho vi xử lý làm nhiệm vụ đếm người và đóng mở đèn hay thiết bị khác thì người dùng không thể can thiệp và cũng không thể thay đổi gì được chương trình điều khiển đã lập trình sẵn trong ROM vi xử lý. Mạch phần cứng thiết kế có phần hồi tiếp trạng thái của các thiết bị. Cho nên chương trình điều khiển cũng không có gì gây ra phức tạm lắm. Thiết bị đóng, tín hiệu hồi tiếp về mức 1 (+5V), thiết bị ngắt tín hiệu hồi tiếp về là mức 0(0V). Nếu ta nhấn nút SW3, và tín hiệu hồi tiếp về đang là mức 0 thì vi xử lý hiểu rằng đó là yêu cầu đóng thiết bị. Nó sẽ xuất tín hiệu đóng Relay cấp nguồn cho thiết bị. Ngược lại, nếu tín hiệu hồi tiếp về đang là mức 1 thì vi xử lý sẽ hiểu là yêu cầu ngắt thiết bị và nó sẽ kích ngắt relay. Ta cũng có thể thiết kế phần cứng để thực hiện phần này để cho vi xử lý thực hiện ít công việc nó phải làm. Nếu chỉ dùng một nút nhấn để yêu cầu đóng hay ngắt thiết bị thì vi xử lý sẽ phải xử lý chương trình. Ta thiết kế hai nút nhấn tương tự như thế và quy định nút nào nhấn là đóng, ngắt thiết bị. 7. Mạch chuông Chuông dùng để phát tín hiệu báo động khi có sự cố: cảm biến nhiệt phát hiện xảy ra hỏa hoạn hay có trộm chẳng hạn. Tùy theo từng sự kiện mà vi xử lý sẽ kích chuông kêu dài ngắn khác nhau: Phát hiện trộm: reo liên tục. Nếu nhiệt độ lên gần 100oC: chuông reo 3 hồi, mỗi hồi 5 giây và cách nhau giữa 2 lần là 1 giây. Nhiệt độ nằm trong tầm báo động 2: chuông reo 2 hồi, mỗi lần cách nhau 1 giây và dài 5 giây mỗi hồi. Do mạch chuông tiêu thụ dòng khá lớn, nên ta phải dùng một relay để kích đóng ngắt mạch chuông. Dòng lớn sẽ gây chết transistor khi ta dùng transistor để lái mạch chuông mà không phải dùng relay. 8. Mạch giao tiếp máy tính qua mạng RS-485
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 23
Thông thường các họ vi xử lý có ngõ truyền thông theo mức TTL. Và các thiết bị đầu cuối khác (DTE ) có cổng truyền thông là RS_232. Để có thể nối mạng các thiết bị này ta phải chuyển từ TTL ,RS_232 sang RS_485. Để thực hiện việc chuyển đổi này có rất nhiều vi mạch trên thị trường , nhưng họ vi mạch của hãng MAXIM là phổ biến nhất hiện nay. Đó là MAX 481 , MAX 483, MAX 485 , MAX 487 ,MAX 488, MAX 489 , MAX 490, MAX 1487. Tiêu biểu là vi mạch MAX 485 , nó chuyển từ mức TTL sang RS_485 , truyền theo phương pháp Half_Duplex.
Bên trong mỗi vi mạch chứa một bộ phát (Driver) và một bộ thu. Đặc điểm : RS _485 là chuẩn giao tiếp nối tiếp bất đồng bộ cân bằng, sự truyền thông tin trên dây xoắn đôi bán song công ( Half _ duplex) , nghĩa là tại một thời điểm bất kì trên dây truyền chỉ có thể là một thiết bị hoặc là truyền hoặc là nhận. RS_485 cho phép 32 bộ truyền trên bus. RS_485 có ngõ ra 3 trạng thái. RS_485 cho phép tốc độ truyền tối đa là 2.5Mbps.
Sơ đồ chân của MAX_485:
Chân DIP/SO mMAX 1 3 Tên RO Chức năng Ngõ ra bộ thu : Nếu A > B là200mV, RO là cao.
Nếu A < B là 200mV , RO là thấp. Cho phép ngõ ra bộ thu : RO được cho phéo khi /RE là thấp. RO là trở kháng cao khi /RE là cao. 3 5 DE Cho phép ngõ ra lái : Các ngõ ra lái A và B được cho phép khi DE cao. Các ngõ ra lái A và B là trở kháng cao khi DE thấp. Nếu những ngõ ra lái được cho phép thì từng ngõ có chức năng như làcác đường lái. Khi chúng là trở kháng cao , chức năng của chúng như là các đường thu của bộ thu nếu 4 6 DI Ngõ/RE vào là bộthấp. lái : DI thấp thì A thấp và B cao DI cao thì Acao và B thấp. 5 7 GND Nối mass. 6 8 A Ngõ vào vộ thu và ngõ ra bộ lái đều không đảo. 7 1 B Ngõ vào bộ thu và ngõ ra bộ lái đều đảo. 8 2 Vcc Nguồn cung cấp dương 4.75V Vcc 5.25V Chức năng của các đường điều khiển : 2 4 /RE Truyền :
/RE X X 0 1 Tín hiệu vào DE 1 1 0 0 Tín hiệu ra DI 1 0 X X B 0 1 High Z High Z A 1 0 High Z High Z
Nhận /RE 0 0 0 Tín hiệu vào DE 0 0 0 A-B 200 mV 200 mV Ngõ vào hở mạch Tín hiệu ra RO 1 0 1
1
0
X
High Z
Sơ đồ mạng half_ duplex RS485: R2 R1 4 DI 1 20 3 D E A 6 1 RO B 7 2 RE M A X 485
6 A 7
1 20 7 B 6 A
6
RE 2 1 RO DE 3 4 DI
M A X 48 5 M A X 485 M A X 48 5
A 4 3 DI DE B 1 2 RO RE 7
4 3
Sơ đồ mạng RS485 Full_Duplex: U4 4 9E R DY 2 50 1 DZ I 1 2 22 1 0 R AO 3 R4 R1B E1 12 0
12 11
1 2
RO RE
DI DE
B
R1 3 1 20 2 R 5 3 1 20 4
U4 B
1 1 1 2 A
RE RO DI Y DE
Z
10 9
9
B
M A X 489
10 9
M A X 489 M A X 489
U4
A
B
Y
RO
Y
RO
DE
A RE
Z
DE
RE
DI
DI
Z
12
11
10
U4
M A X 489
tăng truyền , ta có thể dùng bộ repeater như sau:
Để chiều dài cáp
4
5
2
3
4
5
2
3
U1 122 A 131 B RE 4 9 Y DE 150 Z DI M A X 4 91 RO R 1 12 0 R 2 1 2 0 DAT A IN DATA OUT Repeater hay gọi là
Bộ
bộ tiếp sức , có chức năng làm khuếch đại tín hiệu liên lạc giữa các máy tính với nhau , khoảng cách truyền thông tin có thể đạt tới 3 km. Mạng RS-485 em thiết kế trong đề tài này là mạng bán song công (HalfDuplex): dữ liệu chỉ đi từ Master đến các vi xử lý hay từ các vi xử lý đến Master. Tại một thời điểm trên mạng chỉ có một phần tử truyền và cho phép các phần tử khác có thể nhận thông điệp đó. Có điều quan trọng ta nên chú ý là với sơ đồ mạch RS-485 được thiết kế như trên thì chỉ có thể giao tiếp giữa Master (PC) và các vi xử lý nhưng giữa các vi xử lý không thể liên lạc trực tiếp với nhau. Chúng giao tiếp với nhau nếu có thể đó thuộc một dạng giao tiếp khác. Cách thức hoạt động của mạng như sau: PC
Converter RS-232« TTL
Converter TTL RS-485 A B
B Vi xử lí 1 TT L
A RS-485
B TT L
A
Con verter
Con verter
RS-485
Vi xử lí 2
Với sơ đồ mạng như trên ta có thể giao tiếp được với 32 slave thông qua một Master là PC. Đồng thời do mạng truyền dữ liệu trên hai dây xoắn đôi lại nên sẽ đỡ rắc rối trong quá trình thiết kế cũng như khi nối dây. Bộ chuyển đổi ( Converter ) từ RRL sang RS-485 thực ra chỉ cần một con IC 75176 cũng đã đảm nhận vai trò này tương đối tốt. IC là 75176 ( hay tương đương Max-485 ) có hai chân điều khiển hoạt động là DE và /RE. Chân /RE tích cực ( mức logic 0 ) sẽ cho phép vi xử lý nhận dữ liệu từ Master: chế độ thu dữ liệu. Chân DE tích cực ( mức logic 1) sẽ cho phép mạch phát dữ liệu từ vi xử lý về Master. Dùng một chân từ các Port của vi xử lý cũng như chân để phát. Thông thường khi lập trình giao tiếp bằng phần mềm, ta thường dùng chân RTS hay CIS để điều khiển IC 71576. Ban đầu, chân /RE của75176 sẽ ở mức thấp: chế độ thu 75176 nhận dữ liệu từ máy tính, thông thường là địa chỉ. Sau đó, nghĩa là khi Master phát địa chỉ xong thì nó chuyển trạng thái chân /RE xuống mức thấp để cho phép nhận tín hiệu hồi đáp từ các slave. Các slave sau khi nhận được địa chỉ từ Master nó sẽ so sánh với địa chỉ của nó. Nếu đúng địa chỉ thì slave sẽ đưa chân DE lên mức một để truyền tín hiệu trả lời về Master, sau đó thì nó lại đưa chân /RE sang mức 0 để sẵn sàng nhận dữ liệu hay yêu cầu cũng như lệnh mới từ Master. cụ thể sau: R2 D E A 6 B 7 1 20 R1 1 20 7 B 6 A Sơ đồ như
4 3 DI
1 2 RO R E M A X 485
R RO D DI
2 E 1 3 E 4
M A X 48 5
6 7 6 7
M A X 485
M A X 48 5
A
B
A 4 3 DI DE
RO RE
DI DE
4 3
1 2
Hai điện trở 120W được nối vào 2 đầu đều xa nhất của mạng. Chiều dài xa nhất có thể là đầu này và đầu kia là 4000 feet ( 1,2 km ). Còn gọi là điện trở đầu cuối ( Terminal Register ). Dây dẫn là loại xoắn đôi 26 AWG.
1 2
RO RE
B
Ta có 2 chân điều khiển thu phát dữ liệu, để đơn giản việc điều khiển, ta thường nối chung 2 tường điều khiển này cùng nhau. Nếu tín hiệu này mức cao thì một trong hai sẽ ở mức tích cực cũng như một trong hai sẽ ở trạng thái thụ động. 9. Mạch cảm biến nhiệt độ dùng IC LM335. Nhiệt độ là một tín hiệu dạng tương tự nó hiện hữu theo thời gian và liên tục. Để dễ dàng đo được những tín hiệu không phải là điện ta thường chuyển nó sang dạng tín hiệu điện để có thể đo dễ dàng hơn. Có nhiều phương pháp để chuyển từ tín hiệu nhiệt độ sang tín hiệu điện, tuy nhiên có 2 phương pháp thông dụng nhất thường được sử dụng như sau: Chuyển từ nhiệt độ sang dạng đo điện trở: để đo điện trở thì mạch gia công cũng như mạch đo đều có. Cho nên ta tìm cách tạo ra một mối quan hệ giữa điện trở của một vật đến nhiệt độ cần đo. Ta dùng một vật liệu thay đổi nhiệt độ sẽ gây ra thay đổi điện – còn gọi là nhiệt điện trở. Từ đó ta có thể chuyển từ trở thành áp và dùng các mạch khuếch đại tương đương đo một cách dễ dàng. Chuyển từ nhiệt độ sang trực tiếp điện áp: cách này chỉ có thể dùng các IC nhiệt mà thôi. Các IC này có đặc tính là áp ra sẽ thay đổi theo nhiệt độ môi trường. Ta dùng thêm các mạch gia công thích hợp để có thể ghi nhận được sự thay đổi điện áp hay cũng chính là sự thay đổi đầu vào. Tùy vào hệ số nhiệt của chất liệu cấu thành IC nhiệt là hệ số nhiệt dương ( áp ra tăng dần như tuyến tính theo nhiệt độ ), hay hệ số nhiệt âm ( áp ra tăng dần theo nhiệt độ ). Các hàm quan hệ giữa áp và nhiệt độ thông thường là hàm mũ. Cho nên khi nhiệt độ càng tăng thì nhiệt độ tuyến tính sẽ giảm đi và cũng không đo được nhiệt độ một cách chính xác ở phần phi tuyến đó. Trong phạm vi của đềtài này em dùng IC nhiệt LM335 để làm mạch đo nhiệt độ. Sơ đồ nguyên lý như sau:
VCC 2
-1 2V
4
5
R2 20K
2 1 0 U
3
6
7 1
3 L M7 41 U 1 1 +1 2 -1 2 V V
1 0 K 2 3
RF 3 9K -1 2V
4 5
1
4
5
V CC
R 1 2. 2 K L M3 35 2
LM U 1 67 4 1 3
A/D1 C1 2 0.1 U
7
6 1 0 U 2 L M U1 3 741 5
R I 1 0 K
3
RV A R1
+1 2V RF
1
2 3 9K
1
7
3
+1 2V IC này có thể hoạt động tốt đến nhiệt độ 150oC, áp ra tuyến tính với nhiệt độ cho nên rất đơn giản cho quá trình tính toán. Đặc tính của LM335 như sau: + Ở 0oK thì áp ra sẽ là 0V + Nhiệt độ tăng 1oC thì áp ra sẽ tăng 10 mV. Như vậy, theo cách tính nhiệt độ theo oC thì ở 0oC áp ra của LM335 sẽ là 2.73V. Để dễ dàng cho việc xử lý, ta phải thiết kế mạch gia công sao cho khi ở 0oC thì áp ra của LM335 cũng là 0V. Ta thiết kế thêm mạch trừ cộng vào áp ra của LM335. Mạch trừ này có vai trò tạo ra một áp-2.73V để triệt tiêu áp trên LM335 khi nhiệt độ môi trường là 0oC ( -278oK ). Hàm biểu diễn của áp theo nhiệt độ của LM335 có thể xem gần đúng như sau:
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 30
1
1
Vout = 0.01*t (0oC). Tín hiệu này để có thể hiển thị lên LED ta phải dùng 1 IC chuyển từ áp ra dạng tín hiệu số: ADC 0809. Đặc tính của ADC như sau: + Cấp nguồn đơn : + 5V + Tần số xung clock = 12 MHz:16 + Thời gian chuyển đổi tối đa : 120 m.
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 31
+ Cần có một xung start để kích quá trình chuyển đổi. Nếu ADC đang chuyển đổi mà có xung start mới thì sẽ bắt đầu lần đổi tiếp theo. + 8 kênh Analog vào. + 8 đường data ra hay nói chính xác hơn đây là ADC 8 bit + Sai số tổng cộng không điều chỉnh được: +/-1 LSB + Ngõ ra phù hợp với mức điện áp TTL Data ở ngõ ra là một số nguyên N nằm trong khoảng : N= (Vin / VREF+)x 255 * 256 Độ chính xác tuyệt đối. Vin : tín hiệu Analog đầu vào cần chuyển đổi. VREF :tín hiệu cấp nguồn cho ADC 0809 Công thức trên chỉ đúng trong trường hợp ADC được cấp nguồn đơn. VREF nối mass. Trước quá trình chuyển đổi ta cần thiết lập cổng ngõ rào cho quá trình chuyển đổi. ADC 0809 có 3 chân A0, A1, A2 dùng để xác lập kênh Analog vào.
A2 A1 A0 Kênh Analog vào 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7 Tính toán mạch: Giá trị nhiệt độ mà IC LM 335 đo tối đa là 150oC, vì thế tín hiệu sau khi qua mạch trừ sẽ còn lại 0.01* t (oC) ÞÁp ra cực đại đưa vào ADC là: 0.01*150=1.5V VREF+ = 5V VREF- = 0V ÞSố mà ADC đổi ra cực đại là: N=1.5/5*256= 76 hay 77 ( do sai số 1 LSR ).
Ta thấy rằng: nhiệt độ thực tế là 150oC mà đo chỉ có 77 oC hay nói cách khác : nhiệt độ đo được qua ADC từ mạch trừ 2.73V đưa trực tiếp vào sẽ bé đi 2 lần so với giá trị thực . Điện áp ngõ ra của mạch khuếch đại như sau: Vout = Av.(V1-V2) V1 : tín hiệu chuẩn 2.73 V V2: tín hiệu ra từ LM 335 phụ thuộc vào nhiệt độ. Vậy áp ngõ ra sẽ thay đổi một lượng là Av.10mV khi nhiệt độ thay đổi 1oC. Do ta cần đến 4 LED để hiển thị nhiệt độ đo được nên có 1 LED thập phân. Như thế sẽ dẫn đến tình trạng để từ nhiệt độ này tăng thêm 1oC nữa thì mạch sẽ qua hai trạng thái: một số nguyên sau đó đến số thập phân hay nói một cách khác đi để đo và hiển thị LED thập phân ta phải làm sao khi nhiệt độ thay đổi 1oC thì phải bằng hai lần độ phân giải của ADC0809. Av x 10mV = 2 x19.6 mV Với 19.6 mV là độ phân giải của ADC 0809 =5/225 Av = 2 x 19,6 /10 = 3.92 Ta chọn : RI = 39 K RI = 10K Như vậy, áp sau khi qua bộ khuếch đại sẽ có giá trị như sau: Vout = 3,9 x 0,01t = 39 x t ( mV ) ; t (oC) Với độ phân giải của ADC là 19,6 mV thì giá trị sau khi qua ADC sẽ có giá trị là: 39 x t /19,6 = 2 x t (mV) Để thể hiện lên LED một số phần thập phân ta sẽ phải hiển thị giá trị như sau : 10 x t (mV). Cho nên giá trị sau khi qua bộ đổi ADC sẽ phải nhân thêm với 5 rồi sau đó mới biến đổi qua mã BCD nén và hiển thị lên LED 7 đoạn. 10. Thiết kế mạch 89C51 trên sơ đồ các chân và chức năng của chúng: 10.1. Giới thiệu vi xử lý 89C51: a. Giới thiệu : Vi xử lý AT89C51 được chế tạo bởi hãng ATMEL, về cơ bản nó có cấu tạo bên trong , sơ đồ chân cũng như sử dụng tập lệnh tương thích với họ 8031 của hãng INTEL. Các đặt điểm cơ bản của vi mạch AT89C51: Đơn vị xử lý trung tâm 8 bit đã được tối ưu hóa để đáp ứng các chức năng điều khiển. Khối logic xử lý theo bit thuận tiện cho các phép toán Boole. Bộ tạo dao động giữ nhịp bên trong (đến 12Mhz). Tập lệnh rất phong phú.
Giao diện nối tiếp có khả năng hoạt động song công , đồng bộ (UART). 16 (32) đường dẩn vào/ ra hai hướng và từng hướng có thể được định địa chỉ một cách tách biệt. Năm nguồn ngắt vơí hai mức ưu tiên. Có thể mở rộng bộ nhớ chương trình ( ROM ) bên ngoài lên đến 64KB. Có thể mở rộng dung lượng bộ nhớ dữ liệu (RAM ) bên ngoài lên đến 64KB. Hai bộ đếm / định thời 16 bit. Bộ nhớ EEPROM nội 4KB. Dung lượng bộ nhớ RAM nội , nhiều nhất có thể lên đến 128 byte. a. Sự sắp xếp chân ra : Port 0 : Là port hai chức năng trên các chân 32 – 39. Khi sử dụng bộ nhớ trong thì nó như là một port I/O ( P0.0 ® P0.7) . Khi sử dụng bộ nhớ ngoài thì nó đóng vai trò như một bộ MUX địa chỉ/ data. Port 1 : Là một port I/O trên các chân 1 – 8 (P1.0® P1.7 ) nó chỉ được dùng để giao tiếp với các thiết bị ngoài và không có các chức năng khác. Port 2: Là một port công dụng kép trên các chân 21 – 28. Khi sử dụng bộ nhớ trong thì nó như là một port I/O đa dụng (P2.0®P2.7), khi sử dụng bộ nhớ ngoài thì port 2 chính là byte cao của các đường địa chỉ (A8®A15). Port 3: Chiếm các chân từ 10 đến 17 , ngoài chức năng chính là một I/O port đa dụng (P3.0®P3.7) , mỗi chân của port 3 còn có các chức năng khác nhau, độc lập. PSEN : (Program Store Enable) Chân 29, tích cực mức thấp trong chu kỳ nhận lệnh , chỉ báo data trên dus là mã lệnh. Trong trường hợp sử dụng bộ nhớ chương trình trong thì PSEN không tích cực. ALE :(Address Latch Enable ) Chân 30 , tích cực mức cao trong nửa chu kỳ đầu chỉ báo dữ liệu trên port chính là địa chỉ byte thấp A0¸A7. EA : (External Acess) Chân 31 , cho phép chọn bộ nhớ chương trình trong hay ngoài. + EA =0 : MCU sử dụng bộ nhớ chương trình ngoài + EA = 1 : MCU sử dụng bộ nhớ chương trình trong. RST (Reset ):
Ngõ vào RST trên chân 9 là ngõ Reset của 8951 , khi ngõ này lên mức cao (trong ít nhất hai chu kỳ máy ) các thanh ghi bên trong 8951 được đưa về trạng thái mặc định. c. Các thanh ghi chức năng đặc biệt: Vùng RAM nội địa chỉ từ 80H – FFH , trong vùng này bố trí khoảng 21 thanh ghi đặc biệt , phụ trách một chức năng nào đó của MCU. i. Thanh ghi PSW (Program status Word): Thanh ghi từ trạng thái chương trình ở địa chỉ D0H chứa các cờ ( các bit chức năng ) trạng thái của hệ thống :
Bit PSW.7 PSW.6 PSW.5 PSW.4 PSW.3
Ký hiệu CY AC F0 RS1 RS0 D7H D6H D5H D4H D3H
PSW.2 PSW.1 PSW.0
OV P
D2H D1H D0H
Địa chỉ Ý nghĩa Cờ nhớ Cờ nhớ phụ Cờ 0 Bit 1 chọn bank thanh ghi Bit 0 chọn bank thanh ghi 00 : bank 0 01 : bank 1 10 : bank 2 11 : bank 3 Cờ tràn Dự trữ Cờ parity chẵn
ii. Thanh ghi B : Địa chỉ F0H , truy xuất bit , ngoài chức năng là thanh ghi đa dụng còn tham gia vào 2 phép toán nhân và chia. iii. Thanh ghi SP (Stack Poiter): Địa chỉ 81H , vùng ngăn xếp nằm trong RAM nội về nguyên lý dung lượng tối đa là 128 byte. Trước khi cất vào stack nội dung SP tăng lên 1 rồi mới cất (nội dung SP là con trỏ địa chỉ ), khi lấy dữ liệu ra khỏi stack nội dung SP giảm đi 1 sau khi lấy data. iv. Thanh ghi DPTR (Data Pointer): Sử dụng làm con trỏ địa chỉ bộ nhớ dữ liệu ngoài. Chia làm hai thanh ghi : DPL ( địa chỉ 82H ) chứa byte thấp DPH ( địa chỉ 83H) chứa byte cao v. Các thanh ghi cổng ngoại vi :
Các lệnh liên quan đến xuất nhập ngoại vi đều thông qua các thanh ghi cổng. Port 0: Thanh ghi P0 (địa chỉ 80H) Port 1: Thanh ghi P1 ( địa chỉ 90H) Port 2: Thanh ghi P2 ( địa chỉ A0H) Port 3: thanh ghi P3 (địa chỉ B0H) vi. Các thanh ghi timer : TMOD (địa chỉ 89H) : Chọn mode làm việc timer. TCON ( địa chỉ 88H) : điều khiển timer TL0 (địa chỉ 8AH): byte thấp timer 0 TH0 (địa chỉ 8CH): byte cao timer 0 TL1 (địa chỉ 8BH): byte thấp timer 1 TH1 ( địa chỉ 80H): byte cao của timer 1 vii. Các thanh ghi SIO : SCON (98H) : khởi động mode và điều khiển SIO. SBUF ( 99H) : chuyển dữ liệu từ nối tiếp thành song song và ngược lại. i. Các thanh ghi phục vụ ngắt : Có 5 nguồn ngắt với 2 cấp ưu tiên: +Thao tác trên thanh ghi IE (A 8H) : cho phép / cấm ngắt. +Thao tác trên thanh ghi IP (B8H) : cấp ưu tiên ngắt. ii. Thanh ghi điều khiển công suất (PCON) : Địa chỉ 87H , không truy xuất bit được, các bit của thanh ghi này được dùng trong việc tác động lên tốc độ baud (SMOD) trong truyền thông nối tiếp, đưa vi mạch vào mode tạm nghĩ hay mode hạ nguồn. d. Hoạt động của timer : 89C51 có 2 bộ timer 16 bit: Timer 0 và timer 1. i. Thanh ghi TMOD : Có địa chỉ 89H , là thanh ghi 8 bit, đặc các mode làm việc cho timer. Tóm tắt thanh ghi TMOD : Bit 7 6 Tên GATE C/T Timer 1 1 Mô tả Bit cổng , GATE =1 timer chỉ đếm khi INT1=1 Bit chọn counter/timer C/T=1: counter, đếm bằng xung ck ngoài ngõ vào T1 Bit 1 chọn mode Bit 0 chọn mode Bit cổng ( timer 0) Bit chọn timer/counter Bit 1 chọn mode Bit 0 chọn mode
5 4 3 2 1 0
M1 M0 Gate C/T M1 M0
1 1 0 0 0 0 Chọn mode :
M1 0 0 1 1
M0 0 1 0 1
Mode 0 1 2 3
Mô tả Timer 13bit Timer 16 bit Timer 8 bit Timer tách biệt
Thanh ghi TCON : Địa chỉ 88H , truy xuất bit được, là thanh ghi 8 bit Tóm tắt thanh ghi TCON:
Bit TCON.7 TCON.6 TCON.5 TCON.4
Kíhiệu TF1 TR1 TF0 TR0
Địa chỉ bit 8FH 8EH 8DH 8CH
Môtả Cờ báo tràn timer 1, phần cứng đặt TF1=1 khi timer tràn, xóa bằng mềm Điều khiển ON/ OFF timer1, TR1=1:chạy TR1=0 Cờ báo :ngừng tràn timer 1 Điều khiển ON/OFF timer0
e. Cổng nối tiếp : Giao diện nối tiếp ở bên trong của bộ vi xử lý 8951 cho phép nối bộ vi xử lý với một vi xử lý khác hay với một máy tính một cách rất đơn giản. Bởi vì giao diện được thực hiện nhờ bộ UART hoạt động độc lập, nên bộ vi xử lý hoàn toàn tự do đối với các nhiệm vụ khác. Để khởi tạo giao diện thanh ghi SCON cần phải được nạp bằng các giá trị thích hợp. Thanh ghi SCON ( địa chỉ 98h) SM0 SM1 SM2 REN TB8 RB8 TI RI SM0, SM1 Chọn mode làm việc: SM0 SM1 0 0 :Mode 0 thanh ghi dịch 8 bit, baud rate cố định (fck/12) 0 1 :Mode 1 UART 8 bit, baud rate thay đổi (đặt bằng timer 1) 1 0 :Mode 2 UART 9bit , baurate cố định (fck/32 hoặc fck /64) 1 1 :Mode 3 UART 9 bit , baud rate thay đổi (đặt bằng timer 1) SM2 : chế độ nhiều máy tính . REN : Cho phép bộ thu , cho phép bộ phát TB8 : Bit phát thứ 9 trong mode 2 và 3, đặt xóa bằng mềm.
RB8 : Bit nhận thứ 9 TI : Cờ ngắt phát , phần cứng đặt TI = 1 khi phát xong một kí tự, xóa bằng mềm. RI : Cờ ngắt thu , phần cứng đặt RI =1 khi thu xong một kí tự, xóa bằng mềm. Thanh ghi dữ liệu của giao diện nối tiếp là SBUF ( địa chỉ 99H). Thực tế phía sau thanh ghi SBUF là hai thanh ghi, cụ thể là thtanh ghi dữ liệu phát và thanh ghi dữ liệu thu. Quá trình phát được mở đầu một cách đơn giản là truy nhập để ghi lên thanh ghi SBUF. Ngược lại , một byte đã được nhận có thể được đọc từ SBUF. Trong chế độ 9 bit , mỗi một bit thứ 9 (TB8 hoặc TR8 ) trong thanh ghi SMOD cần phải được để ý đến . Trong rất nhiều trường hợp , người ta sử dụng chế độ hoạt động loại 1 và như vậy có một UART 8 bit với việc tạo ra tốc độ baud bằng timer 1. Dòng dữ liệu 8 bit được mở đầu bằng một bit bắt đầu (startr bit ) và kết thtúc bằng một bit dừng(stop bit). Tốc độ baud bằng 1/16(SMOD=1) hoặc 1/32 (SMOD=0) của tốc độ tràn của timer 1. f. Hoạt động ngắt (interrupt): i. Giới thiệu : Một ngắt là sự xảy ra một điều kiện – một sự kiện- mà nó gây ra treo tạm thời chương trình trong khi điều kiện đó được phục vụ bởi một chương trình khác. ii. Tổ chức ngắt trong 8951: 8951 có 5 nguồn ngắt : + Ngắt bằng tín hiệu ngoài qua ngõ INT0 (ngắt ngoài INT0). + Ngắt bằng tín hiệu ngoài qua ngõ INT1 (ngắt ngoài INT1). + Ngắt khi timer 0 tràn (ngắt timer 0). + Ngắt khi timer1 tràn (ngắt timer 1) + Ngắt khi SIO phát / thu xong 1 ký tự (ngắt SIO). Địa chỉA8H, truy xuất bit được, cho phép / cấm ngắt. Thanh ghi IE : Bit Ký hiệu Địa chỉ bit Mô tả IE.7 EA AFH Cho phép / cấm toàn cục IE.6 AEH Không định nghĩa IE.5 ADH IE.4 ES ACH Cho phép ngắt SIO IE.3 ET1 ABH Cho phép ngắt timer 1 IE.2 EX1 AAH Cho phép ngắt INT1 IE.1 ET0 A9H Cho phép ngắt timer0 IE.0 EX0 A8H Cho phép ngắt INT0 10.2. Tổ chức và sử dụng các chân ra của 89C51: Sơ lược về chức năng phần cứng cũng như chương trình phần mềm như sau:
Đo nhiệt độ và hiển thị lên LED, lưu lại giá trị nhiệt độ hiện tại và gởi về máy tính. Tùy theo giá trị của nhiệt độ đo được mà vi xử lý 89C51 sẽ nhận ra nhiệt đang nằm ở tầm báo động nào và có hành động tương ứng: + to < 50oC : báo động cấp 1- chỉ báo chuông + to < 80oC : báo động cấp 2- báo chuông hai lần + to = 100oC: báo động cấp 5 : báo chuông ba lần Cảm biến quang: chống trộm : phát tín hiệu kích chuông reo khi cảm biến này tác động. Mạch mô phỏng cảm biến quang đếm số người trong phòng Số người trong phòng >= 1: đóng thiết bị Số người trong phòng < 1: tắt thiết bị Mạch nút nhấn dùng để yêu cầu tắt / đóng thiết bị theo ý muốn của người trong phòng. Port 0 : đây là port xuất nhập hai chiều, nữa chu kỳ là đường data và nữa chu kỳ kế là đường địa chỉ ( byte thấp). Em đã dùng port này để đọc giá trị đổi được từ ADC0809. Port 2: dùng để giải mã LED và tạo TH chọn LED sáng 4 bit thấp nhất của port 2: p2.0, po2.1, p2.2, p2.3 dùng để đưa vào mạch giải mã LED 74247. 2 bit kế tiếp : p2.4, p2.5 đưa vào mạch giải mã 741SD để tạo TH chọn LED nào sáng . Do LED thuộc loại Anod chung nên chỉ LED nào có TH chọn LED ở mức thấp thì nó sẽ sáng. Nghĩa là tín hiệu chọn LED sáng tích cực ở mức 0. P2.7 dùng để tạo một nút nhấn yêu cầu đóng cắt đèn. Khi nút nhấn, P2.7 đưa xuống mức 0, chương trình phần mềm sẽ kiểm tra chân này xem nút có bị nhấn hay không. Tạo xung start cho ADC0809 ta dùng chân WR, đầu CT ta đặt và xóa chân này sẽ tạo ra một xung kích cho ADC 0809 đổi và đợi cho đến khi ADC đổi xong. Tần số vào ADC0809 nhỏ hơn 12 MHz nên ta phải hạ tần số từ 12 MHz xuồng mức cần thiết : 12 MHz / 16 = 750 KHz. Để làm việc này ta dùng IC 74393 Để tạo tín hiệu kích đóng các Relay ta dùng các chân P1.2, P1.4, P1.5 và P1.6 + P1.2 : điều khiển Relay đóng / ngắt quạt + P1.4: điều khiển Relay đóng / ngắt đèn + P1.5 : điều khiển Relay đóng / ngắt nguồn điện khi xảy ra tình huống khẩn cấp. + P1.6: điều khiển chuông. Đảm bảo các tín hiệu kích này có thể kích được các Relay đóng hoàn toàn, ta cho các tín hiệu này đi qua IC đệm 74373.
Chân T0 dùng để điều khiển phần xuất nhập data của vi xử lý. + T0 = 0 : vi xử lý nhận dữ liệu từ PC + T0 = 1 : vi xử lý truyền dữ liệu về PC
B. Lưu đồ giải thuật và chương trình vi xử lí: Lưu đồ giải thuật phải thực hiện được các chức năng như sau: _ Đo nhiệt độ trong phòng và hiển thị nhiệt độ này lên Panel . _ Nhiệt độ cao hơn 800C thì báo động bằng chuông. _ Tự phát hiện ra khi nào thì trong phòng có người thì tự bật đèn và quạt lên. _ Tự phát hiện khi nào trong phòng không còn thì tắt các đèn và quạt đi. _ Khi có người đi vào phòng mà không qua cửa chính thì sẽ cho đó là trộm và báo động bằng chuông I. Lưu đồ giải thuật điều khiển : _ Giải thuật chương trình chính. _ Giải thuật chương trình đo nhiệt độ và hiển thị lên Panel. _ Giải thuật chương trình tự phát hiện người đi vào hay ra qua cử chính. _ Giải thuật chương trình điều khiển các thiết bị trong phòng. _ Giải thuật chương trình phát hiện người vào phòng không qua cửa chính. _ Giải thuật chương trình truyền nhận dữ liệu từ máy tính. 1. Giải thuật chương trình chính: Khi nút Reset được nhấn thì chương trình sẽ nhảy đến địa chỉ 0000h. Khởi động các thanh ghi điều khiển và các ô nhớ cần thiết. Trong chương trình chính gồm có: · Kích khởi ADC 0809 chuyển đổi. · Delay chờ ADC đổi xong. · Đọc dữ liệu từ ADC về, xử lí và hiển thị lên LED 7 đoạn. · Kiểm tra tiếp trạng thái các thiết bị. · Kiểm tra các nút nhấn có được nhấn hay không. Khi đã thực hiện xong chu trình trên thì vi xử lí sẽ quay trở lai kích khởi ADC đổi lần tiếp theo. · Kiểm tra xem nhiệt độ trong phòng đang nằm trong tầm nào để gọi các chương trình con phục vụ tương ứng: 500C£nhiệt độ £ 800C: gọi chương trình con CHUONG1. 800C £nhiệt độ £ 1000C: gọi chương trình con CHUONG2. Nhiệt độ ³ 1000C: gọi chương trình con CHUONG3. · Cấm ngắt truyền, chỉ cho phép vi xử lí nhận, chỉ được phép truyền khi PC yêu cầu
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 41
iyêut HSoểCĐnsáhọohcnp Có itI it t i i t ị i hMAgnhvớháé c ầu
pệrịNcáđđừổộ
Bật tắt các thiết bị Có trộm Chuông kêu Người vào ra Người vào Số người=1
Bật tắt các thiết bị Người ra Số người =0 2
1
3
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 42
1
2 Bật tắt các thiết bị
3
Giao tiếp
Đúng địa chỉ
Nhận lệnh
Truyền dữ liệu
Bật tắt các thiết bị
MAIN
Lưu đồ giải thuật chương trình chính
So Cất dữ liệu từsánh ADC 0809 vào thanh ghi A
Y
A 100 N
nguồn GọTắt i Chuong3 N Gọi Chuong2
50< A<80 N
Y Gọi Chuong1
Ret
Lưu đồ giải thuật chương trình con So Sánh.
Kiểm tra nút nhấn
Y P2.7=0 eg w :// w wo ( Word Converter - n U r ste i edr h )p tt w . rd-converter.net SVTH: Lê Hoàng Dũng Trang 44
P1.7=0 N Ret
Gọi chương trình con Request
Lưu đồ giải thuật chương trình con kiểm tra nút nhấn. Chương trình này dùng để cho phép người dùng có thể yêu cầu tắt mở các thiết bị theo ý muốn. Giải thích: P2.7 =0: nghĩa là nút yêu cầu tắt quạt được nhấn. Lúc này vi xử lí sẽ kiểm tra tín hiệu hồi tiếp từ quạt về- chân P1.3 của Port1. P1.3=1: quạt đang ở trạng thái đóng, yêu cầu vi xử lí thực hiện việc kích ngắt quạt. P1.3=0: quạt đang ở trạng thái ngắt, yêu cầu vi xử lí thực hiện việc kích ngắt quạt. P1.7=0 : nghĩa là nút yêu cầu tắt mở đèn được nhấn. Lúc này vi xử lí kiểm tra tín hiệu hồi tiếp về từ đèn- chân P3.5 của Port3. P3.5=1: đèn đang đóng, yêu cầu vi xử lí tắt đèn P3.5=0: đèn đang tắt, yêu cầu vi xử lí kích đóng đèn. Request
P2.7=0 P1.7=0 Lặp=50 Giảm lặp N Lặp=0 ne tSVTH Lê onve rte r. : Hoàng Dũng
Lặp =50
( W rd Conve e Un egistered ) Giảmrt lặr pTrang 45 r . PL3ặp5=0=0 giải thuật chương trình con Req .ues. t N N P3. 5=0Lưu đồ P1P32=07=00 YYY NN t t t t t t Se Se cMởờ yê đuèncầu TắRđeèRne
YY N
Tắt quạt
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 46
Chương trình phần mềm sẽ mặc định số người trong phòng khi reset chương trình là 1 người. Ta cũng dễ dàng thay đổi số người mặc định bằng cách thay đổi chương trình phần mềm. Chính vì mặc định là số người trong phòng lớn hơn 1, nên khi reset thì vi xử lí sẽ kích đóng các thiết bị ngay . Vi xử lí sẽ hoạt đông theo chương trình một cách hoàn hảo khi ta không tác động yêu cầu từ bên ngoài. Có thể giải thích rõ ràng hơn điều này như sau: Đầu tiên chương trình sẽ thực hiên việc đóng các thiết bị trong chu kỳ chạy đầu tiên. Giả sử người trong phòng muốn tắt đèn, thì người ta sẽ nhấn nút yêu cầu tắt đèn, khi đó vi xử lí sẽ ra lệnh kích ngắt đèn. Tín hiệu hồi tiếp về từ đèn là mức thấp, vi xử lí sẽ hiểu là đèn đang ở trạng thái ngắt. Đến chu trình quét tiếp theo, vi xử lí sẽ lại kiểm tra ô nhớ 30H- ô nhớ lưu số người trong phòng- và nhận thấy số ngươi trong phòng lớn hơn 1 nhưng đèn lại tắt, nó lại ra lệnh kích đóng đèn trở lại. Điều này sẽ dẫn đến việc ta không thể có thể thiệp đóng ngắt các thiết bị theo ý muốn. Để tránh được điều này, ta dùng một ô nhớ trong vùng RAM của 8951 làm cờ yêu cầu. Khi có nút yêu cầu đóng ngắt thiết bị nào được nhấn thì cờ yêu cầu này sẽ được set để đánh dấu cho vi xử lí biết là đến chu trình chạy kế tiếp nó sẽ không cần kích đóng các thiết bị trong phòng mặc dù thiết bị đang ngắt cũng như trong phòng đang có người. 1. Giải thuật chương trình phát hiện người vào ra phòng: Để thực hiện chức năng này ta dùng ngắt ngoài 1 của vi xử lý. Khi có người đi qua thì cảm biến quang sẽ tác động, gây ra một ngắt trong chương trình vi xử lý . Dựa vào cảm biến quang nào tác động trước thì ta sẽ biết người vào hay ra. Đây là chương trình con mô phỏng cảm biến quang dùng để đếm số người trong phòng và dựa theo số người hiện tại trong phòng là bao nhiêu người mà vi xử lí sẽ gọi chương trình con phục vụ tương ứng. Chương trình này dùng 3 cờ để nhận biết trạng thái cảm biến quang nào tác động trước, cảm biến nào tác sau. LED phát Đi vào LED phát Đi ra
LED thu Cảm biến quang 1 P1.0
LED thu Cảm biến quang 2 P1.1 Sơ khối
đồ trên cho thấy cách hoạt động của hai cảm biến quang đếm người. Tín hiệu ra
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 47
từ hai cảm biến quang này được đưa vào chân P1.0 và P1.1 của vi xử lí 89C51. khi một trong hai cảm biến quang này tác động thì nó sẽ gây ra một ngắt ngoài. Lí do để dùng ngắt ngoài là giúp cho vi xử lí hoạt động một cách chính xác khi có người vào hay ra. Ta đưa hai tín hiệu ở ngõ ra của hai cảm biến quang này đi qua một mạch logic AND. Chỉ cần một cảm biến tác động thì tín hiệu ra của mạch AND sẽ ở mức 0. Khi ngắt ngoài một1 xảy ra thì ta không thể biết được cảm biến quang nào tác động trước, cảm biến quang naào tác động sau. Thứ tự tác của hai cảm biến trên sẽ cho ta biết là người đó đi ra hay đi vào. Cảm biến quang 1 Cảm biến quang 2 Trạng thái vi xử lí hiểu Trước Sau Người vào Sau Trước Người ra Trước Không tác động Giữ nguyên số đếm Không tác động Trước Giữ nguyên số đếm Bảng mô tả hoạt động của hai cảm biến quang phát hiện người. Ta cần dùng đến 3 cờ để xác định thứ tự tác động của các cảm biến quang. Các cờ này được đặt tên như sau: Cờ 1: địa chỉ ô nhớ là 2BH Cờ 2: địa chỉ ô nhớ là 2CH Cờ 3: địa chỉ ô nhớ là 2DH Cả 3 cờ này dùng để đánh dấu chân nào của vi xử lí được quét trước, chân nào chưa được quét. Nguyên nhân, do ta cần kiểm tra một lúc cả hai chân của vi xử lí – P1.0 và P1.1 để phát hiện chân nào xuống mức 0 trước, mà vi xử lí thì chỉ có thể kiểm tra từ trên xuống. Khi vi xử lí nhảy đến chương trình phục vụ ngắt này nó sẽ kiểm tra chân P1.0 đầu tiên, nếu chân này ở mức 1 nghĩa là cảm biến quang thứ 2 tác động trước. Sau đó vi xử lí sẽ nhảy xuống kiêm tra chân P1.1 và lại nhạy lên kiểm tra chân P0.0 lần nữa. Các cờ này còn được dùng để tránh cho các cảm biến quang tác động sai do nhiễu. Giả sử xảy ra trường hợp chỉ có một trong hai cảm biến quang tác động thì chương trình sẽ dựa vào trạng thái các cờ này mà thoát khỏi chương trình phục vụ ngắt để quay về chương trình chính.
Đếm người N
P1.0=0 Y Lặp 50 Giảm lặp
Set cờ 2
N
Lặp=0
Y N P1.0=0 Y N Xóa cờ 2 Cờ 3=1 N Cờ 1=1 N P1.1=0 Y Lặp=50 1 N Y Thoát 2 Y Người ra
1
Giảm lặp ( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng N Trang 50 Lặp=0 ờờP12 YN Y N C3==111 N và . ocờ
Y
2
Ngườt i t
Y
Lưu đồ giải thuật chương trình con phục vụ ngắt ngoài 1 Do dùng mạch logic AND, nên khi ngắt ngoài xảy ra thì chắc chắn phải có người vào hay ra , nhưng khi kiểm tra cả 2 chân P1.0 và P1.1 thì phát hiện ra chỉ có một chân tác động: vi xử lí sẽ vẫn giữ nguyên số đếm và thoát khỏi chương trình phục vụ ngắt.
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 51
Chương trình con Người ra, Người vào: Chương trình con Người vào: sẽ tăng số người trong ô nhớ. Dựa vào trạng thái của cờ yêu cầu trong chương trình con Request mà chương trình sẽ thi hành hnư sau: Khi cờ yêu cầu được set: dù cho số người trong phòng có tăng lên nhưng cũng không gọi chương trình con đóng ngắt thiết bị. Nghĩa là sẽ là dành phần đóng ngắt thiết bị là do người dùng điều khiển theo ý muốn. Chỉ khi nào reset thì cờ yêu cầu mới được xóa, lúc đó nếu số người trong phòng lớn hơn 1 thì vi xử lí sẽ gọi chương trình con đóng các thiết bị. Khi cờ yêu cầu =0: lúc này nếu có người vào và số người trong phòng lớn hơn 0 thì vi xử lí sẽ gọi chương trình con đóng thiết bị ( chỉ gọi chương trình con đóng thiết bị khi thiết bị đang ngắt, thiết bị đang đóng thì không làm gì cả) Chương trình con Người ra : giảm số người trong phòng. Tùy theo số người trong phòng là bao nhiêu và trạng thái của cờ yêu cầu mà vi xử lí có gọi chương trình con Tắt thiết bị hay không. Số người trong phòng bé hơn 1 ( hay bằng 0 ): thì dù cho cờ yêu cầu có được set hay không thì cũng gọi chương trình con tắt thiết bị. Số người trong phòng lớn hơn hay bằng 1 nó sẽ vẫn để nguyên trạng thái thiết bị không phụ thuộc vào trạng thái của cờ yêu cầu. Lưu đồ giải thuật chi tiết như sau:
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 52
Người vào Xóa cờ 1, cờ 2, cờ 3 Tăng biến đếm
Biến đếm =1
Y P1 .3=1
N Y
N
Mở quạt
P3.5=1 Y
N Mở đèn
Cất biến đếm vào ô nhớ 30h Ret
Người ra Xóa cờ 1, cờ 2, cờ 3 ( Word Converter Un - eg r ste i ed r h )p ttww :// Hoàng Dũng
w.word-converter.net SVTH: Lê Trang
G ảm b ến đếm 53 PP31 53==00 YY Biến <1 Nvàe o ô nhớ 30h Y Cấ bđếm ến đếmR
i
i
NN
Lưu đồ giải thuật chương trình. con Người ra t i t
t
t
4 . Chương trình con phát hiện người vào không qua cửa chính: Cảm biến quang chống trộm Dùng ô nhớ 31h để lưu trữ trạng thái của cảm biến quang này. Nếu ở trạng thái bình thường thì tín hiệu ra của nó sẽ ở mức 1(+5v) , khi tín hiệu ra của nó là mức 0 thì chương trình con này sẽ được gọi. Nhiệm vụ của chương trình con này là tạo tín hiệu cảnh báo bằng chuông, đặt ô nhớ 31h =1. Dữ liệu trong ô nhớ này được gởi về máy tính, tùy theo giá trị trong ô nhớ này mà máy tính sẽ phát tín hiệu cảnh báo lên màn hình. 31h=0: bình thường, không có gì xảy ra cho cảm biến quang này. 31h=1: có vật che chắn ngang vùng được bảo vệ, cần có biện pháp ngăn chặn. Chuông 3: gọi chương trình con cho phép chuông kêu 3 hồi, mỗi hồi kéo dài trong 3 giây và giữa 2 lần liên tiếp cách nhau 1 giây.
Ngắt ngoài 0
31h 1
Chuong 3 31h 0
Ret Giá trị trong ô nhớ 31h sẽ được đặt trở về 0 sau khi đã được gởi về máy tính. 5. Các chương trình con Chuong 1, Chuong 2,Chuong 3: Chuong 1 được gọi khi nhiệt độ đo được nằm trong tầm từ 500C đến 800C. Chuong 2 được gọi khi nhiệt độ đo được nằm trong tầm từ 800C đến 1000C.
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 54
Lưu đồ giải thuật chương trình con ngắt ngoài 0
Chuong 3 được gọi khi nhiệt độ đo được lớn hơn 1000C. Chuong 1
Set bit P1.6
R0
5
DELAY1 S
Giảm R0 N
R0=0 Y
Xóa P1.6
Ret Lưu đồ giải thuật chương trình con Chuong 1
Chuong 2 Chuong 1 Delay 1s Chuong 1 Ret Lưu đồ giải thuật chương trình con Chuong 2 Chuong 3
R0
3
Chuong 1
Delay 1s Giảm R0
N
R0=0 Y
Khi đang thực hiện gọi các chương Lưu đồ giải thuật chương trình con Chuong 3 trình con Chuong1 ( chuông 1) Chuong 2( chuông 2), Chuong 3 ( chuông 3) thì chương trình không thể thực
Ret
hiện các phần tiếp theo của chương trình. Cũng như không thể truyền dữ liệu về máy tính vì vi xử lí còn đang thực hiện chương trình gọi chuông. Để tránh tình trạng này ta dùng các ngắt Timer để thực hiện việc delay để vi xử lí vừa thực hiện chương trình con delay1s vừa thực hiện đồng thời các chương trình khác. 6. Chương trình con ngắt Serial Port: Như đã trình bày ở phần trên, khi ta có nhiều Slave cùng dùng chung một đường truyền thì để tránh xung đột trên đường truyền, ta dùng phương pháp định địa chỉ riêng cho từng Slave. Nếu máy tính truyền dữ liệu xuống thì tất cả các vi xử lý cùng nhận, sau đó chúng sẽ so sánh byte đầu tiên nhận được với địa chỉ của riêng chúng đã được định nghĩa sẳn, nếu đúng địa chỉ thì nó sẽ tiếp tục phần giao tiếp. Xung đột trên đường truyền sẽ xảy ra khi có 2 Slave cùng truyền cùng lúc hay khi máy tính đang truyền dữ liệu xuống mà có một vi xử lý đang phát dữ liệu ngược lên, điều này sẽ gây ra ảnh hưởng đến phần cứng cũng như ự an toàn trong hoạt động của mạng truyền thông. Dùng mang 5 RS_485 thì ta phải dùng các IC 75176 có nhiệm vụ chuyển đổi từ mức áp TTl sang RS_485 và ngược lại. Như vậy ta cần có một IC 75176 trên một card chuyển đổi gắn vào cổng Com của máy tính. Đặc tính tổng quát của IC này là có 3 trạng thái, tùy thuộc vào trạng thái của chân điều khiển (DE, RE) mà 75176 sẽ nằm ở trạng thái nào. Như thế vấn đề trong điều khiển mạng RS-485 là việc điều khiển trạng thái các chân điều khiển của các IC 75176 như thế nào để được đông bộ trong quá trìng truyền và nhận. Vi xử lý chỉ được phép truyền khi nào nó nhận được lệnh yêu cầu gởi dữ liệu từ máy tính. Nghĩa là các kit vi xử lý sẽ được đặt ở trạng thái thu. Khi cần truyền dữ liệu thì chân điều khiển thu phát sẽ được đưa lên mức cao. Sau khi kết thúc quá trình truyền dữ liệu thì chận điều khiển thu phát lại được đặt về mức thấp. Trong mạch phần cứng thiết kế em đã dùng chân P3.4 để điều khiển trạng thái thu hay phát IC 75176 trên card gắn vào cổng Com của máy tính thì ta dùng chân RTS để điều khiển. Phần giao tiếp giữa máy tính với vi xử lý gồm có 2 nội dung: _ Truyền dữ liệu từ các kit vi xử lý về máy tính. _ Điều khiển các thiết bị theo yêu cầu của lệnh nhận được từ máy tính. Dữ liệu truyền tứ máy tính xuống vi xử lý sẽ gồm 2 byte: byte đầu tiên xác định địa chỉ của kit vi xử lý cần giao tiếp, byte thứ 2 xác định nội dung cần giao tiếp.
Byte đầu tiên A B
Kit giao tiếp Kit 1 (phòng P01) Kit 2 (phòng P02)
Byte thứ 2 Nội dung giao tiếp E Truyền dữ liệu về máy tính C Điều khiển trạng thái đèn D Điều khiển trạng thái quạt Dữ liệu truyền từ vi xử lý lên máy tính gồm 4 byte: _ Byte đầu tiên xác định địa chỉ của kit đang truyền dữ liệu. _ Byte thứ 2 chứa nhiệt độ đo được. _ Byte thứ 3 chứa số người hiện tại trong phòng. _ Byte thứ 4 cho biết trang thái của đèn, quạt vaà tình trạng an ninh trong phòng. Tùy theo trạng thái của đèn, quạt cũng như tình trạng an ninh trong phòng ta sẽ có một byte tương ứng với trạng thái đó. Byte thứ 4 Đèn Quạt An ninh O Tắt Tắt An toàn P Tắt Tắt Không an toàn Q Tắt Bật An toàn R Tắt Bật Không an toàn S Bật Tắt An toàn T Bật Tắt Không an toàn U Bật Bật An toàn X Bật Bật Không an toàn Bảng mô tả trạng thái của các thiết bị thông qua nội dung trong byte giao tiếp. Ta thấy rằng chỉ khi nào vi xử lý nhận được ký tự “E” thì nó mới đặt chân P3.4 lên mức 1 cho phép truyền, sau khi truyền xong 4 byte thì chân P3.4 được đặt về mức 0 chờ nhận yêu cầu từ máy tính. Tốc độ Baud em thiết kế cho mạng RS-485 trong đề tài là 9600. Mặc dù vi xử lý hoàn toàn có thể hồ trợ khi ta nậng tốc độ Baud lên đến 19200, nhưng trong mạng truyền thông để quản lý tòa nhà như em đanh nghiên cứu thi công thì cũng không cần đạt tốc độ cao trong truyền dữ liệu, nên em chọn tốc độ Baud là 9600. Với tốc độ baud như trên thì để truyền 1 byte vi xử lý cần một khoảng thời gian xấp xỉ 1ms. Nếu ta dùng 2 hàm chuẩn của vi xử lý trong truyền, nhận dữ liệu thì ta sẽ mất đi 1ms không làm gì cả. Hàm nhân dữ liệu: Receive: Wait: jnb ri,wait Clr ri Mov a,sbuf ret Hàm truyền dữ liệu: Transmit:
Wait: jnb ti,wait Clr ti Mov sbf,a ret Để tận dụng tốt thời gian cho chương trình vi xử lý, ta đưa phần truyền và nhận dữ liệu vào trong phần ngắt Serial Port. Chương trình con phục vụ ngắt Serial Port này sẽ được gọi khi xảy ra một ngắt trong truyền dữ liệu nối tiếp. Ngắt truyền thông nối tiếp xảy ra khi một trong các cờ TI, RI được set lên mức 1. Cờ TI: ngắt phát, cờ RI: ngắt thu. Các cờ này sẽ được xóa bằng phần mềm. Cờ TI được set lên 1 khi bộ đệm truyền trống, có nghĩa là ta có thể tiếp tục việc truyền byte dữ liệu tiếp theo. Cờ RI được set khi có 1 kí tự đang đợi được đọc trong bộ đệm nhận. Ta dùng các ô nhớ trung gian sau để phục vụ cho việc truyền dữ liệu: _ 3fh: chứa địa chỉ kit truyền dữ liệu. _ 40h: chứa nhiệt đô đo. _ 41h: chứa số người trong phòng. _ 42h: trang thái các thiết bị trong phòng. Dùng các cờ sau như sau( các ô nhớ trong vùng RAM nội) _ 09h: báo đã truyền xong 4 byte để đặt chân P3.4 về mức thấp. _ 0ah: báo byte đầu tiên chính là địa chỉ của kit.
Start Cất giữ nội dung các thanh ghi và các cờ Đúng địa chỉ Y
Truyền dữ liệu N Y
N
delay
Đưa các ô nhớ ra Buffer
Buffer lên PC
Điều khiển đèn N
Y N
Y Tắt đèn
Đèn đang bật
Bật đèn
Điều khiển quạt N
Y
Quạt đang bật
N Y
Tắt quạt
Bật quạt
Reti Lưu đồ giải thuật chương trình truyền nhân dữ liệu
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 60
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 61
Ngắt Serial Port Y A sbuf RI=1 N Cờ 2=1 Cờ 3=1 Y N Y Xóa N Y Set Xóa cờ N N
Y
N
set P3.4 Sbuf @R0 Tăng R0 R0=43h Y Set cờ 2 R0 #3fh NY
A=#’A’
Xóa cờ
A=#’E’
Reti A=#’C’ Y N
Truyền dữ liệu về máy tính
A=#’D’
Điều khiển đèn
Điều khiển quat5
Xóa cờ
Reti Chương trình giao tiếp với máy tính
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 62
C. Chương trình vi xử lý: MCS-51 MACRO ASSEMBLER 01/12/:2 PAGE 1 DOS 5.0 (038-N) MCS-51 MACRO ASSEMBLER, V2.2 OBJECT MODULE PLACED IN LVTN.OBJ ASSEMBLER INVOKED BY: D:\MCS51\ASM51.EXE LVTN.ASM CO1 EQU 2B CO0 EQU 2C H CO2 EQU 09H CO3 EQU 0A COYEUCAUH EQU ORG 0000H LJMP MAIN ORG 0003H LJMP EXT0ISR ORG 000BH LJMP T0ISR ORG 0013H LJMP EXT1ISR ORG MAI 0023H LJMP SPISR ORG N: 0030H LVTN
2AH
MOV SCON,#01010010B SETB IE.4 ; Cho phép ngắt Serial Port MOV IE,#82H ; Cho phép ngắt timer 0 SETB IE.0 ; Cho phép ngắt ngoài 1 SETB IE.2 ; Cho phép ngắt ngoài 0 MOV TMOD,#21H ; Timer 0 mode 1, timer 1 mode 2 SETB IT0 ; Ngắt ngoài 0 tác động cạnh xuống SETB IT1 ; Ngắt ngoài 1 tác động cạnh xuống MOV 50H,#0 ; Các ô nhớ trung gian dùng hiển thị LED MOV 51H,#0 MOV 52H,#0 MOV 53H,#0 MOV A,87H ; Lấy giá trị từ thanh ghi PCON SETB ACC.7 ; Set bit 7 của thanh ghi PCON MOV 87H,A MOV TH1,#-6 MOV TL1,#-6 ; 9600 BAUD SETB TR1 ; Cho phép timer 1 MOV R0,#3FH
MOV 3FH,#' A' ;Ô nhớ dùng để lưu địa chỉ của vi xử lý M O V R 1 , # 5 0 H M O V R 3 , # 5 MOV R2,#1 00
; cờ được dùng để nhận biết người vào ; cờ được dùng để nhận biết người ra ; cờ được dùng để nhận biết đã truyền xong 4 byte ; cờ được dùng để xác định vi xử lý đã nhận đúng địa ; cho phép nhận tín hiệu điều khiển từ máy tính ;tắt quạt ; tắt đèn ;bật nguồn ; cấm chuông kêu ; cờ cho phép AD đổi ; cờ gọi chuong1 ; cờ gọi chuong2 ; cờ gọi chuong3 ; cờ cho biết đã delay 500ms ; ép ngắt timer 0 ; ngừng timer ; xóa cờ ngắt ; nếu cờ 08h được set thì cho phép đổi AD ;hiển thị LED ;kiểm tra có yêu cầu bật , tắt thiết bị ;tạo delay 500ms
T0ISR : CLR TR0 CLR TF0 JB 08H,START LCAL OU L T LCAL REQUEST L DJNZ R2,EXIT MOV R2,#100 DJNZ R3,EXIT MOV R3,#5 SETB 08H CPL 07H SJMP EXIT WAIT_RETURN: SJMP EXIT START: LCALL READAD LCALL REQUEST LCALL CHECKFLAG ô nhớ 42h EXIT: LCALL COMPARE SKIP5 chuẩn CLR 08H 500ms sau : SJMP EXIT
; cho phép AD đổi ;kiểm tra có yêu cầu bật , tắt thiết bị ; tùy theo trạng thái của các thiết bị mà đưa vào ; giá trị tương ứng ; so sánh nhiệt độ đo với nhiệt độ ; cấm AD đổi đến
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 64
J B 0 6 H , S K I P 5 ; k i ể m t r a c ó g o i c h u o n g 1 k h ô n g
? JB 05H,SKIP6 ; kiểm tra có goi chuong2 không? JB 04H,SKIP7 ; kiểm tra có goi chuong3 không? SJMP RETURN
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 65
SKIP6 CLR P1.6 : LCALL CHUONG2 SJMP RETURN
CLR P1.6 ; cho phép chuông LCAL CHUONG3 ; gọi chuong3 L SJMP RETURN ; gọi chuong 2
SKIP7 CLR P1.6 : LCALL CHUONG1 SJMP RETURN RETURN: MOV TH0,#HIGH(-1000) MOV TL0,#LOW(-1000) SETB TR0 RET I READAD: CLR P3.6 SETB P3.6 CLR P3.6 PUSH 00H MOV R0,#60 DJNZ R0,$ POP 00H PUSH ACC MOV A,P0 MOV 40H,P0 MOV B,#5 LED 1 số thập MUL AB MOV R6,A MOV R7,B LCALL BINTOBCD BCD POP ACC PUSH ACC MOV A,R7 ANL A,#0FH ORL A,#0E0H MOV 52H,A MOV A,R7 SWAP A ANL A,#0FH ORL A,#0F0H MOV
; gọi chuong1 ; timer 0 tràn sau 1ms ; cho phép timer 0 chạy
; tạo xung Start cho AD đổi
; tạo delay 120us
;đọc giá trị đổi từ AD ; cất giá trị nhiệt độ vào 40h ; nhân giá trị nhiệt độ với 5 để hiển thị lên ;phân
; ******************************************************************* *********** ; CHƯƠNG TRÌNH CON CHUYỂN TỪ SỐ NHỊ PHÂN SANG SỐ BCD ; Giá trị nhi phân cần đổi cất trong R7:R6 ; Giá trị BCD sau khi đổi xong cất trong 2 thanh ghi R7:R6 ; R7 chứa số hàng trăm và số hàng ngàn ; R6 chứa số hàng chục và số hàng đơn vị ; *************************************************** ************************** BINTOBCD: PUSH ACC PUSH B MOV B,#10 LCALL DIV_16_8 PUSH B MOV B,#10 LCALL DIV_16_8 PUSH B MOV B,#10 MOV A,R6 DIV AB PUSH B SWAP A POP B ORL A,B MOV R7,A POP B MOV A,B SWAP A POP B ORL A,B MOV R6,A POP B POP ACC RET DIV_16_8: PUSH 02H PUSH ACC
ORL A,#0D0H MOV 51H,A POP ACC RET
; chọn LED hàng đơn vị
MOV R2,#16 CLR A DIVIDE: XCH A,R6 CLR C RLC A XCH A,R6 XCH A,R7 RLC A XCH A,R7 RLC A
CJNE A,B,NOTEQUAL SJMP AGREATEREQB NOTEQUAL: JC BELOW AGREATEREQB: SUBB A,B XCH A,R6 ORL A,#1 XCH A,R6 BELOW: DJNZ R2,DIVIDE XCH A,B POP ACC POP 02H RET ; ********************************************************************* ********** ; CHƯƠNG TRÌNH CON HIỂN THỊ GIÁ TRỊ TRONG CÁC Ô NHỚ TRUNG GIAN RA ; LED ; **************************************************** *************************** OUT: PUSH ACC MOV A,@R1 MOV P2,A POP ACC INC R1 CJNE R1,#54H,EXITOUT MOV R1,#50H EXITOUT : RE T ; ********************************************************************* ********** ; CHƯƠNG TRÌNH CON SO SÁNH NHIỆT ĐỘ ĐO VỚI NHIỆT ĐỘ CHUẨN ; Tạo tín hiệu chuông báo động khi nhiệt độ lớn hơn mức cho phép ; ****************************************************
************************** COMPARE: PUSH ACC MOV A,40H CJNE A,#100,$ +3 JC LESSTHAN100 ; nhiệt độ lớn hơn 1000C thì cho chuông kêu 3 lần CLR P1.5 SETB 06H ; set cờ để gọi chuông CLR P1.6 ; kích chuông kêu SJMP EXITCOMPARE LESSTHAN100: MOV A,40H CJNE A,#80,$+3 ; nếu lớn hơn 800C thì gọi chuông 2 JC LESSTHAN80 CLR P1.6 ; kích chuông kêu SETB 05H ; set cờ để gọi chuông SJMP EXITCOMPARE LESSTHAN80:
MOV A,40H CJNE A,#50,$ +3 JC EXITCOMPARE CLR P1.6 SETB 04H SJMP EXITCOMPARE EXITCOMPARE: POP ACC RET ; ; ********************************************************************* ********** ; CHƯƠNG TRÌNH CON CHUONG3 ; Chuông kêu 3 lần, mỗi lần 5s và khoảng cách giữa hai lần là 1s ; ********************************************************************* ********* ; CHUONG 3: JNB 07H,EXITCHUONG3 PUSH ACC MOV A,30H INC A CPL P1.6 MOV 30H,A CJNE A,#5,$ +3 MOV 30H,A POP ACC JC EXITCHUONG3 CLR 06H MOV 30H,#0 SETB P1.6 EXITCHUONG3: RE T ; ; ; ; ;
********************************************************************* ********** ; CHƯƠNG TRÌNH CON CHUONG2 ; Gọi khi nhiệt độ lớn hơn 800C ; ********************************************************************* ********* ; CHUONG 2: JNB 07H,EXITCHUONG2 INC 31H CPL P1.6 PUSH ACC MOV A,31H MOV 31H,A CJNE A,#2,$ +3 POP ACC JC EXITCHUONG2 CLR 05H
SETB P1.6 MOV 31H,#0 EXITCHUON G2: RET ; ******************************************************************* *********** ; CHƯƠNG TRÌNH CON CHUONG1 ; ******************************************************************* ********** ; CHUONG 1: JNB 07H,EXITCHUONG1 SETB P1.6 CLR 04H EXITCHUONG1 : RET ; ******************************************************************* ************ ; CHƯƠNG TRÌNH CON PHỤC VỤ NGẮT SERIAL PORT ; Dùng cờ 2 để xác định là đã truyền xong 4 byte dữ liệu ; Cờ 3 dùng để xác định đã nhận đúng địa chỉ ; **************************************************** ************************** SPISR: PUSH ACC JB RI,SPISR1 JB CO2,SPISR2 LCALL TRANSMIT SPISR2: CLR CO2 CLR P3.4 LJMP EXITSPISR SPISR1: CLR RI MOV A,SBUF JB CO3,SPISR4 CJNE A,#'A',SPISR5 ; đúng địa chỉ thì set cờ 3 SETB CO3 LJMP EXITSPISR SPISR5: CLR CO3 LJMP EXITSPISR SPISR4: CJNE A,#'E',SPISR6 ; có yêu cầu truyền dữ liệu
CPL P1.2 CLR CO3 LJMP EXITSPISR EXITSPISR: POP ACC RETI ; ******************************************************************* ********* ; ; CHƯƠNG TRÌNH CON TRUYỀN DỮ LIỆU TỪ VI XỬ LÝ VỀ MÁY TÍNH ; ; ******************************************************************* ****** ; TRANSMI T: SETB P3.4 CLR TI MOV A,@R0 MOV SBUF,A INC R0 CJNE A,#43H,EXITTRANSMIT MOV R0,#3FH SETB CO2 LJMP EXITTRANSMIT EXITTRANSMIT: RET ; ******************************************************************* ************ ; CHƯƠNG TRÌNH CON ĐẾM NGƯỜI VÀO RA ; chương trình này dùng để giúp cho vi xử lý nhận biết khi ; nào trong phòng có người cũng như không có người để tự bật tắt đèn, quạt ; ******************************************************************* *********** ; EXT1IS R: PUSH 07H JB CO0,LOVE1
ACALL VAO CLR CO0 CLR CO1 EXITE1: POP 07H RETI ; ******************************************************************* ******** ; CHƯƠNG TRÌNH CON NGƯỜI VÀO ; tăng nội dung trong biến đếm lên 1 đơn vị ; nếu ngườitrong phòng là 1 thì sẽ bật các thiết bị ; ************************************************** ************************* VAO: PUSH ACC MOV A,41H INC A MOV 41H,A CJNE A,#2,$ +3 JC PLEASE1 SJMP PLEASE2 PLEASE1: CLR P1.2 CLR P1.4 PLEASE2: POP ACC RET ; ******************************************************************* ******** ; CHƯƠNG TRÌNH CON NGƯỜI RA ; giảm biến đếm đi 1 đơn vị ; nếu người trong phòng là 0 thì tắt các thiết bị ; ************************************************** ************************* RA: PUSH ACC MOV A,41H DEC A MOV 41H,A CJNE A,#1,$ +3 JC PLEASE3 SJMP PLEASE4 PLEASE3:
SETB P1.2 SETB P1.4 PLEASE4: POP ACC RET ; ******************************************************************* ********* ; CHƯƠNG TRÌNH CON MÔ PHỎNG CẢM BIẾN QUANG CHỐNG TRỘM ; Gọi chuông khi phát hiện có trộm ; ************************************************** ************************** EXT0ISR:
SETB 06H CLR P1.6 RETI ; ******************************************************************* ******* ; Chương trình này dùng để đưa trạng thái hiện tại của các thiết bị vào ô nhớ trung gian ; để truyền về máy tính ; Tùy thuộc vào trạng thái hiện tại của các thiết bị mà ta sẽ có một giá trị lưu trong ; ô nhớ này ; ************************************************* ************************* CHECKFLAG: JB P1.3,HERE1 JB P3.5,HERE2 JNB P3.2,HERE3 MOV 42H,#'O' LJMP EXITCHECKFLAG HERE3: MOV 42H,#'P' LJMP EXITCHECKFLAG HERE2: JNB P3.2,HERE4 MOV 42H,#'Q' LJMP EXITCHECKFLAG HERE4: MOV 42H,#'R' LJMP EXITCHECKFLAG HERE1: JB P3.5,HERE5 JNB P3.2,HERE6 MOV 42H,#'S' LJMP EXITCHECKFLAG HERE6: MOV 42H,#'T' LJMP EXITCHECKFLAG HERE5: JNB P3.2,HERE7 MOV 42H,#'U' LJMP EXITCHECKFLAG HERE7: MOV 42H,#'X' LJMP EXITCHECKFLAG EXITCHECKFLAG: RET
; ******************************************************************* *********** ; CHƯƠNG TRÌNH CON REQUEST ; Chương trình này dùng để phát hiện có yêu cầu bật tắt các thiết bị từ người dùng hay ; không? ; nếu P1.7=0: yêu cầu bật/ tắt đèn ; nếu P2.7=0: yêu cầu bật/ tắt quạt ; ; ******************************************************************* *********
D. Giới thiệu các IC sử dụng trong đề tài I. IC 74LS247: IC 74LS247 là vi mạch lái chuyển đổi mã BCD ra mã LED 7 đoạn (Seven Segment Display) .IC 74LS247 chuyển đổi dữ liệu BCD ra mã LED ra dạng mã số thập phân, nó làm hiện số trên LED 7 đoạn với cực Anod chung. Khi chân LT (Lamp Test) ở mức thấp, lúc đó tất cả ngõ ra là mức cao, tức đèn tắt.
Sơ đồ chân linh
U 1 7
1 2 6 4 5 3
kiện :
1 2 4 8 B I/R B O R B I T A B C D E FL G
1 1 1 1 9 1 1
3 2 1 0 5 4
74247
Bảng chân lý : Số đếm và 0 1 2 3 4 5 6 7 8 9 10 11 12 1 14 15 BI R BI L T LT H H H H H H H H H H H H X H L Inpu t RBI D C B H L L L LL L X L H X L L H X L H L LL H X L H X L H H X H L L LH L X L H X H L H X H H L LH H X L H X H H H X X X X XL L L L L X X X X X BI / H H H H H H H H H H H H L L H a O N OF F O OF F O N OF O N O N OF OF F O N OF OF F OF F O N b O N O N O O N OF F OF O N O N OF O N OF F OF OF F OF F O N Outpu t c d e O O O N N N O OF OF N F F OF O OF O O OF N F F O O O N N N O O O O OF O N N N O OF OF N F F OF O OF O OF OF F F F OF O OF F N F OF O O OF OF OF F F F OF OF OF F F F O O O N N N f O N OF F OF O N O N O O N O N OF O N O N O OF F OF F O N g OF F OF F O O N O N O O N O N O O N O N O OF F OF F O N
III. IC 74LS154: 74LS154 là IC giãi mã 4 sang 16, có ngõ ra tích cực mức thấp. Sơ đồ chân linh kiện và bảng sự thật :
Inpu G1 G2 D C B L L L L LL LL L LL L HL LL L H L LL L L H LL HL H
Output 0 1 2 3 4 5 6
L L L L L L L L L H H
L L L L L L L L H L H
H L L 8 H L L 9 H L H 10 L L H H 11 H H L 12 L H L H 13 H H H 14 L H H H 15 H X X X non e X X X non e X X X non e (1) HX : High – mức cao L : Low – mức thấp (0) None : cấm
IV.
IC 74573 : Là IC chốt có ngõ ra 3 trạng thái. Sơ đồ chân và bảng sự thật : 2
3 4 5 6 7 8 9 D D D D D D D D 1 2 3 4 5 6 7 8 Q Q Q Q Q Q Q Q 1 2 3 4 5 6 7 8 1 1 1 1 1 1 1 8 7 6 5 4 3 2
19 OC L L L H C H H L X Input (D)H L X X Output (Q) H L Q1 Z
1 1 1
C O C
S N 74A S 5 V. IC 74138 : 73 Là IC giải mã 3 sang 8. Có ngõ ra tích cực mức thấp Sơ đồ chân và bảng sự thật :
1 2 3
A B C
Y Y Y Y
ENAB G1 LE X
L H H H H H H H H
G2 H X L L L L L L L L
INP UT
S
6 1 4 SE G L G 2 EA B CT G A2 B C 5X X
X 7 L L H H L L H H L H L H L H L L
4XL S 1 3 8 H
L H H H H H H H
1 0 9 7 YY 07 Y 1 H H
H H L H H H H H H
Y 4 Y 5 Y 6
0 1 2 3
1 1 1 1 1
5 4 3 2 1
OUTPUTS
Y 2 H H H H L H H H H H Y3 H H H H H L H H H H Y4 H H H H H H L H H H Y5 H H H H H H H L H H Y6 H H H H H H H H L H Y7 H H H H H H H H H L
VII. IC 75176: Là IC chuyển đổi tín hiệu điện áp so với mass thành tín hiệu điện áp vi sai . Sơ đồ chân linh kiện :
2 3 8 D I R E D E +V C C
4 1
R O A B
6 7
75176 VIII. MAX 232: Là vi mạch chuyển đổi tín hiệu theo chuẩn RS232 sang chuẩn TTL và ngược lại. Trong thực tế có rất nhiều vi mạch chuyển đổi từ RS_232 sang TTL và ngược lại. Thế nhưng MAX232 có ưư điểm hơn các vi mạch khác và rất phổ biến hiện nay, ưu điểm của MAX 232 là chỉ sử dụng nguồn đơn cực +5V. Bên trong MAX 232 có một bộ nhân đôi điện áp để tạo ra điện áp +10V và một bộ tạo ra điện áp âm. Như vậy nó tạo ra bộ nguồn +/-10V,đáp ứng được mức điện áp cho RS_232. Sơ đồ chân linh kiện :
1 3 1 1 1 0
8
1 ( Word Converter - Unre3gistCe+red ) http://www.word-converter.net SVTH: Lê Hoàng Dũng
R 1 IN R 2I N T1 I N T2I N
1 2 R 1 O U T9 R 2O U T T 1 O U T 71 4 T2O U T
4 5 2 6
C1 C 2+ C 2V+ VM A X 23 2
Trang 76
Giải thích tín hiệu : R2IN: ngõ vào RS_232 ®R2OUT: ngõ ra TTL T2OUT: ngõ ra RS_232¬T2IN: ngõ vào TTL R1IN: ngõ vàoRS_232®R1OUT: ngõ ra TTL T1OUT : ngõ ra RS_232®T1 IN :ngõ vào TTL C1+, C1-: tụ C1= 10mF bên ngoài C2+, C2-: tụ C2= 10mF bên ngoài +V: nguồn +10V -V: nguồn -10V VCC,GND: nguồn cung cấp đơn cực +5V
PHẦN III GIAO TIẾP MÁY TÍNH VỚI VI XỬ LÝ Chương I
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 77
TỔNG QUAN VỀ MẠNG MÁY TÍNH VÀ VẤN ĐỀ VỀ GIAO TIẾP NỐI TIẾP A. Tổng quan về mạng máy tính Mạng máy tính là một tập hợp các máy tính được nối với nhau bởi các đường truyền vật lý theo một kiến trúc nào đó. Và ngày nay mạng máy tính đã trở thành một lĩnh vực nghiên cứu phát triển và ứng dụng cốt lõi của công nghệ thông tin. I. Các yếu tố của mạng máy tính : Các yếu tố của một mạng máy tính bao gồm : đường truyền vật lý và kiến trúc của một mạng máy tính. 1. Đường truyền vật lý: Đường truyền vật lý dùng để chuyển các tín hiệu điện tử giữa các máy tính. Các tín hiệu điện tử đó biểu thị các giá trị dữ liệu dưới dạng các xung nhị phân (ONOFF). Tất cả các tín hiệu được truyền giữa các máy tính đều thuộc một dạng sóng điện từ (EM) nào đó, trải từ các tần số radio tới các sóng cực ngắn vi baa) và tia hồng ngoại. Tùy theo tần số của sóng điện từ có thể dùng các đường truyền vật lý khác nhau để truyền các tín hiệu. Các tần số radio có thể truyền bằng cáp điện (dây đôi xoắn hoặc đồng trục ) hoặc bằng phương tiện quãng bá (radio broadcasting). Sóng cực ngắn vi baa) thường được dùng để truyền giữa các trạm mặt đất và các vệ tinh. Tia hồng ngoại là lý tưởng đối với nhiều loại truyền thông mạng. Nó có thể được truyền giữa hai điểm hoặc quãng bá từ một điểm đến nhiều máy thu. Tia hồng ngoại và các tần số cao hơn của ánh sáng có thể được truyền qua các loại cáp sợi quang. Khi xem xét lựa chọn đường truyền vật lý ta cần chú ý tới các đặc trưng cơ bản của chúng là dải thông, độ suy hao và độ nhiễu điện từ. 2. Kiến trúc mạng: Kiến trúc mạng máy tính (network architecture) thể hiện qua cách nối các máy tính với nhau ra sao và tập hợp các quy tắc, qui ước mà tất cả các thực thể tham gia truyền thông trên mạng phải tuân theo để đảm bảo cho mạng hoạt động tốt. Cách nối các máy tính được gọi là hình trạng (topology gọi tắt là topo), còn tập hợp các quy tắc, quy ước truyền thông thì được gọi là giao thức (protocol) của mạng. *Topo mạng: Có hai kiểu nối mạng chủ yếu là: điểm – điểm ( point to point) và quãng bá broadcaster hay point to multi point). Theo kiểu point to point, các đường truyền nối thành từng cặp nút với nhau và mỗi nút đều có trách nhiệm lưu trữ tạm thời sau đó chuyển tiếp dữ liệu đi cho tới đích.
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 78
Theo kiểu quãng bá, tất cả các nút phân chia chung một đường truyền vật lý. Dữ liệu được gởi đi từ một nút nào đó có thể được tiếp nhận bởi tất cả các nút còn lại. Nơi nhận sẽ kiểm tra xem địa chỉ đích gởi đến có phải cho mình hay không để có thể tiếp tục thực hiện việc giao tiếp hay bỏ qua. *Giao thức mạng: Việc truyền tín hiệu trên mạng cũng cần phải tuân theo những quy tắc, qui ước về nhiều mặt: từ khuôn dạng (cú pháp, ngữ nghĩa) của dữ liệu tới các thủ tục gởi, nhận dữ liệu, kiểm soát hiệu quả và chất lượng truyền tin cũng như xử lý các lỗi sự cố. Tập hợp tất cả những quy tắc, qui ước đó được gọi là giao thức của mạng. II. Phân loại mạng máy tính : Có nhiều cách phân loại mạng máy tính khác nhau tùy thuộc vào yếu tố chính làm chỉ tiêu phân loại. Nếu lấy khoảng cách địa lý làm yếu tố chính để phân loại thì ta có các loại sau: 1. Mạng cục bộ ( Local Area Networks – LAN): Là mạng được cài đặt trong một phạm vi tương đối nhỏ (ví dụ trong một tòa nhà, trường học …) với khoảng cách lớn nhất giữa các máy tính nút mạng chỉ trong vòng vài chục kilo mét trở lại. Một mạng cục bộ bao gồm cả phần cứng lẫn phần mềm. Phần mềm của nó bao gồm các trình điều khiển thiết bị và hệ điều hành mạng . 2. Mạng đô thị( Metropolitan Area Networks – WAN): Là mạng được cài đặt trong phạm vi một đô thị hoặc một trung tâm kinh tế- xã hội có bán kính khoảng 100 kilo mét trở lại. 3. Mạng diện rộng ( Wide Area Networks – WAN ): Có phạm vi có thể vượt qua biên giới một quốc gia và thậm chí cả một châu lục. 4. Mạng toàn cầu ( Global Area Networks – GAN ):Phạm vi sử dụng của mạng trải rộng khắp các châu lục của Trái Đất. III. Đường truyền và các thiết bị sử dụng trong mạng máy tính: 1. Đường truyền: a. Cáp truyền: Cáp đồng trục: Có cấu tạo gồm hai dây dẫn, một dây dẫn trung tâm ( thường bằng đồng cứng ) và một dây dẫn tạo thành một ống bao quanh dây dẫn trung tâm, dây dẫn này có thể là dây bện hay bằng lá kim loại. Giữa hai dây dẫn có một lớp cách ly và bên ngoài cùng là một lớp vỏ plastic để bảo vệ cáp. Cap xoắn đôi: Cáp này gồm hai đường dây dẫn đồng trục được xoắn vào nhau. Mục đích của việc xoắn này là nhằm giảm nhiễu điện từ gây ra bởi môi trường xung quanh và gây ra bởi bản thân chúng với nhau. Có hai loại cáp xoắn đôi được dùng hiện nay là cáp có bọc kim STP (Shield Twisted-Pair) và cáp không bọc kim UTP ( Unshield Twisted-Pair). STP
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang 79
có khả năng chống nhiễu tốt nhờ có vỏ bọc kim, thích hợp cho tốc độ truyền dưới 500Mb/s. Còn UTP có khả năng chống nhiễu thấp hơn, tốc độ có thể đạt tới là 100Mb/s. Cáp sợi quang: Cáp sợi quang không truyền dẫn các tín hiệu điện mà chỉ truyền dẫn các tín hiệu quang. Cáp sợi quang bao gồm một dây dẫn trung tâm ( là một hoặc một bó sợi thủy tinh hay plastic có thể truyền dẫn tín hiệu quang ) được bọc một lớp áo có tác dụng phản xạ các tín hiệu trở lại để giảm sự mất mát tín hiệu. Bên ngoài cùng là lớp vỏ plastic để bảo vệ cáp. Tín hiệu truyền trên cáp sợi quang có thể đạt tốc độ 2Gb/s và cho phép khoảng cách truyền khá xa do độ suy hao tín hiệu trên cáp rất thấp. Ngoài ra do tín hiệu truyền là dạng quang nên nó không bị ảnh hưởng bởi nhiễu điện từ và các hiệu ứng điện khác. Hơn nữa, tín hiệu truyền trên cáp sợi quang có độ bảo mật rất cao. Tuy nhiên cáp sợi quang có nhược điểm là khó lắp đặt và giá thành còn tương đối cao. b. Phương tiện vô tuyến: Radio: Radio chiếm dải tần từ 10KHz đến 1GHz, trong đó có các băng tần quen thuộc như: Sóng ngắn. VHF ( Very High Frequency ) : Dùng cho truyền hình và FM radio. UHF ( Ultra High Frequency ) : Dùng cho truyền hình. Các phương thức truyền theo tần số radio là : Công suất thấp tần số đơn, công suất cao tần số đơn và trải phổ. Viba (Microwave ): Có hai dạng truyền thông vi ba là mặt đất và vệ tinh. Các hệ thống vi ba mặt đất thường hoạt động ở băng tần 4-6GHz và 21-23GHz, tốc độ truyền dữ liệu từ 110Mb/s Các hệ thống tia hồng ngoại (Iinfrared System ): Các mạng điểm – điểm hoạt động bằng cách chuyển các tín hiệu hồng ngoại từ một thiết bị tới một thiết bị kế tiếp, dải tần hoạt động là 100GHz đến 1000GHz với tốc độ khoảng 100Kb/s đến 16b/s. Các mạng quãng bá hồng ngoại cũng có dải tần như trên nhưng có tốc độ truyền thực tế chỉ đạt dưới 1Mb/s. 2. Thiết bị mạng: a. Các bộ giao tiếp mạng: Các bộ giao tiếp mạng có thể được thiết kế ngay trong Mainboard của máy tính hoặc ở dạng các tấm giao tiếp mạng ( Network Interface Card- NIC ) hoặc là các bộ thích nghi đường truyền. Một NIC có thể được cài đặt vào một khe cắm (slot ) của máy tính . Đây là loại thiết bị thông dụng nhất để nối máy tính với mạng. Trong NIC có bộ thu
phát với một số kiểu đầu nối. Bộ thu phát chuyển đổi các tín hiệu bên trong máy tính thành các tín hiệu mà mạng đòi hỏi và cũng biến đổi ngược lại các tín hiệu truyền trên mạng thành các tín hiệu mà máy tính có thể làm việc được. Bộ thích nghi đường truyền là thiết bị có chức năng làm thích nghi một kiểu đầu nối nào đó trên máy tính với một kiểu đầu nối khác mà mạng đòi hỏi. Có các bộ thích nghi đường truyền như là: transceiver, media filter, parallel port adapter, SCSI port adapter. Hub ( bộ tập trung ): Hub là bộ chia hay còn gọi là bộ tập trung ( concentrators) dùng để đấu mạng. Có các loại Hub như sau: Passive Hub, Active Hub, và Intelligent Hub. Repeater ( bộ chuyển tiếp ): Repeater có chức năng tiếp nhận và chuyển tiếp các tín hiệu dữ liệu thường được dùng nối hai đoạn cáp mạng Ethernet ( để mở rộng mạng). Một số repeater chỉ có chức năng đơn giản là khuếch đại tín hiệu. Tuy nhiên lúc đó mọi tiếng ồn trên mạng cũng bị khuếch đại theo. Ngoài ra nếu tín hiệu gốc đã bị nhiễu thì repeater này cũng khuếch đại luôn nhiễu. Các loại repeater tiên tiến hơn có thể mở rộng phạm vi của đường truyền mạng bằng hai cách: khuếch đại và tái sinh tín hiệu. Chúng định danh dữ liệu trong tín hiệu nhận và dùng dữ liệu đó để tái sinh tín hiệu gốc. Bridge ( Cầu ): Bridge là một thiết bị mềm dẻo hơn rất nhiều so với repeater. Một repeater chuyển đi tất cả các tín hiệu mà nó nhận được. Còn Bridge thì có chọn lọc và chỉ chuyển đi các tín hiệu có đích ở phần mạng phía bên kia. Multiplexor (bộ dồn kênh ): Multiplexor là thiết bị có chức năng tổ hợp một số tín hiệu để chúng có thể được truyền với nhau và sau đó khi nhận lại được tách ra trở thành tín hiệu gốc. Modem: Modem ( Modulation/ demodulation ) là thiết bị có chức năng chuyển đổi tín hiệu số thành tín hiệu analog và ngược lại để kết nối các máy tính qua đường điện thoại. Modem cho phép trao đổi thư điện tử, truyền tệp và trao đổi dữ liệu theo yêu cầu. Tuy nhiên modem không phải là thiết bị liên mạng nên nó không thể nối kết các mạng ở xa với nhau. Để khắc phục điều này ta có thể kết hợp với router để nối kết các mạng qua mạng điện thoại chuyển mạch công cộng. Router : Router ( bộ chọn đường ) là thiết bị có chức năng tương tự như bridge, tuy nhiên nó đa năng hơn bridge vì có thể thực hiện các giải thuật chọn đường đi tối ưu theo một chỉ tiêu nào đó. B. Giao tiếp nối tiếp: Những thiết bị thực hiện việc giao tiếp bao gồm hai loại là : DCE ( Data Communications Equipment ) và DTE ( Data Terminal Equipment ).
DTE ( còn gọi là thiết bị đầu cuối dữ liệu ) là một thuật ngữ chung để chỉ các máy của người sử dụng cuối, chúng có thể là máy tính hoặc một trạm cuối (terminal ). Như vậy tất cả các ứng dụng của người sử dụng điều nằm ở DTE. Mục đích của mạng máy tính chính là để nối các DTE lại cho phép chúng phân chia tài nguyên, trao đổi dữ liệu và lưu trữ thông tin dùng chung. DCE ( còn gọi là thiết bị cuối kênh dữ liệu ) là thuật ngữ chung dùng để chỉ các thiết bị nối các DTE với các đường ( mạng) truyền thông. Nó có thể là một Modem, Transducer, Multiplex…DCE có thể được cài đặt ngay bên trong DTE hoặc đứng riêng như một thiết bị độc lập. Chức năng chính của DCE là chuyển đổi tín hiệu biểu diễn dữ liệu của người sử dụng thành dạng tín hiệu chấp nhận được bởi đường truyền và ngược lại. Việc truyền dữ liệu, chủ yếu được thực hiện thông qua mạng điện thoại, phải tuân theo những nguyên tắc nhất định, và thường là dùng các chuẩn truyền được quốc tế hóa. Có nhiều chuẩn truyền thông khác nhau, trong đó có các chuẩn thuộc họ RS( ngày nay đã đổi thành họ EIA- ) của EIA ( Electronics Industries Association ) được sử dụng rất phổ biến là: RS-232C, RS-422A, RS423, RS-485. Chúng ta sẽ lần lượt khảo sát từng chuẩn trên.
I. Đặc điểm của các chuẩn truyền thông RS-232C, RS-422A, RS-485: Thông số Chiều dài cáp Length (max) Baud rate (Tốc độ Baud) Mode RS-232C 15m (50 ft) 20Kbs/15m RS-422 1.2km (4000ft ) 10M bs/12m 1Mbs/120m 100Kbs/1.2k m Balanced Differential 1 10 +2V->+5V -2V-> -5V 1.8V 2 Simplex Half-duplex Full-duplex 150 mA RS-423 1.2km (4000ft) 100Kbs/9m 10Kbs/90m 1Kbs/1.2km Balanced Differential 1 10 +3.6V->+6V -3.6V ->-6V 3.4V 2 Simplex Half-duplex Full-duplex 150mA RS-485 1.2km (4000ft) 10Mbs/12m 1Mbs/120m 100Kbs/1.2km Balanced Differential 32 32 +1.5V->+5V -1.5V ->-5V 1.3V 2 Simplex Half-duplex Full-duplex 150mA
Unbalanced
Driver No. 1 Receiver 1 Logic 0 +3V->+25V Logic 1 -3V ->-25V Community 2V Cable/signal 1 Methode Simplex Half-duplex Phương Full-duplex thức 500mA Short circuit 1. Chuẩn RS-232C :
Là chuẩn của EIA nhằm định nghĩa giao diện vật lý giữa DTE và DCE (ví dụ như giữa một máy tính và một modem ). Chuẩn này sử dụng đầu nối 25 chân, tuy nhiên chỉ có một số ít chân là thực sự cần thiết cho việc liên kết. Về phương diện điện , chuẩn này quy định các mức logic 0 và 1 tương ứng với các điện thế nhỏ hơn -3V và lớn hơn +3V. Tốc độ đường truyền không được vượt quá 20Kbs và khoảng cách nhỏ hơn 15m. Chuẩn RS-232C có thể chấp nhận phương thức truyền song công ( full-duplex ). Một trong những yêu cầu quan trọng của RS-232C là thời gian chuyển từ mức logic này sang mức logic khác không vượt quá 4% thời gian tồn tại của một bit. Giả sử với tốc độ truyền 19200 baud thì thời gian chuyển mức logic phải nhỏ hơn 0.04/19200 = 2.1ms. Điều này làm giới hạn chiều dài đường truyền. Với tốc độ 19200baud ta có thể truyền xa nhất là 50ft (15.24m ). Một trong những vấn đề quan trọng cần chú ý là khi sử dụng RS-232C là mạch thu phát không cân bằng ( đơn cực ), tức là tín hiệu vào và ra được so với đất. 2. Chuẩn RS-422A: Một cải tiến quan trọng của chuẩn RS-232C là chuẩn RS-422A. Chuẩn này sử dụng việc truyền dữ liệu sai lệch differential data ) trên những đường truyền cân bằng. Một dữ liệu sai lệch cần hai dây, một cho dữ liệu không đảo (non-inverted) và một đường cho dữ liệu đảo (inverted). Dữ liệu được truyền trên đường dây cân bằng, thường là cặp dây xoắn với một trở ở đầu cuối. Một IC lái (driver) sẽ biến đổi các mức logic thông thường thành một cặp tín hiệu sai lệch để truyền. Bên nhận sẽ có một mạch chuyển đổi tín hiệu sai lệch thành các mức logic tương ứng. Các IC lái RS-422A hầu hết hoạt động với nguồn +5V như các chip logic khác. Với chuẩn mới này, tốc độ cũng như khoảng cách truyền được cải thiện rất nhiều. 3. Chuẩn RS-485 : Giao tiếp EIA RS-485 là một cải tiến của chuẩn RS-422A. Đặc tính điện của nó giống như chuẩn RS-422A. RS-485 là chuẩn truyền vi sai, sử dụng hai dây cân bằng. Với RS-485 tốc độ truyền có thể đạt đến 10Mbs và chiều dài cáp có thể lên đến 1.2km. Điện áp vi sai ngõ ra từ +1.5V-> +5V nếu là logic mức 0 và mức logic 1 sẽ là từ -1.5V-> -5V. Một đặc điểm quan trọng của RS485 là có thể cung cấp đến 32 drivers và receivers trên cùng một đường truyền. Điều này cho phép tạo thành một mạng cục bộ. Để có khả năng như vậy, ngõ ra driver RS-485 phải là ngõ ra 3 trạng thái. Và do đó một slave sẽ ở trạng thái tổng trở cao khi nó không được chọn để giao tiếp cùng với master. Chỉ có một trạm được chọn làm master, các trạm còn lại đều là slave. Master được quyền truyền bất cứ lúc nào, nó sẽ chỉ định một slave bất kì giao tiếp với nó. Slave chỉ có thể truyền sau khi nhận được lệnh của master. Mọi slave có một địa chỉ riêng trên đường truyền và sẽ không được phép truyền nếu không có yêu cầu từ master.
II. Các phương thức truyền thông: Có 3 phương pháp truyền được dùng trong mục đích truyền thông tin: Đơn công, bán song công, và song công. Ta sẽ lần lượt khảo sát các phương pháp truyền trên. 1. Đơn công: Đường truyền đơn công có khả năng truyền dữ liệu chỉ theo một hướng. Nguyên nhân không phải do tính chất của đường dây đơn giản chỉ vì một đầu cuối chỉ có một máy phát và đầu cuối kia cũng chỉ có một máy thu. Cấu hình này ít được sử dụng trong các máy tính vì không có cách nào để máy thu phát tín hiệu nhận biết tới máy phát cho biết thông điệp đã nhận đúng. Phát thanh và truyền hình là một trong những thí dụ về đơn công. 2. Bán song công(Half-duplex Communication): Đường truyền bán song công có thể phát và nhận dữ liệu theo cả hai hướng không đồng thời. Trong suốt một cuộc truyền, một modem là máy phát và modem còn lại sẽ là máy thu. Ví dụ như một thiết bị A là máy phát gởi dữ liệu đến thiết bị B là máy thu, sau đó A và B đổi vai trò cho nhau, B là máy phát gởi tín hiệu báo dữ liệu nhận được có lỗi hay không đến máy thu A. Nếu không có lỗi thì A và B sẽ lại đổi vai trò cho nhau và A tiếp tục gởi dữ liệu đến máy thu B. Nếu máy thu B báo dữ liệu có lỗi thì máy phát A sẽ gởi lại dữ liệu cũ cho đến khi B báo là dữ liệu không có lỗi. Nhược điểm của phương pháp này là thời gian cần để chuyển đường truyền bán song công từ hướng này sang hướng khác có thể dài gấp nhiều lần thời gian truyền một kí tự. Sự chuyển động của xe trên đường ray là một thí dụ về phương pháp này. 3. Song công ( Full-duplex Communication): Ngược lại so với truyền bán song công, đường truyền song công có khả năng phát và nhận dữ liệu đồng thời theo cả hai hướng. Một cách khái quát, đường truyền song công tương đương với 2 đường truyền đơn công, một đường cho mỗi hướng. Vì hai đường truyền có thể tiến hành song song, một đường cho mỗi hướng, nên truyền song công có thể phát nhiều thông tin hơn truyền bán song công với cùng tốc độ truyền dữ liệu. Truyền song công không mất thời gian để thay đổi hướng truyền. III. Truyền thông tuần tự: Hầu hết các máy tính lưu trữ dữ liệu và thao tác dữ liệu theo cách song song. Nghĩa là khi gởi một byte từ bộ nhận này tới bộ nhận khác của máy tính, nó không truyền từng bit một mà một lúc một byte trên những cáp sợi song song nhau. Số các bit truyền đi cùng một lúc thay đổi tùy thuộc vào từng máy tính nhưng thông thường là 8 hoặc bội của 8. Tuy nhiên việc truyền dữ liệu từ máy tính này đến máy tính hay một thiết bị khác thì xảy ra theo kiểu tuần tự, nghĩa là dữ liệu được gởi đi từng bit một. Một bộ giao tiếp tuần tự sẽ đảm nhận nhiệm vụ chuyển đổi dữ liệu từ
song song sang nối tiếp trước khi chúng gởi đi hoặc đổi từ nối tiếp sang song song khi chúng nhận về. Có hai hình thức truyền thông tuần tự: truyền thông đồng bộ và không đồng bộ. Truyền thông bất đồng bộ ( Asynchronous communication): Khoảng thời gian giữa hai kí tự truyền đi không cố định, mặc dù khoảng thời gian giữa hai bit liên tiếp trong một kí tự là không thay đổi nhưng khoảng thời gian giữa hai kí tự liên tiếp không phải là hằng số. Sự biến thiên tốc độ này làm nảy sinh vấn đề là phải làm sao máy thu phân biệt được giữa bit 0 và không có dữ liệu. Để giải quyết vấn đề trên , người ta phát trực tiếp một bit start ngay trước một kí tự và một hoặc hai stop bit ngay sau mỗi kí tự được truyền đi. Để kiểm tra lỗi đường truyền, người ta sử dụng bit chẵn lẻ( parity bit), tức kiểm tra tổng số bit trong 1 byte dữ liệu được truyền. Phương thức này thường được sử dụng trong các máy tính PC vì tính đơn giản của nó. Hạn chế của phương pháp này là tốc độ truyền thấp do phải truyền thêm một số bit start, bit stop và bit parity. Truyền thông đồng bộ ( Synchronous Communications): Phương thức truyền này không dùng các bit start, stop để đóng khung mỗi kí tự mà chèn các kí tự đặc biệt như SYN ( Synchronization), EOT (End Of Transmission) hoặc một cờ giữa các dữ liệu của người sử dụng để báo hiệu cho bên nhận biết rằng có dữ liệu đang đến hay đã đến. Truyền đồng bộ thường được tiến hành ở tốc độ dưới 4800Bps,9600Bps hoặc thậm chí còn cao hơn. Trong phương pháp này, một khi đã đồng bộ, các modem vẫn tiếp tục gởi các kí tự để duy trì đồng bộ, ngay cả lúc không phát dữ liệu. Một kí tự “idle” được gởi đi khi không có dữ liệu phát. Trong phương pháp truyền đồng bộ không giống như phương pháp truyền bất đồng bộ, khoảng thời gian giữa hai kí tự luôn bằng nhau. Truyền thông đồng bộ đòi hỏi các xung clock trong máy phát và thu phải duy trì đồng bộ những khoảng thời gian dài. Thời gian truyền có thể tiếp tục lâu mà không có sự tái đồng bộ của máy thu với pha của máy phát tùy thuộc vào sự ổn định của xung clock.
Chương II GIAO TIẾP MÁY TÍNH VỚI VI XỬ LÝ Điều khiển thu phát dữ liệu qua cổng Com: Máy tính và ngoại vi muốn liên kết được với nhau cần phải được kết nối với nhau theo một chuẩn nhất định. Có nhiều kiểu kết nối ngoại vi với máy tính, trong đó các cách thường dùng là gắn vào slot trên Mainboard, qua cổng máy in và thông qua cổng nối tiếp( cổng Com). Mỗi kiểu đều có nhiều ưu và khuyết điểm khác nhau, tùy theo yêu cầu mà ta có thể chọn những phương cách khác nhau. Cổng nối tiếp được sử dụng cho việc truyền tín hiệu theo dạng nối tiếp. Cổng nối tiếp truyền mức logic 1 ở tầm điện áp từ –3V đến –25V và mức logic 0 là từ +3V đến +25V. Trong khi đó, với cổng song song, mức logic 0 là 0V logic 1 là +5V. Vì vậy cổng nối tiếp có thể có mức chênh lệch điện áp tối đa là 50V so với 5V của cổng song song và do đó vấn đề điện áp rơi trên đường dây ở đường truyền nối tiếp không nghiêm trọng hơn so với đường truyền song song. Do đó truyền tín hiệu theo kiểu nối tiếp không bị ảnh hưởng nhiễu nhiều như kiểu cổng song song. Giao tiếp nối tiếp chỉ sử dụng 3 đường dây cho TXD, RXD và GND và do đó yêu cầu cho thiết bị giao tiếp với nó có ít chân hơn so với 19 hay 25 dây trong việc giao tiếp song song và yêu cầu ít nhất là 9 chân cho giao tiếp nối tiếp,điều này làm phức tạp thêm công nghệ chế tạo và giá thành sản xuất đối với các thiết bị giao tiếp song song. I. Giới thiệu cổng nối tiếp RS-232C: Cổng giao RS-232C là giao diện phổ biến rộng rãi nhất. Giống như cổng máy in, cổng nối tiếp RS-232C được sử dụng mức cách thuận tiện cho mục đích đo lường và điều khiển. Việc truyền dữ liệu qua cổng RS-232C được tiến hành theo cách nối tiếp, nghĩa là các bit dữ liệu được gởi đi nối tiếp nhau trên cùng mức đường truyền dẫn. Cổng nối tiếp RS-232C không phải là một hệ thống bus, nó cho phép dễ dàng tạo ra liên kết dưới hình thức điểm-điểm giữa hai máy tính cần trao đổi thông tin với nhau. Một thành viên thứ 3 không thể tham gia vào cuộc trao đổi này. Mức logic 0 sẽ nằm giữa +3V-> +25v. Mức logic 1 từ -3V -> -25V.
Khoảng từ –3V -> +3V là trạng thái mặc định. Điện áp hở mạch phải nhỏ hơn 25V. Dòng ngắn mạch không vượt quá 500mA. Có hai loại Jack cắm nối tiếp RS-232C là loại 9 chân và 25 chân. Chúng khác với cổng máy in ở chỗ cổng máy in là loại ổ cắm còn đây là Jack nhiều chân. Các Jack cắm RS-232C có tổng cộng 8 đường dẫn chưa kể đường nối đất. Việc truyền dữ liệu xảy ra ở trên hai đường dây TXD và RXD. Máy tính nhận dữ liệu từ các thiết bị khác thông qua đường TXD và nó dùng đường RXD để truyền dữ liệu đến các thiết bị kia. 9 chân 1 2 3 4 5 6 7 8 9 Ký hiệu TD RD CTS DCD DSR TDR RTS RI 25 chân 8 3 2 20 7 6 4 5 22 Chức năng DCD- data Carrier Detect (In) RXD- Receive data (In) TXD-Transmit Data (Out) DTR – Data Terminal Ready(Out) GND-Ground(Mass) DSR-Data Set Ready (In) RTS- Request to Send(Out) CTS- Clear To Send (In) RI- Ring Indicator(In) Chức năng Đường truyền dữ liệu Đường nhân dữ liệu Báo modem đã sẵn sàng cho việc trao đổi dữ liệu DCD sẽ tích cực khi modem nhận được dữ liệu.
Tên Transmit data Receive Data Clear To Send Data Carrier detect Data Set Ready Data Terminal Ready Request To Send Ring Indicator
Báo cho UART là modem đã sẵn sàng cho việc thiết lập đường truyền. Báo cho modem biết là UART đã sẵn sàng cho việc kết nối. Thông báo cho modem biết là UART đã sẵn sàng cho việc truyền nhận dữ liệu. Lên mức tích cực khi modem nhận được tín hiệu. Bảng chức năng các chân trong RS-232C . Address 3F8 2F8 IRQ 4 3 Name COM 3 COM 4 Address 3E8 2E8 IRQ 4 3
Name COM1 COM 2
Bảng địa chỉ các cổng. Việc truyền dữ liệu giữa máy tính và ngoại vi được điều khiển bởi các bộ điều khiển thu phát đồng bộ hay bất đồng bộ. II. Chip thu phát bất đồng bộ-Vi mạch UART (Universal Asynchronous Receiver) 8250A/16450: 1. Tổng quan: Vi mạch 8250A của Intel là một UART được dùng rất rộng rãi.UART 8250A có các chức năng sau: _ Biến đổi dữ liệu song song từ CPU thành dạng nối tiếp để truyền đi đồng thời thu dòng dữ liệu nối tiếp, đổi chúng thành dữ liệu dạng song song và gởi chúng đến CPU. _ Thêm các bit start, stop và parity vào từng kí tự trước khi phát đi và tách các bit này ra khỏi kí tự nhận được. _ Bảo đảm các bit dữ liệu được truyền đi với tốc độ được lập trình trước, kiểm tra để phát hiện lỗi. _ Set tín hiệu bắt tay phần cứng và cho biết trạng thái của tín hiệu. 2. Các thanh ghi UART: _ Thanh ghi điều khiển đường truyền (Line Control Register – LCR): Dùng đặt các thông số truyền. _ Thanh ghi điều khiển Modem(Modem Control Register- MCR): Điều khiển tín hiệu bắt tay từ UART. _ Thanh ghi cho phép ngắt( Interrput Enable RegisterIER): Thanh ghi này cho phép/cấm các nguyên nhân gây ngắt khác nhau tương ứng với các bit trong thanh ghi. Các bit của thanh ghi này ở mức 1 là cho phép, mức 0 là cấm ngắt. -_ Thanh ghi trạng thái( Status Register –SR):Thông báo cho CPU biết trạng thái hoạt động của UART: _ Thanh ghi trạng thái đường truyền (Line Status Register-LSR): Chứa thông tin về truy xuất dữ liệu. _ Thanh ghi trạng thái modem( Modem Status Register-MSR): Chứa thông tin liên quan về trạng thái của những đường truyền bắt tay. _ Thanh ghi định danh ngắt( Interrupt Identification Register-IIR): Thanh ghi nhận dạng nguồn ngắt là một thanh ghi chỉ đọc ( read only). Trạng thái các bit trong thanh ghi này sẽ thay đổi khi có sự thay đổi trạng thái của các thanh ghi khác trong UART. CPU sẽ đọc bit IR0 để xem có yêu cầu ngắt hay không và kiểm tra nguồn ngắt từ các bit IR1-IR0. Các vi mạch UARTS: 8250: Là vi mạch UART đầu tiên. 8250A là phiên bản cải tiến hơn của 8250 với tốc độ được cải tiến nhiều. 8250A: Tốc độ nhanh hơn so với 8250, có cùng chức năng như 16450.
16450: Cải tiến của 8250, hoạt động tốt ở tốc độ 38.4bps, hiện này vẫn còn được sử dụng rộng rãi. 16550: Là thế hệ đầu tiên của họ UART có buffer. Có hai loại buffer. Tuy nhiên 16550 không được sử dụng nhiều và bị thay thế bởi 16550A. 16550A: Là vi mạch UART thông dụng nhất sử dụng cho mục đích giao tiếp với tốc độ cao như 14.4k và 28.8k modem . 16650/16750: Thuộc UART thế hệ mới chứa 32/64 byte FIFO, hỗ trợ Power management. III .Truyền nhận dữ liệu qua cổng nối tiếp: Việc truyền nhận dữ liệu qua cổng nối tiếp được thực hiện bởi UART. Nguyên tắc chip UART hoạt động cho việc truyền và nhận một kí tự như sau: b. Để truyền một kí tự, đầu tiên kí tự đó sẽ được đưa vào thanh ghi đợi truyền ( Transmit Holding Register), sau đó được đưa vào thanh ghi dịch của bộ phát ( Transmit Shift Register). Sau khi kí tự trước đã được truyền xong, từng bit của kí tự được truyền sẽ được dịch vào kênh dữ liệu. c. Khi nhận một kí tự, đầu tiên các bit của nó lần lượt được nạp vào thanh ghi dữ liệu của bộ thu( Receive Shift Register ), sau đó chúng được đưa vào thanh ghi dữ liệu của bộ thu ( Receive Data Register ) sau khi đã loại bỏ các bit start, stop và parity. X Thu phát dữ liệu : Có hai phương pháp để thu phát dữ liệu qua UART. Phương pháp thứ nhất là phương pháp hỏi vòng để chờ dữ liệu được phát xong hoặc nhận xong. Phương pháp thứ hai là phương pháp tạo ra một trình điều khiển ngắt. Phương pháp hỏi vòng chậm hơn nhiều so với phương pháp kia. Tốc độ cao nhất có thể đạt của phương pháp hỏi vòng là 34.8Kbps trong khi phương pháp tạo ngắt có thể đạt được tốc độ 115,2Kbps. Ơ đây ta chọn phương pháp hỏi vòng để điều khiển việc thu phát dữ liệu. X Để phát một kí tự: Với phương pháp hỏi vòng UART, khi gởi một kí tự ta phải kiểm tra xem thanh ghi đợi truyền có rỗng không bằng cách xem bit 6 của LCR có bằng 1 hay không . X Để thu một kí tự: để biết khi nào kí tự thu vào hay chưa ta kiểm tra bit 0 của thanh ghi LCR. Nếu nó bằng 1 thì đã có 1 kí tự được nhận vào.
Chương III : CHƯƠNG TRÌNH TRUYỀN THÔNG BẰNG NGÔN NGỮ VISUAL BASIC 6.0
I. Tổng quan về Visual Basic : Visual Basic là ngôn ngữ lập trình trên môi trường Windows ra đời sớm nhất, và đã thực sự tạo nên một cuộc cách mạng trong công nghệ phần mềm .cho nên khi phát hành Visual Basic 1.0 vào năm 1991, ông Bill Gates, chủ tịch hãng Microsoft đã gọi Visual Basic là một sản phẩm “đáng nể”, còn các nhân vật nổi tiếng khác trong giới công nghệ phần mềm cũng không tiếc lời khen ngợi công cụ lập trình trực quan này. Nếu đã từng cảm thấy thực sự thích thú khi chuyển từ việc sử dụng hệ điều hành MS-DOS sang Windows thì ta cũng dễ hiểu những lời khen ngợi này. Trước đây, khi làm việc trong môi trường DOS, không ít người đã cảm thấy thực sự khó khăn với việc phải nhớ những câu lệnh để nhập vào từ dấu nhắc DOS. Windows đã giải quyết khó khăn này cho người dùng bằng cách sử dụng một giao diện đồ họa với những nút lệnh, hộp thoại chuẩn, các menu để chọn lựa…Tuy nhiên trước khi Visual Basic ra đời thì để tạo được một ứng dụng trong Windows, các lập trình viên sử dụng C phải tốn rất nhiều công sức dành cho việc tạo giao diện cho chương trình. Chỉ có việc tạo một nút lệnh không thôi đã cần phải dùng đến hàng trăm dòng ma. Với VisualBasic, công việc tạo giao diện đã trở nên dễ dàng hơn bao giờ hết. Chỉ với một vài thao tác click – drag đơn giản, ta đã có thể bổ sung vào các cửa sổ còn trống các lệnh đơn, các hộp văn bản, các nút lệnh, các nút tùy chọn, các nhãn, các hộp kiểm…Sau khi tạo giao diện thì công việc của ta chỉ là viết mã cho các đối tượng này (gọi là các điều khiển : Control). Như vậy, có thể nói, với Visual Basic công việc tạo giao diện đồ họa cho ứng dụng đã được Visual Basic đảm nhận. Visual Basic cho phép ứng dụng tạo ra liên kết với các ứng dụng Windows khác rất dễ dàng, cho phép dễ dàng tạo ra các ứng dụng thiên về quản lý dữ liệu và mạng. Visual Basic cho phép người sử dụng giao tiếp với thư viện liên kết động DLL. Điều này giúp giảm kích cỡ chương trình, tập tin thực thi và đặc biệt là làm cho chương trình có khả năng được nâng cấp dễ dàng hơn. Visual Basic còn cung cấp một số phương pháp bẫy lỗi trong ứng dụng. Đây là một công cụ rất mạnh của Visual Basic.
II. Truyền thông nối tiếp dùng visual basic:
Do sự phát triển ngày càng tăng của các ứng dụng truyền thông qua cổng nối tiếp ,từ phiên bản 4.0 của Visual Basic ,điều khiển truyền thông đã được hoàn chỉnh để sử dụng cho việc lập trình ghép nối máy tính qua cổng nối tiếp .Trong phần này ta sẽ tìm hiểu về điều khiển này . 1. Điều khiển truyền thông: Bình thường khi chạy phần mềm Visual Basic ta chỉ thấy có một số thành phần quen thuộc trên hộp công cụ (toolbox) .Nhưng Visual Basic cho phép nhiều thành phần có thể được bổ sung thêm vào .Điều khiển truyền thông Mscomm của Visual Basic là một trong số các đối tượng có thể được bổ sung để tham gia vào một số ứng dụng cần việc chuyển nhận dữ liệu qua cổng nối tiếp . Trong Visual Basic 5.0 và 6.0 ta có thể bổ sung thành phần Mscomm đề cập ở trên như sau : Chọn Project => Components (Ctrl – T) ,cửa sổ sau sẽ xuất hiện. Điều khiển truyền thông cung cấp hai khả năng để trao đổi thông tin : Điều khiển sự kiện : Truyền thông điều khiển sự kiện là phương pháp tốt nhất được sử dụng trong quá trình điều khiển việc trao đổi thông tin nối tiếp khi nó giải phóng máy tính để làm các công việc khác .Trong nhiều tình huống, ta cần được thông báo về sự thay đổi. Thí dụ như ta cần biết khi có ký tự gửi đến hoặc sự thay đổi xảy ra trên đường DCD (Data Carrier Detect ) hoặc đường RTS (Request To Send). Để làm điều đó ta sẽ sử dụng sự kiện truyền thông OnComm để bẫy và điều khiển các sự kiện. Điều khiển truyền thông còn phát hiện và điều khiển các lỗi truyền thông. Hỏi Vòng (Polling): Ta cũng có thể hỏi vòng các sự kiện và lỗi bằng cách kiểm tra giá trị của đặc tính ComEvent sau mỗi chu kỳ của chương trình để xác định xem liệu một sự kiện hoặc một lỗi đã xuất hiện. Chẳng hạn, chương trình có thể tạo vòng lặp để chờ một ký tự cần được nhận. Cứ mỗi lần như vậy, ký tự được đọc từ bộ đệm nhận. Thông thường phương pháp này được sử dụng khi chương trình có thời gian để tiến hành hỏi vòng bộ nhận thông tin, hay nói cách khác là trong các ứng dụng không lớn. Visual Basic sử dụng các bộ điều khiển cửa sổ chuẩn cho các cổng truyền tin nối tiếp (như serialui.dll và serial.vxd ). Điều khiển truyền thông được bổ sung cho ứng dụng của một cổng nối tiếp, nói khác đi mỗi điều khiển truyền thông mà ta dùng chỉ có thể điều khiển một cổng nối tiếp. Nếu cần truy nhập nhiều cổng trong ứng dụng thì ta phải dùng nhiều điều khiển truyền thông. Địa chỉ cổng và địa chỉ ngắt có thể thay đổi nhờ Control Panel trong Windows .Các tham số (như tốc độ truyền theo bit ,chẵn lẻ ,…) đều có thể được thay đổi bằng cách lựa chọn: Control Panel => System => Device Manager => Port (COM và LPT) =>Port Settings. Việc thiết lập các cổng truyền thông (IRQ và địa chỉ cổng) có thể thay đổi bằng cách lựa chọn Control Panel => System => Device Manager => Port (COM và LPT) => Resources.
2 .Thuộc tính (property): Thành phần Comm được bổ sung vào biểu mẫu ( Form ) bất cứ lúc nào cần đến việc truyền thông nối tiếp. Theo mặc định, cổng thứ nhất tạo ra đối tượng có tên MSComm1, đối tượng ứng với cổng thứ hai được gọi là MSComm2,…Có thể nhìn thấy các đặc tính chính của đối tượng là: CommPort, DTREnable, EOFEnable, HandShaking ,InBufferSize, Index, InputLen, Inputmode, Left, Name, NullDiscard, OutBufferSize, ParityReplace, Rthreshold, RTSEnable, Settings, SThreshold, Tag, Top. Ta thấy điều khiển truyền thông có nhiều thuộc tính, nhưng để có thể làm việc với điều khiển truyền thông, trước hết ta cần hiểu kỹ các thuộc tính chính được liệt kê trong bảng sau . Các thuộc tính CommPort Input(nhập vào) Output(xuất ra) PortOpen Settings Sự mô tả Đặt và trả lại số cổng truyền thông Trả lại và loại bỏ các ký tự khỏi bộ đệm nhận Viết một xâu ký tự tới vào bộ đệm truyền Mở/Đóng một cổng (tùy thuộc vào thông số) và đặt thông số cho cổng . Đặt và trả lại các tham số truyền thông như :tốc độ truyền theo bit ,chẵn lẻ ,số các bit dữ liệu ,…
Thí dụ sau đây chỉ ra cách truyền thông qua cổng nối tiếp có thể được tiến hành như thế nào bằng cách sử dụng một Modem. Private sub Form_load() ‘biến để lưu giữ chuỗi nhập vào Dim Instring as String ‘sử dụng COM1 Mscomm11.ComPort = 1 ‘9600 baud ,no parity ,8 bit data ,1 stop bit Mscomm11.Settings = ”9600 ,N,8,1” ‘ra lệnh cho điều khiển Mscomm1 đọc hết bộ đệm nhận khi dùng ‘lệnh Input Mscomm11.InputLen = 0 ‘mở cổng Mscomm11.PortOpen = True ‘gửi lệnh attention tới MODEM Mscomm11.Output = “ATV1Q0” & Chr$(13) ‘để chắc rằng ‘MODEM trả lời “OK” ‘đợi dữ liệu trả lời gửi về cổng nối tiếp Do
DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$ , “OK” &vbCRLF) ‘đọc dữ liệu trả lời “OK” ‘đóng cổng nối tiếp Mscomm11.PortOpen = False End Sub Sau đây ta sẽ lần lượt tìm hiểu một số thuộc tính quan trọng của điều khiển truyền thông . Thuộc tính Settings Thuộc tính Settings đặt và trả lại các thông số truyền thông cho cổng RS-232, như tốc độ baud, tính chẵn lẻ, số bit dữ liệu và số các bit dừng. Cú pháp của câu lệnh là : [form.]Mscomm1.Settings [=paramString$] Nếu paramString$ không hợp lệ (valid) thì khi mở cổng, điều khiển truyền thông sẽ phát sinh lỗi 380 ( lỗi giá trị thuộc tính không hợp lệ ). ParamString$ là một chuỗi chứa 4 thông số thiết lập cho cổng truyền thông RS-232 và có dạng như sau : “BBBB ,P ,D ,S” Ở đây BBBB xác định tốc độ baud, P là bit chỉ tính chẵn lẻ, D là số bit dữ liệu và S là số các bit dừng (stop bits). Giá trị mặc định của paramString$ là : “9600, N, 8,1” Bảng sau đây liệt kê các giá trị baud hợp lệ : Thông số tốc độ baud 110 2400 19200 57600 300 4800 28800 115200 600 9600 38400 128000 1200 14400 56000 256000 Số bit dữ liệu hợp lệ trong một lần truyền (khung truyền) là : 4 ,5 ,6 ,7 ,8 (default) Số bit Stop hợp lệ là : 1 ,1.5 ,2. Thí dụ sau cho phép đặt thông số cho cổng truyền ở tốc độ baud là 4800,không kiểm tra bit chẵn lẻ ,8 bit dữ liệu ,1 bit dừng : Mscomm11.Settings =”4800 ,N ,8 ,1” Kiểu dữ liệu của Mscomm11.Settings là : String . Thuộc tính CommPort : Thuộc tính này đặt và trả lại số cổng truyền thông .Cú pháp của câu lệnh là :
[form.].CommPort [=portnumber%] Trong khi thiết kế (design time) ta có thể đặt Portnumber% bằng một giá trị nằm trong khoảng từ 1 đến 16 (giá trị mặc định là 1). Trước khi dùng lệnh PortOpen phải thiết lập cổng bằng CommPort. Nếu ta dùng thuộc tính PortOpen trước khi thiết lập cổng bằng CommPort thì điều khiển truyền thông sinh ra lỗi 68 (cổng không tồn tại). Kiểu dữ liệu : Integer Thuộc tính PortOpen : Thuộc tính PortOpen đặt và trả lại trạng thái của cổng truyền thông (đóng hoặc mở). Thuộc tính này không có trong thời gian thiết kế chương trình. Cú pháp của câu lệnh là : [form.] MSComm.PortOpen [={True/ False}] Thông số thiết lập là True để mở cổng, còn False để đóng (giải phóng) cổng và xóa nội dung các bộ đệm nhận và truyền MSComm tự động đóng cổng nối tiếp khi ứng dụng kết thúc (Terminated). Trước khi dùng thuộc tính này (PortOpen), phải đặt thông số cổng bằng thuộc tính CommPort với một giá trị hợp lệ, nếu ta quên đi thuộc tính này lỗi 68 sẽ phát sinh. Thí dụ sau đây mở cổng truyền thông số 1 (COM1) với tốc độ baud là 4800 baud, không kiểm tra tính chẵn lẻ, 8 bit dữ liệu, 1 bit stop: MSComm1.Settings = “4800 ,N ,8 ,1” MSComm1.CommPort=1 MSComm1.PortOpen=True Kiểu dữ liệu : Boolean. Các thuộc tính phục vụ việc nhập dữ liệu (Input ,InBufferCount và InBufferSize) a. Thuộc tính Input : Thuộc tính Input trả lại và xóa bỏ một chuỗi ký tự từ bộ đệm nhận. Thuộc tính này không sẵn có trong khi thiết kế và là chỉ đọc (Read_only) khi chạy chương trình. Cú pháp của câu lệnh là : [form.] MSComm.Input Thuộc tính InputLen quy định số ký tự được đọc bởi câu lệnh Input. Để xác định số các ký tự trong bộ đệm, thuộc tính InBufferCount được kiểm tra. Đặt InputLen là 0 để đọc toàn bộ nội dung của bộ đệm nhận. Thuộc tính InputMode quyết định kiểu dữ liệu thu về qua thuộc tính Input. Nếu thuộc tính này được set là CommInputModeText thì thuộc tính Input sẽ trả về dữ liệu kiểu text vào 1 biến Variant. Nếu InputMode là comInputModeBinary thì Input sẽ trả về dữ liệu nhị phân trong một mảng các byte vào một biến Variant .
Thí dụ dưới đây chỉ ra cách đọc dữ liệu từ bộ đệm nhận. MSComm1.InputLen= 0 ‘đọc toàn bộ nội dung của bộ đệm ‘nhận ‘kiểm tra có dữ liệu hay không If MSComm1.InbufferCount then ‘đọc dữ liệu InString$ = MSComm1.Input End if Kiểu dữ liệu Variant. b. Thuộc tính InBufferSize: Thuộc tính InBufferSize đặt và trả lại kích thước bộ đệm nhận, tính theo số byte. Cú pháp của câu lệnh là : [form.]MSComm .InBufferSize [=numbyte%] Thuộc tính này có liên quan đến kích thước bộ đệm nhận. Giá trị mặc định là 1024 bytes. Kích thước của bộ đệm phải được đặt sao cho có thể cất giữ được số lớn nhất của các ký tự sẽ được nhận trước khi chương trình ứng dụng có thể đọc chúng từ bộ đệm, trừ khi ta làm việc ở chế độ bắt tay (handshaking). Kiểu dữ liệu của thuộc tính này là Integer. c. Thuộc tính InBufferCount: Thuộc tính InBufferCount trả lại số ký tự trong bộ đệm nhận. Nó cũng có thể được sử dụng để xóa bộ đệm bằng cách đặt số của các ký tự bằng 0. Thuộc tính này không có trong thời gian thiết kế chương trình (design time). Cú pháp câu lệnh như sau: [form.]MSComm.InBufferCount [=count%] Ta có thể xóa bộ đệm nhận bằng cách đặt thuộc tính InBufferCount = 0. Kiểu dữ liệu của thuộc tính này là Integer. Các thuộc tính phục vụ việc xuất dữ liệu (Output ,OutBufferCount và OutBufferSize ) a. Thuộc tính Output: Thuộc tính Output sẽ viết một chuỗi ký tự vào bộ đệm truyền, thuộc tính này không có trong thời gian thiết kế chương trình. Cú pháp câu lệnh là : [form.]MSComm.Output [=outstring$] Thí dụ sau đây cho biết cách gửi các ký tự mà người dùng gõ vào từ bàn phím: Private Sub Form_load (KeyAscii as Integer) MSComm1.Outport =Chr$(KeyAscii) End Sub Thuộc tính Output có thể xuất dữ liệu dạng text hay dạng binary. Để gửi dữ liệu text, ta phải khai báo một biến kiểu Variant và cho nó chứa chuỗi muốn
gửi, sau đó gán biến này cho thuộc tính Output. Để gửi dữ liệu dạng binary, ta phải truyền một biến Variant chứa một mảng các byte cho thuộc tính Output . Thông thường, nếu ta gửi một chuỗi theo chuẩn ANSI tới ứng dụng, ta có thể gửi dữ liệu dạng text. Nếu ta có dữ liệu mà chứa các ký tự điều khiển được nhúng (embedded) như các ký tự NULL,… thì ta sẽ truyền dữ liệu theo dạng binary. Kiểu dữ liệu của thuộc tính này là Variant. b. Thuộc tính OutBufferSize : Thuộc tính OutBufferSize đặt và trả lại kích thước của các ký tự trong bộ đệm truyền. Cú pháp của câu lệnh là : [form.] MSComm.OutBufferSize [=numbyte%] Giá trị mặc định của thuộc tính này là 512 bytes. Không nên nhầm lẫn giữa hai thuộc tính OutBufferCount và OutBufferSize với nhau. Thuộc tính OutBufferCount nói lên số bytes hiện đang có trong bộ đệm truyền, còn OutBufferSize quy định tổng kích thước của bộ đệm truyền. Không nên để kích thước bộ đệm truyền quá lớn. Tuy nhiên nếu để quá nhỏ thì sẽ xảy ra hiện tượng tràn dữ liệu (trừ khi làm việc ở chế độ bắt tay). Thông thường nên bắt đầu với kích thước bộ đệm truyền là 512 bytes. Nếu lỗi tràn xảy ra thì phải tăng kích thước bộ đệm cho thích hợp với ứng dụng hiện tại. Kiểu dữ liệu của thuộc tính này Integer. c. Thuộc tính OutBufferCount : Thuộc tính OutBufferCount trả lại số ký tự trong bộ đệm truyền. Nhờ thuộc tính này ta có thể xóa nội dung bộ đệm truyền bằng cách đặt giá trị của OutBufferCount=0. Cú pháp của câu lệnh là : [form.]MSComm.OutBufferCount [=value%] Kiểu dữ liệu của thuộc tính này là Integer. d. Thuộc tính RTSEnable : Thuộc tính này xác định xem liệu có cho phép đường RTS hay không. Thông thường tín hiệu RTS (Request To Send) được gửi từ máy tính tới MODEM để yêu cầu sự cho phép truyền dữ liệu. Cú pháp câu lệnh như sau: [form.]Mscomm1.RTSEnable [=(True | False)] Ta xác lập giá trị này là True để đặt đường RTS lên mức cao nếu cổng đang mở và xuống mức thấp nếu cổng đang đóng. Đường RTS được sử dụng khi có bắt tay phần cứng sử dụng RTS/CTS. Thuộc tính RTSEnable cho phép hỏi vòng đường RTS nếu ta cần xác định trạng thái của nó. Kiểu dữ liệu của thuộc tính này : Boolean. e. Thuộc tính CommEvent :
Thuộc tính này trả lại hầu hết sự kiện hoặc lỗi truyền thông gần nhất. Thuộc tính này không có sẵn trong khi thiết kế và là chỉ đọc khi chạy chương trình. Cú pháp câu lệnh là: [form.]Mscomm1.CommEvent Mặc dù sự kiện OnComm được phát sinh mỗi khi có một sự kiện hay lỗi truyền thông xảy ra nhưng thuộc tính CommEvent lại chứa mã số của sự kiện hay là lỗi truyền thông đó .Như vậy để xác định xem điều gì đã xảy ra thì ta phải kiểm tra thuộc tính CommEvent . Các lỗi truyền thông bao gồm :
Hằng số comEventBreak comEventFrame comEventOverrun Giá trị 1001 1004 1006 Mô tả Đã nhận được tín hiệu Break Phần cứng phát hiện một lỗi khung truyền Tràn cổng .Phần cứng không thể đọc được ký tự này trước khi ký tự kế gửi đến và bị mất Tràn bộ đệm nhận .Hết chỗ trong bộ đệm nhận Phần cứng phát hiện ra một lỗi chẵn lẻ Bộ đệm truyền đầy .Bộ đệm truyền bị đầy khi cố đưa thêm ký tự vào hàng đợi Một lỗi xuất hiện ở bộ điều khiển dữ liệu(Data Control Block) của port
Các sự kiện truyền thông bao gồm: Giá trị Mô tả 1 Có ít hơn số ký tự định bởi SThreshold trong bộ đệm truyền comEvReceiv 2 Đã nhận số ký tự bằng với số ký tự định bởi e Rthreshold .Sự kiện này được phát ra liên tục cho đến khi ta dùng thuộc tính Input để chuyển dữ liệu khỏi bộ đệm nhận . ComEvCTS 3 Có sự thay đổi trên đường CTS ComEvDSR 4 Có sự thay đổi trên đường DSR .Sự kiện này chỉ phát sinh khi DSR chuyển từ 1 về 0 ComEvCD 5 Có sự thay đổi trên đường CD (Carrier Detect) ComEvRing 6 Phát hiện tiếng chuông (gọi). Một số vi mạch UART không hỗ trợ việc này. ComEvEOF 7 Ký tự EOF (Mã ASCII 26) được nhận. Kiểu dữ liệu của thuộc tính này : Integer f. Thuộc tính InputLen Đặt và trả lại số ký tự mà thuộc tính Input đọc được từ bộ đệm nhận .Giá trị mặc định của thuộc tính này là bằng 0 .Đặt InputLen =0 để điều khiển truyền thông đọc hết nội dung bộ đệm nhận .Cú pháp câu lệnh như sau : [form.] Mscomm1.InputLen [=numchars%] Hằng số ComEvSend
Thuộc tính này rất có hữu ích khi đọc dữ liệu từ các máy có lối ra được định dạng cố định về chiều dài khối dữ liệu . Kiểu dữ liệu của thuộc tính này : Integer g. Thuộc tính ParityReplace Đặt và trả lại ký tự dùng thay thế ký tự không hợp lệ trong dòng dữ liệu khi lỗi chẵn lẻ xảy ra .Cú pháp : [form.]Mscomm1.ParityReplace [=char$] Bit chẵn lẻ là bit được truyền cùng với các bit dữ liệu và được dùng cho việc kiểm tra lỗi .Khi dùng bit chẵn lẻ ,điều khiển truyền thông sẽ cộng tất cả các bit có giá trị bằng 1 và kiểm tra tổng số các bit đó xem là chẵn hay lẻ (tương ứng với việc xác lập bit chẵn lẻ khi mở cổng ) .Theo mặc định ,điều khiển dùng dấu chấm hỏi (?) để thay thế các ký tự không hợp lệ .Đặt ParityReplace là “ “ để bỏ khả năng thay thế ký tự khi lỗi chẵn lẻ xuất hiện .Sự kiện OnComm vẫn được phát sinh và thuộc tính CommEvent được đặt thành comEventRxParity . Kiểu dữ liệu của thuộc tính này : String h. Thuộc tính Rthreshold Đặt và trả lại số ký tự sẽ nhận trước khi điều khiển Mscomm1 đặt thuộc tính comEvent thành comEvReceive và phát sinh sự kiện OnComm .Cú pháp : [form.] Mscomm1.Rthreshold [=numchar%] Xác lập bằng 0 để làm mất khả năng phát sinh sự kiện OnComm khi nhận các ký tự .Xác lập bằng 1,chẳng hạn, để làm phát sinh sự kiện OnComm mỗi khi có 1 ký tự được nhận vào bộ đệm nhận Kiểu dữ liệu của thuộc tính này : Integer § Hàm ComInput Trả lại và xóa chuỗi ký tự ở bộ đệm nhận .Cú pháp như sau : ComInput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer Hàm này tương tự như thuộc tính Input nhưng trả lại số byte nhận được . § Hàm ComOutput Viết một chuỗi ký tự vào bộ đệm truyền .Cú pháp như sau : ComOutput(ByVal hwnd As Integer ,LpData as Any ,ByVal do Data as Integer ) As Integer Hàm này tương tự như thuộc tính Output nhưng trả lại số byte ký tự được gửi đi 3. Sự kiện Oncomm Sự kiện OnComm được phát sinh vào bất cứ khi nào giá trị của thuộc tính CommEvent thay đổi . Cú pháp sự kiện : Private Sub [form.]Mscomm1_OnComm()
Thuộc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nếu đặt các thuộc tính Rthreshold hoặc SThreshold bằng 0 sẽ vô hiệu bẫy sự kiện Receive và Send . 4. Hỏi vòng ở cổng RS-232 : Thường khi làm việc với điều khiển Mscomm1, ta dùng phương pháp điều khiển theo sự kiện .Nhưng ta cũng có thể sử dụng kỹ thuật hỏi vòng để thông tin qua cổng RS-232. Chương trình ví dụ sau đây sử dụng COM2 để gửi thông báo “Hello” và sau đó chờ chuỗi nhận. Kỹ thuật này quy định là sẽ nhận được đáp ứng bằng cách kiểm tra liên tục số các ký tự nhận được trong bộ đệm nhận (InBufferCount). Khi có nhiều hơn một ký tự trong bộ đệm lối vào thì ký tự này sẽ được đọc. Chương trình như sau : Private Sub Form_Load() Dim Str as String ‘chuỗi để chứa dữ liệu nhập Mscomm11.ComPort =2 ‘dùng COM2 Mscomm11.Settings=”9600 ,N ,8 ,1” ‘9600 baud ,không ‘parity ,8 bits data ,1 ‘stop bit Mscomm11.InputLen=0 ‘đọc hết bộ đệm lối vào khi Input đã được dùng Mscomm11.PortOpen=True ‘mở cổng Text1.text=”Sending : Hello” Mscomm11.Output=”Hello” ‘gửi thông báo Do ‘chờ đáp ứng từ cổng DoEvents Loop Until Mscomm11.InBufferCount>=2 Str = Mscomm11.Input ‘đọc bộ đệm Input Text2.Text=”Received:” +Str Mscomm11.PortOpen=False ‘đóng cổng nối tiếp End Sub 5. Các thông báo lỗi (Error Messages Code) Số lỗi 380 383 394 8000 Mô tả Giá trị thuộc tính không hợp lệ Thuộc tính là chỉ đọc, comSetNotSupport Thuộc tính là chỉ đọc, comGetNotSupport Tác động không hợp lệ lên cổng đã mở Số lỗi 8009 8010 8011 8012 Mô tả Lỗi ở các thông số mặc định Phần cứng không sẵn dùng (bị khóa bởi thiết bị khác) Không thể định vị được hàng đợi (queues) Cổng chưa mở
8001 8002 8003 8004 8005 8006 8007 8008
Giá trị timeout cần phải lớn hơn Zero Số cổng không hợp lệ Thuộc tính chỉ có khi chạy chương trình Thuộc tính là chỉ đọc khi chạy chương trình Cổng đã mở rồi Số nhận dạng thiết bị là không hợp lệ hoặc không được hỗ trợ Giá trị Baud xác định là không hợp lệ Kích thước byte xác định là không hợp lệ
8013 8014 8015 8016 8018 8019 8020 8021
Cổng đã mở rồi Không thể cho phép khai báo(nitification)comm Không đặt trạng thái cho comm được Không đặt mặt nạ sự kiện comm được Tác động chỉ hợp lệ khi cổng đã mở Thiết bị bận Lỗi đọc thiết bị truyền thông Lỗi bên trong liên quan khối điều khiển thiết bị của port
III. Phần giao diện :
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
Chương trình giao tiếp nối tiếp dùng ngôn ngữ Visual Basic như sau: ‘Phần khai báo biến toàn cục trrong module public LenhT, DiaChi As String 'bien chua ma lenh dua ve cho vi xu ly Public GTNhan As Variant ' bien chua data tu vi xu ly gui len Public Byte1, Byte2, Byte3, Byte4 As String 'la 4 byte nhan duoc tu vi xu ly 'byte1 chua dia chi cua vxl 'byte2 chua gia tri nhiet do 'byte3 chua so nguoi trong phong 'byte4 trang thai den va quat Public Byte21, Byte22, Byte23, Byte24 As String 'cac bien cho phong 2 Public Const AnNinh = "Khong co nguoi la xam nhap" Public Const KAnNinh = "Canh bao co nguoi la xam nhap" ‘ ham truyen du lieu toi cac vi xu li Public Sub TRUYEN(GIATRI As String) Dim i As Integer
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
frmchinh.MSComm1.RTSEnable = True frmchinh.MSComm1.Output = GIATRI For i = 0 To 10000 i=i+1 Next i frmchinh.MSComm1.RTSEnable = False End Sub ‘ Ham nhan du lieu tu vi xu li Public Sub NHAN() Dim i, thongbao As Integer Dim Test As String frmchinh.MSComm1.RTSEnable = False For i = 1 To 30000 i=i+1 Next i Do DoEvents Loop Until (frmchinh.MSComm1.InBufferSize >= 4) Or (i >= 30000) GTNhan = frmchinh.MSComm1.Input 'thuc hien gan gia tri cho bytei (i=1-4) Test = Left$ (GTNhan, 1) If Test = "A" Then Byte1 = Left$(GTNhan, 1) Byte2 = Mid$(GTNhan, 2, 1) Byte3 = Mid$(GTNhan, 3, 1) Byte4 = Right$ (GTNhan, 1) Else If Test = "B" Then Byte21 = Left$(GTNhan, 1) Byte22 = Mid$(GTNhan, 2, 1) Byte23 = Mid$(GTNhan, 3, 1) Byte24 = Right$ (GTNhan, 1) Else thongbao = MsgBox("So lieu truyen ve bi loi.Can xem lai duong truyen", vbOKOnly, "Loi duong truyen") End If End If End Sub ‘********************************************************
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
‘Chuong trinh trong Frmchinh ‘******************************************************* Dim ToanCuc As Variant Dim Dem, i, j As Integer Dim NHAN As String Private Sub ChkP01_Click() If ChkP01.Value = 1 Then frmP01.Show If ChkP01.Value = 0 Then Unload frmP01 End If '****************************** End Sub Private Sub ChkP02_Click() If ChkP02.Value = 1 Then frmP02.Show If ChkP02.Value = 0 Then Unload frmP02 End If '*************************** End Sub Private Sub Command1_Click() End End Sub Private Sub Form_Load() Dim i1, i2 As Integer ChkP03.Enabled = False ChkP04(1).Enabled = False LblTThai.Caption = "Binh thuong" TxtChinh = CStr(2) OptAuto.Value = True '********************************* 'PHAN GIA DINH BIEN Byte2 = "!" Byte3 = "!" Byte4 = "O" Byte22 = "!" Byte23 = "!" Byte24 = "O" LenhT = "a"
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
'********************************* 'KHOI DONG COM If MSComm1.PortOpen = True Then MSComm1.PortOpen = False MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True 'cho thu du lieu dua ve tu vi xu ly frmP02.Timer1.Enabled = True frmP01.Timer1.Enabled = True 'hien thi so nguoi len frmchinh frmchinh.Timer1 = True End Sub Private Sub OptAuto_Click() With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False frmP02.Frame3.Enabled = False End With frmP01.cmdDongYP01.Enabled = False frmP02.cmDongYP02.Enabled = False '*********************************** End Sub Private Sub OptDenChinh_Click() FrmDkDen.Show End Sub Private Sub OptManual_Click()
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
With frmP01 frmP01.fraDkP01.Enabled = True frmP01.OptTdenP01.Enabled = True frmP01.OptMdenP01.Enabled = True frmP01.OptTquatP01.Enabled = True frmP01.OptMquatP01.Enabled = True frmP01.Frame1.Enabled = True frmP01.Frame2.Enabled = True End With With frmP02 frmP02.FraDkP02.Enabled = True frmP02.OptTdenP02.Enabled = True frmP02.OptTquatP02.Enabled = True frmP02.OptMdenP02.Enabled = True frmP02.OptMquatP02.Enabled = True frmP02.Frame2.Enabled = True frmP02.Frame3.Enabled = True End With frmP01.cmdDongYP01.Enabled = True frmP02.cmDongYP02.Enabled = True '************************************ End Sub Private Sub OptQuatChinh_Click() FrmDkQuat.Show End Sub Private Sub Timer1_Timer() ' xuat so nguoi ra frmchinh i1 = Val(frmP01.TxtSoNguoiP01.Text) i2 = Val(frmP02.TxtSoNguoiP02.Text) TxtChinh.Text = CStr(i1 + i2) End Sub Private Sub cmdDongYP01_Click() Dim Test As String 'xac dinh lenh hoat dong cho vxl If (OptMdenP01.Value = False And OptMquatP01.Value = False) Then LenhT = "C" If (OptMdenP01.Value = False And OptMquatP01.Value = True) Then LenhT = "D"
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
If (OptMdenP01.Value = True And OptMquatP01.Value = False) Then LenhT = "F" If (OptMdenP01.Value = True And OptMquatP01.Value = True) Then LenhT = "G" 'xac dinh dia chi truyen la vxl 1 DiaChi = "A" Test = LenhT 'goi ham truyen LenhT cho vi xu ly Call TRUYEN(DiaChi) Call TRUYEN(Test) Stop End Sub Private Sub cmdThoatP01_Click() Unload Me frmchinh.ChkP01.Value = False End Sub Private Sub Option1_Click() End Sub Private Sub Form_Load() If frmchinh.OptAuto.Value = True Then With frmP01 frmP01.fraDkP01.Enabled = False frmP01.OptTdenP01.Enabled = False frmP01.OptMdenP01.Enabled = False frmP01.OptTquatP01.Enabled = False frmP01.OptMquatP01.Enabled = False frmP01.Frame1.Enabled = False frmP01.Frame2.Enabled = False End With With frmP02 frmP02.FraDkP02.Enabled = False frmP02.OptTdenP02.Enabled = False frmP02.OptMdenP02.Enabled = False frmP02.OptTquatP02.Enabled = False frmP02.OptMquatP02.Enabled = False frmP02.Frame2.Enabled = False
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
frmP02.Frame3.Enabled = False End With End If '************************************** 'KHOI DONG COM If frmchinh.MSComm1.PortOpen = True Then frmchinh.MSComm1.PortOpen = False frmchinh.MSComm1.CommPort = 1 frmchinh.MSComm1.Settings = "9600,n,8,1" frmchinh.MSComm1.PortOpen = True 'Cap nhat trang thai cua phong frmP01.Timer1.Enabled = True End Sub Private Sub CapnhatP01() Dim NhietdoP01, SoNguoiP01, i As Integer Dim thongbao As String NhietdoP01 = Asc(Byte2) txtNhietDoP01.Text = Val(NhietdoP01) 'hien thi nhiet do SoNguoiP01 = Asc(Byte3) TxtSoNguoiP01.Text = Val(SoNguoiP01) 'hien thi so nguoi If Byte4 = "O" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "P" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "OFF" frmchinh.LblTThai = KAnNinh End If If Byte4 = "Q" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "R" Then txtDenP01.Text = "OFF" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
End If If Byte4 = "S" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "T" Then txtDenP01.Text = "ON" txtQuatP01.Text = "OFF" frmchinh.LblTThai = AnNinh End If If Byte4 = "U" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = AnNinh End If If Byte4 = "X" Then txtDenP01.Text = "ON" txtQuatP01.Text = "ON" frmchinh.LblTThai = KAnNinh End If 'BAO LOI TRUYEN (lenh truyen ve sai) Select Case Byte4 Case "O" GoTo TB Case "P" GoTo TB Case "Q" GoTo TB Case "R" GoTo TB Case "S" GoTo TB Case "T" GoTo TB Case "U" GoTo TB Case "X" GoTo TB End Select
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang
thongbao = MsgBox("Ban can kiem tra lai he thong.Chu trong cac he thong chong trom", vbOKOnly, "Loi dieu khien") TB: i=i+1 End Sub Private Sub Timer1_Timer() Dim Kich As String Kich = "E" Call TRUYEN(DiaChi) Call TRUYEN(Kich) Call CapnhatP01 End Sub
( Word Converter - Unregistered ) http://www.word-converter.net SVTH: Lê Hoàng Dũng Trang