LỜI NÓI ĐẦU
Hiện nay đất nước ta đang chuyển mình theo sự phát triển chung của thế giới và khu vực Châu Á bằng nền sản xuất đa dạng và đầy tiềm năng. Nền sản xuất này không chỉ đòi hỏi một số lượng lao động khổng lồ mà còn yêu cầu về trình độ, chất lượng tay nghề, kỹ thuật lao động và thiết bị sản xuất. Trên đà phát triển đó, vấn đề tự động hoá trong quá trình sản xuất, nghiên cứu trở thành một nhu cầu cần thiết. Thoạt đầu vấn đề tự động hoá được thực hiện riêng lẻ từ cơ khí hoá đến các mạch điện tử. Ngày nay, với sự xuất hiện cuả các Chip vi xử lý và máy tính cùng với việc sử dụng rộng rãi của nó đã đẩy vấn đề tự động hoá lên một bước cao hơn và thời lượng nhanh hơn
Trong đó, việc ứng dụng Máy Vi Tính vào kỹ thuật điều khiển đã đem lại những kết quả đầy tính ưu việc. Các thiết bị, hệ thống đo lường và điều khiển ghép nối với Máy Vi Tính có độ chính xác cao, thời gian thu thập số liệu ngắn. Ngoài ra, máy tính còn có phần giao diện lên màn hình rất tiện lợi cho người sử dụng.
Việc dùng máy tính để điều khiển và thông tin liên lạc với nhau thì vấn đề truyền dữ liệu rất quan trọng. Hiện nay chúng ta có thể dùng máy tính để liên lạc với nhau thông qua hệ thống mạng như: mạng cục bộ (LAN) hay mạng toàn cầu Internet. Do đó, trong phạm vi hiểu biết cuả mình, chúng em đã tìm hiểu và thực hiện đề tài: “Điều khiển thiết bị từ xa thông qua máy tính”
Mặc dù em đã cố gắng rất nhiều để hoàn thành quyển luận văn này, song do giới hạn về thời gian cũng như kiến thức nên nội dung còn nhiều thiếu sót. Rất mong sự đóng góp ý kiến của quý thầy cô và các bạn sinh viên để luận văn được hoàn thiện hơn. Xin chân thành cảm ơn.
Mục lục
PHẦNA: LÝTHUYẾT . .6
Lời nói đầu 7
CHƯƠNG I: KHẢO SÁT VI ĐIỀU KHIỂN AT89C51 8
CHƯƠNG II: KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A 18
CHƯƠNG III: CỔNG NỐI TIẾP .60
PHẦN B: THI CÔNG 62
CHƯƠNGI Mạch nguyên lý .63
CHƯƠNGII Một số linh kiện .68
CHƯƠNG III: Phần mềm .81
CHƯƠNG VI: Điều Khiển .90
PHẦN C: TỔNG KẾT 96
97 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2581 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Điều khiển thiết bị từ xa thông qua máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
nh sẵn. Các bit và chỉ thị trạng thái hoạt động, trạng thái reset của vi điều khiển và được điều khiển bởi CPU. reset: Khi pin ở mức logic thấp, vi điều khiển sẽ được reset. Tín hiệu reset được cung cấp bởi một mạch ngoại vi với các yêu cầu cụ thể sau:
Không nối pin trực tiếp lên nguồn VDD. R1 phải nhỏ hơn 40 K để đảm bảo các đặc tính điện của vi điều khiển. R2 phải lớn hơn 1 K để hạn dòng đi vào vi điều khiển. reset còn được chống nhiễu bởi một bộ lọc để tránh các tín hiệu nhỏ tác động lên pin .
Power-on reset (POR): Đây là xung reset do vi điều khiển tạo ra khi phát hiện nguồn cung cấp VDD. Khi hoạt động ở chế độ bình thường, vi điều khiển cần được đảm bảo các thông số về dòng điện, điện áp để hoạt động bình thường. Nhưng nếu các tham số này không được đảm bảo, xung reset do POR tạo ra sẽ đưa vi điều khiển về trạng thái reset và chỉ tiếp tục hoạt động khi nào các tham số trên được đảm bảo.
Power-up Timer (PWRT): đây là bộ định thời hoạt động dựa vào mạch RC bên trong vi điều khiển. Khi PWRT được kích hoạt, vi điều khiển sẽ được đưa về trạng thái reset. PWRT sẽ tạo ra một khoảng thời gian delay (khoảng 72 ms) để VDD tăng đến giá trị thích hợp.
Oscillator Start-up Timer (OST): OST cung cấp một khoảng thời gian delay bằng 1024 chu kì xung của oscillator sau khi PWRT ngưng tác động (vi điều khiển đã đủ điều kiện hoạt động) để đảm bảo sự ổn định của xung do oscillator phát ra. Tác động của OST còn xảy ra đối với POR reset và khi vi điều khiển được đánh thức từ chế đợ sleep. OST chỉ tác động đối với các lọai oscillator là XT, HS và LP.
Brown-out reset (BOR): Nếu VDD hạ xuống thấp hơn giá trị VBOR (khoảng 4V) và kéo dài trong khoảng thời gian lớn hơn TBOR (khoảng 100 us), BOR được kích hoạt và vi điều khiển được đưa về trạng thái BOR reset. Nếu điện áp cung cấp cho vi điều khiển hạ xuống thấp hơn VBOR trong khoảng thời gian ngắn hơn TBOR, vi điều khiển sẽ không được reset. Khi điện áp cung cấp đủ cho vi điều khiển hoạt động, PWRT được kích hoạt để tạo ra một khoảng thời gian delay (khoảng 72ms). Nếu trong khoảng thời gian này điện áp cung cấp cho vi điều khiển lại tiếp tục hạ xuống dưới mức điện áp VBOR, BOR reset sẽ lại được kích hoạt. Khi vi điều khiển đủ điện áp hoạt động. Một điểm cần chú ý là khi BOR reset được cho phép, PWRT cũng sẽ hoạt động bất chấp trạng thái của bit PWRT.
Tóm lại để vi điều khiển hoạt động được từ khi cấp nguồn cần trải qua các bước sau:
POR tác động.
PWRT (nếu được cho phép hoạt động) tạo ra khoảng thời gian delay TPWRT để ổn định nguồn cung cấp.
OST (nếu được cho phép) tạo ra khoảng thời gian delay bằng 1024 chu kì xung của oscillator để ổn định tần số của oscillator.
Đến thời điểm này vi điều khiển mới bắt đầu hoạt động bình thường.
Thanh ghi điều khiển và chỉ thị trạng thái nguồn cung cấp cho vi điều khiển là thanh ghi PCON
2.14.4 NGẮT (INTERRUPT)
PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.
Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra.
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4
chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.
Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên xảy ra.
2.14.4.1 NGẮT INT
Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION_ REG ). Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE. Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi.
2.14.4.2 NGẮT DO SỰ THAY ĐỔI TRẠNG THÁI CÁC PIN TRONG PORTB
Các pin PORTB được dùng cho ngắt này và được điều khiển bởi bit RBIE
(thanh ghi INTCON). Cờ ngắt của ngắt này là bit RBIF (INTCON).
2.14.5 WATCHDOG TIMER (WDT)
Watchdog timer (WDT) là bộ đếm độc lập dùng nguồn xung đếm từ bộ tạo xung được tích hợp sẵn trong vi điều khiển và không phụ thuộc vào bất kì nguồn xung clock ngoại vi nào. Điều đó có nghĩa là WDT vẫn hoạt động ngay cả khi xung clock được lấy từ pin OSC1/CLKI và pin OSC2/CLKO của vi điều khiển ngưng hoạt động (chẳng hạn như do tác động của lệnh sleep). Bit điều khiển của WDT là bit WDTE nằm trong bộ nhớ chương trình ở địa chỉ 2007h (Configuration bit).
WDT sẽ tự động reset vi điều khiển (Watchdog Timer Reset) khi bộ đếm của WDT bị tràn (nếu WDT được cho phép hoạt động), đồng thời bit tự động được xóa. Nếu vi điều khiển đang ở chế độ sleep thì WDT sẽ đánh thức vi điều khiển (Watchdog Timer Wake-up) khi bộ đếm bị tràn. Như vậy WDT có tác dụng reset vi điều khiển ở thời điểm cần thiết mà không cần đến sự tác động từ bên ngoài, chẳng hạn như trong quá trình thực thi lệnh, vi điều khiển bị “kẹt” ở một chổ nào đó mà không thoát ra đươc, khi đó vi điều khiển sẽ tự động được reset khi WDT bị tràn ể chương trình hoạt động đúng trở lại. Tuy nhiên khi sử dụng WDT cũng có sự phiền toái vì vi điều khiển sẽ thường xuyên được reset sau một thời gian nhất định, do đói cần tính toán thời gian thích hợp để xóa WDT (dùng lệnh CLRWDT). Và để việc ấn định thời gian reset được linh động, WDT còn được hỗ trợ một bộ chia tần số prescaler được điều khiển bởi thanh ghi OPTION_REG (prescaler này được chia xẻ với Timer0).
Một điểm cần chú ý nữa là lệnh sleep sẽ xóa bộ đếm WDT và prescaler. Ngoài ra lệnh xóa CLRWDT chỉ xóa bộ đếm chứ không làm thay đổi đối tượng tác động của prescaler (WDT hay Timer0).
2.14.6 CHẾ ĐỘ SLEEP
Đây là chế độ hoạt động của vi điều khiển khi lệnh SLEEP được thực thi. Khi đó nếu được cho phép hoạt động, bộ đếm của WDT sẽ bị xóa nhưng WDT vẫn tiếp tục hoạt động, bit (STATUS) được reset về 0, bit được set, oscillator ngưng tác động và các PORT giữ nguyên trạng thái như trước khi lệnh SLEEP được thực thi. Do khi ở chế độ SLEEP, dòng cung cấp cho vi điều khiển là rất nhỏ nên ta cần thực hiện các bước sau trước khi vi điều khiển thực thi lệnh SLEEP:
Đưa tất cả các pin về trạng thái VDD hoặc VSS
Cần bảo đảm rằng không cò mạch ngoại vi nào được điều khiển bởi dòng điện của vi điều khiển vì dòng điện nhỏ không đủ khả năng cung cấp cho các mạch ngoại vi hoạt động.
Tạm ngưng hoạt động củ khối A/D và không cho phép các xung clock từ bên ngoài tác động vào vi điều khiển.
Để ý đến chức năng kéo lên điện trở ở PORTB.
Pin phải ở mức logic cao.
2.14.6.1 “ĐÁNH THỨC” VI ĐIỀU KHIỂN
Vi điều khiển có thể được “đánh thức” dưới tác động của một trong số các hiện tượng sau:
Tác động của reset ngoại vi thông qua pin .
Tác động của WDT khi bị tràn.
Tác động từ các ngắt ngoại vi từ PORTB (PORTB Interrupt on change hoặc pin INT).
Các bit và được dùng để thể hiện trạng thái của vi điều khiển và để phát hiện nguồn tác động làm reset vi điều khiển. Bit được set khi vi điều khiển được cấp nguồn và được reset về 0 khi vi điều khiển ở chế độ sleep. Bit được reset về 0 khi WDT tác động do bộ đếm bị tràn.
Ngoài ra còn có một số nguồn tác động khác từ các chức năng ngoại vi bao gồm:
Đọc hay ghi dữ liệu thông qua PSP (Parallel Slave Port).
Ngắt Timer1 khi hoạt động ở chế độ đếm bất đồng bộ.
Ngắt CCP khi hoạt động ở chế độ Capture.
Các hiện tượng đặc biệt làm reset Timer1 khi hoạt động ở chế độ đếm bất đồng bộ dùng nguồn xung clock ở bên ngoài).
Ngắt SSP khi bit Start/Stop được phát hiện.
SSP hoạt động ở chế độ Slave mode khi truyền hoặc nhận dữ liệu.
Tác động của USART từ các pin RX hay TX khi hoạt động ở chế độ Slave mode đồng bộ.
Khối chuyển đổi A/D khi nguồn xung clock hoạt động ở dạng RC.
Hoàn tất quá trình ghi vào EEPROM.
Ngõ ra bộ so sánh thay đổi trạng thái.
Các tác động ngoại vi khác không có tác dụng đánh thức vi điều khiển vì khi ở chế độ sleep các xung clock cung cấp cho vi điều khiển ngưng hoạt động. Bên cạnh đó cần cho phép các ngắt hoạt động trước khi lệnh SLEEP được thực thi để bảo đảm tác động của các ngắt. Việc đánh thức vi điều khiển từ các ngắt vẫn được thực thi bất chấp trạng thái của bit GIE. Nếu bit GIE mang giá trị 0, vi điều khiển sẽ thực thi lệnh tiếp theo sau lệnh SLEEP của chương trình (vì chương trình ngắt không được cho phép thực thi). Nếu bit GIE được set trước khi lệnh SLEEP được thực thi, vi điều khiển sẽ thực thi lệnh tiếp theo của chương trình và sau
đó nhảy tới địa chỉ chứa chương trình ngắt (0004h). Trong trường hợp lệnh tiếp theo không đóng vai trò quan trọng trong chương trình, ta cần đặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác động của lệnh này, đồng thời giúp ta dễ dàng hơn trong việc kiểm soát hoạt động của chương trình ngắt. Tuy nhiên cũng có một số điểm cần lưu ý như sau:
Nếu ngắt xảy ra trước khi lệnh SLEEP được thực thi, lệnh SLEEP sẽ không được thực thi và thay vào đó là lệnh NOP, đồng thời các tác động của lệnh SLEEP cũng sẽ được bỏ qua. Nếu ngắt xảy ra trong khi hay sau khi lệnh SLEEP được thực thi, vi điều khiển lập tức được đánh thức từ chế độ sleep, và lệnh SLEEP sẽ được thực thi ngay sau khi vi điều khiển được đánh thức.
Để kiểm tra xem lệnh SLEEP đã được thực thi hay chưa, ta kiểm tra bit . Nếu bit vẫn mang giá trị 1 tức là lệnh SLEEP đã không được thực thi và thay vào đó là lệnh NOP. Bên cạnh đó ta cần xóa WDT để chắc chắn rằng WDT đã được xóa trước khi thực thi lệnh SLEEP, qua đó cho phép ta xác định được thời điểm vi điều khiển được đánh thức do tác động của WDT.
CHƯƠNG III:
CỔNG NỐI TIẾP
I/ Cổng nối tiếp (Serial port) :
- Là một cổng thông dụng trong các máy tính trong các máy tính truyền thống dùng kết nối các thiết bị ngoại vi với máy tính như: bàn phím, chuột điều khiển, modem, máy quét...Cổng nối tiếp còn có tên gọi khác như: Cổng COM, communication.
Mặc dù khái niệm cổng nối tiếp có thể được hiểu theo một nghĩa khác: Các cổng hoạt động theo nguyên lý “nối tiếp”, nhưng bài này chỉ nói đến các loại cổng nối tiếp được hiểu như COM, RS-232...mà không phải nói đến một nghĩa rộng hơn nó
Ngày nay, do tốc độ truyền dữ liệu chậm hơn so với các cổng mới ra đời nên các cổng nối tiếp đang dần bị loại bỏ trong các chuẩn máy tính hiện nay, chúng được thay thế bằng các cổng có tốc độ nhanh hơn như: USB, FireWire
Bảng dưới đây cho thấy công dụng của các chân của một cổng nối tiếp 9 chân (9 pin) theo chuẩn AT.
Pin
Tín hiệu
Mô tả
Trạng thái I/O
1
CD
Carrier detect
In
2
RD
Receive data
In
3
TD
4
DTR
Data terminal ready
Out
5
SG
Signal ground
6
DSR
Data set ready
In
7
RTS
Request to send
Out
8
CTS
Clear to send
In
9
RI
Ring indicator
In
- Cổng nối tiếp tích hợp trên máy tính
Cổng nối tiếp thường được tích hợp sẵn trên các máy tính cá nhân từ giữa năm 1990 trong các hệ thống máy tính cá nhân sử dụng CPU thế hệ thứ tư (486). Chúng thường được tích hợp sẵn trên các bo mạch chủ thông qua chíp Super I/O (thay cho các chíp UART trước đây) để thuận tiện hơn mà không cần sử dụng các bo mạch riêng cho chúng. Tuy nhiên, (ngay như đầu bài này đã nói) ngày nay chúng đã dần biến mất khỏi các hệ thống máy tính cá nhân.
- Ứng dụng:
Ngày nay rất nhiều máy tính cá nhân nói chung cũng như máy tính xách tay nói riêng đã không còn trang bị cổng nối tiếp nữa, đa số các bo mạch chủ trung và cao cấp cũng dần loại bỏ cổng nối tiếp khiến cho một số người sử dụng đã gặp khó khăn khi còn sử dụng các thiết bị cũ (chẳng hạn các modem quay số).
Ứng dụng trong sử dụng thông thường của một máy tính:
Bàn phím máy tính (trước đây)
Chuột điều khiển (trước đây, hiện nay bàn phím và chuột sử dụng các cổng PS/2 hoặc USB)
Modem (quay số)
Ứng dụng trong các chuyên ngành khác
Kết nối với các thiết bị điều khiển (các cổng RS-232, RS-422...) trong ngành tự động hoá điều khiển. (Sự biến mất của các cổng nối tiếp hiện nay trên các máy tính khiến cho nhiều kỹ thuật viên gặp khó khăn với các thiết bị điều khiển cũ)
Kết nối với các thiết bị điện tử dân dụng.
Kết nối với các điện thoại thông minh
II/ RS Max232:
- Máy tính được thiết kế theo chuẩn RS232 (được qui định năm 1960) , chuẩn này được qui định trước khi xuất hiện họ logic TTL (ra đời năm 1968 )nên mức điện áp của nó không tương thích với TTL:
- Qui định của chuẩn RS232:
• “space”(logic 0) có trị số từ +3 đến +25v
• “mark”(logic 1) có trị số từ -3 đến -25v
• Miền giữa -3v đến +3 v không hợp lệ
• Dòng điện ngắn mạch không được vượt quá
500mA- Vì vậy ta phải có một mạch lái đường dây để chuyển đổi tín hiệu giữa RS232 và TTL, thiết bị được sử dụng là MAX232, DS275,…
PHẦN B:
THI CÔNG
CHƯƠNG I:
Mạch nguyên lý
I/ Sơ đồ mạch:
Mạch giao tiếp giữa AT89C51 và máy vi tính
2. Mạch điều khiển chính:
3. Mạch kich dẫn thiết bị:
Nguyên lý hoạt động
- Khi vi xử lí xuất mức cao thì opto không dẫn. nguồn 12v đổ xuống phân cực cho BD139 dẫn relay đóng.
Tính dòng I :
V= I*(R3 + R4) + V
→ I== = 2 (mA)
= = = 66.7 (mA)
- Khi vi xử lí xuất mức thấp thì opto dẫn . transistor BD139 tắt relay mở.
4. Mạch cảm biến đèn tự động bật tắt:
Nguyên lý hoạt động:
V= ==6V
V==
Với 100Ω ≤ R5 ≤ 100 k Ω
- Khi có ánh sáng chiếu vào cảm biến. R5 tăng :
V>V . → V =0v → transistor C1815 tắt
- Khi chưa ánh sáng chiếu vào cảm biến . R5 giảm:
V<V . → → V=12V→ transistor C1815 dẫn nên relay đóng bật nguồn đèn sáng
LCD 1602A
5. Mạch cảm biến cảnh báo cháy:
CHƯƠNG II:
Một số linh kiện
1. IC DS18B20: là một loại nhiệt kế số cung cấp từ 9bit-12bit theo đơn vị đo lường là độ C và có một chức năng chuông reo với những chất khó bay hơi chương trình sử dụng với điểm cao hơn hoặc thấp hơn điểm ngưỡng.DS18B20 truyền trong một đường dây Bus tín hiệu.Nó mặc định yêu cầu chỉ cho một đưỡng truyền dữ liệu (và đất) từ việc truyền thông tin với con vi xử lý trung tâm.Nó có thể điều khiển đươc sắp xếp nhiệt độ trong khoảng -55oC đến 125oC và với độ chính xác đến +/- 0.5oC trong khoảng từ -10oC đến +85oC.Ngoài ra,DS 18B20 có thể cấp nguồn trực tiếp từ dữ liệu ngoại trừ việc cung cấp từ nguồn ngòai.
Một số con DS18B20 có một mã độc nhất 64 bit với việc cho phép nhân DS 18B20s trên những đoạn dây Bus tương tự nhau.Nó thì đơn giản trong việc sử dụng một con vi xử lý để mà diều khiển nhiều con DS18B20s với sự phân bố trong một vùng lớn.Những ứng dụng có thể mang lại lợi ích từ nét đặc biệt này gồm có việc cải tiến điều khiển HVAC,nhiệt độ ở trung tâm hệ thống được xây doing,trang bị,hoặc nhiều bộ phận,xử lý trung tâm và điều khiển những hệ thống.
Bảng 1 trình bày sơ đồ mạch cấu tạo của con DS18B20 và mô tả chân trong bảng mô tả chân.Bộ nhớ Rom 64 bit dự trữ mã của những thiết bị độc nhất.Bộ nhớ hỗn tạp chứa 2 bit đăng ký nhiệt độ.Nó chứa số ngõ vào từ cảm biến nhiệt độ.Ngoài ra,bộ nhớ hỗn tạp còn cung cấp lối vào 1 byte ở ngưỡng trên và dưới của việc đăng kí còi báo động và 1 byte cho việc cấu hình đăng ký.Việc đăng ký cấu hình đòi hỏi người sử dụng thiết lập độ phân giải số cho cảm biến chuyển đổi đến 9,10,11 hoặc 12 bit.Báo mức thấp TL và báo mức cao TH ,đăng ký cấu hình là cố định (EEPROM) , vì vậy họ sẽ giữ lại dữ liệu khi thiết bị được kéo lên.
DS18B20 sử dụng giao thức Maxim cách biệt những đường dây Bus.Nó thi hành việc truyền thông Bus sử dụng một tín hiệu điều khiển.Việc điều khiển đường dây yêu cầu có một con điện trở tương đối lớn từ thiết bị kết nối đến Bus qua 3 vùng hoặc mở Port(Chân DQ trong trường hợp của DS18B20)Trong hệ thống Bus Vi xử lý (thiết bị chủ) nhận ra và đưa đến những thiết bị trên đường Bus sử dụng một vài thiết bị duy nhất có mã là 64 bit.Bởi vì, một vài thiết bị có một mã duy nhất,nhiều thiết bị có thể đề dịa chỉ trên một bus là không giới hạn.Giao thức của một Bus, bao gồm việc giải thích chi tiết lệnh và các vị trí thời gian được nối trong một hệ thống Bus.
Mặc khác nét đặc biệt của DS18B20 khả năng điều khiển ngoài điện áp nội nguồn cung cấp.Nguồn thì mặc dù cung cấp diện trở trên Bus qua chân DQ khi dây Bus ở mức cao. Tín hiệu dây Bus hầu như có thể chuyển đổi một dung tích chứa nội (CPP).nó sau nó cung cấp nguồn đến thiết bị khi Bus ở mức thấp.Cách thức của việc bắt nguồn từ một dây Bus đươc qui cho như là “Parasite Power”.Như một lựa chọn,DS18B20 có thể hầu như được cấp nguồn bời nguồn cung cấp ngoài ở VDD.
Cấu trúc chung của DS18B20:
Chân DQ:chân đưa tín hiệu ra.(tín hiệu diện áp)
Chân GND:Chân nối đất.
Chân VDD: chân cấp nguồn(=VCC).
Việc điều khiển cảm biến nhiệt độ:
Lõi chức năng của DS18B20 là cảm biến nhiệt độ trực tiếp từ số.Độ phân giải của cảm biến nhiệt độ có thể đăng ký đến 9,10,11 hoặc 12 bit tương ứng với việc gia tăng 0.5oC ,0.25 oC,0.125 oC hoặc 0.0625 oC,một cách riêng.Mặc định phân giải ở nguồn kéo lên là 12 bit.Nguồn kéo lên trong vùng nguồn kéo xuống vô hiệu.Đặt nhiệt độ đo lường và chuyển đổi từ A đến D.Thiết bị chủ cần phải phát ra một tập lệnh Conver T[44H].Theo sự chuyển đổi kết quả của dữ liệu đươc đưa vào 2 byte của đăng ký nhiệt độ trong bộ nhớ hỗn tạp và quay trở lại DS18B20 trong vùng vô hiệu.Nếu DS18B20 được cấp nguồn ngoài, thì chủ có thể phát ra “read time slots” sau đó lệnh Conver T và DS18B20 sẽ phản ứng lại bởi việc chuyển về 0 trong khi sự chuyển đổi nhiệt độ đang trong tiến trình và 1 khi sự chuyển đổi đã được thực hiện.Nếu DS18B20 được cấp nguồn với nguồn khác,sự chú ý về kỹ thuật không được sử dụng từ khi Bus đẩy lên mức cao bởi việc đẩy mạnh trong suốt hồi về nhiệt độ chuyển đổi.
Dữ liệu nhiệt độ ở ngõ ra DS18B20 ứng dụng trong thang đo độ C,nhữnh ứng dụng độ F,nhìn bảng và sự chuyển đổi thường lệ cần phải được dùng.Dữ liệu nhiệt độ được lưu trữ như 16 bit sign-extended phần bổ sung của hai số trong việc đăng ký nhiệt độ.Những Sign bit (S) dùng để biểu lộ nếu nhiệt độ âm hay dương.Số dương S=0,số âm S=1.Nếu DS18B20 đăng ký độ phân giải 12 bit ,tất cả các bit trong việc đăng ký nhiệt độ sẽ được chứa trong giá trị của dữ liệu.Với độ phân giải 11 bit ,bit 0 không được mặc định.Với độ phân giải 10 bit thì bit 0 và bit 1 không được mặc định.Với độ phân giải 9 bit,bit 2,1,0 không được mặc định.Bảng biểu diễn ví dụ về dữ liệu số ở ngõ ra và việc đọc nhiệt độ của việc chuyển đổi độ phân giải 12 bit.
Bảng biểu diễn mối quan hệ giữa nhiệt dộ và dữ liệu:
Có 2 cách để cấp nguồn cho DS18B20:
-Ta có thể cấp nguồn trực tiếp từ chân VDD với một nguồn ở phía bean nguồn.Nó có thể điều khiển chế độ “parasite power”.Nguồn parasite power được sử dung phổ biến trong ứng dụng yêu cầu nhiệt độ ở nơi xa.Với cách cấp nguồn này thì chân VDD phải được kết nối với đất.
Cung cấp nguồn theo kiểu Parasite cho DS18B20 trong quá trình chuyển đổi nhiệt độ:
Nguồn cung cấp cho DS18B20 với nguồn cung cấp ngoài:
Bộ nhớ:
Bộ nhớ là sự kết hợp hỗn hợp của SRAM với EEPROM cho việc đăng ký chuông báo mức cao hay mức thấp và cấu hình đăng ký.Chú ý rằng nếu chức năng báo của DS 18B20 không sử dụng việc đăng ký mức cao hay mức thấp có thể đáp ứng như mục đích của những bộ nhớ bình thường.Tất cả các loại bộ nhớ đều đươc mô tả chi tiết trong bảng chức năng loại bộ nhớ.
Bản đồ bộ nhớ DS18B20:
Việc cấu hình đăng ký:
4 bit trong bộ nhớ hỗn tạp chứa cấu hình đăng ký ,nó được sắp xếp trình tự như trong bảng sau.Việc sử dụng có thể thiết lập dộ phân giải DS18B20 bằng cách sử dụng bit R0 và R1.Nguồn kéo lên mặc định của những bit là R0=1 và R1=1( độ phân giải 12 bit)Chú ý không có mối liên hệ gián tiếp giữa dộ phân giải với thời gian chuyển đổi.Bit 7 và bit 0 dến bit 4 trong cấu hình đăng ký được lưu trữ từ việc sử dụng nội bộ bởi thiết bị và khộng thể ghi chồng lên.
Cấu hình đăng ký:
Cấu hình cho độ phân giải cho nhiệt kế:
Hệ thống Bus:
Một bus hệ thống sử dụng một bus chủ đơn độc để mà điều khiển một hay nhiều thiết bị tớ.Khi chỉ có một thiết bị tớ ở trên bus,hệ thống được dẫn đến như một hệ thống đơn độc trên cùng.Hệ thống là”Multidrop” nếu có nhiều multi tớ trên đường bus.Tất cả các dữ liệu và lệnh đều được chuyển đến bit đầu tiên trên đường bus.
Việc chuyển tiếp thảo luận của một hệ thống bus nếu bị hư trong ba chủ đề:cấu hình phần cứng, sự thực hiện liên tiếp,và tín hiệu của một dây.
Đọc ROM [33h]:
Đây là lệnh chỉ có thể được sử dụng khi có một tớ trên đường Bus.Nó theo đường Bus chủ để mà đọc đoạn mã của tớ 64 bit ROM ngoài ra còn sử dụng tìm ROM.Nếu lệnh này được sử dụng khi có nhiều hơn một tớ hiện hành trên đường bus thì dữ liệu xung đột sẽ xảy ra khi tất cả các tớ cố phản ứng lại trong một vài thời gian,
Match ROM [55h]:
Tập lệnh Match ROM theo bởi một mã liên tiếp ROM 64 bit cho phép bus chủ cho địa chỉ đặc biệt tới thiết bị tớ trên multi Drop hoặc single Drop bus.Chỉ có tớ mới ngòi một cách chính xác một mã liên tiếp 64 bit sẽ phản ứng lại đến lệnh chức năng được phát ra bởi chủ, tất cả các tớ còn lại trên đường bus sẽ đợi để mà Reset xung.
WRITE SCRATCHPAD [4Eh]
Lệnh cho phép chủ viết 3 byte dữ liệu đến DS18B20’s scratchpad .Byte dữ liệu đầu tiên được viết vào đăng ký TH (byte 2 of the scratchpad), byte thứ hai được viết vào đăng ký TL(byte 3),và byte thứ 3 được viết vào đăng ký cấu hình (byte 4).Dữ liệu cần phải được chuyển đổi bit ý nghĩa đầu tiên.Tất cả 3 byte cần phải được viết trước khi chủ phát lệnh Reset, hoặc dữ liệu có thể được hỏng.
READ SCRATCHPAD [BEh]
Đây là lệnh cho phép chủ đọc phần chứa bộ nhớ hỗn hợp.Dữ liệu bắt đầu di chuyển với bit ý nghĩa của byte 0 và tiếp tục đọc đến byte thứ 9 (byte 8-CRC) là đọc.Chủ có thể phát lệnh Reset giới han đọc ít thời gian nếu chỉ phần dữ liệu hỗn hợp được cần.
COPY SCRATCHPAD [48h]
Lệnh này copy dữ liệu chứa trong bộ nhớ hỗn tạp TH,TL và đăng ký cấu hình (byte 2,3 và 4) đến EEPROM.Nếu thiết bị đang sử dụng là chế độ parasite power,trong khoảng 10μs (max) sau khi lệnh này được phát chủ cần phải có khả năng kéo lên mạnh trên đường bus ít nhất 10ms.
Bảng điện áp ký tự một chiều:(-55oC đến +125oC ;VDD=3.0V-5.5V)
Bảng điện áp ký tự xoay chiều:(-55oC đến +125oC ;VDD=3.0V-5.5V)
2. RS MAX232:
Cổng nối tiếp RS232 là một giao diện phổ biến rộng rãi nhất. Người ta còn gọi cổng này là cổng COM1, còn cổng COM2 để tự do cho các ứng dụng khác. Giống như cổng máy in cổng COM cũng được sử dụng một cách thuận tiện cho việc giao tiếp với thiết bị ngoại vi.
Việc truyền dữ liệu qua cổng COM được tiến hành theo cách nối tiếp. Nghĩa là các bit dữ liệu được truyền đi nối tiếp nhau trên một đường dẫn. Loại truyền này có khả năng dùng cho những ứng dụng có yêu cầu truyền khoảng cách lớn hơn, bởi vì các khả năng gây nhiễu là nhỏ đáng kể hơn khi dùng một cổng song song (cổng máy in)
Cổng COM 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 với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành viên thứ ba không thể tham gia vào cuộc trao đổi thông tin này.
* Các chân và đường dẫn được mô tả như sau:
Phích cắm COM có tổng cộng 8 đường dẫn, chưa kể đến đường nối đất. Trên thực tế có hai loại phích cắm, một loại 9 chân và một loại 25 chân. Cả hai loại này đều có chung một đặc điểm.
Việc truyền dữ liệu xảy ra ở trên hai đường dẫn. Qua chân cắm ra TXD máy tính gởi dữ liệu của nó đến KIT Vi điều khiển. Trong khi đó các dữ liệu mà máy tính nhận được, lại được dẫn đến chân RXD các tín hiệu khác đóng vai trò như là tín hiệu hổ trợ khi trao đổi thông tin, và vì thế không phải trong mọi trường hợp ứng dụng đều dùng hết.
Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích với điện áp TTL nên để giao tiếp KIT Vi điều khiển 8051 với máy tính qua cổng COM ta phải qua một vi mạch biến đổi điện áp cho phù hợp với mức TTL, ta chọn vi mạch MAX232 để thực hiện việc tương thích điện áp.
- GIỚI THIỆU VI MẠCH GIAO TIẾP MAX 232
Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện nối tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +10V hoặc –10V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận.
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch MAX 232. Còn chân RST (chân 10 của vi mạch MAX ) nối với đường dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu này. Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND (mass).
ĐẶC ĐIỂM KỸ THUẬT VỀ ĐIỆN CỦA RS232C
Qui định về chân của RS232C
Mức điện áp logic của RS-232C là khoảng điện áp giữa +15V và –15V. Các đường dữ liệu sử dụng mức logic âm: logic 1 có điện thế giữa –5V và –15V, logic 0 có điện thế giữa +5V và +15V. tuy nhiên các đường điền khiển (ngoại trừ đường TDATA và RDATA) sử dụng logic dương: gía trị TRUE = +5V đến +15V và FALSE =-5V đến –15.
Ở chuẩn giao tiếp này, giữa ngõ ra bộ kích phát và ngõ vào bộ thu có mức nhiễu được giới hạn là 2V. Do vậy ngưỡng lớn nhất của ngõ vào là ±3V trái lại mức ± 5V là ngưỡng nhỏ nhất với ngõ ra. Ngõ ra bộ kích phát khi không tải có điện áp là ± 25V.
Các đặc điểm về điện khác bao gồm
• RL (điện trở tải) được nhìn từ bộ kích phát có giá trị từ 3 ÷ 7k.• CL (điện dung tải) được nhìn từ bộ kích phát không được vượt quá 2500pF.• Để ngăn cản sự dao động quá mức, tốc độ thay đổi (Slew rate ) của điện áp không được vượt qúa 30V/µs.
Đối với các đường điều khiển, thời gian chuyển của tín hiệu (từ TRUE sang FALSE, hoặc từ FALSE sang TRUE ) không được vượt qúa 1ms. Đối với các đường dữ liệu, thời gian chuyển (từ 1 sang 0 hoặc từ 0 sang 1) phải không vượt qúa 4% thời gian của 1 bit hoặc 1ms.
CÁC ĐƯỜNG DỮ LIỆU VÀ ĐIỀU KHIỂN CỦA RS232
- TxD: Dữ liệu được truyền đi từ Modem trên mạng điện thoại.- RxD: Dữ liệu được thu bởi Modem trên mạng điện thoại.
Các đường báo thiết bị sẵn sàng:- DSR : Để báo rằng Modem đã sẵn sàng.- DTR : Để báo rằng thiết bị đầu cuối đã sẵn sàng- Các đường bắt tay bán song công.- RTS : Để báo rằng thiết bị đầu cuối yêu cầu phát dữ liệu.- CTS : Modem đáp ứng nhu cầu cần gửi dữ liệu của thiết bị đầu cuối cho thiết bị đầu cuối có thể sử dụng kênh truyền dữ liệu. Các đường trạng thái sóng mang và tín hiệu điện thoại:- CD : Modem báo cho thiết bị đầu cuối biết rằng đã nhận được một sóng mang hợp lệ từ mạng điện thoại.- RI : Các Modem tự động trả lời báo rằng đã phát hiện chuông từ mạng điện thoại địa chỉ đầu tiên có thể tới được của cổng nối tiếp được gọi là địa chỉ cơ bản (Basic Address). Các địa chỉ ghi tiếp theo được đặt tới bằng việc cộng thêm số thanh ghi đã gặp của bộ UART vào địa chỉ cơ bản.- Mức tín hiệu trên chân ra RxD tùy thuộc vào đường dẫn TxD và thông thường nằm trong khoảng –12 đến +12. Các bit dữ liệu được gửi đảo ngược lại. Mức điện áp đối với mức High nằm giữa –3V và –12V và mức Low nằm giữa +3V và +12V. Trên hình 2-4 mô tả một dòng dữ liệu điển hình của một byte dữ liệu trên cổng nối tiếp RS-232C.- Ở trạng thái tĩnh trên đường dẫn có điện áp –12V. Một bit khởi động (Starbit) sẽ mở đầu việc truyền dữ liệu. Tiếp đó là các bit dữ liệu riêng lẻ sẽ đến, trong đó các bit giá trị thấp sẽ được gửi trước tiên. Còn số của các bit thay đổi giữa 5 và 8. Ở cuối của dòng dữ liệu còn có một bit dừng (Stopbit) để đặt trở lại trạng thái ngõ ra (-12V).
Địa chỉ cơ bản của cổng nối tiếp của máy tính PC có thể tóm tắt trong bảng các địa chỉ sau:
COM 1 (cổng nối tiếp thứ nhất) Địa chỉ cơ bản = 3F8(Hex) COM 2 (cổng nối tiếp thứ hai) Địa chỉ cơ bản = 2F8(Hex)COM 3 (cổng nối tiếp thứ ba) Địa chỉ cơ bản = 3E8(Hex)COM 4 (cổng nối tiếp thứ tư) Địa chỉ cơ bản = 2E8(Hex)
Cũng như ở cổng máy in, các đường dẫn tín hiệu riêng biệt cũng cho phép trao đổi qua các địa chỉ trong máy tính PC. Trong trường hợp này, người ta thường sử dụng những vi mạch có mức độ tích hợp cao để có thể hợp nhất nhiều chức năng trên một chip. Ở máy tính PC thường có một bộ phát/nhận không đồng bộ vạn năng (gọi tắt là UART: Universal Asnchronous Receiver/ Transmitter) để điều khiển sự trao đổi thông tin giữa máy tính và các thiết bị ngoại vi. Phổ biến nhất là vi mạch 8250 của hãng NSC hoặc các thế hệ tiếp theo.
Thông thường với các yêu cầu ứng dụng tốc độ thấp người ta giao tiếp qua ngõ nối tiếp, nó giao tiếp theo tiêu chuẩn RS232C và dùng để giao tiếp giữa máy tính với Modem hoặc Mouse. Ngoài ra cũng có thể dùng giao tiếp với printer hay plotter nhưng không thông dụng lắm bởi tốc độ truyền quá chậm. Đối với máy AT cho ta hai ngõ giao tiếp COM1 và COM2. Trong một số card I/O ta có thể có đến 4 cổng COM.
Để giao tiếp nối tiếp với 2 ngõ COM này Bus hệ thống của CPU (Data Bus và Address Bus) hãng IBM sử dụng hai Chip lập trình của Intel là 8250 UART (Universal Asynchronus Receiver Transmitter). Địa chỉ theo bộ nhớ của hai Chip này là 0040:0000 cho UART của ngõ COM1 và 0040:0002 cho UART của ngõ COM2 (Địa chỉ logic do hệ điều hành chỉ định) và địa chỉ theo Port để truy xuất khi sử dụng là 3F8-3FF cho COM1 và 2F8-2FF cho COM2.
Dữ liệu truyền qua cho Port COM dưới dạng nối tiếp từng Bit một, đơn vị dữ liệu có thể là 5 Bit, 6 Bit hay 1 byte tùy theo sự cài đặt lúc khởi tạo Port COM. Ngoài ra để truyền dữ liệu qua Port COM còn cần những tham số sau: Bit mở đầu cho một đơn vị dữ liệu START Bit. STOP Bit (Bit kết thúc). Parity (Kiểm tra chẵn lẻ). Baud Rate (Tốc độ truyền) tạo thành một Frame (Khung truyền).
Port COM là một thể khởi tạo bằng BIOS thông qua chức năng 0 của Interrupt 14, nạp vào thanh ghi DX1 chỉ số chọn kênh (COM1 = 0, COM2 = 1).
Thanh ghi AL được nạp vào các tham số của việc truyền dữ liệu.
Bit D0 D1 : Cho biết độ rộng của dữ liệu 0 0 : Dữ liệu có độ rộng 5 Bit 0 1 : Dữ liệu có độ rộng 6 Bit 1 0 : Dữ liệu có độ rộng 7 Bit 1 1 : Dữ liệu có độ rộng 8 Bit.Bit D2 : Cho biết số Stop Bit. 0 : Sử dụng một bit Stop 1 : Sử dụng hai bit Stop Bit D3 D4 : Các Bit parity (chẵn lẻ) 0 0 : Không kiểm tra tính Parity 1 1 : Không kiểm tra tính Parity 0 1 : Odd (lẻ) 1 0 : Even (chẵn)Bit D5D6D7 : Cho biết tốc độ truyền (Baud Rate) 0 0 0 : Tốc độ truyền 110bps (bit per second) 0 0 1 : Tốc độ truyền 150bps (bit per second) 0 1 0 : Tốc độ truyền 300bps (bit per second) 0 1 1 : Tốc độ truyền 600bps (bit per second) 1 0 0 : Tốc độ truyền 1200bps (bit per second) 1 0 1 : Tốc độ truyền 2400bps (bit per second) 1 1 0 : Tốc độ truyền 4800bps (bit per second) 1 1 1 : Tốc độ truyền 9600bps (bit per second)
CÁC IC KÍCH PHÁT VÀ THU CỦA RS232C
Nhờ tính phổ biến của giao tiếp, người ta đã chế tạo các IC kích phát và thu. Hai vi mạch như vậy được Motorola sản xuất là IC kích phát MC 1488 có dạng vỏ vuông. Và MC 1489.Mỗi IC kích phát 1488 nhận một tín hiệu mức TTL và chuyển thành tín hiệu ở ngõ ra tương thích với mức điện áp của RS232C. IC 1489 phát hiện các mức vào của RS232C và chuyển chúng thành các ngõ ra có mức TTL.
* Sơ đồ kết nối giữa cổng COM với Vi điều khiển 8051 :
Sơ đồ thực thực tế
Vi mạch này nhận mức RS232 đã được gởi tới từ máy tính và biến đổi tín hiệu náy thành tín hiệu TTL để cho tương thích với IC 8051 và nó cũng thực hiện ngược lại là biến đổi tín hiệu TTL từ Vi điều khiển thành mức +12V, -12V để cho phù hợp hoạt động của máy tính. Giao tiếp theo cách này, khoảng cách từ máy tính đến thiết bị ngoại vi có thể đạt tới trên 20 mét.Đối với đề tài chỉ yêu cầu truyền dữ liệu từ máy tính qua KIT chứ không truyền dữ liệu từ KIT qua máy tính vì vậy chúng em chọn vi mạch MAX232 để thực hiện biến đổi tương thích mức tín hiệu.Ưu điểm của giao diện này là có khả năng thiết lập tốc độ Baud.Khi dữ liệu từ máy tính được gởi đến KIT Vi điều khiển 8051 qua cổng COM thì dữ liệu này sẽ được đưa vào từng bit (nối tiếp) vào thanh ghi SBUF (thanh ghi đệm), đến khi thanh ghi đệm đầy thì cờ RI trong thanh ghi điều khiển sẽ tự động Set lên 1 và lúc này CPU sẽ gọi chương trình con phục vụ ngắt và dữ liệu sẽ được đưa vào để xử lý.
3. IC 741:
CHƯƠNG III:
PHẦN MỀM
Giới thiệu:
Phần cứng đó là những gì đã cố định, nó là một cỗ máy, cỗ máy muốn hoạt động thì phải có công nhân lành nghề điều khiển nó, với cùng một cỗ máy nhưng người công nhân có tay nghề cao thì sản phẩm càng có chất lượng. Từ đó chúng ta nhận thấy rằng, phần cứng muốn hoạt động được đòi hỏi phải có sự can thiệp của con người mà chủ yếu là thông qua phần mềm điều khiển và sự hoạt động mềm dẻo của phần cứng lại phụ thuộc vào trình độ người lập trình. Như vậy, phần mềm và phần cứng tuy là hai bộ phận hoạt động độc lập nhưng hoạt động của chúng không thể tách rời nhau trong cùng một hệ thống, chúng hỗ trợ lẫn nhau để hình thành nên hoạt động của hệ thống.
Biết được tầm quan trọng của phần mềm, chúng ta sẽ vận dụng phần cứng để các chương trình phần mềm phục vụ mụch đích của chúng ta.
2. Giới thiệu ngôn ngữ Assembly:
Khi máy tính thực hiện chương trình, nó đọc một dãy các số nhị phân chỉ gồm toàn các số 0 và 1 vào bộ nhớ, giải mã rồi hiển thị. Để cho dễ đọc và dễ viết hơn thường ta viết các số nhị phân dưới dạng các số thập lục phân được gọi là chương trình viết bằng ngôn ngữ máy. Dùng kí tự “A” hay “B”.để ra lệnh cho vi xử lí thực hiện một chương trình đã được viết sẵn.
Tuy chương trình có thể viết trực tiếp bằng ngôn ngữ máy, nhưng nếu trong chương trình có một lỗi nào đó, hoặc muốn thêm hoặc xoá một mã lệnh nào đó có điạ chỉ đi kèm như jump, call, loop … cũng phải được tính toán lại cho đúng địa chỉ, nên rất khó cho việc lập, sửa và bảo trì chương trình. Vì vậy thay vì viết trực tiếp bằng ngôn ngữ máy, người lập trình có thể viết bằng một ngôn ngữ dưới dạng các ký hiệu hình thức hoặc các từ gợi nhớ tương đương với một lệnh của CPU. Đây chính là Hợp Ngữ (Assembly Language).
Hợp ngữ (Assembly Language) là ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy.
Assembly là chương trình dịch các chương trình viết bằng hợp ngữ sang mã máy.
Sau đây là chương trình nạp vào vi xử lý:
#include
;PCON EQU 87H
ORG 00H
BAUD_RATE:
MOV TMOD,#20H ;Enable reception
;Set Serial port mode to 8-bit UART
MOV SCON,#53H ;Set baudrate to 9600 at 11.0592MHz
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1 ;Start Timer
MAIN: MOV P0,#01111111B ; MAIN
MOV P1,#01111111B ; PORT HIEN THI
LCALL READ
CJNE A,#'A',D1 ; LENH MO DEN
LCALL TRIPLE10
D1: CJNE A,#'C',D2 ;LENH MO QUAT
LCALL TRIPLE30
D2: CJNE A,#'E',S ;LENH MO CUA
LCALL MOTOR
S: CJNE A,#'S',D3 ;LENH SOS
LCALL SOS
D3: LJMP MAIN
;####################READ##########################
READ:
;Wait for Receive interrupt flag
JNB RI,$
;If falg is set then clear it
CLR RI
;Then read data from SBUF
MOV A,SBUF
RET
;######################MOTOR###################
MOTOR: MOV P0,#11111011B ;MO CUA
MOV P1,#11111011B
LCALL DEL
LCALL MOTOR1
MOTOR1: MOV P0,#11111111B ;MO CUA XONG
MOV P1,#11111111B
LCALL READ
CJNE A,#'F',MOTOR2 ;LENH DONG CUA
LCALL MOTOR5
MOTOR2: CJNE A,#'A',MOTOR3 ;LENH MO DEN
LCALL TRIPLE20
MOTOR3: CJNE A,#'C',MOTOR4 ;LENH MO QUAT
LCALL TRIPLE40
MOTOR4: CJNE A,#'S',S1 ; LENH SOS
LCALL SOS
S1: LJMP MOTOR1
MOTOR5: MOV P0,#11110111B
MOV P1,#11110111B
LCALL DEL
LJMP MAIN
;######################TRIPLE###################
TRIPLE1: MOV P0,#11110110B ;mo den va dong cua
MOV P1,#11110110B
LCALL DEL
LCALL TRIPLE10
TRIPLE10: MOV P0,#11111110B ;DONG CUA XONG, CON DEN DANG SANG
MOV P1,#11111110B
LCALL READ
CJNE A,#'B',TRIPLE11
LJMP MAIN
TRIPLE11: CJNE A,#'C',TRIPLE12
LJMP TRIPLE60
TRIPLE12: CJNE A,#'E',S13
LCALL TRIPLE2
S13: CJNE A,#'S',TRIPLE13
LCALL SOS
TRIPLE13: LJMP TRIPLE10
TRIPLE2: MOV P0,#11111010B ;MO DEN, MO CUA
MOV P1,#11111010B
LCALL DEL
LCALL TRIPLE20
TRIPLE20: MOV P0,#11111110B ;MO CUA XONG, DEN VAN SANG
MOV P1,#11111110B
LCALL READ
CJNE A,#'B',TRIPLE21
LJMP MOTOR1
TRIPLE21: CJNE A,#'C',TRIPLE22
LJMP TRIPLE50
TRIPLE22: CJNE A,#'F',S23
LCALL TRIPLE1
S23: CJNE A,#'S',TRIPLE23
LCALL SOS
TRIPLE23: LJMP TRIPLE20
TRIPLE3: MOV P0,#11110101B ;DONG CUA, MO QUAT
MOV P1,#11110101B
LCALL DEL
LCALL TRIPLE30
TRIPLE30: MOV P0,#11111101B ;DONG CUA XONG, QUAT VAN MO
MOV P1,#11111101B
LCALL READ
CJNE A,#'D',TRIPLE31
LJMP MAIN
TRIPLE31: CJNE A,#'A',TRIPLE32
LJMP TRIPLE60
TRIPLE32: CJNE A,#'E',S33
LCALL TRIPLE4
S33: CJNE A,#'S',TRIPLE33
LCALL SOS
TRIPLE33: LJMP TRIPLE30
TRIPLE4: MOV P0,#11111001B ;MO QUAT MO CUA
MOV P1,#11111001B
LCALL DEL
LCALL TRIPLE40
TRIPLE40: MOV P0,#11111101B ;MO CUA XONG, QUAT VAN MO
MOV P1,#11111101B
LCALL READ
CJNE A,#'D',TRIPLE41
LJMP MOTOR1
TRIPLE41: CJNE A,#'A',TRIPLE42
LJMP TRIPLE50
TRIPLE42: CJNE A,#'F',S43
LCALL TRIPLE3
S43: CJNE A,#'S',TRIPLE43
LCALL SOS
TRIPLE43: LJMP TRIPLE40
TRIPLE5: MOV P0,#11111000B ;MO DEN, QUAT, CUA
MOV P1,#11111000B
LCALL DEL
LCALL TRIPLE50
TRIPLE50: MOV P0,#11111100B ; den quat van sang
MOV P1,#11111100B
LCALL READ
CJNE A,#'D',TRIPLE51 ; TAT QUAT, DEN SANG
LJMP TRIPLE20
TRIPLE51: CJNE A,#'B',TRIPLE52 ;TAT DEN, QUAT VAN CHAY
LJMP TRIPLE40
TRIPLE52: CJNE A,#'F',S53
LCALL TRIPLE6
S53: CJNE A,#'S',TRIPLE53
LCALL SOS
TRIPLE53: LJMP TRIPLE50
TRIPLE6: MOV P0,#11110100B ; DONG CUA, DEN QUAT VAN SANG
MOV P1,#11110100B
LCALL DEL
LCALL TRIPLE60
TRIPLE60: MOV P0,#11111100B ; DONG CUA XONG,DEN QUAT VAN SANG
MOV P1,#11111100B
LCALL READ
CJNE A,#'D',TRIPLE61 ; TAT QUAT, DEN SANG
LJMP TRIPLE10
TRIPLE61: CJNE A,#'B',TRIPLE62 ;TAT DEN, QUAT VAN CHAY
LJMP TRIPLE30
TRIPLE62: CJNE A,#'E',S63
LCALL TRIPLE5
S63: CJNE A,#'S',TRIPLE63
LCALL SOS
TRIPLE63: LJMP TRIPLE60
;################### SOS #####################
SOS: MOV P0,#11111111B
MOV P1,#11111111B
LCALL READ
CJNE A,#'O',SOS1
LJMP MAIN
SOS1: LJMP SOS
;################### Delay 3s #####################
DEL: MOV R5,#150
DEL3: mov r6,#100
DEL1: mov r7,#120
DEL2: djnz r7,DEL2
djnz r6,DEL1
DJNZ R5,DEL3
RET
END
3. Giới thiệu ngôn ngữ CCS:
- Chương trình CCS dùng cho tài liệu này là PCW COMPILER version 3.07 (2001 ) hoặc 3.222 (2004) , bao gồm : PCB , PCM và PCH . Phiên bản mới nhất là 3.227 có nhiều hàm mới và chức năng mới , cập nhật mới . Lập trình cho các họ PIC 12 bit , 14 bit và PIC 18 .
- Để viết 1 chương trình C mới : chạy CCS , vào New để tạo 1 file C mới . Trên thanh toolbar :
- Chọn “Microchip 12 bit” để viết chương trình cho PIC 12 bit . “Microchip 14 bit” để viết
chương trình cho PIC 14 bit . “Microchip PIC18” để viết chương trình cho PIC18 .
- Chọn “Compiler” để biên dịch chương trình bạn đang viết.
- CCS là trình biên dịch dùng ngôn ngữ C lập trình cho VĐK . Đây là ngôn ngữ lập trình đầy sức mạnh , giúp bạn nhanh chóng trong việc viết chương trình hơn so với ngôn ngữ Assembly .
- Mặt khác , nó sinh mã không theo ý muốn ( dù không sai , ví dụ như sinh nhiều mã lệnh không quan trọng khi thực thi hàm ngắt ) làm chậm tốc độ thực thi chương trình nếu bạn đòi hỏi chương trình xử lý với tốc độ cao , ví dụ như điều chế PWM .
- Nhưng CCS C cho phép bạn phối hợp ASSEMBLY cùnh với C , điều này cho phép chương trình của bạn sẽ trở nên rất uyển chuyển , kết hợp được sức mạnh của cả 2 ngôn ngữ , dù rằng việc phối hợp sẽ làm cho việc viết chương trình trở nên khó khăn hơn .
- CCS cung cấp các công cụ tiện ích giám sát hoạt động chương trình như : C/ASM list : cho phép xem mã ASM của file bạn biên dịch , giúp bạn quản lý mã và nắm được các thức mã sinh ra và nó chạy như thế nào , là công cụ rất quan trọng , bạn có thể gỡ rối chương trình và nắm được hoạt động của nó ; SYMBOL hiển thị bộ nhớ cấp phát cho từng biến , giúp quản lý bộ nhớ các biến chương trình ,. . . CallTree hiển thị phân bổ bộ nhớ .
Sau đây là chương trình nạp cho PIC:
#include //Device
#fuses xt,nowdt,noprotect,noput,nolvp //Fuses
#use delay (clock=4000000) //4.00 MHz
#include //LCD driver
#include
int i,read_ok;
byte buffer[8];
float t,t1;
main()
{
lcd_init(); //LCD start
while(true)
{
init_1wire();
write_1wire(0xcc); //skip ROM
write_1wire(0x44); //convert T
init_1wire();
write_1wire(0xcc); //skip ROM
write_1wire(0xbe); //read scratchpad
for(i=0;i<8;i++)
{
buffer[i]=read_1wire();
read_ok=1;
}
t=make16(buffer[1],buffer[0]); //calculate temperature
t=(float)t/16.0; //Calculation 0.1 deg C resolution
lcd_gotoxy(2,2);
if(t>=20&&t<=30.0)
printf(lcd_putc,"mat! ");
else if(t<20)
printf(lcd_putc,"lanh! ");
else if(t>30.0&&t<40.0)
printf(lcd_putc,"nong! ");
else if(t>=40.0)
printf(lcd_putc,"chay! ");
if(t>=60)
output_c(0b111111);
else if(t>=20&&t<29.0)
output_c(0b000000);
else
output_c(0b000000);
lcd_gotoxy(1,1);
printf(lcd_putc,"nhietdo=%3.1f\'C",t);
delay_ms(1000);
}
}
4. Giới thiệu MATLAB:
MATLAB là một môi trường tính toán số và lập trình, được thiết kế bởi công ty MathWorks. Matlab cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. Sau đây là chương trình lập trình xuất dự liệu cho MATLAB:
( địa chỉ tham khảo)
function varargout = buttonA(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @buttonA_OpeningFcn, ...
'gui_OutputFcn', @buttonA_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before buttonA is made visible.
function buttonA_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to buttonA (see VARARGIN)
% Choose default command line output for buttonA
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes buttonA wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = buttonA_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
%function love1
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','A');
fclose(cong);
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
%function love1
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','B');
fclose(cong);
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
%function love1
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','C');
fclose(cong);
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
%function love1
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','D');
fclose(cong);
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','E');
fclose(cong);
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','F');
fclose(cong);
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','S');
fclose(cong);
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
cong=serial('COM5');
set(cong,'BaudRate',9600);
fopen(cong);
fprintf(cong,'%c','O');
fclose(cong);
% hObject handle to pushbutton9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
CHƯƠNG IV:
ĐIỀU KHIỂN
I/ Giao diện MATLAB điều khiển thông qua máy tính:
- Chú thích:
. Mô hình điều khiển bao gồm 3 thiết bị: đèn, quạt, cửa.
. Mô hình điều khiển có 2 chế độ : Enable (cho phép điều khiển) và Disable (không cho phép điều khiển).
. Các thành phần phụ trợ: Đèn cửa (tự động bật tắt), Nhiệt độ (cảnh báo cháy).
III/ Sơ đồ điều khiển thông qua mạng:
III/ Điều khiển thông qua mạng LAN:
. Máy Server:
- IP: 192.168.1.3
. Máy Client:
- IP: 192.168.1.4
1. Cấu hình trên máy Server:
- My computer >>> Propertise >>> Remote >>> Check : Allow user to connect remotely to this computer >>> Nhấn : Select Remote user
- Add : administrator
2. Cấu hình trên máy Client:
- Nhập địa chỉ IP máy cần điều khiển
- Nhập Username và Password
IV/ Điều khiển thông qua mạng Internet:
- Ngoài những bước trên , cần cấu hình NAT Server trên Modem
- Cần đăng ký 1 free host, ở đây ta dùng trang No-ip.com
- Tải phần mềm Client của No-ip
. Khi cần Request IP ta nhờ Server của NO-ip phân giải Host đã đăng kí
Từ đó làm lại các bước đã nêu ở III là có thể Remote Server.
Phần C: Tổng Kết
Đánh giá kết quả thi công
Với sự phát triển đến mức tiên tiến của KHKT như hiện nay, đặc biệt là lĩnh vực điện tử và vi tính đã làm tiền đề cho mọi ngành khoa học khác dễ dàng phát triển – sự phát triển vũ bão đó luôn đeo đuổi hoài bảo duy nhất – phục vụ con người. Kết quả, mỗi ứng dụng trong cuộc sống con người luôn sẵn sàng thừa hưởng những tinh hoa đó, nhằm nâng cao năng suất lao động, nâng cao cuộc sống con người, không ngừng thúc đẩy xã hội về mọi mặt.
Để tiếp cận với lĩnh vực tự động hoá, đặc biệt là lĩnh vực truyền dữ liệu nên em bắt đầu nghiên cứu lĩnh vực này và thực hiện đề tài : “Điều khiển thiết bị từ xa thông qua máy tính” với những thành quả nhất định trong thi công:
_ Viết chương trình giao tiếp giữa Vi Điều Khiển AT89C51 và Máy Vi Tính.
_ Mạch giao tiếp giữa Vi Điều Khiển AT89C51 và Máy Vi Tính thông qua port giao tiếp nối tiếp.
Mặc dù đã cố gắng nhiều vẫn không tránh được những thiếu sót: chưa hoàn thành được chương trình truyền dữ liệu từ IC sang và chương trình giao diện điều khiển còn rất đơn giản.
Đây là lần đầu tiên tiến hành thi công với chương trình giao tiếp khá phức tạp, nên ý muốn hoàn chỉnh đến mức tối ưu nhưng vẫn chưa đạt được. Tuy nhiên, kết quả thi công vẫn đạt được những yêu cầu nhất định.
************************************************************************************
LỜI CẢM TẠ
Xin chân thành cám ơn tập thể thầy cô trường CĐKT Cao Thắng đã tận tình giảng dạy chúng em trong suốt những năm qua. Tuy đó chỉ là một khoảng thời gian ít ỏi nhưng chúng em đã tiếp thu được rất nhiều những kiến thức bổ ích góp phần làm hành trang vào đời cho chúng em sau này.
******************************HẾT*******************************
Các file đính kèm theo tài liệu này:
- Điều khiển thiết bị từ xa thông qua máy tính.doc