1. Trang chủ
  2. » Giáo Dục - Đào Tạo

TÀI LIỆU VI XỬ LÝ 8051 ĐẦY ĐỦ

36 40 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 3,03 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 1: Tổng quan về vi xử lý và vi điều khiển 1.1 Giới thiệu chung về vi xử lý và vi điều khiển 1.2 Cấu trúc chung của hệ vi xử lý và vi điều khiển 1.3 Giới thiệu một số dòng vi điều khiển thông dụng Chương 2: Cấu trúc và lập trình cho 8051 2.1 Cấu trúc và các ngoại vi của 8051 2.2 Ngôn ngữ lập trình cho 8051 2.3 Cấu trúc chương trình và lập trình C cho 8051 2.4 Hoạt động định thời và hoạt động ngắt của 8051 2.5 Ghép nối vi điều khiển với các ngoại vi cơ bản 2.5.1 Lập trình vàora với các cổng 2.5.2 Ghép nối và hiển thị với LED 7 thanh và LCD Chương 3: Đo lường và điều khiển với 8051 3.1. Đo tốc độ, vị trí và lưu lượng sử dụng Encoder. 3.2. Đo lường và điều khiển sử dụng bộ chuyển đổi tương tự số (ADC) và số tương tự (DAC). 3.3. Đo lường và điều khiển sử dụng các chuẩn giao tiếp nối tiếp 3.3.1 Giao tiếp SPI và I2C 3.3.2 Giao tiếp 1wire

Trang 1

Chương 1: Tổng quan về vi xử lý và vi điều khiển

1.1 Giới thiệu chung về vi xử lý và vi điều khiển

1.2 Cấu trúc chung của hệ vi xử lý và vi điều khiển

1.3 Giới thiệu một số dòng vi điều khiển thông dụng

2.1 Cấu trúc và các ngoại vi của 8051

2.2 Ngôn ngữ lập trình cho 8051

2.3 Cấu trúc chương trình và lập trình C cho 8051

2.4 Hoạt động định thời và hoạt động ngắt của 8051

2.5 Ghép nối vi điều khiển với các ngoại vi cơ bản

2.5.1 Lập trình vào/ra với các cổng

2.5.2 Ghép nối và hiển thị với LED 7 thanh và LCD

3.1 Đo tốc độ, vị trí và lưu lượng sử dụng Encoder

3.2 Đo lường và điều khiển sử dụng bộ chuyển đổi tương tự - số (ADC) và số - tương tự (DAC)

3.3 Đo lường và điều khiển sử dụng các chuẩn giao tiếp nối tiếp

3.3.1 Giao tiếp SPI và I2C

3.3.2 Giao tiếp 1-wire

Tài liệu bắt buộc

1 Đỗ Duy Phú, Giáo trình vi xử lý, Nhà xuất bản giáo dục Việt Nam, 2015

Trang 2

Chương 1: Khái quát chung về vi xử lý và vi điều khiển

1.1 Giới thiệu chung về vi xử lý và vi điều khiển

Vi xử lý: (Micro-Processor):

vi tính

chip với vài chục chân Phức tạp hơn, CPU được ráp sẵn trong các bộ mạch với hàng trăm con chip khác CPU là một mạch xử lý dữ liệu theo chương trình được thiết lập trước Nó là một mạch tích hợp phức tạp gồm hàng triệu transistor

Vi điều khiển: là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử

dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các mô đun vào/ra, các mô đun biến đổi số sang tương tự và tương tự sang số,

khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy

So sánh giữa vi xử lý và vi điều khiển

Embedded System (hệ thống nhúng)

chỉ sử dụng VXL hoặc VĐK để thực thi 1 công việc duy nhất;

trong ROM;

vd:printer, keyboard, video game player

Trang 3

1.2 Cấu trúc chung của hệ vi xử lý và vi điều khiển

(Sơ đồ khối một hệ máy tính căn bản)

1.3 Giới thiệu một số dòng vi điều khiển thông dụng

Việc sử dụng các loại vi điều khiển và vi xử lý trong các thiết bị điện tử tự động ở Việt Nam rất đa dạng, phong phú tùy vào yêu cầu kỹ thuật và giá thành sản phẩm

8051,

PIC, AVR, PsoC,

Tiêu chí chọn vi điều khiển:

o Tốc độ, lượng bộ nhớ, cổng I/O, timers, kích cỡ, đóng gói, năng lượng tiêu thụ

Trang 4

Chương 2: Cấu trúc và lập trình cho 8051 2.1 Cấu trúc của 8051/ Sơ đồ khối của 8051

lý của 8051 (liên quan đến thời gian/lệnh, Timer, Interrupt );

128K: AVR 128, 1M: STM32F4 -> không cần quá quan tâm)

lên tới 4K: AVR 128, 192K: STM32F4

Data), Bus điều khiển (Control Bus)

Các thành viên họ 8051

Trang 5

a) Sơ đồ chân của 8051

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

U1

AT89C51

R1

10k

Trang 6

Port 3 là Port xuất nhập 8-bit hai chiều Port 3 cũng còn làm các chức năng khác của

AT89C51 Các chức năng này được liệt kê như sau:

động đang hoat động sẽ reset 8051 Mạch reset tác động bằng tay và tự động reset khi khởi động máy

trên chip

o /EA nối mass chỉ định rằng code lưu trên bộ nhớ ngoài

o /PSEN & ALE dùng cho ROM ngoài

o Với 8051, 8031, 8032 thì /EA nối Vcc

o “/”: chỉ định tác động mức thấp

o Output, cho phép truy xuất bộ nhớ chương trình ngoài

o Nối tới chân /OE của ROM/EPROM

o Khi thực thi chương trình ở ROM nội, /PSEN được giữ ở mức1

o Là chân output cho phép chốt địa chỉ để giải đa hợp (demultiplexing) bus dữ liệu

và bus địa chỉ

o ALE xuất tín hiệu để chốt địa chỉ (byte thấp địa chỉ 16-bit) vào 1 thanh ghi ngoài

(memory cycle) Trong nửa chu kỳ bộ nhớ còn lại, P0 sẽ xuất/nhập dữ liệu

o ALE có f=1/6fclock

o Có 1 ngoại lệ: trong thời gian thực thi lệnh MOVX, một xung ALE bị bỏ qua

Trang 7

Nguồn cho 8051 hoạt động: 5 VDC

Mạch dao động và Reset

bộ nhớ ngoài để chứa chương trình (code) thực thi, cần nối chân (EA/VPP) này lên nguồn dương (5V) Đây là chân chọn bộ nhớ lưu giữ chương trình thực thi của vi điều khiển Khi nối lên +5V là đã chọn thực thi chương trình từ bộ nhớ flash bên trong VĐK

khiển thì phải sử dụng trở treo cho các chân port P0 Thường sử dụng trở băng 10k cho

8 chân của port P0

thiết kế mạch nên vẽ thêm các chân mạch nạp để trong quá trình test code sẽ nạp trực tiếp onboard (chỉ dùng được với dòng 89S có hỗ trợ chuẩn nạp ISP) sẽ tiện lợi hơn rất nhiều là khi các bạn cứ phải tháo chip ra vào, dễ làm gãy chân chip

b) Các ngoại vi của 8051

Trang 8

P2.0=0;

P2.1=1;

2.3 Cấu trúc chương trình và lập trình C cho 8051

Giới thiệu Keil-C

Trang 9

2.3.1 Cấu trúc chương trình lập trình C cho 8051

2.3.2 Khai báo biến, các phép toán và các cấu trúc của C / Biến số trong Keil-C

Trang 10

Cấu trúc điều khiển cơ bản trong Keil-C

Cấu trúc if

if (điều kiện) {

tập lệnh 1;

} else { tập lệnh 2;

}

Vòng lặp for for (i = 0; i < n ; i++) {

khối lệnh;

} Vòng lặp for vô tận for (;;)

{ khối lệnh }

Trang 11

} while (biểu thức điều kiện)

Các lệnh xuất/nhập, định địa chỉ trên Keil:

#define DataPort P2 DataPort = 0xFE; // gắn giá trị 0xFE vào cổng P2

//Khai báo thư viện sử dụng

#include <reg51.h> /*Khai báo thư viện 8051*/

#include <math.h> /*Khai báo dùng thư viện toán*/

#include <absacc.h> /**/

//Định nghĩa biến, khai báo biến toàn cục

Trang 12

2.3.3 Ứng dụng điều khiển LED đơn bằng nút bấm

Ví dụ 1: Ấn nút đèn P1.0 sáng, buông tay đèn tắt

Ví dụ 2:

XTAL2 18 XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WRP3.5/T1 1615 P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

R4

10k

Trang 13

2 4 Hoạt động định thời và hoạt động ngắt của 8051

2.4.1 Timer/Counter

xung, tạo chu kỳ lấy mẫu trong hệ thống điều khiển số, tạo tốc độ baud cho cổng nối tiếp…

a) Giới thiệu về Timer/counter

Counter (C/T=1) đếm các xung ở chân vi điều khiển (T0/T1) Có thể là xung rời rạc

8051 dùng thạch anh ngoài:

Trang 14

Các thanh ghi cho Timer/counter

Thanh ghi TCON: Là thanh ghi 8 bit, có thể truy xuất byte hoặc bit dùng để điều khiển hoạt động của Timer

Thanh ghi TMOD: Là thanh ghi 8 bit, chỉ có thể truy xuất byte dùng để xác định chế độ hoạt động của Timer

