Đồ án Lập trình C cho họ vi điều khiển 8051

Ngày nay, những ứng dụng của Vi điều khiển đã đi sâu vào đời sống sinh hoạt và

sản xuất của con người. Thực tếhiện nay là hầu hết các thiết bị điện dân dụng hiện nay

đều có sựgóp mặt của Vi Điều Khiển và vi xửlí . Ứng dụng vi điều khiển trong thiết kế

hệthống làm giảm chi phí thiết kếvà hạgiá thành sản phẩm đồng thời nâng cao tính ổn

định của thiết bịvà hệthống.Trên thịtrường có rất nhiều họvi điều khiển: họ8051 của

Intel, 68HC11 của Motorola, Z80 của hãng Zilog, PIC của hãng Microchip, H8 của

Hitachi,vv

Việc phát triển ứng dụng các hệvi xửlý đòi hỏi những hiểu biết cảvềphần cứng

cũng nhưphần mềm, nhưng cũng chính vì vậy mà các hệvi xửlý được sửdụng đểgiải

quyết những bài toán rất khác nhau. Tính đa dạng của các ứng dụng phụthuộc vào việc

lựa chọn các hệvi xửlý cụthểcũng nhưvào kỹthuật lập trình.

 Ngày nay các bộvi xửlý có mặt trong rất nhiều thiết bị điện tửhiện đại: từ đầu

đĩa CD, máy thu hình, máy ghi hình, dàn âm thanh HiFi, bộ điều khiển lò sưởi cho đến

các thiết bị điều khiển dùng trong công nghiệp. Lĩnh vực ứng dụng của các hệvi xửlý

cũng rất rộng lớn: từnguyên cứu khoa học, truyền dữliệu, đến công nghiệp, năng lượng,

giao thông và y tế

 Tùy theo kinh nghiệm và mức độthông thạo mà chúng ta có thểsửdụng các ngôn

ngữkhác ngoài hợp ngữnhư: C, C

++

, Visual basic đểcó những chương trình chất lượng

cao hơn.

pdf66 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 2909 | Lượt tải: 1download
Tóm tắt nội dung Đồ án Lập trình C cho họ vi điều khiển 8051, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
;< 8); 
 printf ("ADC Channel %bu = 0x%4.4X\r\n", channel, conv_val); 
 } 
} 
Bộ biến đổi số sang tương tự ( D/A coverter) 
Bộ biến đổi nàychuye63n đổi tían hiệu số đi vào thành tín hiệu dòng điện ở ngõ ra. 
IC Philips 87LPC769 là một trong các IC có tích hợp bộ chuyển đổi số – tương tự. IC 
Philips 87LPC769 gồm 2 kênh, và bộ chuyển đổi 8bit D/A dễ dàng thực hiện với chương 
trình. Ví dụ sau cho ta thấy cách dùng bộ chuyển đổi sử dụng D/A SFRs. 
/* 
 * This program generates sawtooth waveforms on the DAC 
 * of the Philips 87LPC769. 
 */ 
