pqtalone

New Member

Download miễn phí Đề tài Lập Trình C cho vi điiều khiển 89C51





Chương 1: Ôn lại về ngôn ngữ C theo chuẩn ANSI
1.1. Cấu trúc cơ bản của một chương trình C 1
1.2. Các yếu tố cơ bản của ngôn ngữ C – ANSI .2
1.2.1 Bộ chữ viết .2
1.2.2 Từ khoá .2
1.2.3 Tên .3
2.1.4 Một số kiểu dữ liệu cơ bản .3
2.3 Biểu thức và Các phép toán .8
2.3.1 Phép toán số học hai ngôi .8
2.3.2.Phép quan hệ và logic 9
2.3.3. Sự chuyển đổi kiểu 9
2.3.4 Phép tăng giảm 10
2.3.5 Câu lệnh gán 10
2.3.6. Biểu thức điều kiện .11
2.4 Các toán tử điều khiển chương trình .11
2.4.1 Cấu trúc điều khiển if .11
2.4.1.2 Cấu trúc rẽ nhánh if dạng khuyết . 11
2.4.1.2. Cấu trúc rẽ nhánh if dạng dầy đủ 11
2.4.2 Cấu trúc điều khiển switch .11
2.4.3 Cấu trúc lặp while 12
2.4.4 Cấu trúc lặp do.while 12
2.4.5 Cấu trúc lặp for 12
2.5 Hàm, lập trình hướng hàm .13
2.5.1 Cách xây dựng một hàm .13
2.5.2 Sự hoạt động của một hàm .13
2.5.2.1 Biến mảng động 14
2.5.2.2 Biến mảng ngoài .14
2.5.2.3 Biến mảng tĩnh .14
Chương 2: Ôn lại về vi điều khiển AT89C51
2.1. Sơ đồ chân tín hiệu của 80C51/AT89C51 . 15
2.2. Sơ đồ khối .16
2.3. Các thanh ghi chức năng đặc biệt. .17
2.4. Khối tạo thời gian và bộ đếm (Timer/Counter). 24
2.5. Bộ nhớ chương trình và bộ nhớ dữ liệu nội trú . 27
2.6. Nguyên lý truyền tin nối tiếp của AT89C51 30
2.5.6.3. Các tốc độ Baud .34
2.5.6.4. Sử dụng Timer 1 để tạo ra các tốc độ Baud .35
2.7. Cơ chế ngắt trong On-chip AT89C51 36
2.8 Kết nối cơ bản của vi điều khiển 8051 40
Chương 3 C cho vi điều khiển 8051
3.1 Keil C cho vi điều khiển .41
3.1.1 Những kiểu dữ liệu riêng của C51 41
3.1.2 Hàm với phần định nghĩa mở rộng 43
3.2 Project 1 Led đơn .45
3.2.1 Mạch và nguyên ly hoạt động 45
3.2.2 Lập trình .47
3.3 Project 2 dãy 8 Led đơn 48
3.3.1 Nguyên lí hoạt động .48
3.3.2 Lập trình .48
3.3.3 Ðiều khiển ra cả cổng .51
3.4 Project 3 điều khiển Led 7 thanh .54
3.4.1 Hình dạng và cấu tạo 54
3.4.2 Nguyên lí hoạt động .55
3.4.3 Lập trình .55
3.5 Phím nhấn .62
3.5.1 Ðếm số lần phím bấm giới hạn từ 0 đến 9 hiển thị ra led 7 thanh. .62
3.5.1.1Nguyên lí hoạt động: 63
3.5.1.2 Lập trình .63
3.5.2 Ðọc ma trận phím .65
3.5.2.1 Nguyên lí quét phím: .65
3.5.2.2 Lập trình .66
3.6 Ghép nối với LCD .68
3.6.1 Nguyên lý hoạt động của LCD .69
3.6.2 Mã (Hex) Lệnh đến thanh ghi của LCD .69
3.6.3 Lập trình .70
3.7 Điều khiển động cơ DC .74
3.7.1 Mạch nguyên ly .74
3.7.2 Lập trình .75
3.8 Ghép nối Matrix Led .79
3.8.1 Sơ đồ cấu tạo .79
3.8.2 Sơ đồ kết nối Matrix Led 8x8 .79
3.8.3 Nguyên lí hoạt động .80
3.8.4 Lập trình .81
 
 
 
 
 
 



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