M0, M1: Chọn chế độ hoạt động của Timer/Couter (T/C)

Trang 15

Chế độ 0: TLx chỉ được sử dụng 5 bit đầu để ghép với 8bit của THx, tạo thành 13 bit Thời

Chế độ 2: Chế độ 8 bit, tự động nạp lại Khi đó TLx hoạt động để đếm (định thời), còn THx chứa giá trị nạp lại Khi xảy ra tràn, TFx được bật lên, đồng thời cho phép giá trị của THx được nạp vào TLx

Trang 16

Chế độ 3: Bộ định thời/bộ đếm 8 bit Tuy nhiên chỉ sử dụng hai thanh ghi TH0 và TL0 (TH0 thay vai trò của TH1, TH1 không được sử dụng)

GATE, C/ T: điều khiển trạng thái hoạt động cho Timer/Counter

“TRx = 1” thì cũng cho phép ta khởi động và dừng bộ định thời từ bên ngoài tại bất

kỳ thời điểm nào thông qua công tắc chuyển mạch đơn giản

Trang 17

Các bước lập trình cho chế độ 1

sử dụng và chế độ nào được chọn

này bộ định thời bắt đầu đếm tiến

không Thoát vòng lặp khi TF được lên cao

Tìm ra được các giá trị cần thiết cho các thanh thi TH và TL:

Ví dụ sau với việc sử dụng tần số dao động XTAL = 12 MHz đối với hệ thống 8051, dung T/C ở chế độ 1 – 16 bit):

Các bước để tìm các giá trị của các thanh ghi TH và TL:

1 Chia thời gian trễ cần thiết cho 1(us): n

3 Chuyển đổi kết quả ở bước 2 sang số Hex: ta có YYXX là giá trị Hexa ban đầu cần phải nạp vào các thanh ghi bộ định thời

void delay_1ms (void) { //định nghĩa hàm delay

TMOD=0x01; //chọn timer0 chế độ 1 16Bit

#include<at89x51.h> //khai báo thư viện cho VĐK 89x51

void delay_1ms(void); //khi báo nguyên mẫu hàm con tạo trễ

main()

{

TMOD=0x20; //chọn timer1, chế độ 2, 8Bit, tự nạp lại

Trang 18

Delay_1ms(); //gọi chương trình con tạo trễ

P1_5=~P1_5; //đảo tín hiệu chân P1_5

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WRP3.5/T1 1615 P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

R17

10k

Dem

Trang 19

2.4.2 Lập trình ngắt

ĐN Ngắt (Interrupt) : là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service Routine)

Cấu trúc khai báo trình phục vụ ngắt

void int0_ISR(void) interrupt 0 //using 1

Trang 20

Thanh ghi hệ thống ngắt

Thanh ghi cho phép ngắt IE

Thanh ghi ưu tiên IP

Trang 21

Ngắt ngoài:

Có hai kiểu ngắt ngoài: ngắt theo mức và theo sườn

Điều kiện để VĐK nhận biết được ngắt ngoài

(Thời gian tối thiểu của xung ngắt theo mức)

(Thời hạn xung tối thiểu để phát hiện ra các ngắt theo sườn âm)

(Các bước cho phép ngắt)

Trang 22

Ngắt Timer

Ví dụ: Hãy viết chương trình điều khiển 3 LED (D1-D3) nhấp nháy ở cổng P1 và hẹn giờ

cứ 10 giây lại bật đèn LED D4 , đèn sẽ tắt sau vài giây Hãy sử dụng bộ Timer0 để hẹn giờ, tần số của 8051 là XTAL = 12MHz

XTAL2 18 XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

330 330 330

Trang 23

b) Điều khiển ngắt theo mức

XTAL2 18 XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WRP3.5/T1 1615 P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

R17

10k

GIAM TĂNG

Trang 24

c) Lập trình bộ đo tần số sử dụng ngắt ngoài, ngắt Timer

XTAL2 18 XTAL1 19

ALE 30 EA 31 PSEN 29

RST 9

P0.0/AD0 39P0.1/AD1 38P0.2/AD2 37P0.3/AD3 36P0.4/AD4 35P0.5/AD5 34P0.6/AD6 33P0.7/AD7 32

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15P2.7/A15 28

P2.0/A8 21P2.1/A9 22P2.2/A10 23P2.3/A11 24P2.4/A12 25P2.5/A13 26P2.6/A14 27

R17

10k

Ngat

220 220

Thuong R19

10k

Trang 25

2 4.4 Giới thiệu bài toán đo tốc độ động cơ sử dụng Encoder

//Khai bao cac ham con

void delay_ms(unsigned int Time);

static unsigned char LED7SEG[10]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //LED 7 thanh

//Khai bao ham phuc vu ngat ngoai INT0

void ngatINT0() interrupt 0