#include 
void main (void) { 
 // Disable the A/D Converter (this is required for 
DAC0) 
 ADCI = 0; // Clear A/D conversion complete flag 
 ADCS = 0; // Clear A/D conversion start flag 
 ENADC = 0; // Disable the A/D Converter 
 // Set P1.6 and P1.7 to Input Only (Hi Z). 
 P1M2 &= ~0xC0; 
 P1M1 |= 0xC0; 
 ENDAC0 = 1; // Enable the D/A Converters 
 ENDAC1 = 1; 
 while (1) { 
 unsigned int i; 
 // Create a sawtooth wave on DAC0 and the 
 // opposite sawtooth wave on DAC1. 
 for (i = 0; i < 0x100; i++) { 
 DAC0 = i; 
 DAC1 = 0xFF - i; 
 } 
 } 
} 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 58
Điều khiển cấp điện (Power Reduction Modes) 
Chế độ nghỉ (Idle mode) được kích hoạt bằng cách thiết lập bit IDLE bằng 1. chế 
độ nghỉ làm dừng mọi việc thực thi chương trình. Các nội dung trên RAM được bảo toàn 
và mạch dao động tiếp tục hoạt động nhưng xung clock bị khó không đến được CPU. 
Các bộ định thời và UART tiếp tục thực hiện bìn thường các chức năng của chúng. 
Chế độ nghỉ được kết thúc bằng cách kích hoạt một điểm ngắt bất kỳ. Khi việc 
thực thile65nh ngắt ISR kết thúc thì hệ thống sẽ làm việc lại từ lênh set bit IDLE lên 1. 
Sau đây là chương trình thực hiện chế độ nghỉ: 
sfr PCON = 0x87; 
void main (void) { 
 while (1) { 
 task_a (); 
 task_b (); 
 task_c (); 
 PCON |= 0x01; /* Enter IDLE Mode - Wait for enabled interrupt */ 
 } 
} 
Chế độ giảm cấp điện ( power down mode) được thiết lập bằng cách set bit 
PDWN lên 1. trong chế độ nàyma5ch dao động trong chip bị dừng. Như vậy các bộ định 
thời và UART cũng như việc thực hiện phần mềm đều tạm ngưng. Miễn là có điện áp tối 
thiểu 2V đặt vào chip thì các nội dung lưu trên RAM vẫn được bảo toàn. 
Cách duy nhất để buộc bộ vi điều khiển ra khỏi chế độ giảm công suất là áp đặt 
thiết lập lại (RESET) bộ vi điều khiển này khi cấp điện. 
Sau đây là chương trình thự hiện quá trình giãm cấp điện: 
sfr PCON = 0x87; 
void main (void) { 
 while (1) { 
 task_a (); 
 task_b (); 
 task_c (); 
 PCON |= 0x02; /* Enter Power Down Mode */ 
 } 
} 
Bộ định thời WATCHDOG 
Bộ định thời Watchdog có sẵn trên nhóm mở rộng của các thành viên họ 8051. 
mục đích của bộ định thời Watchdog là thiết lập lại (reset) lại bộ vi điều khiển nếu bộ 
định thời không được cung cấp một trình tự thao tác cụ thể trong một khoảng thời gian 
xác định. Điều này ngăn ngừa việc nạp lại Wachdog mọt cách trùng khớp ngẫu nhiên bởi 
các phần mềm khác. 
Trong họ 8051, watchdog thường được thực hiện dưới dạng một bộ định thời khác 
trên chip, bộ định thời này lập tỉ lệ giảm tần số mạch dao động hệ thống và kế đến đếm 
xung clock đã được chia tỉ lệ. Khi bộ định thời quay vòng, hệ thống thiết lập lại từ đầu 
(reset). Watchdog có thể được cấu hình đối với tốc độ quay vòng và thường có thể được 
sử dụng làm bộ định thời khác mặc dù đây là bộ định thời có độ phân giải thấp. 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 59
Chương trình sau đây cho thấy cách thiết lập giá trị ban đầu và reset watchdog: 
#include 
/* This function adjusts the watchdog timer compare value to the current 
 * PCA timer value + 0xFF00. Note that you must write to CCAP4L first, 
 * then write to CCAP4H. */ 
