Vi điều khiển Atmega8 AVR có công suất cao, tiêu thụ năng lượng thấp, cấu trúc RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8 bít, 16 MIPS tại
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ
Trang 2Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
2009
Lời Cảm Ơn
Xin chân thành cảm ơn tất cả các Thầy Cô trong Trường ĐH Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh đã dạy dỗ cho đến ngày hôm nay, các Thầy
Cô của bộ môn Điện tử Viễn Thông
Xin chân thành cảm ơn Thầy Nguyễn Ngô Lâm ,Giảng Viên Khoa điện - điện
tử người đã gợi ý và hướng dẫn thảo luận và giúp đỡ em thực hiện đồ án môn học này
Và xin cảm ơn tất cả những người đã gián tiếp tạo điều kiện thuận lợi trong quá trình đồ án môn học 1
Dù đã cố rất gắng nhưng vẫn không tránh khỏi sai sót, xin được học hỏi
những lời chỉ dẫn Xin cảm ơn rất nhiều
Người thực hiện
1.Đào Thanh Mai 2.Nguyễn Đức Đài
Trang 3Mục lục
Chương 1 Giới thiệu chung -3
1 Đặt vấn đề -3
2 Các vấn đề cần giải quyết -4
Chương 2 Tìm Hiểu Cấu Trúc Các Phần Cứng -5
I.Atmega8 -5
1.Tổng Quan -5
2.Cấu trúc chung của AVR -9
3.Cấu trúc ngắt Atmega8 -9
4.Cấu trúc bộ nhớ -11
4.1 Bộ nhớ chương trình (Bộ nhớ Flash) -11
4.2 Bộ nhớ dữ liệu SRAM -13
4.3 Bộ nhớ dữ liệu EEPROM -21
5 .Các cổng vào ra (I/O) -23
5.1 Các chức năng của Port B -23
5.2 Các chức năng của Port C -24
5.3 Các chức năng của Port D -24
5.4 Mô tả thanh ghi của port I/O -25
6 Bộ định thời 8bit timer/counter 0 -27
6.1 Hoạt động -27
6.2 Đơn vị đếm -29
6.3 Đơn vị so sánh ngõ ra -29
6.4 Mô tả các thanh ghi -30
7 Bộ định thời/đếm timer/counter 1 16-bit - 32
7.1 sơ đồ khối và một số đặc điểm -32
7.2 Một số định nghĩa -32
8.SPI(Serial peripheral interface) -37
9.TWI – Two Wire Interface -40
10.Bộ so sánh tương tự(Alalog Comparator) -41
11.USART ( Universal asynchronous receiver/transmitter ) -43
11.1 đặc điểm -43
11.2 Tạo xung clock -44
11.3 Định dạng khung truyền -45
11.4 Khởi tạo USART -45
11.5 Truyền thông dữ liệu-bộ truyền USART -45
12.Hệ thống xung Clock -46
12.1 Bộ dao động Thạch Anh -47
Trang 4Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
12.3 Bộ dao động R-C bên ngoài -49
12.4 Bộ dao động nội R-C tinh chỉnh được -50
12.5 Bộ tạo xung Clock bên ngoài -51
12.6 Bộ dao động định thời -51
13.Bộ Biến Đổi A/D( Analog/Digital) -53
II Cấu trúc cổng nối tiếp -57
1.Khái Quát -57
2 Truy xuất trực tiếp thông qua cổng -62
III LM35(Cảm biến nhiệt độ) -65
Chương III: Thiết Kế Phần Cứng -66
1.Mạch Nguồn Cung Cấp Cho Hệ Thống - 66
Chương I:
Giới Thiệu Đề Tài
1- ĐẶT VẤN ĐỀ
Ngày nay cùng sự phát triển không ngừng của khoa học kỹ thuật, thì kỹ thuật số đã đem lại cho con người những thành tựu to lớn, giúp cho con người dễ dàng đạt được mục đích của mình trong mọi thiết kế Hoà nhập cùng xu hướng đó, vi điều khiển đã khẳng định được vị thế vững chắc của mình trong mọi ứng dụng Điển hình trong công nghệ đo lường và điều khiển bằng máy tính đặc biệt là việc đo nhiệt độ và điều khiển các hệ thống vấn đề tự động ổn định nhiệt độ là yếu tố quan trọng hàng đầu để nâng cao chất lượng cuộc sống , sản xuất Vì vậy, việc ứng dụng vi điều khiển trong tự động điều khiển nhiệt độ và hiển thị kết quả trên máy tính đã được nghiên cứu và ứng dụng
Vi điều khiển Atmega8 AVR có công suất cao, tiêu thụ năng lượng thấp, cấu trúc RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8 bít, 16 MIPS tại tần số đặt 16 MHz,
bộ nhân 2 chu kỳ On-chip, Power-on Reset và Brown-out Detection có thể lập trình, bộ dao động RC bên trong có thể lập trình các mức, 5 Mode ngủ (Idle, ADC Noise Reduction, Power-save, Power-down và Standby), có khả năng Reset khi bật nguồn, khả năng dò lỗi Brown out lập trình được, có nguồn ngắt trong và ngắt ngoài
Cốt lõi của AVR là sự kết hợp các câu lệnh phong phú với 32 thanh ghi đa mục đích Tất cả 32 thanh ghi đều trực tiếp kết nối tới bộ xử lý logíc số học - Arithmetic Logic Unit (ALU), cho phép truy nhập 2 thanh ghi độc lập trong một câu lệnh đơn được thực hiện trong một chu kỳ xung Kết quả của cấu trúc trở nên gọn nhẹ, hiệu quả hơn, trong khi vẫn đạt được thời gian xử lý nhanh hơn gấp 10 lần các vi điều khiển CISC thông thường khác
8K byte Flash trên chíp có thể lập trình với các khả năng đọc trong khi ghi (Read-While-Write), 512 byte EEPROM, 1K byte SRAM, 23 đường vào ra đa mục đích, 32 thanh ghi đa mục đích, 3 Timer/Counter rất linh hoạt với các compare mode, các ngắt trong và ngắt ngoài, một bộ USART nối tiếp có thể lập trình được, ghép nối nối tiếp 2 dây định hướng byte, 6 kênh ADC (8 kênh với loại TQFP và MLF packages) trong
đó 4 (hoặc 6) kênh có độ chính xác 10-bit và 2 kênh có độ chính xác 8-bit, Watchdog Timer có thể lập trình được với bộ dao động bên trong, một cổng nối tiếp SPI và 5 mode tiết kiệm năng lượng có thể lựa chọn mềm
Trang 5- Idle mode dừng CPU trong khi vẫn cho phép SRAM, Timer/Counters, cổng SPI, và hệ thống ngắt tiếp tục chức năng của chúng
- Power-down mode tiết kiệm nội dung thanh ghi, nhưng hạn định bộ dao động, không cho phép tất cả các chức năng khác của chíp được hoạt động cho đến khi ngắt tiếp theo hoặc Reset phần cứng xuất hiện
- Trong Power-save mode, timer không đồng bộ tiếp tục chạy, cho phép sử dụng để duy trì thời gian nền, trong khi các phần còn lại của thiết bị được ngủ
- ADC Noise Reduction mode dừng CPU và tất các module I/O ngoại trừ timer không đồng bộ và ADC
để tối thiểu hóa nhiễu mạch trong suốt quá trình ADC trong chuyển đổi
- Trong Standby mode, bộ dao động thạch anh/ resonator được phép chạy trong khi các phần còn lại của thiết bị được ngủ Điều này cho phép start-up rất nhanh cùng với hiệu quả tiêu thụ ít năng lượng
Thiết bị được sản suất áp dụng công nghệ tích hợp bộ nhớ non-volatile cao của Atmel Bộ nhớ chương trình Flash này có thể lập trình thông qua ghép nối tiếp SPI bằng chương trình lập trình bộ nhớ non-volatile riêng, hoặc bằng một chương trình boot on – chip, chạy trong AVR core Chương trình boot có thể sử dụng bất kỳ một ghép nối nào để download chương trình ứng dụng trong bộ nhớ Flash Phần mềm trong Boot Flash
sẽ tiếp tục chạy trong khi các phần sử dụng Flash vẫn được update, hỗ trợ cho hoạt động đọc trong khi ghi (Read-While-Write)
Bằng việc kết hợp với một CPU 8-bit RISC với bộ nhớ Flash tự lập trình trong hệ thống trên một chíp, Atmel ATmega8 là một vi điều khiển cực mạnh, thỏa mãn yêu cầu về một bộ vi điều khiển với độ linh hoạt cao và đem lại lợi nhuận lớn với rất nhiều các ứng dụng điều khiển tác động nhanh
ATmega8 AVR cũng hỗ trợ đầy đủ về lập trình và phát triển các tool hệ thống, bao gồm bộ dịch C, macro assemblers, bộ mô phỏng/gỡ rối chương trình, In-Circuit Emulators, và evaluation kits
2 Các vấn đề cần giải quyết
Đo nhiệt đọ phòng
Hiển thị trên máy tính
Điều khiển bằng máy tính một số thiết bị như đèn,quạt động cơ…
Mạch gồm có Atmega8, cảm biết nhiệt độ LM35, cổng COM trong đó phần chính là Atmega8 Tín hiệu được nhận bởi LM35 qua ADC(tích hợp sẵn trong Atmega8) biến đổi tín hiệu tương tự thành số tín hiệu này truyền với giao thức RS 232 đi vào COM và kết mối với máy tính, Qua đó,chúng ta có thể điều khiển thiết
o Có thể xóa lập trình được và có thể chịu được 10000 lần ghi xóa
o Có 32 thanh ghi đa năng 8 bit,
o Có 512 byte bộ nhớ EEPROM tích hợp trên chíp,
o Ccó 1 kbyte SRAM nội
o Có hai bộ Timer/counter 8 bit và một bộ timer/counter 16 bit với bộ chia tần lập trình được
o Có ba kênh điều xung, 6 kênh lối vào chuyển đổi ADC với độ phân giải 10 bit
Trang 6Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
o Nguồn nuôi từ 2.7 đến 5.5 đối với Atmega8L và từ 4.5 đến 5.5 đối với Atmega8,
o Làm việc tiêu thụ dòng 3.6mA
o Sử dụng mạch dao động ngoài từ 0 đến 8 Mhz với Atmega8L và từ 0 đến 16 Mhz với Atmega8
o Ngoài ra chíp Atmega8 còn có bộ xung nội bên trong có thể lập trình chế độ xung nhịp
Vi điều khiển AVR do hãng Atmel ( Hoa Kì ) sản xuất được gới thiệu lần đầu năm
1996 AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR ( như AT tiny 13, AT
tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR ( chẳn hạn
AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình và mạnh hơn là
dòng Mega ( như ATmega32, ATmega128,…) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip, cũng có dòng tích hợp cả bộ LCD trên chip ( dòng LCD AVR ) Tốc độ của dòng Mega cũng cao hơn so với các dòng khác Sự khác nhau cơ bản giữa các dòng
chình là cấu trúc ngoại vi, còn nhân thì vẫn như nhau, Hình 1.1
Block Diagram
Trang 8Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Đặt biệt, năm 2008, Atmel lại tiếp tục cho ra đời dòng AVR mới là XmegaAVR, với những tính năng mạnh mẽ chưa từng có ở các dòng AVR trước đó Có thể nói XmegaAVR là dòng MCU 8 bit mạnh mẽ nhất hiện nay
1.1 Các dòng AVR khác nhau: Tiny, AVR và Mega
� Bộ Nhớ Dữ Liệu : Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là bộ nhớ
SRAM và bộ nhớ EEPROM Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại tách biệt
nhau và được đánh địa chỉ riêng
� Bộ nhớ SRAM có dụng lượng 1 K bytes, Bộ nhớ SRAM có hai chế độ hoạt động
là chế độ thông thường và chế độ tương thích với ATmega103, muốn thiết lập bộ nhớ
SRAM hoạt động theo chế độ nào ta sử dụng bit cầu chì M103C ( M103C fuse bit (9) )
Atmega8 là vi điều khiển 8 bit dựa trên kiến trúc RISC Với khả năng thực hiện mỗi lệnh trong vòng một chu kỳ xung clock, Atmega8 có thể đạt được tốc độ 1MIPS trên mỗi MHz (1 triệu lệnh/s/MHz)
Dưới đây là sơ đồ khối của Atmega8
Sơ đồ cấu trúc Atmega8
ATmega 8 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,
Trang 92 CẤU TRÚC CHUNG AVR
CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các chương trình Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá trình tính toán, điều khiển các thiết bị ngoại vi và quản lý ngắt
2.1.Cấu trúc tổng quát
AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu Các lệnh được thực hiện chỉ trong một chu kỳ xung clock Bộ nhớ chương trình được lưu trong bộ nhớ Flash
2.2 ALU
ALU làm việc trực tiếp với các thanh ghi chức năng chung Các phép toán được thực hiện trong một chu
kỳ xung clock Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit
2.3 Thanh ghi trạng thái
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic
Thanh ghi trạng thái SREG
C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)
V, For signed tests (S=N XOR V)S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các lệnh BLD,BST)
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt Nếu bit này ở trạng thái logic
0 thì không có một ngắt nào được phục vụ.)
2.4 Các thanh ghi chức năng chung
Trang 10Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Thanh ghi chức năng chung
Tiệp ghanh ghi ( register file ) : Tiệp 32 thanh ghi đa chức năng ( $0000 - $001F )
đã được nói ở trên, ngoài chức năng là các thanh ghi đa chức năng, thì các thanh ghi từ R26 tới R31 từng đôi một tạo thành các thanh ghi 16 bit X, Y, Z được dùng làm con trỏ trỏ tới bộ nhớ chương trình và bộ nhớ dữ liệu Thanh ghi con trò X, Y có thể dùng làm con trỏ trỏ tới bộ nhớ dữ liệu, còn thanh ghi Z có thể dùng làm con trỏ trỏ tới bộ nhớ chương trình Các trình biên dịch C thường dùng các thanh ghi con trỏ này để quản lí
Data stack của chương trình C
Chức năng con trỏ của các thanh ghi R26 –R31
2.5 Con trỏ ngăn xếp (SP)
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E) Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp
Trang 11Thanh ghi con trỏ ngăn xếp
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2 Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi
3.CẤU TRÚC NGẮT CỦA Atmega8
3.1 KHÁI NIỆM VỀ NGẮT
Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn xàng cho đổi dữ liệu của
mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hợc
khi nó đã truyền được một byte thì cờ TX được thiết lập…
Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp Trường hớp ngắt này có mức ưu tiên cao hơn thì nó
sẽ được phục vụ Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua
Bộ nhớ ngăn xếp là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ :SPL :0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E
Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2 Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi
3.2 TRÌNH PHỤC VỤ NGẮT VÀ BẢNG VECTOR NGẮT
Đối với mỗi ngắt thì phải có một trình phục vụ ngắt ISR (Interrupt Service Routine)
hay trình quản lý ngắt (Interrupt handler) Khi một ngắt đựợc gọi thì bộ vi điều khiển phục vụ ngắt Khi một ngắt đựợc gọi thì bộ vi điều khiển chạy trình phục vụ ngắt Đối với mỗi ngắt thì có một vị trí cố định trong
bộ nhớ để giữ địa chỉ ISR của nó Nhóm các vị trí nhớ được dành riêng để gửi các địa chỉ của các ISR được
Trang 12Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Khi kích hoạt một ngắt bộ vi điều khiển đi qua các bước sau:
● Vi điều khiển kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC)
vào ngăn xếp
● Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng véc tơ ngắt nơi lưu
giữ địa chỉ của một trình phục vụ ngắt
● Bộ vi điều khiển nhận địa chỉ ISR từ bảng véc tơ ngắt và nhảy tới đó Nó bắt đầu
thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt)
● Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt Trước hết
nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo hai byte trên đỉnh của ngăn xếp vào
PC Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó
3.3 BẢNG VECTOR NGẮT
3.4 THỨ TỰ ƯU TIÊN NGẮT
Không như vi điều khiển họ 8051, ở đó thứ tự ưu tiên của các ngắt có thể thay đổi
được ( bằng cách lập trình ) Với vi điều khiển AVR thứ tự ưu tiên các ngắt là không thể
thay đổi và theo qui tắc: “ Một vec tơ ngắt có địa chỉ thấp hơn trong bộ nhớ chương
trình có mức độ ưu tiên cao hơn ” Chẳn hạn ngắt ngoài 0 ( INT0 ) có mức độ ưu tiên cao hơn ngắt ngoài 1
( INT1 )
Để cho phép một ngắt người dùng cần cho phép ngắt toàn cục ( set bit I trong thanh ghi SREG ) và các bit điều khiển ngắt tương ứng Khi một ngắt xảy ra và đang được phục vụ thì bit I trong thanh ghi SREG bị xóa, như thế khi có một ngắt khác xảy ra nó sẽ không được phục vụ, do đó để cho phép các ngắt trong khi một ISR ( interrupt service routine ) khác đang thực thi, thì trong chương trình ISR phải có lệnh SEI để set lại bit
I trong SREG
3.5 NGẮT TRONG NGẮT
Khi AVR đang thực hiện một trình phục vụ ngắt thuộc một ngắt nào đó thì lại có
một ngắt khác được kích hoạt Trong những trường hợp như vậy thì một ngắt có mức ưu tiên cao hơn có thể ngắt một ngắt có mức ưu tiên thấp hơn Lúc này ISR của ngắt có mức ưu tiên cao hơn sẽ được thực thi(*)
Trang 13Khi thực hiện xong ISR của ngắt có mức ưu tiên cao hơn thì nó mới quay lại phục vụ tiếp ISR của ngắt có mức ưu tiên thấp hơn trước khi trở về chương trình chính Đây gọi là ngắt trong ngắt
Chú ý:
- Giả định là khi một ISR nào đó đang thực thi thì xảy ra một yêu cầu ngắt từ một
ISR khác có mức ưu tiên thấp hơn thì ISR có mức ưu tiên thấp hơn không được phục vụ,
nhưng nó sẽ không bị bỏ qua luôn mà ở trạng thái chờ Nghĩa là ngay sau khi ISR có
mức ưu tiên cao hơn thực thi xong thì đến lượt ISR có mức ưu tiên thấp hơn sẽ được
phục vụ
- (*) : Điều này chỉ xảy ra khi trong code của ISR của ngắt có mức ưu tiên thấp
hơn có lệnh set bit I trong thanh ghi SREG (đó là lệnh SEI )
MCU Control Register– MCUCR
Thanh ghi MCU chứa các bit điều khiển ngắt có ý thức kiểm soát và chức năng MCU chung
• Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0
Trang 14Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
External Interrupt 1 được kích hoạt bởi chân ngoài INT1 nếu SREG I-bit và mặt nạ ngắt tương ứng trong GICR là set(1) Các mức độ và cạnh trong chân INT1 ngoài kích hoạt ngắt được định nghĩa trong
bảng sau:
• Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0
External Interrupt 0 được kích hoạt bởi chân ngoài INT0 nếu SREG I-bit và mặt nạ ngắt tương ứng trong GICR là set(1) Các mức độ và cạnh trong chân INT0 ngoài kích hoạt ngắt được định nghĩa trong bảng sau:
General Interrupt Control Register –GICR
• Bit 7 – INT1: External Interrupt Request 1 Enable
Khi bit INT1 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt.Ngắt tương ứng của External Interrupt Request 1 được thực thi từ INT0 Interrupt Vector
• Bit 6 – INT0: External Interrupt Request 0 Enable
Khi bit INT0 set lên 1 và I-bit trong thanh ghi trạng thái SRGE là 1,ngắt chân ngoài được kích hoạt Ngắt tương ứng của External Interrupt Request 0 được thực thi từ INT0 Interrupt Vector
General Interrupt Flag Register – GIFR
• Bit 7 – INTF1: External Interrupt Flag 1
Khi 1 sự kiện tại chân INT1 kích hoạt 1 yêu cầu ngắt INTF1 sẽ lên 1 Nếu I-bit trong SREG và bit INT1 trongGICR là 1,MCU sẽ nhảy đến vector ngắt tương ứng Cờ sẽ xóa khi thực hiện ngắt thường xuyên Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó
• Bit 6 – INTF0: External Interrupt Flag 0
Khi 1 sự kiện tại chân INT0 kích hoạt 1 yêu cầu ngắt INTF0 sẽ lên 1 Nếu I-bit trong SREG và bit INT1 trongGICR là 1,MCU sẽ nhảy đến vector ngắt tương ứng Cờ sẽ xóa khi thực hiện ngắt thường xuyên Đôi khi, cờ có thể được xóa nếu ta ghi trực tiếp 1 giá trị vào nó
4.CẤU TRÚC BỘ NHỚ
Trang 15AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình Ngoài ra Atmega8 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu
4.1 Bộ nhớ chương trình (Bộ nhớ Flash)
Bộ nhớ Flash 16KB của Atmega8 dùng để lưu trữ chương trình Do các lệnh của AVR có độ dài 16 hoặc
32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16 Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trình ứng dụng
Bản đồ bộ nhớ chương trình
4.2 Bộ nhớ dữ liệu SRAM
1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội
Trang 16Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Bản đồ bộ nhớ dữ liệu SRAM
Các chế độ truy nhập địa chỉ của AVR
4.2.1 Địa chỉ thanh ghi đơn trực tiếp
Ở chế dộ này địa chỉ của thanh ghi được lấy trực tiếp từ vùng các thanh ghi (từ 0 tới 31)
Trang 17Đây là chế độ mà trong một lênh ALU truy nhập trực tiếp vào hai thanh ghi Chế độ này hoàn toàn tương
tự như chế độ trên
Ví dụ:
ADD Rd,Rr
4.2.3 Địa chỉ trực tiếp cổng vào ra
Trong đó địa chỉ của toán hạng được chứa trong 6 bit của một từ lệnh n là địa chỉ của thanh ghi nguồn hoặc đích
Trang 18Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Địa chỉ của toán hạng nguồn hoặc đích được trỏ bởi thanh ghi Y hoặc Z cộng thêm một chỉ số nào đó
4.2.6 Địa chỉ gián tiếp dữ liệu:
Đây là cách mà CPU truy nhập tới dữ liệu trong RAM thông qua thanh ghi X,Y,Z địa chỉ của dữ liệu được lưu trong thanh ghi này
Trang 20Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Ví dụ:
LDI R30,0x07;dia chi truc tiep du lieu 0x07
LDI R31,0xFF
LPM ; đưa nội dung của ô nhớ có địa chỉ trong Z (0x07FF )về thanh ghi R0
4.2.9 Địa chỉ bộ nhớ chương trình gián tiếp:
Địa chỉ đoạn mã được trỏ bởi thanh ghi Z sử dụng trong các lệnh IJMP và ICALL
4.2.10 Địa chỉ tương dối của bộ nhớ chương trình
Cách định địa chỉ này dùng cho các lệnh RJMPvà RCALL khi đó CPU sẽ có giá trị PC+k+1
Trang 214.2.11 Các thanh ghi chức năng đặc biệt
Bao gồm các thanh ghi dữ liệu và các thanh ghi điều khiển các cổng vào ra Chúng có thể truy nhập được bằng 2 cách:
Hai ví dụ này hoàn toàn tương đương, đều ghi dữ liệu vào thanh ghi SREG
4.2.12 Status Register (SREG)
Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic
Trang 22Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)
N: Negative Flag (Nếu kết quả của phép toán là âm)
V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)
V, For signed tests (S=N XOR V)S: N
H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)
T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các lệnh BLD,BST)
I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt.Nếu bit này ở trang thái logic
0 thì không có một ngắt nào được phục vụ.)
Registers and Operands (kí hiệu các thanh ghi và các toán hạng)
Rd: Thanh ghi đích (một trong 32 các thanh ghi chức năng chung)
Rr: Thanh ghi nguồn (Một trong 32 thanh ghi chức năng chung)
R: Kết quả sau khi lệnh chạy
K: Hằng số dữ liệu
k: Hằng số địa chỉ (Có thể là một nhãn hoặc một địa chỉ cụ thể)
b: Bit trong thanh ghi chức năng chung hoặc trong thanh ghi chức năng đặc biệt (0-7)
s: Bit trong thanh ghi trạng thái (0-7)
X,Y,Z: Thanh ghi địa chỉ (Để trỏ tới địa chỉ trong RAM,hoặc Z có thể trỏ tới địa chỉ trong ROM) (X=R27:R26, Y=R29:R28 and Z=R31:R30)
A: I/O location address
q:Chỉ số cho các địa chỉ trực tiếp (0-63)
4.2.13 Stack Pointer
Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E) Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp
Trang 23Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2 Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hợc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi
4.3 Bộ nhớ dữ liệu EEPROM
Atmega8 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một Đây là bộ nhớ dữ liệu có thể ghi xóa ngay trong lúc vi điều khiển đang hoạt động và không bị mất dữ liệu khi nguồn điện cung cấp bị cắt Có thể ví bộ nhớ dữ liệu EEPROM giống như là ổ cứng ( Hard disk ) của máy vi tính EEPROM được xem như là một bộ nhớ vào ra được đánh địa chỉ độc lập với SRAM, điều này có nghĩa là ta cần sử dụng các lệnh in, out … khi muốn truy xuất tới EEPROM
Để điều khiển vào ra dữ liệu với EEPROM ta sử dụng 3 thanh ghi sau :
4.3.1 Thanh Ghi EEAR ( EEARH và EEARL )
EEAR là thanh ghi 16 bit lưu giữ địa chỉ của các ô nhớ của EEPROM, thanh ghi EEAR được kết hợp từ
2 thanh ghi 8 bit là EEARH và thanh ghi EEARL
4.3.2 Thanh Ghi EEDR
Đây là thanh ghi dữ liệu của EEPROM, là nơi chứa dữ liệu ta định ghi vào hay lấy
ra từ EEPROM
4.3.3 Thanh Ghi EECR
Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu của thanh ghi này, 4
bit cuối là dự trữ, ta nên ghi 0 vào các bit dự trữ Sau đây ta xét chức năng của từng bit
• Bit 3 – EERIE: EEPROM Ready Interrupt Enable : Đây là bit cho phép
Trang 24Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
EEPROM ngắt CPU, khi bit này được set thành 1 và ngắt toàn cục được cho phép ( bằng cách set bit I trong thanh ghi SREG lên 1 ) thì EEPROM sẽ tạo ra một ngắt với CPU khi bit EEWE được xóa, điều này có nghĩa
là khi các ngắt được cho phép ( bit I trong thanh ghi SREG và bit EERIE trong thanh ghi EECR được set thành 1 ) và quá trình ghi vào ROM vừa xong thì sẽ tạo ra một ngắt với CPU, chương trình sẽ nhảy tới véc
tơ ngắt có địa chỉ là $002C để thực thi chương trình phục vụ ngắt ( ISR ) Khi bit EERIE là 0 thì ngắt không được cho phép
• Bit 2 – EEMWE: EEPROM Master Write Enable : Khi bit EEMWE và bit
EEWE là 1 sẽ ra lệnh cho CPU ghi dữ liệu từ thanh ghi EEDR vào EEPROM, địa chỉ của ô nhớ cần ghi trong EEPROM được lưu trong thanh ghi EEAR Khi bit này là 0 thì không cho phép ghi vào EEPROM Bit EEMWE sẽ được xóa bởi phần cứng sau 4 chu kì máy
• Bit 1 – EEWE: EEPROM Write Enable : Bit này vừa đóng vai trò như một bit
cờ, vừa là bit điều khiển việc ghi dữ liệu vào EEPROM Ở vai trò của một bit điều khiển nếu bit EEMWE đã được set lên 1 thì khi ta set bit EEWE lên 1 sẽ bắt đầu quá trình ghi dữ liệu vào EEPROM Trong suốt quá trình ghi dữ liệu vào EEPROM bit EEWE luôn giữ là 1 Ở vai trò của một bit cờ khi quá trình ghi dữ liệu vào EEPROM hoàn tất, phần cứng sẽ tự động xóa bit này về 0 Trước khi ghi dữ liệu vào EEPROM ta cần phải biết chắc là không có quá trình ghi EEPROM nào khác đang xảy ra, để biết được điều này ta cần kiểm tra bit EEWE Nếu bit EEWE là 1 tức là EEPROM đang được ghi, ta phải chờ cho cho quá trình ghi vào EEPROM hoàn tất thì mới ghi tiếp Nếu bit EEWE là 0 tức là không có quá trình ghi EEPROM nào đang diễn ra, lúc này ta có thể bắt đầu ghi dữ liệu vào EEPROM Khi bit EEWE được set lên 1 ( bắt đầu ghi vào EEPROM ) CPU sẽ tạm nghỉ trong 2 chu kì máy trước khi thực hiện lệnh kế tiếp
• Bit 0 – EERE: EEPROM Read Enable : Khi bit này là 1, sẽ cho phép đọc dữ
liệu từ EEPROM, dữ liệu từ EEPROM có địa chỉ lưu trong thanh ghi EEAR lập tức được chuyển vào thanh ghi EEDR Khi bit EERE là 0 thì không cho phép đọc EEPROM Trước khi đọc dữ liệu từ EEPROM ta cần biết chắc là không diễn ra quá trình ghi EEPROM bằng cách kiểm tra bit EEWE Để ý là sau khi quá trình đọc EEPROM hoàn tất, bit EERE sẽ được tự động xoá bởi phần cứng Nếu EEPROM đang được ghi thì ta không thể đọc được dữ liệu từ EEPROM Khi bắt đầu quá trình đọc dữ liệu từ EEPROM, CPU sẽ tạm nghỉ 4 chu kì máy trước khi thực hiện lệnh kế tiếp
Tóm lại để ghi vào EEPROM ta cần thực hiện các bước sau:
1 Chờ cho bit EEWE về 0
2 Cấm tất cả các ngắt
3 Ghi địa chỉ vào thanh ghi EEAR
4 Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR
5 Set bit EEMWE thành 1
6 Set bit EEWE thành 1
7 Cho phép các ngắt trở lại
Nếu một ngắt xảy ra giữa bước 5 và 6 sẽ làm hỏng quá trình ghi vào EEPROM bởi
vì bit EEMWE sau khi set lên 1 chỉ được giữ trong 4 chu kì máy, chương trình ngắt sẽ làm hết thời gian ( time out ) duy trì bit này ở mức 1 Một ngắt xuất hiện ở cuối bước 4 cũng có thể làm cho địa chỉ và dữ liệu cần ghi vào EEPROM trở nên không chính xác nếu trong chương trình phục vụ ngắt có chỉnh sửa lại các thanh ghi EEAR và EEDR Đó là lí do ta cần cấm các ngắt trước khi thực hiện tiếp các bước 3, 4, 5, 6 Quá trình ghi dữ liệu vào EEPROM cũng có thể không an toàn nếu điện thế nguồn
nuôi ( Vcc ) quá thấp
Đọc dữ liệu từ EEPROM:
Việc đọc dữ liệu từ EEPROM đơn giản hơn ghi dữ liệu vào EEPROM, để đọc dữ
liệu từ EEPROM ta thực hiện các bước sau:
1 Chờ cho bit EEWE về 0
2 Ghi địa chỉ vào thanh ghi EEAR
3 Set bit EERE lên 1
Trang 255 Các cổng vào ra (I/O)
Vi điều khiểnATmega8 có 23 đường vào ra chia làm 2 nhóm 8 bit,một nhóm 7 bit Các đường vào ra này
có rất nhiều tính năng và có thể lập trình được Ở đây ta sẽ xét chúng là các cổng vào ra số Nếu xét trên mặt này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hướng theo từng bit Và chứa cả điện trở pull-
up (có thể lập trình được) Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét chúng là các cổng vào ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là : thanh ghi dữ liệu cổng ( PORTB, PORTC, PORTD), thanh ghi dữ liệu điều khiển cổng (DDRB, DDRC, DDRD) và cuối cùng là địa chỉ chân vào của cổng (PINB, PINC, PIND)
5.1 Các chức năng của Port B
• XTAL2/TOSC2 – Port B, Bit 7
XTAL2: Chân 2 dao động tạo clock Sử dụng chân clock thạch anh,hoặc dao động thạch anh tần số thấp Khi dùng chân làm dao động thì không thể làm chân nhập xuất được nữa
TOSC2: Chân 2 là dao dộng Timer Nếu PB7 được dùng làm clock pin, DDB7, PORTB7 and PINB7
sẽ sẽ hiều là mức 0
• XTAL1/TOSC1 – Port B, Bit 6
XTAL1: Chip clock Oscillator pin 1
TOSC1: Timer Oscillator pin 1
Nếu PB6 dùng làm chân clock, DDB6, PORTB6 and PINB6 sẽ hiều là mức 0
SCK – Port B, Bit 5
SCK: Master Clock output, Slave Clock input pin for SPI channel Khi SPI được kích hoạt là Slave, chân này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB5
• MISO – Port B, Bit 4
MISO: Master Data input, Slave Data output pin for SPI channel Khi SPI được kích hoạt là Master, chân này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB4
• MOSI/OC2 – Port B, Bit 3
Trang 26Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
MOSI: SPI Master Data output, Slave Data input for SPI channel Khi SPI được kích hoạt là Slave, chân này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB3 Khi SPI được kích hoạt là Master, dữ liệu trực tiếp của chân này được điều khiển bởi DDB3
• SS/OC1B – Port B, Bit 2
SS: Slave Select ngõ vào Khi SPI được kích hoạt là Slave, chân này được cấu hình là 1 chân ngõ vào bất chấp sự điều chỉnh từ DDB2
• OC1A – Port B, Bit 1
OC1A, Output Compare Match output:Chân PB1 có thể xử lý như 1 ngõ ra bên ngoài Timer/Counter1 Compare Match A
• ICP1 – Port B, Bit 0
ICP1 –chân giữ(chốt) ngõ vào : Chân PB0 có thể tác động làm 1 chân giữ cho Timer/Counter1
5.2 Các chức năng của Port C
• RESET – Port C, Bit 6
RESET, Reset pin: Khi cầu chì RSTDISBL đã lập trình, chức năng của chân này là vào ra binh thường,và 1 phần sẽ phải dựa vào Power-on Reset và Brown-out Reset như là nguồn reset của nó Nếu chân PC6 dùng là chân reset , DDC6, PORTC6 và PINC6 sẽ hiều là mức 0
• SCL/ADC5 – Port C, Bit 5
SCL, giao diện nối tiếp hai dây Xung nhịp: Khi bit TWEN trong TWCR set (one) để bật giao diện nối tiếp hai dây, pin PC5 bị ngắt từ port và trở thành chân Serial Clock I/O cho Two-wire Serial Interface
• SDA/ADC4 – Port C, Bit 4
SDA, Two-wire Serial Interface Data: When the TWEN bit in TWCR is set (one) to enable the Two-wire Serial Interface, pin PC4 is disconnected from the port and becomes the Serial Data I/O pin for the Two-wire Serial Interface
• ADC3 – Port C, Bit 3
PC3 cũng có thể dùng là ADC input Channel 3 Chú ý là ADC input channel 3 dùng nguồn xoay chiều
• ADC2 – Port C, Bit 2
PC2 cũng có thể dùng là ADC input Channel 2 Chú ý là ADC input channel 2 dùng nguồn xoay chiều
• ADC1 – Port C, Bit 1
PC1 cũng có thể dùng là ADC input Channel 1 Chú ý là ADC input channel 1 dùng nguồn xoay chiều
• ADC0 – Port C, Bit 0
PC0 cũng có thể dùng là ADC input Channel 0 Chú ý là ADC input channel 0 dùng nguồn xoay chiều
5.3 Các chức năng của Port D
Trang 27• AIN1 – Port D, Bit 7
AIN1,bộ so sánh tương tự thụ động ngõ vào Cấu hình chân của port là nhập vào với ngắt pull-up bên trong
để tránh nhiễu từ port số với chức năng của bộ so sánh tương tự
• AIN0 – Port D, Bit 6
AIN0,Bộ so sánh tương tự ngõ vao tích cực Cấu hình chân của port là nhập vào với ngắt pull-up bên trong
để tránh nhiễu từ port số với chức năng của bộ so sánh tương tự
• T1 – Port D, Bit 5
T1, số lượng mã nguồn Timer/Counter1
• XCK/T0 – Port D, Bit 4
XCK, USART xung nhịp ngoài T0, số lượng mã nguồn Timer/Counter0
• INT1 – Port D, Bit 3
INT1, Ngắt nguồn bên ngoài 1: Chân PD3 có thể làm chức năng như 1 nguồn ngắt ngoài
• INT0 – Port D, Bit 2
INT0, Ngắt nguồn bên ngoài 0: Chân PD2 có thể làm chức năng như 1 nguồn ngắt ngoài
5.4 Mô tả thanh ghi của port I/O
The Port B Data Register – PORTB
The Port B Data Direction Register – DDRB
The Port B Input Pins Address – PINB
Trang 28Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
The Port C Data Register – PORTC
The Port C Data Direction Register – DDRC
The Port C Input Pins Address – PINC
The Port D Data Register – PORTD
The Port D Data Direction Register – DDRD
The Port D Input Pins Address – PIND
Tóm lại:
1 Để đọc dữ liệu từ ngoài thì ta phải thực hiện các bước sau:
Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx (hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit)
Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit)
Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit)
2 Để đưa dữ liệu từ vi điều khiển ra các cổng cũng có các bước hoàn toàn tương tự Ban đầu ta cũng phải định nghĩa đó là cổng ra bằng cách set bit tương ứng của cổng đó….và sau đó là ghi dữ liệu ra bit tương ứng của thanh ghi PORTx
Trang 296 Bộ định thời 8bit timer/counter 0
Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit, có các đặc điểm sau:
Sơ đồ cấu trúc của bộ định thời:
Hình 5.1 Sơ đồ cấu trúc bộ định thời
AVR Atmega8 có tích hợp bộ timer/counter Ta bắt đầu phần này bằng sơ đồ khối sau:
6.1 Hoạt động của bộ Timer/Couter
+ Mạch đếm lên làm thanh ghi TCNTn tăng 1 đơn vị mỗi khi có xung clkTn, khi đạt giá trị lớn nhất (8bit=255), cờ TOVn được set (logic 1) và bộ đếm tràn, giá trị bộ đến TCNTn trở về 00 và tiếp tục đếm
+ Xung clkTn có thể được lựa chọn từ nhiều nguồn khác nhau Khi chọn xung nội (system clock), Timer/Counter là một Timer Khi chọn xung ngoài (thông qua chân Tn) Timer/Counter là Counter Hoạt động này có thể diễn tả bằng giản đồ xung sau:
Trang 30Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Cũng giống như bộ timer/counter trong các vi điều khiển khác, chúng ta quan tâm đến 2 thanh ghi:
Timer/Counter Control và Timer/Counter Value Trong AVR, đó là thanh ghi TCCRn và TCNTn
Clock Select Bit Description
TCNT0 - Timer/C
TCNT0 và OCR0 là các thanh ghi 8 bit Các tín hiệu yêu cầu ngắt đều nằm trong thanh ghi TIFR Các ngắt có thể được che bởi thanh ghi TIMSK
Trang 31Bộ định thời có thể sử dụng xung clock nội thông qua bộ chia hoặc xung clock ngoài trên chân T0 Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dùng nguồn xung nào để tăng giá trị của nó Ngõ ra của khối chọn xung clock được xem là xung clock của bộ định thời (clkT0)
Thanh ghi OCR0 luôn được so sánh với giá trị của bộ định thời/bộ đếm Kết quả so sánh có thể được sử dụng để tạo ra PWM hoặc biến đổi tần số ngõ ra tại chân OC0
6.2 Đơn vị đếm
Phần chính của bộ định thời 8 bit là một đơn vị đếm song hướng có thể lập trình được Cấu trúc của nó như hình dưới đây:
Hình 5.2 Đơn vị đếm
count: tăng hay giảm TCNT0 1
direction: lựa chọn giữa đếm lên và đếm xuống
clear: xóa thanh ghi TCNT0
clkT0: xung clock của bộ định thời
TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn nhất
BOTTOM: báo hiệu bộ định thời đã giảm đến giá trị nhỏ nhất (0)
6.3 Đơn vị so sánh ngõ ra
Trang 32Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Hình 5.3 Sơ đồ đơn vị so sánh ngõ ra
Bộ so sánh 8 bit liên tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra (OCR0) Khi giá trị TCNT0 bằng với OCR0, bộ so sánh sẽ tạo một báo hiệu Báo hiệu này sẽ đặt giá trị cờ so sánh ngõ ra (OCF0) lên 1 vào chu kỳ xung clock tiếp theo Nếu được kích hoạt (OCIE0=1), cờ OCF0 sẽ tạo ra một ngắt
so sánh ngõ ra và sẽ tự động được xóa khi ngắt được thực thi Cờ OCF0 cũng có thể được xóa bằng phần mềm
6.4 Mô tả các thanh ghi
6.4.1 Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0
Hình 5.4 Thanh ghi điều khiển bộ định thời Bit 7-FOC0: So sánh ngõ ra bắt buộc
Bit này chỉ tích cực khi bit WGM00 chỉ định chế độ làm việc không có PWM Khi đặt bit này lên 1, một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng sóng
Bit 6, 3-WGM01:0: Chế độ tạo dạng sóng
Các bit này điều khiển đếm thứ tự của bộ đếm, nguồn cho giá trị lớn nhất của bộ đếm (TOP) và kiểu tạo dạng sóng sẽ được sử dụng
Bit 5:4-COM01:0: Chế độ báo hiệu so sánh ngõ ra
Các bit này điều khiển hoạt động của chân OC0 Nếu một hoặc cả hai bit COM01:0 được đặt lên 1, ngõ ra OC0 sẽ hoạt động
Bit 2:0: CS02:0: Chọn xung đồng hồ
Ba bit này dùng để lựa chọn nguồn xung cho bộ định thời/bộ đếm
Trang 336.4.2 Thanh ghi bộ định thời/bộ đếm
Hình 5.5 Thanh ghi bộ định thời
Thanh ghi bộ định thời/bộ đếm cho phép truy cập trực tiếp (cả đọc và ghi) vào bộ đếm 8 bit
Thanh ghi này chứa một giá trị 8 bit và liên tục được so sánh với giá trị của bộ đếm
6.4.3 Thanh ghi mặt nạ ngắt
Hình 5.7 Thanh ghi mặt nạ ngắt TIMSK Bit 1-OCIE0: Cho phép ngắt báo hiệu so sánh
Bit 0-TOIE0: Cho phép ngắt tràn bộ đếm
6.4.4 Thanh ghi cờ ngắt bộ định thời
Bit 1-OCF0: Cờ so sánh ngõ ra 0
Bit 0-TOV0: Cờ tràn bộ đếm
Bit TOV0 được đặt lên 1 khi bộ đếm bị tràn và được xóa bởi phần cứng khi vector ngắt tương ứng được thực hiện Bit này cũng có thể được xóa bằng phần mềm
Trang 34Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
7 Bộ định thời/đếm timer/counter 1 16-bit
7.1 sơ đồ khối và một số đặc điểm
Bộ định thời (timer/counter1) là một module định thời/đếm 16 bit, có các đặc điểm sau:
• True 16-bit Design (i.e., allows 16-bit PWM)
• 2 đơn vị ngõ vào so sánh độc lập(Two Independent Output Compare Units)
• đôi thanh ghi so sánh ngõ ra đệm(Double Buffered Output Compare Registers)
• 1 đơn vị chốt ngõ vào(One Input Capture Unit)
• Bộ chống nhiễu lối vào(Input Capture Noise Canceler)
• Xóa timer trong Compare Match (Clear Timer on Compare Match (Auto Reload))
• chống nhiễu sọc ngang(Glitch-free, Phase Correct Pulse Width Modulator (PWM)
BOTTOM Bộ đếm đạt tới BOTTOM khi co giá trị 0x0000
MAX Bộ đếm đạt tới MAXimum khi khi đạt giá trị 0xFFFF (decimal 65535)
TOP Bộ đếm đạt tới TOP khi nó bằng với giá trị lớn nhất của chuỗi đếm Giá trị này có thể được gán bởi các
giá trị cố định : 0x00FF, 0x01FF, or 0x03FF,hoặc giá trị trong bộ nhớ của các thanh ghi OCR1A ,ICR1
7.3 Mô tả các thanh ghi
Trang 357.3.1 Timer/Counter 1 Control Register A – TCCR1A
Initial Value 0 0 0 0 0 0 0 0
• Bit 7:6 – COM1A1:0: Compare Output Mode for channel A
• Bit 5:4 – COM1B1:0: Compare Output Mode for channel B
COM1A1: 0 và COM1B1: 0 điều khiển chân so sánh trạng thái ngõ ra (OC1A và OC1B tương ứng) Nếu một hay cả hai bit COM1A1:0 được set lên 1 thì ngõ ra OC1A sẽ ưu tiên hơn chức năng port I/O thông thường mà nó kết nối tới Nếu một hay cả hai bit COM1B1:0 được set lên 1 thì ngõ ra OC1B sẽ ưu tiên hơn chức năng port I/O thông thường mà nó kết nối tới Tuy nhiên chú ý là bit của thanh ghi DDR tương ứng với các chân OC1A, OC1B, OC1C phải được set để cho phép ngõ ra Khi OC1A, OC1B, OC1C được kết nối tới chân thì tác dụng của các bit COM1X1:0 còn phụ thuộc vào lựa chọn của các bit WGM3:0 Như bảng sau thể hiện chức năng khi các bit WGM13:0 là set bình thường
Table 37 hiện thị chức năng của bitCOM1x1:0 khi các bit WGM13:0 là set ở chế độ PWM nhanh
Trang 36Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
• Bit 3 – FOC1A: Force Output Compare for channel A
• Bit 2 – FOC1B: Force Output Compare for channel B
Các bit FOC1A/FOC1B chỉ hoạt động khi các bit đặc biệt WGM13:0 không ở chế độ PWM
.khi bit FOC1A/FOC1B có giá trị là 1,ngay lập tức Compare Match(Compare Match :Đây là một chức
năng của bộ định thời, theo đó, giá trị của bộ định thời (tức giá trị thanh ghi TCNTn (n=0, ,2)) liên tục được
so sánh sánh với giá trị của thanh ghi OCRn (n=0, ,2) Khi hai giá trị này bằng nhau sẽ tạo ra sự thay đổi mức logic ở chân OCn (n=0, ,2) Nhờ đó, ta có thể tạo ra xung PWM ở ngõ ra OCn (n=0, ,2) của vi điều khiển.) bị buộc vào dạng sóng đơn vị chung (waveform generation unit) Ngõ ra OC1A/OC1B bị thay đổi cho phù hợp với điều chỉnh các bit COM1x1:0.Các bit FOC1A/FOC1Bluôn ở trạng thái 0
• Bit 1:0 – WGM11:0: Waveform Generation Mode
Sụ kết hợp với các bit WGM13:2 đã tìm thấy trong thanh ghi TCCR1B,những bit này điều khiển dãy đếm của bộ đếm, gốc giá trị lớn nhất (TOP) của bộ đếm, và những loại sóng chung được sử dụng , nhìn bảng
Table 39 Các chế độ của hệ thống được hỗ trợ boier Timer/Counter là : Normal mode (counter), Clear Timer on Compare Match (CTC) mode,và ba loại của các chế độ Pulse Width Modulation (PWM)
7.3.2 Timer/Counter 1 Control Register B – TCCR1B
• Bit 7 – ICNC1: Input Capture Noise Canceler
Điều chỉnh bit này lên 1 để kích hoạt Input Capture Noise Canceler Khi noise canceler đã hoạt động, ngõ vào từ chân Input Capture Pin (ICP1) được lọc Yêu cầu chức năng của bộ 4 giá trị kề bằng với chân của ICP1 cho sự thay đổi của ngõ ra
• Bit 6 – ICES1: Input Capture Edge Select
Bit này được chọn sao cho cạnh lên trong Input Capture Pin (ICP1) dùng để khởi động bắt giữ sự kiện Khi bit ICES1 set là 0, cạnh xuống được dùng , và khibit ICES1 set là 1, cạnh lên sẽ khởi động để bắt giữ Khi việc bắt giữ đó được kích hoạt theo điều chỉnh của ICES1 ,giá trị bộ đếm đượ sao chép vào
Input Capture Register (ICR1) Sụ kiện cũng sẽ set cờ Input Capture Flag (ICF1), và điều này có thể đượ dùng vì một Input Capture Interrupt,nếu ngắt này được kích hoạt Khi ICR1 được dùng với giá trị TOP (see description of the WGM13:0 bits located in the TCCR1A and the TCCR1B Register), ICP1 bị ngắt kết nối
và giữ nguyên chúc năng Input Capture là disable
Trang 37• Bit 5 – Reserved Bit
Bit này dùng trong tương lai
• Bit 4:3 – WGM13:2: Waveform Generation Mode
Tương tự thanh ghi TCCR1A
• Bit 2:0 – CS12:0: Clock Select
Ba bit lựa chọn xung nhịp lựa chọn xung nguồn được dùng bởi Timer/Counter
7.3.3 Timer/Counter 1 – TCNT1H and TCNT1L
Thanh ghi bộ định thời TCNT1 là thanh ghi 16 bit được kết hợp từ hai thanh ghi
TCNT1H và thanh ghi TCNT1L Thanh ghi TCNT1 có thể đọc hay ghi Để cả 2 byte của TCNT 1 được đọc hay ghi đồng thời người ta dùng một thanh ghi tạm 8 bit byte cao 8-bit Temporary High Byte Register (TEMP) Thanh ghi TEMP được chia sẽ cho tất cả các thanh ghi 16 bit khác Không nên chỉnh sửa thanh ghi TCNT1 khi nó đang đếm để tránh bị hỏng Compare Match giữa TCNT1 và một trong những thanh ghi OCR1X
7.3.4 Output Compare Register 1 A – OCR1AH and OCR1AL
7.3.5 Output Compare Register 1 B – OCR1BH and OCR1BL
Thanh ghi output compare register (OCR1A/OCR1B) là thanh ghi 16 bit,
giá trị của nó được liên tục so sánh với bộ đếm (TCNT1) Khi có sự bằng nhau của hai thanh ghi này sẽ tạo
ra một ngắt so sánh hay một dạng sóng ở chân ngõ ra so sánh OC1X Ngõ ra cua thanh ghi so sánh co cỡ là
16 bit nên để cả hai byte cao và thấp của thanh ghi được ghi hay đọc đồng thời khi CPU cần truy xuất thanh ghi này, người ta dùng thanh ghi tạm byte cao (TEMP), thanh ghi TEMP luôn lưu giữ byte cao của các thanh
Trang 38Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Chú ý là khi ghi một giá trị vào thanh ghi OCR1X trong lúc bộ đếm đang chạy, thì giá trị của thanh ghi OCR1X có thể cập nhật tức thời, nhưng cũng có thể chỉ được cập nhật khi bộ đếm đạt tới một giá trị nào đó, chẳn hạn, giá trị TOP, BOTTOM…
7.3.6 Input Capture Register 1 – ICR1H and ICR1L
Tương tự như trên! Các bạn có thể tham khao kĩ hơn trong datasheet
7.3.7 Timer/Counter Interrupt Mask Register – TIMSK
• Bit 5 – TICIE1: Timer/Counter1, Input Capture Interrupt Enable
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt bắt mẫu ngõ vào bộ Timer/couter1 (Timer/Counter1 Input Capture interrupt) được cho phép Vector ngắt tương ứng sẽ được thực thi khi cờ ICF1 trong thanh ghi TIFR được set
• Bit 4 – OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt so sánh ngõ ra 1A (Timer/Counter1 Output Compare A Match Interrupt) được cho phép Vector ngắt tương ứng sẽ được thực
thi khi cờ OCF1A trong thanh ghi TIFR được set
• Bit 3 – OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt so sánh ngõ ra 1B (Timer/Counter1 Output Compare B Match Interrupt) được cho phép Vector ngắt tương ứng sẽ được thực thi khi cờ OCF1B trong thanh ghi TIFR được set
• Bit 2 – TOIE1: Timer/Counter1, Overflow Interrupt Enable
Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt cờ tràn bộ định thời 1 (Timer/Counter1 overflow interrupt) được cho phép Vector ngắt tương ứng sẽ được thực thi khi cờ TOV1 trong thanh ghi TIFR được set
7.3.8 Timer/Counter Interrupt Flag Register – TIFR
• Bit 5 – ICF1: Timer/Counter1, Input Capture Flag
Cờ này được set khi xảy ra sự kiện bắt mẫu ngõ vào (Input Capture) của chân ICP1 Khi thanh ghi ICR1 (Input Capture Register) được thiết lập bởi các bit WGMn3:0 để sử dụng như một giá trị TOP thì cờ ICF1 sẽ được set khi bộ đếm đạt tới giá trị TOP Cờ ICF1 sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng cách ghi một giá trị logic vào vị trí của nó
• Bit 4 – OCF1A: Timer/Counter1, Output Compare A Match Flag
Cờ này được set ngay sau khi giá trị bộ đếm (TCNT1) bằng với giá trị thanh ghi OCR1A (Output Compare Register A) Chú ý là một so sánh cưỡng bức (FOC1A) sẽ không set cờ này Cờ OCF1A sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng cách ghi một giá trị logic vào vị trí của nó
• Bit 3 – OCF1B: Timer/Counter1, Output Compare B Match Flag
Trang 39Cờ này được set ngay sau khi giá trị bộ đếm (TCNT1) bằng với giá trị thanh ghi OCR1B (Output Compare Register B) Chú ý là một so sánh cưỡng bức (FOC1B) sẽ không set cờ này Cờ OCF1B sẽ tự động xóa khi
ngắt tương ứng được thực thi, hoặc có thể xóa hay set bằng cách ghi một giá trị logic vào vị trí của nó
• Bit 2 – TOV1: Timer/Counter1, Overflow Flag
Việc thiết lập cờ này phụ thuộc vào thiết lập của các bit WGMn3:0, trong chế độ bình thường và CTC cờ TOV1 được set khi bộ định thời tràn
8.SPI(Serial peripheral interface)
8.1 Sơ đồ và định nghĩa
SPI là một giao diện thực hiện việc trao đổi dữ liệu giữa các thiết bị tương thích với khung dữ liệu 8bit
và được truyền đồng bộ (cùng xung nhịp đồng hồ)
SPI cho phép truyền dữ liệu nối tiếp đồng bộ giữa thiết bị ngoại vi và vi điều khiển AVR hoặc giữa các vi điều khiển AVR SPI của AT90S8535 có các đặc điểm đặc biệt sau:
Chế độ song công, truyền dữ liệu đồng bộ 3 dây
Có thể giữ vai trò Master hoặc Slave
Bit MSB hoặc LSB có thể được truyền trước tùy vào người lập trình
Bốn tốc độ truyền có thể lập trình thông qua hai bit
Cờ ngắt báo kết thúc truyền
Vận hành từ trạng thái ngủ (Được đánh thức từ trạng thái ngủ)
Sơ đồ cấu trúc:
Trang 40Đồ Án Môn Học I – Điện Tử GVHD: Thầy Nguyễn Ngô Lâm
Để điều khiển khối giao tiếp SPI thì chúng ta có 3 thanh ghi Đó là 1 thanh ghi điều khiển SPCR (SPI control Register), thanh ghi trang thái SPSR (SPI status Register) và cuối cùng là thanh ghi dữ liệu SPDR (SPI Data Register)
8.2 Mô tả thanh ghi
8.2 1.Thanh ghi SPCR:
Đây là thanh ghi 8 bit có địa chỉ trong các thanh I/O là 0x0D và trong SRAM là 0x2D, các bit trong thanh ghi này đều có thể đọc hoặc ghi
Bit 7-SPIE: SPI interrupt enable
Bit này cho phép ngắt của bộ truyền tin SPI (nếu ngắt toàn cục và ngắt này được cho phép thì nếu cờ SPIF được bật thì ngắt đó sẽ được phục vụ.)
Bit 6-SPE: SPI Enable
Nếu bit này được set thì khối SPI sẽ được hoạt động và nó phải được set trong suốt quá trình SPI hoạt động
Bit 5-DORD: Data order
Khi mà DORD được set thì LSB của byte dữ liệu sẽ được truyền trước và ngược lại
Bit 4-MSTR: Master/Slave select
Đây là bit dùng để lựa chọn chế độ master hay slave.Nếu bit này được set thì bộ SPI này có vai trò là Master và ngược lại.Nếu như SS được cấu hình là lối vào và được đặt xuống mức thấp thì MSTR bị xóa về 0và SPIF và SPSR bị đặt lên 1 khi đó ta sẽ phải đặt lại MSTR về 1
Bit 3-CPOL: Clock polarity
Khi bit này được set thì SCK ở mức cao trong trang thái ngủ và ngược lai
Bit 2-CPHA:Clock Phase
Quy định pha kích hoạt của xung nhip
Bit 1,0-SPR1,SPR0 :Clock rate select:
Đây là hai bit điều khiển tốc độ xung nhịp truyền của kết nối và được thiết lập trên Master Nó không có tác dụng gì nếu như ta thiết lập trên slave
Và giá trị của chúng ứng theo tổ hợp các bit như sau: