Hiện nay, tai nạn giao thông là một vấn đề mà cả xã hội đang quan tâm. Làm thế nào để giảm thiểu tai nạn giao thông là một câu hỏi lớn vẫn chưa có lời giải đáp thỏa đáng. Tai nạn rất dễ xảy ra tại những nơi hạn chế tầm nhìn đặc biệt là những đoạn đường cua gấp. Mặc dù tại những nơi đó đã có hệ thống gương cầu, tuy nhiên việc quan sát qua gương cầu lại phải ở khoảng cách khá gần và không thể cảnh báo từ xa được. Hơn nữa hệ thống gương cầu theo thời gian sẽ bị bụi bám vào làm mất đi tính năng phản chiếu. Xuất phát từ vấn đề trên với mong muốn đóng góp một phần nhỏ bé của mình vào cuộc chiến giảm thiểu tai nạn giao thông em đã chọn đề tài “HỆ THỐNG CẢNH BÁO GIAO THÔNG ĐOẠN ĐÈO DỐC” thuộc lĩnh vực “Kỹ thuật điện và cơ khí”.
28 trang |
Chia sẻ: duongneo | Lượt xem: 1650 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Đồ án Hệ thống cảnh báo giao thông đoạn đèo dốc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Trang
TÓM TẮT
1. Mục tiêu nghiên cứu
Tìm hướng giảm thiểu tai nạn giao thông tại những đoạn đèo dốc nguy hiểm
Thay thế hệ thống gương cầu thường có thời gian sử dụng ngắn và phạm vi quan sát gần
Trả lời các câu hỏi:
Hệ thống có thay thế tốt gương cầu không ?
Giá thành lắp đặt một hệ thống ?
Chi phí phát sinh trong quá trình vận hành ?
Vấn đề nảy sinh trong quá trình vận hành ?
2. Trình tự thực hiện
Tìm hiểu các vấn đề cơ bản sau:
Điều kiện chiếu sáng tại những đoạn đường đèo dốc
Khả năng quan sát và báo hiệu qua gương cầu
Khả năng chiếu sáng và báo hiệu của hệ thống
Điều kiện nắng tại những đoạn đèo dốc
Độ rộng của những đoạn đường đèo, dốc
Tiến hành thiết kế mạch điện tử dựa vào yêu cầu và các số liệu
3. Kết quả nghiên cứu
Đối với sản phẩm
Thực hiện cảnh báo ổn định khi có xe đi vào khu vực cảm biến
Đảm bảo yêu cầu điều khiển chế độ hoạt động của đèn đường
Đối với hệ thống
Nhỏ gọn và đảm bảo yêu cầu chức năng
Giá thành thấp phù hợp để trang bị cho các đoạn đường
- Tiết kiệm năng lượng
PHẦN I:
GIỚI THIỆU
1. Đặt vấn đề
Hiện nay, tai nạn giao thông là một vấn đề mà cả xã hội đang quan tâm. Làm thế nào để giảm thiểu tai nạn giao thông là một câu hỏi lớn vẫn chưa có lời giải đáp thỏa đáng. Tai nạn rất dễ xảy ra tại những nơi hạn chế tầm nhìn đặc biệt là những đoạn đường cua gấp. Mặc dù tại những nơi đó đã có hệ thống gương cầu, tuy nhiên việc quan sát qua gương cầu lại phải ở khoảng cách khá gần và không thể cảnh báo từ xa được. Hơn nữa hệ thống gương cầu theo thời gian sẽ bị bụi bám vào làm mất đi tính năng phản chiếu. Xuất phát từ vấn đề trên với mong muốn đóng góp một phần nhỏ bé của mình vào cuộc chiến giảm thiểu tai nạn giao thông em đã chọn đề tài “HỆ THỐNG CẢNH BÁO GIAO THÔNG ĐOẠN ĐÈO DỐC” thuộc lĩnh vực “Kỹ thuật điện và cơ khí”.
2. Mục đích nghiên cứu
- Tạo một hệ thống cảnh báo từ xa cho các phương tiện qua lại những đoạn đường cua gấp
- Thay thế hệ thống gương cầu còn nhiều hạn chế
- Góp phần giảm thiểu tai nạn giao thông
3. Giả thuyết vấn đề
- Khi có xe qua lại những đoạn đường cua gấp, nếu có những hệ thống giúp ta phát hiện và xử lí thông tin sau đó hiển thị lên một bảng hiệu bằng ánh sáng màu thì như vậy rất tốt và hữu ích cho những phương tiện giao thông qua lại chỗ này. Vì ánh sáng có thể quan sát từ xa và không bị bụi che mờ.
- Hơn nữa, tại những đoạn đường này rất cần được chiếu sáng để hạn chế tai nạn đáng tiếc. Tuy nhiên năng lượng là một vấn đề cần quan tâm rất lớn, mặc dù đã có hệ thống năng lượng mặt trời. Tuy nhiên, khi không có phương tiện qua lại khu vực này mà hệ thống đèn vẫn liên tục chiếu sáng thì rất lãng phí điện năng. Vì vậy, cần một hệ thống nhận biết có phương tiện qua lại hay không để thực hiện việc chiếu sáng. Nếu không có phương tiện qua lại thì cần tắt việc chiếu sáng nhằm tiết kiệm năng lượng.
4. Yêu cầu đạt được của nghiên cứu
- Cảnh báo chính xác phương tiện qua lại
- Hệ thống nhỏ gọn
- Giá thành rẻ, có thể áp dụng rộng rãi
- Điều khiển hệ thống đèn đường hiệu quả
PHẦN 2
PHƯƠNG PHÁP VÀ THIẾT BỊ THÍ NGHIỆM
I. PHƯƠNG PHÁP THU THẬP DỮ LIỆU
1. Thu thập dữ liệu
- Yêu cầu hệ thống phải nhận biết được phương tiện qua lại tại những vị trí xác định.
- Xử lí thông tin để đưa ra cảnh báo
- Phát hiện được ban ngày và ban đêm để điều khiển hệ thống chiếu sáng
2. Xây dựng phần cứng
2.1. Xây dựng sơ đồ khối của mạch điện tử
a. Nguyên lí làm việc
Quan sát trên hình là một đoạn đường cua khá gấp, ở vị trí của xe đỏ và xe trắng sẽ không thể thấy nhau được. Do đó để cảnh báo cho hai xe biết ta xử dụng một hệ thống có nguyên lí làm việc như sau. Hệ thống sẽ có hai cảm biến nhận biết có xe qua lại đặt tại hai vị trí A và B. Khi có xe qua A, B các cảm biến gửi tín hiệu về cho vi xử lí. Từ đó vi xử lí sẽ bật tín hiệu báo có xe lên hoặc xuống tương ứng tại nơi đặt biển báo C. Đồng thời, nếu hệ thống được tích hợp trong các trụ đèn chiếu sáng dùng năng lượng mặt trời trên những đoạn đường này, nó còn có khả năng điều khiển bật hệ thống chiếu sáng khi có xe qua lại và nếu không có xe qua lại trong khoảng thời gian định trước hệ thống sẽ tắt việc chiếu sáng để tiết kiệm điện năng.
b. Sơ đồ khối
2.2. Tìm hiểu các mạch điện của hệ thống
a. Mạch cảm biến khoảng cách HC-SR04
Cảm biến khoảng cách siêu âm HC-SR04 được sử dụng rất phổ biến để xác định khoảng cách vì RẺ và CHÍNH XÁC. Cảm biến sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 500 cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình.
Sơ đồ chân của HC-SR04 gồm: VCC, trig, echo, GND. Trong đó:
VCC --> pin 5V Arduino.
trig --> chân digital (OUTPUT), đây là chân sẽ phát tín hiệu từ cảm biến.
echo --> chân digital (INPUT), đây là chân sẽ nhận lại tín hiệu được phản xạ từ vật cản
GND ---> GND Arduino.
Nguyên lý hoạt động
Để đo khoảng cách, ta sẽ phát 1 xung rất ngắn (10 microSeconds ) từ chân trig. Sau đó, cảm biến sẽ tạo ra 1 xung HIGH ở chân echo cho đến khi nhận lại được sóng phản xạ ở pin này. Chiều rộng của xung sẽ bằng với thời gian sóng siêu âm được phát từ cảm biển và quay trở lại.
Tốc độ của âm thanh trong không khí là 340 m/s (hằng số vật lý), tương đương với 29,412 microSeconds/cm (106 / (340*100)). Khi đã tính được thời gian, ta sẽ chia cho 29,412 để nhận được khoảng cách.
b. Mạch nhận biết sáng tối
Mạch nhận biết sáng tối
Nguyên lí hoạt động của mạch như sau: Vào ban ngày ánh sáng chiếu vào quang trở làm cho điện trở của nó giảm mạnh vì vậy Tranzitor ngưng dẫn nên chân C ở mức cao. Khi trời tối, không có ánh sáng chiếu vào quang trở làm điện trở của nó tăng nên Tranzitor dẫn vì vậy chân C ở mức thấp.
- Từ nguyên lí trên ta thấy ban ngày chân C ở mức cao, ban đêm chân C ở mức thấp. Do đó ta kết nối chân C với VĐK để nhận biết ban ngày hay buổi tối.
c. Mạch điều khiển biển báo
Mạch công suất cho biển báo
Biển báo hiệu
-
*Mạch công suất
- Ta chọn Tranzito công suất hoặc Fet để điều khiển biển báo.
- Khi có tín hiệu đưa vào chân B của Tranzitor để kích mở thì có dòng qua Tranzitor do đó sẽ làm biển báo phát sáng.
- Khi không có tín hiệu đưa vào chân B, Tranzitor ngưng dẫn nên biển báo không phát sáng (tắt)
*Biển báo hiệu
- Biển báo hiệu được làm từ các đèn led để tiết kiệm năng lượng
- Cấu tạo của led
- Bố trí các Led theo hình mũi tên để hiện thị xe lên và xuống
d. Khối xử lí trung tâm
- Mạch điện dùng chíp AT89C2051 để điều khiển
Hình ảnh của IC
* Một số đặc tính
Đây là một vi điều khiển của hãng atmel, đầy đủ các tính năng như chip 89C51.
- Chip này chỉ có 20 chân. 15 đường xuất nhập
- Điện áp làm việc : 2,7 V 6V. (Thường dùng ở mức 5V ).
- Tần số làm việc: Tần số dao động thạch anh từ 0 tới 24Mhz.
- ROM : 2Kbyte Flash ROM .
- RAM: 128 bytes.
- Hai bộ định thì 16-bit.
- Lập trình tuần tự bằng kênh UART .
- Có 6 nguồn ngắt .
- Có 2 mức khóa bộ nhớ chương trình.
- Có cổng nối tiếp.
- Hai bộ so sánh Analog tích hợp sẵn trên chip.
Trực tiếp tiếp điều khiển LED ngõ ra.
* Sơ đồ khối
* Sơ đồ chân
Sơ đồ chân
PORT 1: T ừ chân 12 19: Xuất nhập dữ liệu, từ P1.2 P1.7 được dùng để kéo lên bên trong. P1.0 và P1.1 tương ứng tích cực mức logic cao và thấp cho hai đầu vào AIN0 và
AIN1 tương ứng của bộ so sánh chính xác trên chíp .
Port 1, bộ khhuyếch đại đệm đầu ra có thể hạ xuống 20mA và có thể điều khiển LED hiển thị trực tiếp. Chỉ cần 1s để chuyển những chân của Port 1 sử dụng như những đầu vào. Khi chân P1.2 P1.7 được sử dụng như những đầu vào, chúng s ẽ là những nguồn dòng I vì được kéo lên bên trong. Port1cũng nhận được mã dữ liệu từ chương trình FLASH và thực hiện.
PORT 3: Chân số 2, 3 , 6, 7, 8, 9, 11, những chân này đã có điện t rở kéo lên. P3.6 được nối cố định giữa đường xuất nhập trên bộ so sánh của chip và không thể truy cập . Chỉ cần 1s để chuyển những chân của Port 3 lên mức cao bởi sự kéo lên bên trong và có thể sử dụng như những đầu vào, chúng sẽ là những nguồn dòng I vì được kéo lên bên trong Port 3 cũng phục vụ cho các chức năng của nhiều tính năng đặc biệt của 89C2051 như sau:
Port 3 cũng nhận được tín hiệu điều khiển từ Flash và thực hiện.
- Vcc : Chân số 20: điện áp vào khoảng 2,7V 6V( thường dùng ở mức 5V)
- GND : Chân số 10: chân nối mass.
- RST : Xác lập lại trạng thái ban đầu . RST=0: Chíp hoạt động bình thường.
RST=1: Chíp được thiết lặp l ại trạng thái ban đầu.
- XTAL1: Ngõ vào mạch tạo xung clock trong chip và ngõ vào bộ khuếch đại đảo chiều.
- XTAL2: Ngõ ra t ừ bộ khuếch đại đảo chiều.
XYAL1, XTAL2 là ngõ vào và ngõ ra tương ứng của bộ khuyếch đại đảo chiều, nó
có thể định hình và được sử dụng như một bộ giao động trên chíp (hinh 1). Tinh thể thạch anh hay cộng hưởng gốm được sử dụng. Hoặc là nhân xung t ừ bên ngoài(hình 2)
* Thanh ghi có chức năng đặc biệt :
Bên trong sơ đồ của chip có một vùng nhớ đặc biệt được gọi là thanh ghi có chức năng đặc biệt.Các vùng địa chỉ của thanh ghi được đưa vào bảng dưới đây .Lưu ý rằng: không phải tất cả các địa chỉ được sử dụng, và các địa chỉ trống có thể không được thực hiện trên chíp. Địa chỉ đọc sẽ truy xuất trở về dữ liệu ngẫu nhiên, và địa chỉ ghi sẽ truy xuất về chế độ không có hiệu lực xác định.
* Bộ nhớ chương trình khóa bit:
Trên chíp có hai bộ khóa bit có thể hoạt động không cần lập trình (U), hoặc có thể lập trình (P) để bổ sung thêm nhiều tính năng đư ợc liệt kê trong bảng dưới đây .
* Chế độ nghỉ :
Ở chế độ nghỉ, CPU được đặt ở chế độ ngủ trong khi tất cả bộ phận ngoại vi vẫn hoạt động. Chế độ này được gọi ra bởi phần mềm. Nội dung của các thanh ghi trong RA M và tất cả các giá trị trong thanh ghi đặc biệt cũng sẽ không đổi ở chế độ này. Chế độ nghỉ có thể bị dừng lại bất kì khi nào có sự kích hoạt hay thay đổi nào đó, hoặc được reset bằng phần cứng. Các P1.0 và P1.1 nên được thiết lập ở mức "L" nếu bên ngoài-up không đư ợc sử dụng, hoặc thiết lập ở mức "H" nếu bên ngoài pull-up được sử dụng.
Cần lưu ý rằng khi “nghỉ ”l à kết thúc bằng một phần cứng. T ài liệu thực hiện chương trình t ừ đâu nó lại tắt, lên t ới hai chu kỳ máy trư ớc khi các nguy ên t ắc điều khiển bên trong thiết lập lại. Trên chíp phần cứng quy ết định quy ền truy cập vào bộ nhớ trong RAM trong trường hợp này, nhưng truy cập vào các port không thể quyết định được. Đ ể loại trừ khả năng này xảy ra một cách bất ngờ viết cho một port khi chế độ nghỉ được l ặp lại, ta không nên viết tới một Port hay bộ nhớ ngoài
6. Chế độ power -down :Ở chế độ power-down, bộ dao động ngừng, và chương trình s ẽ gọi power-down và lệnh cuối cùng được thực hiện. Trên chíp nội dung RAM và tất cả các giá trị trong thanh ghi đặc biệt cũng sẽ không đổi ở chế độ này cho đến khi chế độ này kết thúc. Chế độ powerdown chỉ thoát ra khi reset lại phần cứng. Thiết lập lại giá trị các SFR ( thanh ghi có chức năng đặc biệt) nhưng trên RAM vẫn giữ nguy ên.
Chú ý: Không nên reset l ại trư ớc khi VCC được phục hồi lại hoạt động bình thường và phải được giữ mức tích cực đủ dài, để cho phép bộ giao động khởi động lại và làm việc ổn định.
Lưu ý: Ở cả hai chế độ nghỉ và chế độ power -donw, P1.0 và P1.1 nên set ở mức "0"
nếu không sử dụng đi ện trở bên ngoài để kéo lên, hoặc set ở mức "1" nếu sử dụng điện
tr ở bên ngoài để kéo lên.
* Lập tr ình Flash :
Chíp 89C2051 là một loại vi điều khiển với 2K bytes bộ nhớ PEROM có thể xóa hoàn toàn ( ví dụ, nội dung = FFH) và có thể lập trình lại. Các mã lập trình bộ nhớ là một mảng byte tại một thời điểm. Sau khi các mảng đã được lập trình, để đảm bảo bất kỳ chương trình nào không trống byte, toàn bộ mảng nhớ cần phải được xoá hoàn toàn bằng điện.
- Địa chỉ bộ đếm bên trong: V i điều khiển 89C2051 có một địa chỉ truy cập ( bên trong PEROM ) địa chỉ đếm luôn luôn dặt ở giá trị 000H trên mức cao của RST và áp dụng mức tích cực của xung dương t ừ chân XTAL1.
- Thuật toán: Để lập trình cho chip 89C2051, sau đây là các chuỗi được khuyến cáo nên
sử dụng:
+ Chuỗi Power-up :
Áp dụng nguồn điện giữa chân VCC và GND
Đặt RST và XTAL1 để GND
+ Đặt chân RST lên m ức cao (mức 1)
Đặt chân P3.2 lên mức cao (mức 1)
+ Áp dụng kết hợp giữ 2 mức logic “H” hoặc “L” ; (“1” hoặc “0”)tới cho các chân P3.3, P3.4, P3.5, P3.7 để lựa chọn một trong những chương trình hoạt
động hiển thị trong PEROM bảng chế độ lập trình dưới đây.
+ Áp dụng cho dữ liệu mã byte từ vị trí 000H đến P1.0 đến P1.7.
+ Cho RST lên 12V để kích hoạt chương trình.
+ Xung từ chân P3.2 tới chương trình m ột byte ở trong PEROM hoặc bit khóa. Các byteghi là chu kỳ tự hẹn giờ và thư ờng mất trong 1,2 ms.
+ Để kiểm tra dữ liệu được lập trình, thấp hơn RST từ12V, ta để mức logic "1" và set
chân P3.3 đến P3.7 giữ ở mức thích hợp. Dữ li ệu ra có thể đọc ở Port 1.
+ Để lập trình một byte ở vị trí kế tiếp, xung kích từ chân XTAL1 được kích một lần để
nâng cao số bộ định địa chỉ bên trong. Dữ liệu mới được đưa vào Port 1.
+ Lặp lại các bước 6 thông qua bước 8, thay đổi dữ liệu và nâng cao
địa chỉ truy cập cho toàn bộ 2K bytes mảng hoặc cho đến khi kết thúc đối của tập tin là
được.
+ Chuỗi Power-off: XTAL1và RST set ở mức "L".
Kiểm tra dữ liệu: chip AT89C2051 sẽ kiểm tra tuần tự dữ liệu để và cho biết thời điểm kết
thúc của một chu kỳ viết. Trong thời gian một chu kỳ máy , nó s ẽ cố đọc t ới byte được ghi cuối cùng và sẽ bổ sung các byte dữ liệu trên P1.7. Sau khi chạy xong 1 chu kì máy, thấy dữ liệu hợp lệ ở tất cả các port, nó sẽ bắt đầu chạy chu kì kế tiếp. Việc kiểm tra có thể bắt đầu bất cứ lúc nào khi chu kì kế tiếp được tiến hành READY / BUSY (sẵn sàng/b ận): Byte tiến trình của chương trình cũng có thể được theo dõi bởi tín hiệu đầu ra READY/BUSY. Chân P3.1 ở mức thấp sau khi chân P3.2 ở mức cao trong thời gian chương trình thực hiện để báo BUSY (bận). chân P3.1 sẽ trở lại mức cao khi chương trình thực hiện để báo READY ( sẵn sàng ).
Chương trình kiểm tra : Nếu bit khóa LB1 và LB2 chưa đư ợc lập trình mã dữ liệu thì có
thể đọc lại dữ liệu thông qua các đư ờng dây để kiểm tra:
+ Thiết lập l ại địa chỉ truy cập bên trong là 000H và chân RST t ừ mức L lên mức H.
+ Áp dụng việc kiểm tra các tín hiệu điều khiển cho phép đọc mã dữ liệu và đọc các dữ
li ệu xuất ra từ Port 1.
+ Xung kích t ừ chân XTAL1 được kích 1 lần để nâng cao số bộ định địa chỉ bên trong.
+Đọc tiếp dữ liệu mã byte tiếp theo t ại ng õ ra Port 1.
+Lặp lại các bước 3 và 4 cho đến khi đọc hết toàn bộ mảng.
Bit khóa không thể kiểm tra trực tiếp , mã xác nhật của bit khóa xác định được bằng cách quan sát những tính năng của chúng..
Chip xóa : toàn bộ mảng PEROM (2KB) và 2 bộ Look Bit cần được xóa hoàn toàn bằng
tín hiệu điện bằng cách kết hợp chính xác tín hiệu điều khiển và băng cách giữ tín hiệu
chân P3.1 ở mức thấp trong 10ms. M ã mảng phải viết tất cả ở mức H trong lúc chip xóa
làm vi ệc, và phải thực hiện trước khi bất kì byte trống nào trong bộ nhớ được lập trình lại.
Đọc kí hiệu byte: Kí hiệu byte được đọc bình thường và kiểm tra địa chỉ 000H, 001H, và
002H, ngoại trừ P3.5 và P3.7 phải được đặt ở mức logic thấp. Các kết quả như sau:(000H) = 1EH chỉ sản xuất bởi Atmel (001H) = 21H cho biết 89C2051
* Giao di ện lập trình: Mọi mã byte trong mảng Flash được ghi và toàn bộ mảng có thể
xóa bỏ bằng cách sử dụng kết hợp thích hợp của các tín hiệu điều khiển. Ghi chu kỳ hoạt động là tự hẹn giờ và sau mỗi lần triển khai sẽ tự động điều chỉnh phù hợp thời gian để hoàn thành.
* Chế độ lập trình flash :
* Đặc tính làm việc DC :
T = - 40oC è 80oC, Vcc = 2,7V è 6V.
Ghi chú:
- Điều kiện để trạng thái ổn định là I phải ở giới hạn ngoài những hạn chế sau :
I max = 20mA.
Tổng dòng cực đại của I và các chân ngõ ra là 80mA.
Nếu I vượt quá điều kiện cho phép, V có thể vượt qua các tiêu chuẩn kĩ thuật
liên quan của chíp. Các chân chíp không được đảm bảo khi dòng lớn hơn điều kiện cho
phép.
- Vcc nhỏ nhất của chế độ power-down là 2V.
e. Sơ đồ mạch nguyên lí kết nối
II. PHẦN MỀM
1. Ngôn ngữ lập trình IC và phần mềm hỗ trợ
1.1 Giới thiệu ngôn ngữ C
Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao.
Ngôn ngữ bậc cao là các ngôn ngữ gần vơi ngôn ngữ con người hơn, do đó việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal trong dó C là ngôn ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển. Về bản chất, sử dụng các ngôn ngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong việc nghiên cứu các tập lệnh và xây dựng các cấu trúc giải thuật. Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ được một phần mềm trên máy tính gọi là trình biên dịch (Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy.
Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu trúc của bộ vi điều khiển. Có nghĩa là với một người chưa quen với một vi điểu khiển cho trước sẽ xây dựng được chương trình một cách nhanh chóng hơn, do không phải mất thời gian tìm hiểu kiến trúc của vi điều khiển đó. Và việc sử dụng lại các chương trình đã xây dựng trước đó cũng dễ dàng hơn, có thể sử dụng toàn bộ hoặc sửa chữa một phần.
1.2. Ngôn ngữ C
1.2.1 Kiểu dữ liệu
a. Kiểu dữ liệu trong C
Kiểu
Số Byte
Khoảng giá trị
Char
1
-128 – +127
Unsigned char
1
0 – 255
Int
2
-32768 - +32767
Unsigned int
2
0 - 65535
Long
4
-2147483648 - +2147483647
Unsigned long
4
0 – 4294697295
Float
4
* Khai báo biến:
- Cú pháp: Kiểu_dữ_liệu Vùng_nhớ Tên_biến _at_ Đia_chỉ;
Ví dụ:
Unsigned char data x;
- Khi khai báo biến có thể gán luôn cho biến giá trị ban đầu.
Ví dụ:
Thay vì: unsigned char x;
x = 0;
Ta chỉ cần: unsigned char x = 0;
- Có thể khai báo nhiều biến cùng một kiểu một lúc.
Ví dụ: unsigned int x,y,z,t;
- Chỉ định vùng nhớ: từ khoá “Vùng_nhớ” cho phép người dùng có thể chỉ ra vùng nhớ sử dụng để lưu trữ các biến sử dụng trong chương trình. Các vùng nhớ có thể sử dụng là: CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi không khai báo vùng nhớ trình dịch Keil C sẽ mặc định đó là vùng nhớ DATA.
Vùng nhớ
Ý nghĩa
CODE
Bộ nhớ mã nguồn chương trình
DATA
Bộ nhớ dữ liệu gồm 128 Byte thấp của RAM trong vi điều khiển
BDATA
Bộ nhớ dữ liệu có thê định địa chỉ bit, nằm trong vùng nhớ DATA
IDATA
Bộ nhớ dữ liệu gồm 128 Byte cao của RAM trong vi điều khiển chỉ có ở một số dòng vi điều khiển sau này
PDATA
Bố nhớ dữ liệu ngoài gồm 256 Byte, được truy cập bởi địa chỉ đặt trên P0
XDATA
Bộ nhớ dữ liệu ngoài có dung lượng có thể lên đến 64 KB, được truy cập bởi địa chỉ đặt trên P0 và P2
* Định nghĩa lại kiểu
- Cú pháp: typedef Kiễu_dữ_liệu Tên_biến;
- Ten_biến sau này sẽ được sử dụng như một kiểu dữ liệu mới và có thể dùng để khai báo các biến khác
Ví dụ: typedef int m5[5];
Dùng tên m5 khai báo hai biến tên a và b có kiểu dữ liệu là mảng 1 chiểu 5 phần tử:
m5 a,b;
b. Kiểu dữ liệu trong Keil C
Kiểu
Số bit
Bit
1
Sbit
1
Sfr
8
Sfr16
16
- bit : dùng để khai báo các biến có giá trị 0 hoặc một hay các biến logic trên vùng RAM của vi điều khiển. Khi khai báo biến kiểu bit trình dịc Keil C sẽ mặc định vùng nhớ sử dụng là BDATA.
` - sbit, sfr, sfr16: dùng để định nghĩa các cho các thanh ghi chức năng hoặc các cổng trên vi điều khiển dùng để truy nhập các đoạn dữ liệu 1 bit, 8 bit, 16 bit
c. Mảng
Mảng là một tập hợp nhiều phần tử cùng một kiểu giá trị và chung một tên. Các phần tử của mảng phân biệt với nhau bởi chỉ số hay số thứ tự của phần tử trong dãy phẩn tử. Mỗi phần tử có vai trò như một biến và lưu trữ được một giá trị độc lập với các phần tử khác của mảng.
Mảng có thể là mảng một chiều hoặc mảng nhiều chiều
Khai báo:
- Cú pháp: Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng];
Khi bỏ trống số phần tử mảng ta sẽ có mảng có số phần tử bất kì.
Ví dụ:
Unsigned int data a[5],b[2] [3];
Với khai báo trên ta sẽ có: mảng a là mảng một chiều 5 phần tử. Mảng b là mảng hai chiều, tổng số phần tử là 6.
Chỉ số của mảng bắt đầu từ số 0. Mảng có bao nhiêu chiều phải cung cấp đầy đủ bấy nhiêu chỉ sô
Ví du: phần tử mảng b[0] [1] là đúng
Khi viết b[0] là sai
d. Con trỏ
Khi ta khai báo một biến, biến đó sẽ được cấp phát một khoảng nhớ bao gồm một số byte