Toàn bộ code examples dưới đây được chúng tôi xây dựng trên nền tảng phần cứng của E51DK1 sử dụng vi điều khiển vi điều khiển 89V51RB2 đang khá phổ biến trên thị trường hiện nay và phá
Trang 1Hướng dẫn lập trình 8051 cơ bản trên Kit
LCD(Text ), nút nhấn… Hay nâng cao một chút là giao tiếp voi bộ nhớ EEPROM và RTC
trên sản phẩm kit phát triển 8051 là E51DK1 sản phẩm của do Titans Technology phân phối Để đặt mua Kit thí nghiệm đa năng E51DK1 hoặc xem các sản phẩm khác, hãy vào
website www.titans.com.vn
Rất vui được phục vụ các bạn trong quá trình hoc tập và nghiên cứu Thân.
II Lập trình giao tiếp các ngoại vi trên 8051:
1 Giới thiệu về kit phát triển 8051
E51DK1 là kit phát triển cho dòng VĐK 8051 do Titans Technology phân phối E51DK1
gồm 1 main board chính đính kèm chung voi các ngoại vi như: LCD,UART,Matrix
Button,ADC,EEPROM,RTC E51DK1 cho phép ta thực hành thí nghiệm với các ngoại vi,
ứng dụng thông thường,bao gồm các khối chính như hình sau:
Trang 21
Hình 1: Kit phát triển 8051 E51DK1
Thông tin các khối trên E51DK1:
1 : Khối vi điều khiển 8051 gói
2 : Khối vi điều khiển 8051 gói
3 : Khối đo nhiệt độ
Toàn bộ code examples dưới đây được chúng tôi xây dựng trên nền tảng phần cứng của
E51DK1 sử dụng vi điều khiển vi điều khiển 89V51RB2 (đang khá phổ biến trên thị trường
hiện nay) và phát triển với trình biên dịch Keil C giúp các bạn tiếp cận với việc lập trình vi
điều khiển tối ưu và nhanh nhất có thể,trình biên dịch/tools sẽ được cung cấp trong đĩa CD
ROM khi các bạn mua sản phẩm
Trang 32
Sử dụng Console trên PC:
Hấu hết các demo chúng tôi đính kèm sẽ xuất các kết quả trên màn hình Terminal của PC
để các bạn dễ theo dõi.Do đó khi các bạn mua sản phẩm chúng tôi đã đính kèm phần mềm
“Siow” để hỗ trợ chức năng này Để sử dụng Siow chúng ta thực hiện các bước sau:
Khởi động chương trình “Siow”
Hình 10 :Khởi động chương trình Siow (Terminal trên PC)
Chọn tab Configuration “Set port options” để cấu hình cổng COM
Trang 43
Hình 11 :Bảng cấu hình thông số cổng COM
+ ComPorts: chọn cổng COM mà PC của bạn nhận diện (như trong hình
PC của mình là COM 4)
+ Baud rate: chọn tốc độ Baud là 19200 để test example code
+ Software flow control: chọn như hình trên
+ Parity: None
+ Data bits: 8 bit
+ Stop bit: 1
+ Hardware flow control: như hình trên
2 Example điều khiển bàn phím ma trận 4x4:
a) Mô tả phần cứng:
E51DK1 trang bị 1 bàn phím ma trận 4x4 hỗ trợ phát triển các ứng dụng điều khiển đòi hỏi sử dụng nhiều nút nhấn và giảm thiểu việc chiếm chân pin của vi điều khiển.
Trang 54
Hình 2 : khối bàn phím ma trận của E51DK1
Khối bàn phím được kết nối với vi điều khiển như sau:
Hình 3 : sơ đồ kết nối bàn phím ma trận với vi điều khiển 8051
Trang 6b) Mô tả example demo:
Mở folder “E51DK1-test-KeyPad”, chạy file “E51DK1.uvproj”,nhấn F7 để build project và nạp file “E51DK1.hex” Trên màn hình Console sẽ xuất hiện các dòng giới
thiệu,sau đó bạn lần lượt nhấn các phím trên khối bàn phím ma trận và xem kết quả trên màn hình
Các hàm chính được sử dụng trong demo:
main( ) Hàm chính của hệ thống InitSerial() Khởi tạo giao tiếp UART (cổng
InitSerial(); // Initialize serial port init_LCD();
DelayMs(250);
lcd_puts(1,"www.Hlab.com.vn");
lcd_puts(2,"E51DK1 Demo rev1.0");
while(1) {
menu();
} }
Trang 76
//================ DEMO =======================================//
char demo_scankey() {
unsigned char but_value,old_but_value;
char c;
while(1) { KeyPad_Port=0xff;
//quet hang 1
if(KeyRow0==0)
{ while(KeyRow0==0);
but_value='1';
} else if(KeyRow1==0)
{ while(KeyRow1==0);
but_value='2';
}
else if(KeyRow2==0) {
while(KeyRow2==0);
but_value='3';
}
else if(KeyRow3==0) {
while(KeyRow3==0);
but_value='A';
} //quet hang 2
but_value='4';
}
else if(KeyRow1==0) {
while(KeyRow1==0);
Trang 87
but_value='5';
}
else if(KeyRow2==0) {
while(KeyRow2==0);
but_value='6';
}
else if(KeyRow3==0) {
while(KeyRow3==0);
but_value='B';
} //quet hang 3
but_value='7';
}
else if(KeyRow1==0) {
while(KeyRow1==0);
but_value='8';
}
else if(KeyRow2==0) {
while(KeyRow2==0);
but_value='9';
}
else if(KeyRow3==0) {
while(KeyRow3==0);
but_value='C';
} //quet hang 4 KeyCol0=1;
KeyCol1=1;
KeyCol2=1;
KeyCol3=0;
if(KeyRow0==0) {
while(KeyRow0==0);
but_value='*';
}
else if(KeyRow1==0) {
while(KeyRow1==0);
but_value='0';
Trang 98
}
else if(KeyRow2==0) {
while(KeyRow2==0);
but_value='#';
}
else if(KeyRow3==0) {
while(KeyRow3==0);
but_value='D';
} if(but_value!=0) {
if(but_value!=old_but_value) {
//neu nhan phim esc thi quay lai demo chinh if(kbhit())//lay fim nhan non-block
{ c=getc();
if(c=='e') return 0;
}
E51DK1 có tích hợp 1 “Text LCD 16x2” rõ nét hỗ trợ cho việc debug hay hiển
thị các thông số trong quá trình lập trình.
Trang 1110
b) Mô tả firmware:
Mở folder “E51DK1-test-LCD”, chạy file “E51DK1.uvproj”,nhấn F7 để build project và nạp file “E51DK1.hex” Trên màn hình Console sẽ xuất hiện các dòng giới
thiệu,sau đó bạn quan sát màn hình LCD để xem kết quả
Các hàm chính được sử dụng trong demo:
main( ) Hàm chính của hệ thống init_LCD( ); Khởi tạo text LCD Tham khảo trong file lcd.c lcd_puts(unsigned char
line_display, unsigned
char *AC)
Xuất kí tự lên LCD Tham khảo trong file “lcd.c”
Code giao tiếp LCD 16x2
InitSerial(); // Initialize serial port init_LCD();
DelayMs(250);
lcd_puts(1," Titans.com.vn");
lcd_puts(2,"E51DK1 Demo rev1.0");
while(1) {
} }
//================ LCD =======================================//
void init_LCD(void) {
Trang 12void lcd_puts(unsigned char line_display, unsigned char *AC) {
Trang 13Để truy xuất kênh ADC, ta truy xuất qua port P1 Cụ thể như sau:
Hình 7: Sơ đồ kết nối của ADC
Trang 14thiệu và xem kết quả ADC trên màn hình.
Để thực hiện các chức năng trên,trong example ta sử dụng các hàm sau:
main( ) Hàm chính của hệ thống InitSerial() Khởi tạo giao tiếp UART
(cổng COM) unsigned char
InitSerial(); // Initialize serial port init_LCD();
DelayMs(250);
lcd_puts(1,"www.Hlab.com.vn");
lcd_puts(2,"E51DK1 Demo rev1.0");
while(1) {
menu();
Trang 1514
}
//================ ADC DEMO=============================//
void menu() {
if(kbhit())//lay fim nhan non-block {
}
Ghi chú : Code đã lược bỏ một số hàm phụ,để có source code đầy đủ, vui lòng xem trong CDROM
Trang 1615
5 Example Giao tiếp UART:
a) Mô tả phần cứng:
E51DK1 trang bị 1 bộ ngoại vi giao tiếp nối tiếp UART (RS232) có thể sử dụng
cho việc giao tiếp với máy tính,các ngoại vi khác,cảm biến…
Hình 8 :Khối RS232
Để truy xuất UART,ta sử dụng cấu hình theo phần cứng giữa UART và chip 8051 như sau:
Trang 17 Để sử dụng Terminal các bạn làm theo các bước sau:
Để thực hiện các chức năng trên,trong example ta sử dụng các hàm sau:
main( ) Hàm chính của hệ thống Tham khảo trong file
“main.c”,cấu hình và chạy
chương trình chính InitSerial(void) Khởi tạo UART(cổng COM) Tham khảo trong file
“serial.c”
void putc(char chr) xuất 1 byte qua UART Tham khảo trong file
Trang 1817
“serial.c”
char getc(void) Lấy 1 byte dữ liệu Tham khảo trong file
“serial.c”
Printf( ) Xuất 1 chuỗi dữ liệu
Code Giao tiếp UART
InitSerial(); // Initialize serial port DelayMs(250);
while(1) {
menu();
} }
//============== UART =============================//
void menu() {
printf("\n\r Chuong trinh test ngoai vi cua E51-DK1 ");
printf("\n\r De su dung cac ban se su dung 1 Terminal trong Windows:");
printf("\n\r 1 Terminal co the tim thay trong WinXP.");
printf("\n\r 2 Hoac su dung chuong trinh Siow co trong CD-ROM di kem."); printf("\n\r 3 Ngoai ra cac ban co the su dung Terminal cua FlashMagic");
printf("\n\r bang cach vao Tool->Terminal->Select COM port >Baudrate 19200->OK.");
printf("\n\r 4 Tu man hinh Terminal cac ban se su dung ban phim PC de dieu khien.");
}
Trang 1918
Ghi chú : Code đã lược bỏ một số hàm phụ,để có source code đầy đủ, vui lòng xem trong CDROM
6 Example lập trình giao tiếp chuẩn I2C với EEPROM
và IC ds1307(Real Time Clock) :
a) Mô tả phần cứng:
Khối External EEPROM ngoài của E51DK1 cho phép lưu các thông tin quan
trọng hoặc các thông số mà ta cẩn lưu trữ khi hệ thống đang hoạt động, và vẫn phải duy trì ngay cả khi hệ thống bị mất nguồn.Sử dụng chuẩn I2C thông dụng để giao tiếp nên sẽ tiết kiệm chân cho vi điều khiển
Dùng chung chân giao tiếp I2C với External EEPROM là đồng hồ thời gian thực
ds1307 khối thời gian thực RTC có pin để RTC có thể hoạt động ngay cả khi không
có nguồn cung cấp
Hình 14 :Khối giao tiếp EEPROM / RTC
Để sử dụng chuẩn giao tiếp I2C truy xuất EEPROM / I2C,ta cấu hình theo kết nối sau:
Trang 2019
Hình 15: Sơ đồ kết nối của EEPROM
Hình 16: sơ đồ kết nối của RTC
Trang 21tiến hành đọc và ghi EEPROM theo các lệnh trên màn hình Console
Để thực hiện các chức năng trên EEPROM,trong example ta sử dụng các hàm sau:
Ghi dữ liệu vào EEPROM
Tham khảo trong file
“epprom_24Cxx.c”
read_eeprom(unsigned int address)
Đọc dữ liệu từ EEPROM
Tham khảo trong file
InitSerial(); // Initialize serial port DelayMs(250);
while(1) {
menu();
} }
//=================== ==================================//
void menu() {
Trang 22unsigned char cmd, address,value,a;
while(!eeprom_ready());
while(1) {
do { printf("\n\rRead or Write [r/w]: ");
printf("\n\rRead at " );
putnum(address);
printf(" Value: " );
putnum(read_eeprom( address ));
printf(" -> Press [e] to exit | [c] to continue !");
//neu nhan phim esc thi quay lai demo chinh
do { a=getc();
} while((a!='e')&&(a!='c'));
if(a=='e') return 0;
}
if(cmd=='W' || cmd=='w') { printf("\n\rEnter new value [8bit]: ");
write_eeprom( address, value );
printf("-> Press [e] to exit | [c] to continue !");
//neu nhan phim esc thi quay lai demo chinh
do { a=getc();
} while((a!='e')&&(a!='c'));
if(a=='e') return 0;
}
} }
Trang 2322
Ghi chú : Code đã lược bỏ một số hàm phụ,để có source code đầy đủ, vui lòng xem trong CDROM
RTC:
Mở folder tên “E51DK1-test- Ds1307”,chạy file “E51DK1.uvproj”,nhấn F7 để
build project,cuối cùng là nạp file “E51DK1.hex” Sau khi nạp xong file hex các bạn
tiến hành theo dõi kết quả trên màn hình Console
Để thực hiện các chức năng trên EEPROM,trong example ta sử dụng các hàm sau:
InitSerial(); // Initialize serial port DelayMs(250);
while(1) {
menu();
} }
//===================RTC ==================================//
Trang 2423
void menu() {
printf("\n\r ham _RTC_INI(), trong ham nay cac ban co the thay doi hoac tuy chinh.");
printf("\n\r -");
_RTC_INI();
_GET_TIME();
while(1) {
}
void _RTC_INI(void) {
Trang 2524
/********Time Default**************/
TIME.SEC = 0x00 ; TIME.MIN = 0x00 ; TIME.HOUR = 0x19 ; TIME.DAY = 0x04 ; TIME.DATE = 0x10;
TIME.SEC = _RTC_READ(0x00); //GET SECOND TIME.MIN = _RTC_READ(0x01); //GET MIN TIME.HOUR = _RTC_READ(0x02)&0x3f; //GET HOUR TIME.DAY = _RTC_READ(0x03); //GET DAY
TIME.DATE = _RTC_READ(0x04); //GET DATE TIME.MONTH = _RTC_READ(0x05); //GET MONTH TIME.YEAR = _RTC_READ(0x06); //GET YEAR
}
void _convert_time(char *p) {
Trang 26Trên đây là những demo cũng như chức năng các hàm giao tiếp / cấu hình các ngoại vi cơ bản
trên sản phẩm E51DK1 của Titans Technology.Chúng tôi Hy vọng giúp các bạn có một cái nhìn
tổng quát về vi điều khiển 8 bit nói chung và dòng chip 8051 nói riêng 1 cách đơn giản và nhanh nhất Chúc các bạn thành công
Trang 2726
Reference
1 Google.com
2 Internet source
Trang 2827
Mục lục
E51DK1 Examples Tutorial 0
Hướng dẫn lập trình 8051 cơ bản trên Kit thí nghiệm E51DK1 0
I Giới thiệu: 0
II Lập trình giao tiếp các ngoại vi trên 8051: 0
1 Giới thiệu về kit phát triển 8051 0
2 Example điều khiển bàn phím ma trận 4x4: 3
a) Mô tả phần cứng: 3
b) Mô tả example demo: 5
3 Example giao tiếp với Text LCD 16x2: 8
a) Mô tả phần cứng: 8
b) Mô tả firmware: 10
4 Example ADC: 12
a) Mô tả phần cứng: 12
b) Mô tả firmware: 13
5 Example Giao tiếp UART: 15
a) Mô tả phần cứng: 15
b) Mô tả firmware: 16
6 Example lập trình giao tiếp chuẩn I2C với EEPROM và IC ds1307(Real Time Clock) : 18
a) Mô tả phần cứng: 18
b) Mô tả firmware: 20
Reference 26
Mục lục 27
Trang 2928
Copyright © 2009 Titans Technology Tài liệu này thuộc
chúng tôi hy vọng các bạn khi sử dụng với bất kì mục đích nào bằng bất cứ hình thức nào bao gồm sao chép, in, copy, trích dẫn… cần phải ghi rõ xuất xứ nguồn gốc từ website của chúng tôi
Hãy truy xuất trang web của chúng tôi thường xuyên để có những cập nhật mới nhất
về các thiết bị mới nhất tại website www.titans.com.vn
Nếu có bất cứ ý kiến đóng góp cũng như cần hỗ trợ, tư vấn thêm thông tin về sản