void watchdog_reset (void) { 
 unsigned char newval; 
 newval = CH + 0xFF; 
 CCAP4L = 0; 
 CCAP4H = newval; 
} 
void main (void) { 
 unsigned int i; 
/* Configure PCA Module 4 as the watchdog and make 
 sure it doesn't time-out immediately. */ 
 watchdog_reset (); 
 CCAPM4 = 0x48; 
/* Configure the PCA for watchdog timer. */ 
 CMOD = (CMOD & 0x01) | 0x40; 
/* Start the PCA Timer: From this point on, we must reset the watchdog 
 timer every 0xFF00 clock cycles. If we don't, the watchdog timer 
 will reset the MCU. */ 
 CR = 1; 
/* Do something for a while and make sure that we don't get reset by 
 the watchdog. */ 
 for (i = 0; i < 1000; i++) { 
 watchdog_reset (); 
 } 
/* Stop updating the watchdog and we should get reset. */ 
 while (1); 
} 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 60
PHẦN III 
THI CÔNG MẠCH VÀ 
ỨNG DỤNG LẬP TRÌNH C TRONG AT89C2051 
I.Điều khiển led đơn 
™ Sơ đồ nguyên lý: 
™ Code C: 
#include 
 char const num[ ] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; 
 void wait (void) 
 { ; 
 } 
 void main( void ) 
 { 
 unsigned int i; 
 unsigned char j; 
 P1 = 0; 
 while(1){ 
 for( j = 0; j < 8; j++ ) 
 { 
 P1 = num[ j ]; 
 for ( i = 0; i < 10000; i++ ) 
 { 
 wait(); 
 } 
 } 
 } 
 } 
Đồ Án Tốt Nghi
II. ỨNG 
™ Sơ đ
™ Code 
#include <
 char num
 void wa
 { ; } 
 void ma
 unsig
 unsig
 P1 =
 P3 =
 for( ;;
 for (r
 { 
 P3 
 for
 {
 } 
 } 
 } 
ệp 
DỤNG C
ồ nguyên 
C: 
 at892051
[ ] = {0x3f
it (void) 
in ( void ){ 
ned char cn
ned int i; 
 0; 
 0; 
 ){ 
ight=0;rig
= right; 
 (cnt=0;cn
P1 = num[
 for (i = 0; 
 { 
 wait(); 
 } 
 } 
HO 2 LE
lý: 
.h > 
,0x06,0x5b
t, right; 
ht<3;right+
t<10;cnt++
cnt]; 
i < 10000;
D 7 ĐOẠ
,0x4f,0x66
+) 
) 
 i++) 
N VỚI N
,0x6d,0x7d
ÚT NHẤ
,0x07,0x7f,
N 
0x6f}; 
Đồ Án
I
 Tốt Nghi
II.ỨNG D
• Sơ Đồ
• Code 
#include <
 char c
 void wait
 { ; 
 } 
 void mai
 { 
 unsign
 unsign
 P3 =
 P1 =
 for( ;; 
 { 
 col =
 for 
 { 
 fo
 {
ệp 
ỤNG CH
 Nguyên
C: 
 at892051.
onst pat[5]=
 (void) 
n( void ) 
ed char cnt
ed int i; 
 0; 
 0; 
) 
 1; 
(cnt=0;cnt<
r(col = 0;co
P1 = pat[cn
P3 = col; 
 for (i = 0; i
 { 
 wait(); 
O LED 
 Lý: 
h > 
{ 0x3f, 0x0
, col; 
5;cnt++) 
l < 32;col<
t]; 
 < 10000; i+
MATRIX
2, 0x04, 0x0
<=1) 
+) 
 5x7. 
2, 0x3f }; 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 63
 } 
 } 
 } 
 } 
 } 
SOẠN THẢO VÀ BIÊN DỊCH CHƯƠNG TRÌNH 
CHO HỌ VI ĐIỀU KHIỂN 8051 
1. Soạn thảo chương trình 
 Dùng chức năng Edit của NC (Norton Commander) hoặc bất cứ 
phần mềm soạn thảo văn bản nào khác. 
 Lưu dưới dạng file .A51 hoặc .ASM, hoặc .C v.v.. 
2. Chuyển thành file object (.obj) bằng chương trình A51.exe, hoặc 
ASM51.exe. 
A51 baitap.a51 [enter] 
ASM51 baitap.a51 [enter] 
 Chương trình dịch sẽ tạo ra file baitap.obj và baitap.lsl. 
 File.obj là file cơ sở cho việc liên kết thành chương trình thực thi được. 