{

xung++;

}

// Khai bao ham phuc vu ngat Timer 0

void timer0() interrupt 1

{

time++;

Trang 26

//Khai bao ngat ngoai

EX0=1;//Cho phep nhat INT0 chan 3.2

IT0=1;//Cho phap INT0 ngat theo suon xuong

//Khai bao ngat timer 0 trong 10ms

//TH0=0xfc;

TL0=0xEF;

TH0=0xD8;

TR0=1; //khoi dong timer

Trang 27

a++;

if (a>=4) a = 0;

}

2.5 Ghép nối vi điều khiển với các ngoại vi

Ghép nối và hiển thị với LED 7 thanh và LCD

Q4 A1015

LED2

Q2 A1015

Q3 A1015

XTAL1

PSEN ALE/PROG EA/VPP

P1.0 P1.2 P1.4 P1.6

P2.0/A8 P2.2/A10 P2.4/A12 P2.6/A14 P3.0/RXD P3.1/TXD P3.2/INT0 P3.4/T0 P3.6/WR P3.7/RD

P0.0/AD0 P0.2/AD2 P0.4/AD4 P0.6/AD6

C133p

LED4

C3 10uF VCC

R1 10K

LED4

LED_C

SW1 RESET

Y1

11.0952

LED_F

R5 100 VCC

LED3

LED_B

LED1 LED3

VCC

LED1

RN1 1501 3 5 7 9 10 12 14 16

LED_DOT

LED7G1.2 DIPSOC-9x2/SM

11 7 2 10 5

LED_G

LED2

Q1 A1015

LED_E

Trang 28

char nghin,tram, chuc, donvi;

static unsigned char LED7SEG[10]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //LED 7 thanh

Trang 29

a++;

if (a>=4) a = 0;

}

Ghép nối LCD:

Trang 30

void delay_ms(unsigned int Time);

void delay_us(unsigned int Time);

Trang 31

void lcd1602_enable(void);

void lcd1602_send_4bit_data ( unsigned char cX );

void lcd1602_send_command (unsigned char cX );

void lcd1602_init (void );

void lcd1602_gotoxy(unsigned char x, unsigned char y);

void lcd1602_clear(void);

void lcd1602_putchar ( unsigned int cX );

void lcd1602_puts (char *s);

//Cac ham che do LED don

void chedo1 (void);

void chedo2 (void);

void chedo3 (void);

void chedo4 (void);

//Khai bao cac bien toan cuc

char Lcd_Buff[20];//cho LCD

int dem=0;

static unsigned char so[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //LED 7 thanh

//Khai bao ham phuc vu ngat ngoai INT0

void ngatINT0(void) interrupt 0

//Khai bao ngat INT0

EA=1;//Cho phep ngat toan cuc

EX0=1;//Cho phep nhat INT0 chan 3.2

IT0=1;//Cho phap INT0 ngat theo suon xuong

Trang 32

if(dem==2) chedo2(); if(dem==3) chedo3(); if(dem==4) chedo4(); }

}

void delay_ms(unsigned int Time)

Trang 33

void lcd1602_send_4bit_data ( unsigned char cX )

// Ham Gui 1 Lenh Cho LCD

void lcd1602_send_command (unsigned char cX )

// Ham Khoi Tao LCD

void lcd1602_init ( void )

// che do gui lenh

lcd1602_send_4bit_data ( 0x03 ); // ket noi 8 bit

phep hien thi man hinh

khung hinh

lcd1602_send_command( CLEAR_LCD ); // xoa toan bo khung hinh

}

Trang 34

// -

// Ham Thiet Lap Vi Tri Con Tro

void lcd1602_gotoxy(unsigned char x, unsigned char y) {

unsigned char address;

}

// -

// Ham Gui 1 Ky Tu Len LCD

void lcd1602_putchar ( unsigned int cX )

Trang 35

Chương 3: Đo lường và điều khiển với 8051

3.1 Đo tốc độ, vị trí và lưu lượng sử dụng Encoder

- Đo tốc độ

- Xác định vị trí, khoảng cách

- Đo lưu lượng

3.2 Đo lường và điều khiển sử dụng bộ chuyển đổi tương tự - số (ADC) và số - tương

tự (DAC)

- Ghép nối ADC0804

 /CS: chọn chíp

 /RD: đọc data

 /WR: bắt đầu biến đổi

 /INTR: thông báo hoàn thành

quá trình chuyển đổi

 DGND: đất của digital

 AGND: đất của analog

 Vin+, Vin-: đầu vào analog

 V+: nguồn cấp +5V

 CLKR, CLKIN: xung nhịp

 DB0-DB7: Data

Trang 36

-

- Thực hiện bài toán đo và hiển thị nhiệt độ sử dụng cảm biến LM 35

Ngày đăng: 12/05/2022, 19:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w