bài giảng Vi điều khiển VNUA do sinh viên đã học và lưu trữ lại. Đây là môn học rất khó nếu ko nắm vũng kiến thức sẽ bị đuổi mong các bạn có cố gắng vì môn này rất khó. chúc các bạn may mắn
Trang 1PHẦN I:
• Chương I: Tổng quan
• Chương II: Vi điều khiển ATMEGA 8
• Chương III:Ngôn ngữ lập trình
• Chương IV: PORT xuất nhập
• Chương V:TIMER – COUNTER
• Chương VI: NGẮT
PHẦN II: Một số ứng dụng đơn giản sử dụng Atmega 8
Trang 2TÀI LIỆU THAM KHẢO
1 Ngô Diên Tập, Kỹ thuật vi điều khiển với AVR, NXB
Trang 3Nguyễn Kim Dung
Trang 4CHƯƠNG I
NHỮNG KHÁI NIỆM CƠ BẢN
Trang 5NỘI DUNG CHƯƠNG I
1.1 Các hệ thống số cơ bản
1.2.Nhắc lại một số kiến thức cơ bản về kỹ thuật số 1.3 Vi xử lý và Vi điều khiển
Trang 7b Chuyển đổi giữa các hệ thống số:
- Từ thập phân sang nhị phân:
Phương pháp : Thực hiện phép chia số thập phân
cho 2
Trang 8b Chuyển đổi giữa các hệ thống số:
- Từ thập phân sang nhị phân:
Trọng số của bit:
Vị trí bit: 7 6 5 4 3 2 1 0
Chương 1 Những khái niệm cơ bản
Trang 9b Chuyển đổi giữa các hệ thống số:
- Từ nhị phân sang thập phân:
Phương pháp :
Trang 10b Chuyển đổi giữa các hệ thống số:
- Từ thập lục phân sang nhị phân:
Phương pháp :
Một số thập lục phân là một số gồm 4 bit
Chương 1 Những khái niệm cơ bản
Trang 11b Chuyển đổi giữa các hệ thống số:
- Từ thập lục phân sang nhị phân:
Ví dụ: A5h 1010 0101
FA ???
53B ???
Trang 12- Từ nhị phân sang thập lục phân:
Ví dụ:
Chương 1 Những khái niệm cơ bản
Trang 13• Chuyển đổi giữa thập phân và thập lục phân:
Trang 14c Chiều dài từ dữ liệu
Trang 15d Một số phép toán cơ bản
• Cộng nhị phân
Ví dụ
Trang 16Chương 1 Những khái niệm cơ bản
d Một số phép toán cơ bản
• Trừ nhị phân:
Máy tính không thực hiện được trực tiếp phép trừ Để thực hiện phép
trừ, máy tính thực hiện phép cộng giữa số bị trừ với số bù 2 của số
trừ
Số bù 2 của một số A:
- Bước 1: Tìm số bù 1 của A bằng cách đảo tất cả các bit của số A
- Bước 2: Cộng số bù 1 của A với 1 được số bù 2
Số bù 2 của một số A chính là số -A
Trang 17
Ví dụ 1:Tìm số bù 2 của số 10011101
Ví dụ 2: Thực hiện phép trừ 100 – 25 = ???
Trang 18
Chương 1 Những khái niệm cơ bản
Ví dụ 2: Thực hiện phép trừ 100 – 25 = ???
Trang 20
Chương 1 Những khái niệm cơ bản
Nếu 1byte biểu diễn một số không dấu thì giá trị của
nó thay đổi từ 0 255
Nếu 1 byte biểu diễn một số có dấu thì giá trị của nó thay đổi từ -128 +127
Trang 21
1.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
Trang 221.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Chương 1 Những khái niệm cơ bản
Trang 231.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Trang 241.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
b Các cổng logic cơ bản và bảng chân lý
Chương 1 Những khái niệm cơ bản
Trang 251.2 Nhắc lại một số kiến thức kỹ thuật số cơ bản:
c Bộ cộng nửa – Bộ cộng đủ
Trang 26• Bộ cộng đủ
Chương 1 Những khái niệm cơ bản
Trang 271.3 Vi xử lý và vi điều khiển
1.3.1 Một số nét khái quát về vi xử lý
a Khái niệm
• Vi xử lý là một IC số chuyên về xử lý dữ liệu, tính toán
dữ liệu và điều khiển theo chương trình Bản thân vi xử lý không có bộ nhớ ROM,RAM
• Hệ thống vi xử lý gồm có vi xử lý, bộ nhớ và các thiết bị
ngoại vi xuất nhập
Trang 28
b Cấu trúc của một hệ vi xử lý:
Chương 1 Những khái niệm cơ bản
Trang 30
Chương 1 Những khái niệm cơ bản
Trang 31• ROM:
- Bộ nhớ chỉ đọc được mà không thay đổi được
- Không bị mất khi mất điện
- Chương trình được nạp bởi nhà sản xuất
Trang 33
• BUS điều khiển
Trang 34
• CPU:
Chương 1 Những khái niệm cơ bản
Trang 36c Tập lệnh của vi xử l{:
• Lệnh của vi xử l{ là một số nhị phân, khi vi xử l{ đọc một
lệnh thì từ dữ liệu của vi xử l{ sẽ yêu cầu vi xử l{ thực hiện một công việc đơn giản nào đó hầu hết là chuyển dữ liệu và
Chương 1 Những khái niệm cơ bản
Trang 37c Tập lệnh của vi xử l{:
Một số mã lệnh của 8051:
1110 0101 direct address: chuyển dữ liệu từ ô nhớ của
bộ nhớ trong vào thanh chứa
1111 0101 direct address: chuyển dữ liệu từ thanh chứa
vào ô nhớ của bộ nhớ bên trong
0011 0101 direct address: cộng có nhớ nội dung thanh
chứa với nội dung ô nhớ
Trang 38c Tập lệnh của vi xử l{:
Một số mã lệnh của 8051:
Chương 1 Những khái niệm cơ bản
Trang 391.3.2 Vi điều khiển:
Vi điều khiển có chứa ROM,RAM bên trong nó Ngoài ra còn
có thể tích hợp thêm một số khối chức năng như Timer – Counter, ADC, UART, … giúp cho vi điều khiển có thể ứng
dụng cho những hệ thống nhỏ
Một số họ vi điều khiển:
Trang 401.3.2 Vi điều khiển:
Chương 1 Những khái niệm cơ bản
Trang 41HẾT CHƯƠNG I
Trang 42CHƯƠNG II
VI ĐIỀU KHIỂN AVR
Trang 43Làm quen với AVR
• AVR là một họ vi điều khiển do Atmel sản xuất
• AVR là một chip vi điều khiển với cấu trúc lệnh được đơn giản hóa – RISC (Reduced
Instruction Set Computer)
• Gần như không cần mắc thêm linh kiện phụ
nào khi sử dụng AVR
Trang 44Một số đặc điểm nổi bật của AVR
• Bộ nhớ Flash được tích hợp ngay trên chip
Không cần dùng bộ nhớ EROM hoặc ROM bên
ngoài để nhớ mã chương trình
Cho phép nạp chương trình khi bộ xử l{ vẫn ở nguyên vị trí trên bản mạch
Trang 46Một số công cụ khi làm việc với AVR
1 Trình biên dịch: biên dịch file code
chương trình từ ngôn ngữ assembly
(ASM) hoặc ngôn ngữ cấp cao khác sang file hex
- AvrStudio: trình biên dịch ASM chính
nguồn:
http://www.atmel.com/tools/atmelstudio aspx
Trang 47Một số công cụ khi làm việc với AVR
1 Trình biên dịch(tiếp):
phát triển bởi gnu, sử dụng ngôn ngữ C
và có thể tích hợp với AVRstudio
- CodevisionAVR: trình biên dịch sử dụng
ngôn ngữ C với nhiều thư viện hỗ trợ, là một chương trình thương mại ( Tuy
nhiên có thể sử dụng bản demo với giới
hạn dung lượng bộ nhớ chương trình
2Kbyte)
Trang 48Một số công cụ khi làm việc với AVR
1 Trình biên dịch(tiếp):
basic, dễ sử dụng, nhiều thư viện hỗ trợ nhưng khó tìm và sửa lỗi =>
Không thích hợp cho việc tìm hiểu
AVR
- ………
Trang 49Một số công cụ khi làm việc với AVR
2 Mạch nạp và chương trình nạp
-Mạch nạp STK200/300 và chương trình nạp Ponyprog
-Mạch nạp USB AVR910 và chương trình nạp CodevisionAVR và AVR prog của
AVRstudio
-Mạch nạp USBasp
Trang 50Một số công cụ khi làm việc với AVR
3 Chương trình mô phỏng
-AVR simulator là chương trình mô
phỏng và debug được tích hợp trong
AVRstudio
-Proteus
Trang 512.1 Đặc tính – Cấu trúc – Chức năng các PORT
2.1.1 Đặc tính
Có những đặc điểm chung của họ vi điều khiển AVR 8 bit:
• 8kByte bộ nhớ FLASH bên trong dùng để lưu chương trình điều khiển
• 512 EEPROM
• 1 Kbyte SRAM nội
• Chu kỳ viết/ xóa: 10,000 FLASH/ 100,000 EEPROM
• 2 Timer/counter 8 bit và 1 timer/counter 16 bit
• Bộ đếm thời gian thực
• 3 kênh PWM
Trang 52Chương 2 Vi điều khiển ATmega8L/ATmega8
2.1 Đặc tính – Cấu trúc – Chức năng các PORT
- Master/Slave SPI serial interface
• Có 23 đường xuất nhập chương trình; số chân trên chip phụ thuộc kiểu vỏ: 28 (PDIP); 32 (TQFP và QFN/MLF)
Trang 532.1 Đặc tính – Cấu trúc – Chức năng các PORT
Trang 54Chương 2 Vi điều khiển AT89C51
2.1.3 Các chân của vi điều khiển
Trang 552.1.2 Sơ đồ cấu trúc của vi điều khiển ATmega8L/8
Trang 58Chương 2 Vi điều khiển ATmega8L/ ATmega8
2.1.3 Các chân của vi điều khiển
a Một số chân điều khiển chung:
• VCC : cấp nguồn nuôi vi điều khiển
• GND( chân 8, 22): nối đất
• AVCC chân cấp nguồn cho bộ chuyển đổi ADC PortC(3 0) và
ADC (7 6)
note: ADC Port C(5 4) sử dụng nguồn nuôi số Vcc
• AREF: chân cấp điện áp so sánh cho bộ chuyển đổi ADC
• RESET\ (PC6, chân 1 PDIP): tích cực ở mức thấp, reset chip về trạng thái ban đầu Một reset được thực thi khi chân này được duy trì ở mức thấp trong một thời gian tối thiểu nào đó Khoảng thời gian tối thiểu này phụ thuộc nguồn tạo reset cho vi điều khiển
Có 04 nguồn tạo reset cho vi điều khiển ATmega8/8L
Trang 59
b Port B (PB7 PB0):
• Đặc điểm:
PortB : port xuất nhập 8 bit 2 chiều(bi-directional I/O port) với điện trở nội kéo lên (internal pull-up resistors)
Port B cho phép lựa chọn riêng rẽ từng bit
Khi sử dụng là cổng vào, các chân của Port B được kéo xuống mức thấp sẽ tạo ra dòng hút về vi điều khiển khi các trở kháng kéo lên được kích hoạt (sink)
Khi sử dụng là cổng ra, các chân của Port B được đặt ở mức điện
áp cao và tạo dòng hút về phía tải (source)
Khi các điều kiện reset xảy ra, các chân của PortB sẽ ở trạng thái logic thứ 3 (tri-stated), mức trạng thái trở kháng cao
Trang 60
Chương 2 Vi điều khiển ATmega8L/ ATmega8
b Port B:
• Chức năng của các chân:
Bảng 2.1 Chức năng các chân trên PortB
Trang 61• Chức năng của các chân:
- XTAL2/TOSC2 – Port B, Bit 7 và XTAL1/TOSC1 – Port B, Bit 6: +XTAL 1,2: Sử dụng làm chân 1, 2 cấp xung dao động cho vi điều
khiển khi sử dụng các nguồn tạo dao động tinh thể Khi đó chân này không được dùng làm cổng xuất/nhập
+TOSC1, 2: Chân 1,2 của bộ tạo dao động cho bộ định thời Chỉ sử
dụng nếu bộ dao động RC nội được chọn làm nguồn tạo dao động cho chip, và bộ định thời không đồng bộ được kích hoạt trên thanh ghi
ASSR: bit AS2 = 1 kích hoạt đồng hồ không đồng bộ của Timer /
Trang 62Chương 2 Vi điều khiển ATmega8L/ ATmega8
2.1.3 Các chân của vi điều khiển
Trang 64Chương 2 Vi điều khiển ATmega8/8L
2.2 Kiến trúc của vi điều khiển ATmega8/8L
Trang 65Mỗi bộ nhớ giao tiếp với CPU qua một bus độc lập
- Ƣu điểm: Giao tiếp nhanh, có thể thay đổi số bit của từng bộ
nhớ mà không ảnh hưởng lẫn nhau
- Nhƣợc: Kiến trúc phức tạp
Program memory
Trang 66Chương 2 Vi điều khiển ATmega8/8L
2.2.2 Kiến trúc tổng quan của ATmega8/8L
Kiến trúc của bộ xử lý ATmega8
Trang 67• Mô tả chung:
- ATmega8 có bộ nhớ nội bên trong (Internal memory) và có thể giao tiếp với bộ nhớ bên ngoài nếu bộ nhớ bên trong không đủ khả năng lưu giữ chương trình
- Bộ nhớ nội của ATmega8 có kiến trúc kiểu Harvard gồm bộ nhớ và các bus chương trình, dữ liệu tách biệt nhau
- Các lệnh trong bộ nhớ chương trình được thực hiện bằng kỹ thuật cấu trúc đường ống lệnh (instruction pipline), điều này cho phép trong khi một lệnh đang được thực thi thì lệnh tiếp theo được tìm, nạp trong bộ nhớ chương trình Kỹ thuật này làm tăng tốc độ xử lý của CPU
Trang 68Chương 2 Vi điều khiển ATmega8/8L
2.2.3 Tổ chức bộ nhớ của ATmega8/8L
a Bộ nhớ chương trình
Bộ nhớ chương trình (Progam memory) là bộ nhớ
Flash có thể lập trình lại (In-System
Reprogrammable Flash memory)
- Dung lượng: 8KByte
- Các lệnh của AVR có độ dài 16bit hoặc 32 bit nên
bộ nhớ chương trình được tổ chức thành 4Kx16 bits
- Con trỏ chương trình –PC (program counter) có
chiều dài 12 bits xác định các địa chỉ trên bộ nhớ
chương trình
- Không gian bộ nhớ chương trình được chia thành
hai phần: phần dành cho chương trình khởi động
(Boot program section) và phần dành cho chương
trình ứng dụng (Application Flash memory section)
- Bus dữ liệu dùng cho bộ nhớ chương trình có độ
rộng 16 bit và chỉ nối với thanh ghi lệnh
Trang 70Chương 2 Vi điều khiển ATmega8/8L
2.2.3 Tổ chức bộ nhớ của ATmega8/8L
Tệp thanh ghi
-Gồm 32 thanh ghi 8 bit được dùng đa
mục đích với thời gian truy cập trong
Có thể truy xuất đến các thanh ghi
này thông qua tên gọi hoặc địa chỉ
trực tiếp
- Thanh ghi R0 được sử dụng trong lệnh
nạp của bộ nhớ chương trình (LPM)
- Sáu thanh ghi từ R26-R31 có thể được
sử dụng làm 3 thanh ghi địa chỉ gián tiếp
16 bit để xác định địa chỉ của dữ liệu
Trang 712.2.3 Tổ chức bộ nhớ của ATmega8/8L
Tệp thanh ghi
-Thanh ghi X, Y, Z
Trang 72Chương 2 Vi điều khiển ATmega8/8L
2.2.3 Tổ chức bộ nhớ của ATmega8/8L
Bộ nhớ SRAM nội
- 1120 địa chỉ đầu tiên của bộ nhớ
dữ liệu được sử dụng cho Tệp
thanh ghi (32 byte từ
0x00-0x1Fh), các thanh ghi I/O(64 byte
từ 0x20-0x5Fh), bộ nhớ SRAM
nội (1024 byte hay 1kB từ
0x060-045Fh)
- Dung lượng: 1kByte
- Được sử dụng cho ngăn xếp
cũng như để lưu trữ các biến
- Trong thời gian có ngắt hoặc gọi chương trình con, giá trị hiện tại của bộ đếm chương trình được lưu trữ trong ngăn xếp
- Vị trí (địa chỉ) của ngăn xếp được xác định bằng con trỏ ngăn xếp
Trang 732.2.3 Tổ chức bộ nhớ của ATmega8/8L
Bộ nhớ vào/ra (I/O)
- Gồm 64 thanh ghi 8 bit phục vụ
cho các chức năng ngoại vi của
CPU Bộ nhớ I/O có thể truy cập
trực tiếp như các thanh ghi có địa
chỉ 0x00h-0x3Fh hoặc có thể truy
cập như một phần của bộ nhớ
SRAM có địa chỉ từ 0x20-0x5Fh
Trang 74Chương 2 Vi điều khiển ATmega8/8L
- Có 3 thanh ghi liên quan đến việc sử dụng bộ nhớ EEPROM:
Thanh ghi địa chỉ bộ nhớ EEPROM: thanh ghi EEARH và EEARL
Sử dụng các bit 8 0 để xác định địa chỉ từ 0-511 của bộ nhớ EEPROM
Trang 75Bộ nhớ EEPROM
Thanh ghi địa chỉ bộ nhớ EEPROM: thanh ghi EEARH và EEARL
Sử dụng các bit 8 0 để xác định địa chỉ từ 0-511 của bộ nhớ EEPROM Các bit này cho phép đọc/ghi Địa chỉ cần truy cập vào EEPROM cần phải được nạp vào thanh ghi này trước khi truy xuất đến bộ nhớ
Các bit 15 9 không dùng đến, chỉ cho phép đọc Giá trị đọc được của các bit này bằng 0
Trang 76
Chương 2 Vi điều khiển ATmega8/8L
2.2.3 Tổ chức bộ nhớ của ATmega8/8L
Bộ nhớ EEPROM
Thanh ghi dữ liệu bộ nhớ EEPROM: thanh ghi EEDR
Có độ dài 8 bit, được dùng để đọc hoặc ghi dữ liệu vào ô nhớ của
EEPROM có địa chỉ được xác định bởi thanh ghi EEAR
Trang 77Bộ nhớ EEPROM
Thanh ghi điều khiển bộ nhớ EEPROM: thanh ghi EECR
Chức năng: Điều khiển quá trình đọc/ghi dữ liệu vào bộ nhớ EEPROM
Có độ dài 8 bit, trong đó:
- 4 bit 7 4 chưa sử dụng, chỉ cho phép đọc và có giá trị bằng 0
- Bit 3-EERIE : = 1 cho phép ngắt bộ nhớ EEPROM
= 0 không cho phép ngắt
- Bit 2- EEMWE (EEPROM Master Write Enable):
Khi EEMWE =1 và EEWE=1 sẽ ghi dữ liệu trên thanh ghi EEDR vào EEPROM Giá trị của EEMWE tự động bị xóa sau 4 chu kỳ xung nhịp
Trang 78Chương 2 Vi điều khiển ATmega8/8L
2.2.3 Tổ chức bộ nhớ của ATmega8/8L
Bộ nhớ EEPROM
Thanh ghi điều khiển bộ nhớ EEPROM: thanh ghi EECR
Chức năng: Điều khiển quá trình đọc/ghi dữ liệu vào bộ nhớ EEPROM
- Bit 1-EEWE (EEPROM Write Enable) : Cho phép ghi dữ liệu lên EEPROM cùng bit EEMWE
Bit EEWE giữ nguyên giá trị bằng 1 trong suốt chu trình ghi, khoảng thời gian này có thể đến 2,5ms Sau khoảng thời gian này thì phần cứng sẽ xóa bit trên
- Bit 0- EERE (EEPROM READ Enable):
Đặt EERE =1 và sau đó xóa EERE, dữ liệu ở địa chỉ EEAR sẽ được chuyển vào thanh ghi EEDR
Trước khi 1 chu trình đọc được thực hiện, cần phải kiểm tra bit EEWE cho đến khi bit này bằng 0 để đảm bảo không một chu trình ghi nào được tiến hành
Trang 79a Khối số học logic ALU
Chức năng: Thực hiện các phép tính số học, logic, thao tác bit trên nội dung các thanh ghi và ghi kết quả vào tệp thanh ghi trên thanh ghi
đã được chỉ định
Đặc điểm:
- Các thao tác này được thực hiện trong một chu kỳ đồng hồ đơn lẻ
- Mỗi thao tác đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái tùy thuộc vào lệnh
Trang 80Chương 2 Vi điều khiển ATmega8/8L
2.2.4 Khối số học logic ALU và thanh ghi trạng thái SREG
b Thanh ghi trạng thái SREG:
- Gồm 8 bit cờ báo hiệu trạng thái hiện tại của bộ xử lý
- Các bit được xóa khi reset và có thể đọc hoặc ghi vào bởi chương trình
- Thanh ghi trạng thái không được tự động lưu trũ khi có một ngắt xảy
ra, do đó chương trình của người dùng phải lưu trữ và khôi phục thanh ghi trạng thái trong thời gian có ngắt
Trang 81b Thanh ghi trạng thái SREG:
- Bit 7-I: I =1 Cho phép ngắt toàn cục; I=0 cấm tất cả các ngắt
- Bit 6-T: bit Copy Storage Được sử dụng với lệnh nạp bit BLD và lệnh lưu trữ bit BST Một bit trên một thanh ghi trong Tệp thanh ghi
có thể được sao chép vào T bởi lệnh BST, ngược lại có thể chuyển một bit trên T vào một thanh ghi trên Tệp thanh ghi thông qua lệnh BLD
- Bit 5 – H: Half Carry Flag Cho thấy phép cộng một nửa đã được thực hiện trong một số lệnh số học, rất hữu ích trong các phép toán với số BDC