Còn file .lsl là file văn bản chứa các lệnh, mã lệnh và địa chỉ tương ứng. 
File .lsl còn chứa các thông báo của chương trình biên dịch về những lỗi 
cú pháp (nếu có). 
 Sau khi thực hiện biên dịch xong sẽ nhận được thông báo: 
ASSEMBLY COMPLETE, NO ERRORS FOUND 
Hoặc ASSEMBLY COMPLETE, x ERRORS FOUND (y) 
 Với x là số lỗi cú pháp và y là số thứ tự của hàng lệnh bị lỗi cuối cùng 
trong chương trình. 
 Mở file baitap.lsl để xem các lỗi. Sau đó, mở file baitap.a51, hoặc file 
baitap.asm để sửa các lỗi rồi tiến hành biên dịch lại. 
3. Chuyển file object thành file hex (.HEX) bằng chương trình 
OHS51.EXE hoặc OH.EXE. 
Ohs51.exe baitap.obj [enter] 
Oh.exe baitap.obj [enter] 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 64
PHẨN IV 
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 
KẾT LUẬN 
 Trong đề tài này chúng tôi tìm hiểu và nghiên cứu lập trình C cho 
họ vi điều khiển 8051 và mới chỉ đi vào một số ứng dụng nhỏ như là điều 
khiển led đơn , led bảy đoạn, và led ma trận . Tôi chưa khai thác hết tầm 
hạn của phần mềm Keil C cũng như chip AT89C2051. 
 Khảo sát qua phần mềm Keil C. 
 Thực hiện biên dịch mã nguồn C cho led đơn, led 7 đoạn, led matrix 
5x7. 
HƯỚNG PHÁT TRIỂN 
 Hướng phát triển của đồ án là: dùng ngôn ngữ lập trình C để ứng 
dụng vào hệ thống nhúng của họ vi điều khiển 8051 hoặc các họ vi điều 
khiển khác như là Philips P89C51Rx2/P89V51 Rx2 mà không chỉ xuất 
đơn thuần là led đơn , mà là led matrix 5x7, matrix 8x8 , hoặc LCD 1 line, 
LCD 2 line, LCD 4 line…Và ứng dụng ngôn ngữ lập trình C để thiết kế 
những ứng dụng thực tiễn phục vụ cho đời sống của con người. 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 65
TÀI LIỆU THAM KHẢO 
9 Datasheet AT8051/AT89C51/AT89C2051 Preliminary (Complete) 
của hãng Atmel Corporation. 
9 User’s Guide for Keil µVision. 
9 Phạm Quang Trí, Giáo trình Vi xử lý của trường ĐHCN TP.HCM. 
9 Giáo trình Vi xử lý của trường ĐHBKTPHCM. 
9 Website :  / 
9 Sách embedded C 
9 Sách Ngôn ngữ C của các tác giả Quách Tuấn Ngọc . 
9 Handel-C Language Reference Manual. 
Đồ Án Tốt Nghiệp 
SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 66
MỤC LỤC 
1. Phần I 
9 tổng quan đề tài ............................................................ trang 4 
• đặt vấn đề ................................................................ trang 4 
• Nội dung đề tài 
2. Phần II 
9 Nội dung đề tài ............................................................... trang 5 
 Chương 1: Giới thiệu bộ vi điều khiển ĂT9C2051 và 89C51 
• Giới thiệu bộ vi điều khiển AT89C2051 ................ trang 5 
• Giới thiệu sơ lược về vi điều khiển AT89C51 ........ trang 19 
Chương 2: Giới thiệu phần mềm Keil µVision ............ trang 21 
3. Phần III 
9 Thi công mạch và Ứng dụng lập trình C trong AT89C2051 trang 62 
4. Phần IV 
9 Kết luận và Hướng phát triển đề tài .............................. trang 67 
5. Tài liệu tham khảo ............................................................... trang 68 
6. Mục lục ............................................................................... trang 69 

File đính kèm:

  • pdfĐồ án Lập trình C cho họ vi điều khiển 8051.pdf
Tài liệu liên quan