đó có thể mở rộng thêm 60 Kbyte bộ nhớ chương trình bên ngoài, được định địa chỉ từ 1000h đến FFFFh. Tuy nhiên bộ VĐK này cũng có thể sử dung toàn bộ bộ nhớ chương trình ngoài bao gồm 64 Kbyte được định địa chỉ từ 0000h đến FFFFh.
Cũng từ hình trên ta thấy, thông qua việc chọn mức logic cho bit /EA có thể lựa chọn để truy cập bộ nhớ chương trình nội trú (4Kb), bộ nhớ chương trình mở rộng ngoại trú (60Kb), hay toàn bộ bộ nhớ chương trình ngoại trú bên ngoài On-chip (64Kb). Cụ thể, khi /EA = 1 thì bộ VĐK sử dụng cả bộ nhớ chương trình nội trú và ngoại trú. Ngược lại, khi /EA = 0 thì bộ VĐK chỉ sử dụng bộ nhớ chương trình ngoại trú.
Mỗi khi được Reset, bộ VĐK sẽ truy cập bộ nhớ chương trình tại địa chỉ khởi đầu là 0000h, sau đó nếu cơ chế ngắt được sử dụng thì nó sẽ truy cập tới địa chỉ quy định trong bảng vecter ngắt.
- Bộ nhớ dữ liệu nội trú.
Có thể truy cập bằng địa chỉ trực tiếp
(SFR)
Có thể truy cập bằng địa chỉ gián tiếp
Có thể truy cập bằng địa chỉ trực tiếp và gián tiếp
FFh
0
7Fh
80h
FFh
80h
128 Byte cao
128 Byte thấp
Bộ nhớ dữ liệu trong
AT89C51 có bộ nhớ dữ liệu chiếm một khoảng không gian bộ nhớ độc lập với bộ nhớ chương trình. Dung lượng của RAM nội trú ở họ VĐK này là 128 Byte, được định địa chỉ từ 00h đến 7Fh. Phạm vi địa chỉ từ 80h đến FFh dành cho SFR. Tuy nhiên bộ VĐK cũng có thể làm việc với RAM ngoại trú có dung lượng cực đại là 64 Kbyte được định địa chỉ từ 0000h đến FFFFh.
- Vùng nhớ 128 Byte thấp
Vùng nhớ 128 Byte thấp được định địa chỉ từ 00h đến 7Fh, được chia thành 3 vùng con như thể hiện ở hình 2.10.
- Vùng thứ nhất có độ lớn 32 Byte được định địa chỉ từ 00h đến 1Fh bao gồm 4 băng thanh ghi ( băng 0...băng 3), mỗi băng có 8 thanh ghi 8 bit. Các thanh ghi trong mỗi băng có tên gọi từ R0 đến R7. Vùng RAM này được truy cập bằng địa chỉ trực tiếp mức Byte, và quá trình chọn để sử dung băng thanh ghi nào là tùy thuộc vào việc lựa chon giá trị cho RS1 và RS0 trong PSW.
- Vùng thứ 2 có độ lớn 16 Byte được định địa chỉ từ 20h đến 2Fh, cho phép truy cập trực tiếp bằng địa chỉ mức bit. Bộ VĐK cung cấp các lệnh có khả năng truy cập tới vùng nhớ 128 bit này (nếu truy cập ở dạng mức bit thì vùng này có địa chỉ được định từ 00h đến 7Fh) ở mức bit..
- Vùng nhớ còn lại gồm 80 Byte có địa chỉ từ 30h đến 7Fh được dành riêng cho người sử dụng để lưu trữ dữ liệu. Đây có thể xem là vùng RAM đa mục đích. Có thể truy cập vùng nhớ này bằng địa chỉ trực tiếp hay gián tiếp thông qua các thanh ghi (R0 hay R1) ở dạng mức Byte.
- Vùng nhớ 128 Byte cao (dành cho SFR)
Vùng nhớ này được định địa chỉ từ 80h đến FFh, và được truy cập bằng địa chỉ trực tiếp.
2.6. Nguyên lý truyền tin nối tiếp của AT89C51.
- cách truyền tin nối tiếp(Serial Interface):
Hệ VXL on-chip này truyền tin nối tiếp bằng cổng RxD và TxD, dữ liệu xuất nhập truyền qua cổng nối tiếp bằng tốc độ Baud và đều qua vùng đệm nối tiếp SBUF. Cổng truyền nối tiếp là cổng truyền tin 2 chiều, nghĩa là nó có thể đồng thời truyền và nhận thông tin cùng 1 lúc. Nó cũng có khả năng vừa thực hiện chức năng nhận vừa thực hiện chức năng đệm, tức là nó có thể nhận byte kế tiếp trước khi byte được nhận trước đó được đọc từ thanh ghi đệm. (Tuy nhiên, nếu byte đầu tiên vẫn chưa được đọc tại thời điểm nhận của byte thứ 2, thì một trong 2 byte này sẽ bị mất). Điều khiển cổng nối tiếp bằng thanh ghi SCON, trạng thái của 2 bit SM0 và SM1 trong thanh ghi này thiết lập nên 4 chế độ hoạt động giao tiếp nối tiếp chuẩn như sau:
+ Chế độ 0: Dữ liệu nối tiếp vào và ra sẽ thông qua chân RxD. Chân TxD đưa ra xung nhịp đồng hồ. 8 bit dữ liệu được truyền/nhận nối tiếp, với bit LSB được thực hiện đầu tiên. Tốc độ Baud được cố định bằng 1/12 tần số của bộ dao động.
+ Chế độ 1: 10 bit được truyền (thông qua TxD) hay nhận (thông qua RxD), trong đó gồm có: 1 bit khởi động (có giá trị 0), 8 bit dữ liệu (đầu tiên là LSB), và 1 bit dừng (có giá trị là 1). Khi nhận, bit dừng được chuyển vào RB8 của thanh ghi SCON. Tốc độ Baud có thể thay đổi được.
+ Chế độ 2: 11 bit được truyền (thông qua TxD) hay nhận (thông qua RxD) bao gồm: bit khởi động (có giá trị 0), 8 bit dữ liệu (đầu tiên là LSB), một bit dữ liệu thứ 9 có thể lập trình được, và một bit dừng (có giá trị 1). Khi truyền, bit dữ liệu thứ 9 (TB8 ở trong SCON) có thể được gán giá trị 0 hay 1. Chẳng hạn như bit chẵn lẻ (P ở trong PSW) có thể được chuyển vào TB8. Khi nhận, bit dữ liệu thứ 9 được chuyển vào RB8 ở thanh ghi SCON, trong khi bit dừng được lọc bỏ. Tốc độ Baud có thể lập trình được bằng 1/32 hay 1/64 tần số bộ dao động.
+ Chế độ 3: 11 bit được truyền (thông qua TxD) hay được nhận (thông qua RxD) bao gồm: 1 bit khởi động (có giá trị 0), 8 bit dữ liệu (đầu tiên là LSB), 1 bit dữ liệu thứ 9 có thể lập trình được, và 1 bit dừng (có giá trị 1). Trên thực tế, chế độ 3 giống chế độ 2 ở mọi góc độ trừ tốc độ Baud. Tốc độ Baud ở chế độ 3 là khả biến và được xác định theo bộ Timer 1.
Trong cả 4 chế độ trên, việc truyền được bắt đầu bởi bất kỳ một lệnh nào mà sử dụng thanh ghi SBUF như là một thanh ghi đích. Việc nhận được bắt đầu ở chế độ 0 khi RI=0 và REN=1. Đối với các chế độ khác, việc nhận được bắt đầu khi bit REN=1.
2.5.6.3. Các tốc độ Baud:
+ Tốc độ Baud ở chế độ 0 được cố định, và bằng Tần số bộ dao động/12
+ Tốc độ Baud ở chế độ 2 phụ thuộc vào giá trị của bit SMOD trong thanh ghi PCON. Nếu SMOD=0 (giá trị sau khi reset), thì tốc độ Baud =1/64 tần số của bộ dao động. Nếu SMOD=1 thì tốc độ Baud =1/32 tần số của bộ dao động.
Tốc độ Baud chế độ 2 = (2SMOD*Tần số bộ dao động)/64
Trong AT89C51, các tốc độ Baud ở chế độ 1 và 3 do Timer 1 quyết định, Trong AT89C52 tốc độ Baud của các chế độ này có thể được quyết định bởi Timer 1 hay Timer 2, hay cả hai (một bộ timer xác định tốc độ truyền, bộ kia xác định tốc độ nhận).
2.5.6.4. Sử dụng Timer 1 để tạo ra các tốc độ Baud :
Khi bộ Timer 1 được dùng để tạo tốc độ Baud, thì các tốc độ Baud ở các chế độ 1 và 3 do tốc độ tràn của timer 1 và giá trị của SMOD quyết định:
Tốc độ Baud ở chế độ 1 và 3 = (2SMOD*(Tốc độ tràn của timer 1))/32
Ngắt của Timer 1 sẽ mất tác dụng trong ứng dụng này.
Bản thân bộ Timer có thể được thiết lập để thực hiện chức năng thời gian hay bộ đếm ở bất kỳ một trong 3 chế độ hoạt động. Trong hầu hết các kiểu ứng dụng, nó thường được thiết lập để thực hiện chức năng thời gian, hoạt động ở chế độ Auto-reload (nửa byte cao của TMOD = 0010b). Trong trường hợp này, tốc độ baud được tính bằng công thức:
Tốc độ Baud chế độ 1 và 3 = (2SMOD*Tần số bộ dao động)/(32*(12*[256-(TH1)])
Ta có thể nhận được các tốc độ Baud rất thấp với bộ Timer 1 bằng cách làm cho ngắt của timer 1 có tác dụng, và thiết lập Timer 1 để hoạt động như một bộ đếm thời gian 16 bit (Nửa byte cao của TMOD=0001b). Bảng 2.8 liệt kê các tốc độ Baud khác nhau ...
 

Kiến thức bôn ba

Các chủ đề có liên quan khác

Top