+ Hệ thống chíp đa dạng từ cỡ nhỏ đến lớn thuận tiện cho từn ứng dụng riêng biệt 2.2.2 Kiến trúc của họ vi điều khiển AVR + Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ
Trang 1MỤC LỤC
LỜI CẢM ƠN Error! Bookmark not defined LỜI CAM ĐOAN Error! Bookmark not defined
MỞ ĐẦU 3
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 4
1.1 TÊN ĐỀ TÀI 4
1.2 ĐẶC ĐIỂM CỦA CÔNG TY NATSTEELVINA 4
1.3 DÂY CHUYỀN CÔNG NGHỆ CÁN THÉP CỦA NATSTEELVINA 5
1.4 YÊU CẦU THỰC TẾ 5
1.5 GIẢI QUYẾT VẤN ĐỀ 6
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 7
2.1 GIỚI THIỆU VI ĐIỀU KHIỂN AVR 7
2.2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR 8
2.2.1 Đặc điểm cơ bản của AVR 8
2.2.2 Kiến trúc của họ vi điều khiển AVR 9
2.2.3 Tệp thanh ghi 11
2.2.4 Khối số học logic 12
2.2.5 Truy nhập bộ nhớ và việc thực thi lệnh 12
2 2.6 Bộ nhớ vào/ra 13
2.2.7 Bộ nhớ EEPROM 16
2.2.8 Cổng vào/ra 19
2.2.9 Bộ nhớ SRAM 19
2.2.10 Bộ định thời 20
2.2.11 Bộ truyền nhận UART 20
2.2.12 Cấu trúc ngắt 22
2.2.13 Bộ so sánh analog 24
2.2.14 Bộ định thời watchdog bên trong 27
2.3 TẬP LỆNH DÙNG CHO AVR 28
2.4 CÁC CHẾ ĐỘ TRUY NHẬP ĐỊA CHỈ CỦA AVR 32
2.4.1 Địa chỉ thanh ghi đơn trực tiếp 32
Trang 22.4.2 Địa chỉ hai thanh ghi trực tiếp 32
2.4.3 Địa chỉ trực tiếp cổng vào ra 32
2 4.4 Địa chỉ trực tiếp dữ liệu 32
2.4.5 Địa chỉ dữ liệu dán tiếp cùng với dịch chuyển: 32
2.4.6 Địa chỉ gián tiếp dữ liệu: 32
2.4.7 Địa chỉ dữ liệu dán tiếp cùng với tăng hoặc giảm con trỏ 33
2.4.8 Địa chỉ của hằng số trong bộ nhớ chương trình .33
2.4.9 Địa chỉ bộ nhớ chương trình gián tiếp 33
2.5 GIAO DIỆN NỐI TIẾP THIẾT BỊ NGOẠI VI 33
CHƯƠNG 3 THIẾT KẾ MÁY TÍNH CHUYÊN DỤNG 39
3.1 MỤC ĐÍCH 39
3.2 YÊU CẦU 39
3.3 THIẾT KẾ 39
3.3.1 Thiết kế phần cứng 39
3.3.1.1 Khối trung tâm 40
3.3.1.2 Khối hiển thị 48
3.3.1.3 Khối bàn phím 52
3.3.1.4 Khối giao tiếp máy tính 55
3.3.2 Thuật toán và chương trình 59
3.4 TẠO MẠCH SẢN PHẨM 63
3.4.1 Vẽ mạch bằng phần mềm Orcad 63
3.4.2 Hàn linh kiện 64
3.4.4 Sản phẩm 65
KẾT LUẬN 66
TÀI LIỆU THAM KHẢO 67
Trang 3MỞ ĐẦU
Vi điều khiển ngày càng được ứng dụng rộng rãi trong nhiều lĩnh vực của đời sống con người Theo một nhận xét của công ty Sun Microsystems công bố gần đây với một gia đình có mức sống trung bình ở cuối thập niên này sẽ chứa khoảng 50 đến 100 vi điều khiển thực hiện các công việc như: điều khiển điện thoại số và các lò vi sóng, máy video cassete, máy thu hình và điều khiển từ xa cho máy thu hình, máy rửa bát đĩa, các hệ thống bảo vệ dùng cho gia đình…Thậm chí có thể xem như con số này dùng để phản ánh thu nhập của một gia đình trong các nước phát triển Ta không thể phủ nhận là đã có một số lượng khổng lồ các vi điều khiển và vi xử lý được sử dụng trong các đồ điện tử gia
dụng Chính vì vây mà em đã chọn đề tài : “Thiết kế và chế tạo máy tính chuyên
dụng trên cơ sở vi điều khiển ATMEGA16” để làm đồ án tốt nghiệp Em mong
rằng sau khi hoàn thành đồ án này em sẽ có được một số kiến thức cơ bản về vi điều khiển cũng như thiết kế các mạch ứng dụng dùng vi điều khiển Điều này sẽ giúp ích rất nhiều cho công việc và sự học tập, nghiên cứu tiếp theo sau khi em ra trường
Được sự hướng dẫn tận tình của thầy Phạm Đức Long cộng với sự cố gắng nghiên cứu của em đã thu được những kết quả khả quan, đáp ứng được phần nào nhiệm vụ đặt ra Mặc dù đã rất cố gắng, song do thời gian có hạn và kiến thức còn non yếu nên đề tài này chắc chắn em còn nhiều thiếu sót Chính vì vậy em rất mong sự góp ý của các thầy cô và các bạn trong khoa để đề tài này có thể mở rộng và phát triển thành một ứng dụng trong thực tế
Em xin chân thành cảm ơn!
Trang 4
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 1.1 TÊN ĐỀ TÀI
“THIẾT KẾ VÀ CHẾ TẠO MÁY TÍNH CHUYÊN DỤNG TRÊN CƠ SỞ VI ĐIỀU KHIỂN ATMEGA16”
1.2 ĐẶC ĐIỂM CỦA CÔNG TY NATSTEELVINA
+ Công ty NatSteelVina là Công ty Liên doanh giữa tập đoàn NatSteel - một trong các tập đoàn hàng đầu của Singapore và Tổng công ty Thép Việt Nam (VSC)
+ Công ty được thành lập trên cơ sở giấy phép đầu tư số 711/GP ngày 2/11/1993 Nhà máy được đặt tại Thành phố Thái Nguyên - Tỉnh Thái Nguyên Với công nghệ cán nóng liên tục hàng dọc có công suất cán 150.000tấn/năm, cung cấp các sản phẩm thép xây dựng bao gồm thép thanh kích thước từ 9 - 32
mm, thép dây có kích thước từ 5 - 8mm Sản phẩm của công ty đạt các tiêu chuẩn thép cán nóng của Việt Nam và quốc tế Chất lượng sản phẩm của công ty được quản lý chặt chẽ theo tiêu chuẩn ISO 9001-2000
+ Công ty NatSteelVina thừa kế thế mạnh cạnh tranh về sản lượng, kinh nghiệm và công nghệ từ cả hai bên đối tác Liên doanh, là tâm điểm tập trung của các chức năng hỗ trợ như nghiên cứu ứng dụng và phát triển các hệ thống thông tin, khâu mua nguyên vật liệu, các khâu phục vụ và tiếp thị
+ Lãnh đạo NatSteelVina là một đội ngũ giàu kinh nghiệm, có chuyên môn được bổ nhiệm từ phía tập đoàn NatSteel cùng cán bộ công nhân viên nhiệt tình, tận tụy được chuyển sang từ VSC Đã đưa công ty phát triển và được đánh giá là công ty có mức lợi nhuận trên vốn đầu tư cao nhất của VSC
+ Với mối quan tâm hàng đầu là tiêu chuẩn và chất lượng sản phẩm công ty không ngừng nâng cấp cải tiến nâng cao năng suất, chất lượng sản phẩm, tăng cường chất lượng phục vụ tạo thế cạnh tranh trên thị trường
Trang 51.3 DÂY CHUYỀN CÔNG NGHỆ CÁN THÉP CỦA NATSTEELVINA
+ Phôi được nhập khẩu với các tiêu chuẩn tương đương với tiêu chuẩn về thép xây dựng cán nóng từ nước ngoài như : Malaysia, Brazin, Thổ Nhĩ Kỳ, Trung Quốc, Nga… Qua quá trình kiểm tra theo tiêu chuẩn kỹ thuật về mặt chất lượng và kích thước hình học mới đưa vào dây chuyền cán Phôi đưa vào cán phải đạt kích thước từ 100 X 100 mm đến 125 X 125mm (thường là 120 X120mm) có chiều dài từ 3000 đến 3750mm
+ Phôi được cầu trục 15Tấn/3 No3 tập hợp lên sàn nạp phôi (Billet Charging pusher ) Máy nạp phôi dùng hệ thống thuỷ lực được điều khiển bằng tay chuyển phôi đến dàn con lăn chuyển phôi Phôi được chuyển trên dàn con lăn đến vị trí máy đẩy sau ( Back Pusher) Máy đẩy sau dùng 2 xi lanh thuỷ lực 250mm áp lực đẩy trung bình 50tấn Phôi sau khi được so đầu và có tín hiệu yêu cầu đẩy phôi, vận hành thao tác điều khiển việc đẩy phôi vào lò Phôi đạt yêu cầu cho quá trình cán được đẩy ra khỏi lò bằng máy đẩy hông (Side pusher) qua cửa hông lò Máy đẩy hông dùng động cơ điện không đồng bộ kết hợp với hệ truyền lực điều khiển cần tống qua bánh răng xích kéo Tốc độ đẩy phôi ra được người vận hành thao tác phù hợp với tốc độ cán Đồng thời với việc đẩy phôi ra người vận hành cho tín hiệu yêu cầu đẩy vào Cứ tiếp tục như vậy mỗi khi phôi nung đủ nhiệt độ và đẩy ra cán thì lại có phôi khác được đẩy vào lò nung thay thế
1.4 YÊU CẦU THỰC TẾ
Để đáp ứng một nhu cầu của kho xuất nhập thép của nhà máy Nasteel Vina tại Lưu xá – Thái Nguyên Khi nhà máy cân thép để đưa vào lò cán, các công nhân phải cân từng thanh thép một đến khi nào đạt được trọng lượng yêu cầu Việc này tốn rất nhiều thời gian và công sức Với một máy tính có thể gộp các phép tính lại và làm giảm bớt các công việc không cần thiết để cho ra kết quả là
độ dài tương đương của khối lượng thép cần cân
Trang 61.5 GIẢI QUYẾT VẤN ĐỀ
Ta gọi trọng lượng và độ dài của một thanh thép được chọn làm phôi là
P Phôi (Kg) và L Phôi(m) thì ta có đại lượng µ:
) / (
Đại lượng µ là tỉ số Kg/m của thanh sắt được chọn làm phôi Khi nhà máy
cần một khối lượng thép là P1(Kg) thì khi đó thay vào việc công nhân phải cân
từng thanh thép một thì ta có thể tính ra độ dài xấp xỉ của khối thép có trọng
lượng P1 là L1
P1: Khối lượng thép cần cân
L1: Độ dài tương đương của khối thép
)
( µ
1
L
Khi đó các công nhân có thể đo tổng độ dài của các thanh thép Việc này sẽ làm giảm bớt rất nhiều thời gian và công sức của các công nhân Từ đó sẽ làm tăng phần nào năng suất của nhà máy
Công nhân chỉ phải nhập Pphôi và Lphôi một lần duy nhất mỗi lần bật máy tính Các công đoạn tính µ, công đoạn tính L1 máy sẽ tự động tính Sau khi nhập trọng lượng yêu cầu (P1) thì máy sẽ tự tính ra độ dài tương đương (L1)
Trang 7CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VI ĐIỀU KHIỂN AVR
+ Vi điều khiển AVR là sản phẩm của công ty Atmel( Hoa kỳ), đây là một
bộ xử lý có kiến trúc kiểu Harvard, nghĩa là đơn vị xử lý trung tâm có bộ nhớ chương trình và một bộ nhớ dữ liệu tách biệt Bộ vi điều khiển AVR có nhiều khả năng để giảm năng lượng tiêu thụ Đây là một trong những ưư điểm lớn của
họ vi điều khiển này
+ Họ vi điều khiển AVR gồm nhiều bộ điều khiển với các tài nguyên khác nhau về bộ phận ngoại vi, bộ nhớ chương trình và kiểu đóng vỏ Sau đây là một
số vi điều khiển họ AVR và đặc điểm của chúng:
Bộ xử lý Số
chân
Us (V)
Fmax (MHz)
Bộ nhớ
CT (Kbyte
Bộ nhớ dữ liệu flash
Bộ nhớ dữ liệu
EE
Cổng I/O
Trang 82.2 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR
2.2.1 Đặc điểm cơ bản của AVR
+ Bộ nhớ flash được tích hợp ngay trên chíp có khả năng lập trình ngay trên hệ thống được sử dụng làm bộ nhớ chương trình Điều này có nghĩa là ta không cần phải dùng đến các bộ nhớ EPROM hoặc ROM bên ngoài để chứa mã chương trình Hơn nữa bộ nhớ chương trình có thể nạp được chương trình trong khi bộ vi xử lý vẫn ở nguyên trên bản mạch, không cần nhấc ra ngoài để nạp
+ Các thanh ghi làm việc đa năng 32-X-8 Một tập hợp bao gồm rất nhiều thanh ghi có nghĩa là các biến có thể được lưư trữ bên trong CPU chứ không phải lưu trữ các biến trong bộ nhớ, vì việc truy nhập lên bộ nhớ thường tốn nhiều thời gian hơn Như vậy chương trình sẽ chạy nhanh hơn
+ Bộ nhớ dữ liệu ngay trên chip loại EEPROM và RAM có trong hầu hết các thành viên của họ AVR Đơn vị CPU có kiến trúc Harvard, còn các bộ nhớ EEPROM và RAM được nhìn nhận như là bộ nhớ dữ liệu và được dùng để cất giữ các hằng và biến
+ Hoạt động với xung giữ nhịp có tần số từ 0 đến 10MHz Hầu hết các lệnh được thực hiện trong một chu kì đồng hồ làm cho tốc độ xử lý lớn hơn khoảng 10 lần so với 8051 ở cùng tần số của đồng hồ giữ nhịp
+ Có mạch đặt lại trạng thái mỗi khi cấp lại điện nguồn cho hệ thống + Có bộ định thời ngay trên chíp và lập trình được với mạch chia tần số tách biệt Bộ định thời này được sử dụng cho các ứng dụng cần có sự phân định thời gian của các sự kiện
+ Có các nguồn ngắt bên trong và bên ngoài
+ Có bộ định thời watchdog ngay trên chip và lập trình được với bộ dao động độc lập Bộ phận này được sử dụng để khôi phục lại trạng thái hoạt động của hệ thống trong trường hợp xảy ra lỗi treo khi chạy phần mềm, ngoài ra còn được sử dụng cho một vài ứng dụng khác
+ Có các chế độ hoạt động như: SLEEP và POWER DOWN( nghỉ hay giảm dòng tiêu thụ khi khồn cần thiết) Đặc điểm này cho phép tiết kiệm năng lượng khi bộ xử lý nhàn rỗi
Trang 9+ Nhiều chíp có mạch dao động đồng hồ RC ngay trên chíp Khi sử dụng
bộ dao động RC trên chíp số lượng các linh kiện phụ trợ sẽ giảm đi
+ Hệ thống chíp đa dạng từ cỡ nhỏ đến lớn thuận tiện cho từn ứng dụng riêng biệt
2.2.2 Kiến trúc của họ vi điều khiển AVR
+ Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và
bộ nhớ chương trình tách biệt nhau
- Bộ nhớ chương trình là loại bộ nhớ flash Dung lượng của bộ nhớ này thay đổi khác nhau giữa các bộ xử lý trong cùng họ Bộ nhớ này được truy nhập theo từng chu kì đồng hồ, và một lệnh được nạp vào thanh ghi lệnh Thanh ghi lệnh nối với tệp thanh ghi bằng cách lựa chọn xem thanh ghi nào được ALU sử dụng để thực thi lệnh
Hình 1 Bản đồ bộ nhớ của vi điều khiển AVR
Các Thanh ghi I/O
SRAM trong
Trang 10- Lối ra của thanh ghi lệnh được giải mã bằng bộ giải mã lệnh để quyết định chọn tín hiệu điều khiển nào sẽ đựơc kích hoạt để hoàn thành lệnh hiện tại
Bộ nhớ chương trình, bên cạnh các lệnh lưu trữ cũng chứa các vectơ ngắt bắt đầu
ở địa chỉ $0000
- Bộ nhớ dữ liệu có tất cả 5 thành phần khác nhau:
1 Một tệp thanh ghi(register file) với 32 thanh ghi có độ rộng 8 bit
2 64 thanh ghi vào/ra mỗi thanh 8 bit Các thanh ghi này thực chất là một phần của bộ nhớ SRAM trên chip và có thể được truy nhập hoặc như bộ nhớ SRAM với các địa chỉ giữa $20 và $5F hoặc như các thanh ghi I/O với các địa chỉ giữa $00 và $3F Số lượng 64 thanh ghi này có thể thay đổi tuỳ theo từng loại chip trong họ AVR
3 Bộ nhớ SRAM bên trong: bộ nhớ này đượ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 và gọi đoạn chương trình, giá trị hiện tại của bộ đếm chương trình được lưu trữ trong ngăn xếp Kích thước của ngăn xếp bị giới hạn bởi bộ nhớ SRAM trên chip Vị trí của ngăn xếp được chỉ thị bởi con trỏ ngăn xếp
4 Bộ nhớ SRAM bên ngoài: Đặc tính này chỉ có ở các bộ xử lý cỡ lớn trong họ vi điều khiển AVR
5 EEPROM: bộ nhớ EEPROM có sẵn trên hầu hết các bộ vi điều khiển AVR và được truy nhập theo một bản đồ bộ nhớ tách biệt Địa chỉ bắt đầu của bộ nhớ EEPROM luôn là $0000 Các bộ xử lý khác nhau có từ 64 byte đến 4 Kbyte
bộ nhớ EEPROM Bộ nhớ EEPROM có thể ghi vào được khoảg 100000 lần
Trang 112.2.3 Tệp thanh ghi
Hình 2 Tệp thanh ghi của vi điều khiển AVR + Tất cả các bộ điều khiển AVR đều có 32 thanh ghi đa năng Một số trong các thanh ghi này còn có các chức năng riêng, bổ sung Các thanh ghi được đặt tên từ R0 đến R31 Tệp thanh ghi được tách thành 2 phần, mỗi phần có 16 thanh ghi, đánh số từ R0 đến R15 và R16 đến R31 Tất cả các lệnh thao tác trên các thanh ghi đều có thể truy nhập trực tiếp và truy nhập trong chu trình đơn đến tất cả các thanh ghi Nhưng có một ngoại lệ là các lệnh SBCI, SUBI, CPI, ANDI
và ORI cũng như lệnh WI, các lệnh này chỉ tác động đến các thanh ghi R16 đến R31
Trang 12+ Các thanh ghi R0 và R26 đến R31 có các chức năng bổ sung Thanh ghi R0 được sử dụng trong các lệnh nạp bộ nhớ chương trình LPM (Load Program Memory) , trong khi các thanh ghi R26 đến R31 được sử dụng làm các thanh ghi con trỏ như được minh hoạ trên hình 2 Các thanh ghi con trỏ nay được sử dụng trong nhiều lệnh gián tiếp dùng cho thanh ghi (register indirect instruction)
2.2.4 Khối số học logic
+ Khối số học lôgic (ALU) thực hiện các thao tác như thao tác bit; phép tính số học và lôgic trên nội dung của các thanh ghi đã được chỉ định Các thao tác này được thực hiện trong một chu kỳ đông f hồ đơn lẻ Mỗi một thao tác ALU đều làm ảnh hưởng đến các cờ trong thanh ghi trạng thái (STATUS), tuỳ thuộc vào lệnh
2.2.5 Truy nhập bộ nhớ và việc thực thi lệnh
+ Bộ xử lý AVR được điều khiển bởi đồng hồ hệ thống, đồng hồ này có thể ở bên ngoài hoặc, nếu có tồn tại và được phép, một đồng hồ RC bên trong có thể được sử dụng Đồng hồ hệ thống này không qua bất kỳ bộ chia nào và được
sử dụng trực tiếp cho tất cả các thao tác truy nhập bên trong bộ xử lý Bộ xử lý có một đường ống hai tầng, và lệnh tìm này/giải mã (fetch/ decode) được thực hiện đồng thời với việc thực thi lệnh
+ Cứ mỗi lần lệnh được tìm nạp (fetch), nếu đây là một lệnh liên quan đến ALU, nó có thể được tực thi bởi khối ALU như được minh hoạ trên hình 3-5 cho một chu trình đơn lẻ
+ Mặt khác, việc truy nhập bộ nhớ SRAM chiếm mất 2 chu kỳ, như được minh hoạ trên hình 3-6 Nguyên nhân là việc truy nhập bộ nhớ SRAM sử dụng một thanh ghi con trỏ dùng cho địa chỉ bộ nhớ SRAM Thanh ghi con trỏ này chỉ
là một trong các thanh ghi con trỏ (các cặp thanh ghi X, Y , hoặc Z) có trên chip Chu trình đồng hồ thứ nhất được cần đến để truy nhập tệp thanh ghi và để thao tác trên thanh ghi con trỏ Ở thời điểm kết thúc của chu kỳ đồng hồ thứ nhất, khối ALU thực hiện phép tính này, và sau đó địa chỉ này (hoặc đọc ra từ đó vào thanh ghi đích)
Trang 132 2.6 Bộ nhớ vào/ra
+ Bộ nhớ vào ra là “xa lộ” đến với tất cả cá bộ phận ngoại vi của bộ xử lý
AVR, Nó được thiết kế giống như SRAM hoặc như các thanh ghi I/O Nếu giống như SRAM các địa chỉ ở bên kia $20 cho đến $5F, còn nếu giống như các thanh ghi I/O thì các địa chỉ bắt đầu từ $00 đến $3F
+ Thanh ghi trạng thái(SREG): chứa 8 bit cờ, đóng vai trò báo hiệu trạng thái hiện tại của bộ vi xử lý Tất cả các bit của nó được xoá(ở mức 0) khi reset và
có thể được đọc,ghi bởi chương trình Địa chỉ I/O của thanh ghi trạng thái là $3F, địa chỉ bộ nhớ là $5F
Bit Chức năng
7(I) Cho phép ngắt toàn cục nếu được thiết lập
6(T) Lưu trữ các bit từ 1 thanh ghi vào 1 thanh ghi khác
5(H) Chỉ báo cho thấy sự mang sang(nhớ) một nửa trong một số
lệnh 4(S) Cờ dấu: là kết quả phép EX-OR giữa cờ phủ định và cờ tràn 3(V) Cờ tràn lấy bù nhị phân
+ Thanh ghi con trỏ ngăn xếp(SP): có độ rộng bằng 1 byte đối với các bộ
xử lý có đến 256 byte bộ nhớ SRAM và bằng 2 byte đối với các bộ xử lý có bộ nhớ SRAM lớn hơn Thanh ghi này được dùng để chỉ đến vùng trong bộ nhớ SRAM ở đỉnh ngăn xếp, Ngăn xếp được sử để lưu trữ địa chỉ mà bộ xử lý trả lại trong thời gian một ngắt và gọi thủ tục Bởi vì SP được khởi tạo về $00(hoặc
Trang 14$0000 với một SP 2 byte) khi reset nên chương trình người dùng cần phải khởi tạo SP cho thích hợp, bởi địa chỉ bắt đầu của bộ nhớ SRAM không phải là $00
mà là $06 Ngăn xếp sắp xếp theo trình tự từ trễnuống dưới trong địa chỉ bộ nhớ, nghĩa là việc đẩy một giá trị lên trên trong ngăn xếp sẽ làm cho SP giảm và ngược lại
+ Thanh ghi che ngắt chung(GISMK-General Interrupt Mask Register): thanh ghi này được sử dụng để cho phép cấm các ngắt ngoài riêng biệt, cụ thể bằng cách đặt và đặt lại bit tương ứng có liên quan Tuy nhiên ngắt đang cần được phục vụ, bit I trên thanh ghi trạng thái cũng phải đặt thành “1”
+ Thanh ghi cờ ngắt chung GIFR(General Interrupt Flag Register): các bit trong thanh ghi này chỉ báo cho thấy nếu một ngắt đã xuất hiện Nếu một ngắt ngoài xuất hiện thì cờ INT tương ứng trong GIFR được đặt thành “1” Nếu như ngắt đựơc phục vụ (bit I và bit INT tương ứng trong thanh ghi GIMSK là “1” ) thì cờ được đặt lại Ngoài ra nó cũng có thể được đặt lại bằng cách ghi giá trị lôgic “1” vào nó
+ Thanh ghi điều khiển toàn bộ vi điều khiển MCUCR: các bit trong thanh ghi này cho phép điều khiển toàn bộ vi điều khiển chức năng của thanh ghi này bao gồm việc điều khiển để cho phép/cấm truy nhập bộ nhớ SRAM ngoài, chế độ ngủ và điều khiển độ nhạy cảm ngắt ngoài
7-SRE Cho phép RAM ngoài
6-SRW Bit trạng thái chờ truy nhập SRAM ngoài
Bit điều khiển nhạy cảm ngắt dùng cho INT0
Bảng 3 Các bit của thanh ghi MCUCR
Trang 15CS02 CS01 Mô tả
0 0 Mức LOW trên chân INT tạo ra ngắt
1 1 Sườn dương trên chân INT1 tạo ra ngắt
1 1 Sườn âm trên chân INT1 tạo ra ngắt
Bảng 4 Điều khiển độ nhạy cảm ngắt 1
CS02 CS01 Mô tả
0 0 Mức LOW trên chân INT0 tạo ra ngắt
1 1 Sườn dương trên chân INT0 tạo ra ngắt
1 1 Sườn âm trên chân INT0 tạo ra ngắt
Bảng 5 Điều khiển độ nhạy cảm ngắt INT0 + Thanh ghi trạng thái bộ xử lý MCUSR: cung cấp thông tin về nguồn của tín hiệu reset
+ Thanh ghi điều khiển TIMER/COUNTER0(TCCR0): được sử dụng để điều khiển các thao tác của bộ xử lý Timer/Coưnter Đây là một bộ định thời đơn giản dung để đếm tiến từ giá trị đếm đã được nạp vào Bộ đếm được làm tăng thêm một giá trị mỗi khi có thêm một tín hiệu đồng hồ ở lối vào của nó Tín hiệu đồng hồ có thể được lựa chọn từ một trong 7 nguồn tương ứng với 7 bit của thanh ghi, bit thứ 8 cho phép bộ Timer/Counter đựơc ngừng hoạt động
+ Thanh ghi TIMER/COUNTER0 (TCNT0): đây là thanh ghi Timer/Counter hiện thời Một giá trị đã nạp vào thanh ghi này được sử dụng làm giá trị xuất phát, và bộ định thời làm tăng giá trị này theo từng tín hiệu xung nhịp của nó nếu bộ Counter/Timer được cho phép qua thanh ghi TCCR0 Sau khi bộ Timer/Counter0 bị tràn được đặt lại về $00 và tiếp tục đếm tiến theo từng tín hiệu xung nhịp
Trang 16+ Các thanh ghi TIMER/COUNTER1 INPUT CAPTURE: là thanh ghi 16
bit chỉ để đọc Khi sườn dương hoặc sườn âm của tín hiệu ở chân input capture, ICP, được phát hiện giá trị hiện thời của bộ Timer/Counter1 được truyền đến thanh ghi Input Capture, ICR1 Đồng thời cờ input capture ICF1, được đặt thành
“1” Vì thanh ghi input capture là thanh ghi 16 bit nên một thanh ghi tạm thời TEMP được sử dụng để khi ICR1 được đọc có thể đảm bảo rằng cả hai byte được đọc đồng thời
+ Thanh ghi điều khiển bộ định thời Watchdog
+ Thanh ghi địachỉ bộ nhớ EEPROM(EEAR): có đọ rộng 2 byte dùng cho các bộ xử lý có bộ nhớ EEPROM lớn hơn 256 byte và có độ rộng một byte đối với các bộ xử lý còn lại
+ Thanh ghi dữ liệu bộ nhớ EEPROM(EEDR): sử dụng để đọc/ghi dữ liệu từ/vào bộ nhớ EEPROM Bộ nhớ EEPROM có độ rộng 8 bit
+ Thanh ghi điều khiển EEPROM(EECR): thanh ghi EECR được sử dụng
để điều khiển các thao tác đọc ghi dữ liệu vào bộ nhớ EEPROM
- Bit 2-EEMWE: ở mức tích cực cho phép ghi dữ liệu trên thanh ghi EEDR vào bộ nhớ EEPROM
- Bit 1-EEWE: ở mức tích cực cho ghi dữ liệu từ EEDR vào bộ nhớ EEPROM ở địa chỉ đựơc chỉ định bởi thanh ghi địa chỉ bộ nhớ EEPROM
2.2.7 Bộ nhớ EEPROM
+ Tất cả các bộ vi điều khiển AVR đều có một bộ nhớ EEPROM trên
chip Dung lượng bộ nhớ EEPROM thay đổi từ 64 byte trên bộ điều khiển AT90S1200, Tiny10/12 đến 4 Kbyte trên Mega103 Các thanh ghi dùng để truy nhập EEPROM gồm: thanh ghi địa chỉ EEPROM(EEAR), thanh ghi dữ liệu EEPROM(EEDR), và thanh ghi điều khiển EEPROM(EECR)
+ Bộ nhớ EEPROM là một bộ nhớ không bị mất dữ liệu khi nguồn điện cung cấp bị ngắt Dữ liệu trong nó có thể được ghi và xóa bằng điện và vì vậy việc ghi và đọc bộ nhớ này VĐK có thể làm trực tiếp Bộ nhớ này được xem như một bộ nhớ dữ liệu nhưng chúng không được truy nhập như một bộ nhớ SRAM
mà được truy nhập như một thiết bị ngoại vi Thời gian truy cập để viết mất
Trang 17khoảng 2.5 đến 4 ms, và phụ thuộc vào nguồn điện cung cấp cho vi điều khiển (Vcc) Để điều khiển vào ra dữ liệu với EEPROM chúng ta có thể sử dụng 3 thanh ghi đó là:EEPROM address ,EEDR và EECR
+ EEPROM address : đây là thanh ghi 16 bit lưu địa chỉ của các ô nhớ của EEPROM (từ 0 đến 511) Nó được truy nhập như hai thanh ghi 8 bit độc lập EEARH và EEARL
+ EECR(EEPROM control register): đây là thanh ghi điều khiển EEPROM, là thanh ghi 8 bit trong đó có 4 bit được định nghĩa để điều khiển hoạt động ghi đọc dữ liệu ở bộ nhớ EEPROM
- Bit EERIE(EEPROM ready interrupt enable): bit này cho phép ngắt hoạt động (thông báo cho CPU biết khả năng chao đổi dữ liệu với CPU) Nếu bit này được set 1 thì nó được phép hoạt động Và ngược lại
- Bit EEMWE(EEPROM master write enable): bit này khi được set 1 sẽ ghi dữ liệu từ thanh ghi EEDR vào ô nhớ có địa chỉ lưu trong thanh ghi EEAR của EEPROM Bit này được set bằng phần mềm và được xóa bằng phần cứng sau bốn chu khi máy
- Bit EEWE(EEPROM write enable ): đây là bit cho phép ghi dữ liệu vào EEPROM để tránh trường hợp ta ghi dữ liệu khi mà một dữ liệu trước đó chưa được ghi xong Nó được báo bằng phần cứng khi mà dữ liệu đã được ghi xong vào EEPROM
-Bit EERE ( EEPROM read enable ): bit này ra lệnh cho CPU đọc dữ liệu
từ bộ nhớ này ra thanh ghi dữ liệu với địa chỉ đã lưu bên trong thanh ghi địa chỉ
Và nó được xóa bằng phần cứng khi mà dữ liệu đã được đọc ra thanh ghi dữ liệu
+ Vậy để ghi dữ liệu vào EEPROM ta làm các bước sau:
- Bước 1: chờ đợi bit EEWE đã bị xóa chưa ?
- Bước 2: Ghi dữ liệu mới vào thanh ghi dữ liệu (EEDR)
- Bước 3: Set bit EEWE rồi đến bit EEMWE để bắt đầu ghi dữ liệu Chý ý: Nếu như dang ghi dữ liệu ở EEPROM mà xuất hiện ngắt thì dữ liệu đó sẽ không được ghi một cách an toàn vào EEPOM
Trang 18+ Sau đây là một ví dụ: ghi 1 byte vào bộ nhớ EEPROM địa chỉ lưu trong thanh ghi Y ,dữ liệu trong R17
- Write:
Sbic EECR,1 ;nhảy qua nếu EEWE bị xóa
Rjmp Write
Write_start:
Out EEAL,YL
Out EEAH,YH
Out EEDR,R17 ;Nap dữ liệu vào thanh ghi dữ liệu
Cli ;cam tat ca ca ngat
Sbi EECR,1
Sbi EECR,2
Sei ;cho phép ngắt
+ Để đọc dữ liệu vào EEPROM thì đơn giản hơn
- Bước 1: kiểm tra bit EEWE nếu như có quá trình ghi EEPROM thì chờ đợi
- Bước 2: Đưa địa chỉ cần đọc vào thanh ghi địa chỉ EEAR
- Bước 3: Set bit EERE lên 1 bắt đầu quá trình đọc
- Bước 4: Chờ đợi đoc xong bằng cách kiểm tra bit EERE nếu đã được xóa thì có dữ liệu ở thanh ghi dữ liệu Sau đó đọc dữ liệu
+ Ví dụ: Đọc một byte dữ liệu từ trong EEPROM bắt từ địa chỉ lưu trongthanh ghi Z và dữ liệu đọc ra thanh ghi R17 :
- READ:
Sbic EECR,1 ;kiểm tra xem có ghi không?
Rjmp READ
READ_START: ;Bắt đầu đọc
Out EEAL,ZL
Trang 19+ EEDR(EEPROM data register): đây là thanh ghi 8 bit lưu dữ liệu lấy ra
từ EEPROM hoặc dữ liệu định ghi vào EEPROM
2.2.8 Cổng vào/ra
+ Tất cả các bộ điều khiển AVR đều có một lượng lớn các cổng vào/ra nằm trong khoảng từ 3 bit trên AT90S2323 đến 48 bit trên Mega103 Tất cả các cổng lối ra của các bộ điều khiển AVR có thể chịu dòng điện đến 20 mA nên rất thích hợp đối với việc điều khiển trực tiếp các LED vì không cần đến mạch bổ sung
+ Các cổng vào ra đều có 3 địa chỉ vào ra đi kèm với chúng Ba địa chỉ vào/ra được cần đến để đặt cấu hình cho các bit riêng biệt thành lối vào hoặc lối
ra, địa chỉ khác cần đến để xuất ra dữ liệu tới các bit đó được đặt cấu hình thành lối ra, và địa chỉ thứ 3 được cần đến để đọc dữ liệu từ các chân đó được cấu hình thành lối vào
2.2.9 Bộ nhớ SRAM
+ Bộ nhớ SRAM có trên hầu hết các bộ xử lý có giá thành cao trong họ
AVR Dung lượng của bộ nhớ SRAM thay đổi từ 128 byte đến 4 Kbyte Bộ nhớ SRAM được truy nhập bằng cách sử dụng nhiều lệnh truy nhập dữ liệu trực tiếp hoặc gián tiếp Bộ nhớ này cũng đựơc sử dụng cho ngăn xếp thời gian truy nhập
bộ hớ SRAM bằng 2 chu kì đồng hồ
Trang 20+ Trên các bộ điều khiển AVR cỡ lớn đều có khả năng kết nối với bộ nhớ SRAM ở bên ngoài Để cho phép truy nhập bộ nhớ SRAM ngoài trên PORTA và PORTC của các bộ điều khiển cũng như tín hiệu ALE dùng cho việc phân kênh địa chỉ/dữ liệu, bit SRE(bit 7) trong thanh ghi MCUCR được đặt thành “1”
Hình 3 Kết nối bộ nhớ SRAM ngoài với bộ điều khiển AVR
2.2.10 Bộ định thời
+ Bộ định thời trong vi điều khiển AVR có chức năng giống như một bộ định thời hoặc một bộ đếm Giống như một bộ định thời tín hiệu giữ nhịp bên trong hoặc một dẫn xuất của tín hiệu giữ nhịp đó được sử dụng để giữ nhịp bộ định thời, trong khi giống như một bộ đếm, một tín hiệu từ bên ngoài ở một chân của một cổng được sử dụng để giữ nhịp bộ định thời/bộ đếm
2.2.11 Bộ truyền nhận UART
+ Việc truyền dữ liệu được khởi tạo bằng cách ghi dữ liệu vào thanh ghi
dữ liệu I/O UART, ký hiệu là UDR Dữ liệu được truyền từ UDR đến thanh ghi dịch truyền khi:
Trang 21- Một ký tự mới đã được ghi vào UDR sau khi bit stop từ ký tự trước đó
đã được chuyển ra Thanh ghi dịch chuyển ra được nạp ngay lập tức
- Một ký tự mới được ghi vào UDR trước khi bit stop từ ký tự trước đã được dịch đi Thanh ghi dịch được nạp khi bit stop của ký tự đang được truyền đã được dịch chuyển ra
+ Nếu thanh ghi dịch bộ truyền 10 bit đang trống thì dữ liệu được truyền
từ UDR đến thanh ghi dịch Ở thời điểm này bit UDRE(UART Data Register Empty) trong thanh ghi trạng thái UART, USR được đặt Khi bit này được đặt thành “1”, bộ UART đang sẵn sàng nhận ký tự tiếp theo Vào cùng thời điểm khi
dữ liệu được truyền từ UDR đến thanh ghi dịch bộ truyền 10 bit, bit 0 của thanh ghi dịch bị xoá(start bit) và bit 9 hoặc 10 được đặt(stop bit)
+ Nếu như một từ dữ liệu 9 bit được lựa chọn(bit CHR9 trong thanh ghi điều khiển UART, UCR được đặt), bit TXB8 trong thanh ghi UCR được truyền vào bit 9 trong thanh ghi bộ dịch truyền Theo nhịp của đồng hồ tốc độ buad sẽ diễn ra cuộc truyền đến thanh ghi dịch, bit start bị dịch chuyển ra chân TXD Sau
đó kế tiếp là dữ liệu, LSB trước tiên Khi bit stop đã được dịch chuyển ra, thanh ghi dịch được nạp nếu bất kỳ dữ liệu nào đã được ghi vào thanh ghi UDR trong khoảng thời gian truyền Trong thời gian nạp, bit UDRE được đặt thành “1” Nếu như không có dữ liệu mới tronh thanh ghi UDR để truyền đi khi bit stop được chuyển ra, cờ UDRE sẽ giữ nguyên trạng thái được đặt cho đến khi thanh ghi UDR được ghi một lần nữa
+ Khi không có dữ liệu mới cần được ghi, và bit stop đã có mặt ở trên TXD đối với một chiều dài bit, cờ complete, TXC, trong thanh ghi USR được đặt thành “1” Bit TXEN trên thanh ghi VCR cho phép bộ truyền UART khi đặt thành “1” Khi bit này bị xoá thành “0” thì chân PDI có thể được sử dụng cho thao tác I/O chung Khi đặt thành “1” bộ truyền trong UART sẽ được nối với PD1, chân này bị bắt buộc trở thành một chân lối ra không đếm xỉa gì đến việc đặt của bit 1 trong DDRD
Trang 222.2.12 Cấu trúc ngắt
+ Ngắt là một cơ cấu điều khiển dòng lệnh, cơ cấu này đựơc thiết kế trên
hầu hết các bộ điều khiển Trong quá trình giao tiếp của hệ thống bộ xử lý với thế giới bên ngoài, nhiều sự việc xảy ra theo cách không đồng bộ, chắng hạn người dùng có thể nhấn một công tắc để thực hiện một công việc nào đó, trong khi một byte dữ liệu đã đi đến cổng nối tiếp Điều này gây khó khăn cho hoạt động của
bộ xử lý khi mà nó phải kiểm tra tất cả các thiết bị để giám sát sự di chuyển của
dữ liệu Ngược lại mọi việc sẽ tốt hơn nếu các thiết bị này có thể loan báo sự đến nơi của dữ liệu Đây là tất cả những gì mà cơ chế ngắt phải thực hiện Thiết bị ngoại vi sẽ ngắt việc thực thi của chương trình chính, và bộ xử lý tạm ngưng việc thực thi chương trình bình thường để thẩm tra nguồn ngát và để thực hiện những thao tác đáp ứng cần thiết Sau khi hoàn thành những thao tác đáp ứng cầm thiết việc thực thi chương trình bị ngắt lại tiếp tục Chương trình ngắt chỉ đơn giản giống hệt một cương trình con bình thường ngoại trừ một đặc điểm là việc thực thi của chương trình này không bị bộ xử lý chặn trước là sẽ xuất hiện ở một thời điểm cụ thể nào
+ Thứ tự các sự việc xuất hiện khi xảy ra ngắt:
1 Thiết bị ngoại vi ngắt bộ xử lý
2 Thực hiện nốt lệnh hiện tại
3 Địa chỉ lệnh tiếp theo được lưu trữ vào ngăn xếp
4 Địa chỉ của chương trình con phục vụ ngắt được nạp vào bộ đếm chương trình
5 Bộ xử lý thực thi chương trình con phục vụ ngắt
6 Trở lại chương trình bị ngắt bằng lệnh RETI
7 Bộ xử lý nạp bộ đếm chương trình với giá trị được lưu trữ trên ngăn xếp
và việc thực thi chương trình bình thường lại tiếp tục
+ Bởi vì ngắt có thể xuất hiện bất cứ lúc nào nên trạng thái bộ xử lý cần phải được lưu trữ sao cho việc thực thi chương trình bình thường có thể tiếp tục ngay sau khi đoạn chương trình ISR được hoàn tất Trạng thái của bộ xử lý được chứa trong thanh ghi SREG Thanh ghi ISR cần phải lưu trữ SREG trước khi
Trang 23thực thi bất kỳ một lệnh nào khác, và trước khi trở lại với việc điều khiển chương trình chính cần phải khôi phục lại thanh ghi SREG Yêu cầu này có thể được thực hiện theo hai cách: hoặc là SREG được sao chép sang một thanh ghi khác ký hiệu
là RI, thanhghi này cần phải không được phục vụ cho bất kỳ một mục đích nào khác và trước khi ISR thực thi lệnh RETI, RI được sao chép ngược trở lại SREG Một cách khác để lưu trữ SREG là lưu nó trên ngăn xếp(bằng cách dùng lệnh PUSH SREG) và sau đó trước khi thực hiện lệnh RETI, giá trị SREG được sao chép ngược trở lại từ ngăn xếp(lệnh POP SREG) Phương pháp này chỉ có thể áp dụng cho những bộ xử lý có ngăn xếp tổ chức bằng phần mềm
+ Cũng có khả năng ngắt một ISR néu một ngắt khác xuất hiện và cờ ngắt toàn cục đã được đặt thành “1” bên trong ISR dùng cho ngắt 1(bằng cách sử dụng lệnh SEI) Trong trường hợp này, ngắt ISR1 bị ngắt và ISR khác, ISR2 thực thi Việc thực thi ISR1 lại tiếp tục sau khi ISR2 kết thúc, và sau khi thực thi xong ISR1 chương trình chính lại tiếp tục
+ Bình thường sau khi một ngắt xuất hiện và đang đựoc phục vụ bởi thanh ghi ISR tương ứng, các ngắt toàn cục bị cấm(tương đương việc thực hiện lênh CLI), tuy nhiên vẫn có khả năng cho phép các ngắt trong khi một ISR đang thực thi bằng việc thực hiện lệnh SEI trong ISR Nếu như các ngắt khác xuất hiện trong khoảng thời gian khi một ISR đang hoạt động thì nó sẽ được thực hiện bằng việc ngắt đoạn chương trình ISR ban đầu
+ Tính ưu tiên của ngắt: đựoc quy định bởi cách gán các vectơ ngắt Một vectơ ngắt ở địa chỉ thấp hơn trong bộ nhớ chương trình có mức ưu tiên cao hơn Mức độ ưu tiên của ngắt dùng để quyết định xem ngắt nào được phục vụ trước nếu như có nhiều ngắt đang chờ xử lý ở cùng một thời điểm
+ Một điều rất đáng quan tâm khi sử dụng các ngắt là bộ vi xử lý có thể đáp ứng ngắt nhanh đến mức nào Câu trả lời phụ thuộc rất nhiều vào kién trúc của bộ vi xử lý Đối với các bộ điều khiển AVR, việc thực thi ngắt đáp ứng đối với tất cả các ngắt AVR đã được cho phép ít nhất là 4 chu kỳ đồng hồ Bốn chu
kỳ đồng hồ sau khi cờ ngắt đã được đặt, chương trình vectơ địa chỉ dùng cho đoạn chương trình xử lý ngắt hiện tại được thực thi Trong khoảng thời gian 4
Trang 24chu kỳ máy bộ đếm chương trình(2 byte) được đẩy lên ngăn xếp, và con trỏ ngăn xếp thì giảm đi 2 Véctơ thường là một lệnh nhảy tương đối đến chương trình ngắt, và thao tác nhảy này chiếm 2 chu kỳ đồng hồ Nếu như một ngắt xuất hiện trong khi đang thực thi một lệnh chiếm hiều chu kỳ, lệnh này được hoàn thành trước khi ngắt được phục vụ Việc quay trở lại từ một chương trình xử lý ngắt chiếm 4 chu kỳ đồng hồ Trong bốn chu kỳ đồng hồ này, bộ đếm chương trình (2 byte) được đẩy trở lại ngăn xếp, con trỏ ngăn xếp đựoc tăng thêm 2 và cờ I trong SREG đựơc đặt Khi vi điều khiển AVR thoát ra khỏi một ngắt nó sẽ luôn trở về với chương trình chính và chấp hành lệnh kế tiếp trước khi có ngắt mới được xử
lý
2.2.13 Bộ so sánh analog
+ Bộ so sánh analog so sánh các giá trị điện áp ở lối vào cụ thể là ở lối vào
AIN0(AC+) và AIN1(AC-) với nhau Nếu như điện áp ở lối vào AIN0 lớn hơn điện áp ở lối vào AIN1 thì lối ra của bộ so sánh analog ACO được đặt lên mức
“1” Lối ra này có thể được sử dụng cho bộ Timer/Counter1 để trigơ hoặc xoá ngắt bộ so sánh analog
+ Bộ so sánh tương tự của AVR có đầu vào là hai chân PB2 và PB3.Với chân PB2 được nối vào cực dương của bộ so sánh và PB3 được nối vào cực âm của bộ so sánh.Nó tạo ra hai mức logic nếu V+>V- thì tín hiệu ra là 1 và ngược lại là 0
+ Để điều khiển và quan sát trạng thái của bộ so sánh tương tự ta có một thanh ghi đó là thanh ghi ACSR Thanh ghi ACSR là một thanh ghi 8 bit có địa chỉ trong các thanh ghi I/O là 0x08 và có địa chỉ trong không gian bộ nhớ SRAM
là 0x28.Trong 8 bit thì có 7 bit được định nghĩa và bit 6 không được định nghĩa
Nó chỉ có thể đọc và luôn có giá trị logic là 0
- Bit 7-ACD(Analog comparator disable): đây là bit điều khiển Bit này trực tiếp điều khiển hoạt động của AC(bộ so sánh tương tự).Nếu như bit này được set lên 1 thì nguồn cung cấp cho AC hoạt động bị tắt (turn off) và đồng nghĩa với việc nó không hoạt động.Và nếu nó được xóa thì AC được cấp nguồn
Trang 25và hoạt động bình thường.Chú ý :Ta có thể thay đổi giá trị logic của bit này lúc nào cũng được để ngưng hoạt động của chúng hoặc cho chúng hoạt đông trở lại nhưng khi thay đổi ghía trị logic của nó thì ngắt (ngắt của AC)cần bị cấm nếu không nó sẽ sinh ra một ngắt (Cụ thể là bit ACIE cần bị xóa)
- Bit 5-ACO(Analog comparator output): đây là bit trạng thái Bit này được nối trức tiếp với đầu ra của bộ so sánh tương tự
- Bit 4-ACI(Analog comparator interrupt flag): đây là bit trạng thái Cờ báo ngắt của bộ so sánh tương tự Nếu như cờ này được set và các ngắt được phép thì một chương trình phục vụ ngắt được gọi và chúng được xóa bằng phần cứng khi chương trình báo ngắt được phục vụ Các trường hợp làm thay đổi trạng thái cờ này ngoài việc thay đổi bit ACD sẽ được nói tới trong các bít o và 1
- Bit 3-ACIE(AC interrupt enable): đây là bit điều khiển Nếu bit này được set thì ngắt này được phép và ngược lại
- Bit 2ACIC(Analog comparator input Capture Enable): đây là bit điều khiển Khi bit này được set lên 1 thì đầu ra của AC được nối trực tiếp vào đầu vào của chức năng bắt sự kiện của Timer/counter 1
- Bit ACIS1 và ACIS0 (Ac interrupt mode select): đây là hai bit điều khiển
bị xóa (nếu nó được set)
Trang 26+ Để lập trình cho AC ta bắt đầu các bước sau:
Bước 1:Thiết lập các chân đầu vào cha AC
Bước 2:Chọn các chế độ cho AC ví như dùng ngắt …
Bước 3:Khởi động AC bằng cách xóa bit ACD
Sau đây là một ví dụ: một bài toán đơn giản như sau: Điều khiển nhiệt độ của phòng sao cho nó nhỏ hơn 40độ Dùng LM335 khi đó đầu vào bạn mắc trực tiếp vào PB2 AVR không thông qua ADC và đầu PB3 mắc vào giá trí điện áp tương ứng với 40 độ của LM335(ví như 3.5v chẳng hạn) Khi đó nếu nhiệt độ lớn hơn
40 độ thì đặt mức logic của PC0 lên 1 cho tới khi nó giảm xuống thì thôi
;Chương trình được viết như sau:
;Thiết lập cổng vào cho AC
Cbi DDBR,2 ;thiết lập chân PB2 là chân vào
Cbi PORTB,2 ;Loại bổ điện trở treo
Cbi DDBR,3 ;Thiết lập chân PB3 là chân vào
Cbi PORTB,3 ;Loại bỏ điện trở treo
Trang 27; Định nghĩa chân PC0 là chân ra:
sbi DDRC,0 ; Định nghĩa là chân ra
sbi PORTC,0 ; Đặt lên mức 1
2.2.14 Bộ định thời watchdog bên trong
+ Bộ định thời watchdog là một bộ định thời điều khiển được và được sử
dụng làm thiết bị đánh thức trong trường hợp phần mềm bị rơi vào một hoặc một
số vòng lặp vô tận hoặc trong trường hợp việc thực thi chương trình bị mắc lỗi
Bộ định thời mạch vòng có một số lối ra có khả năng đặt lại bộ điều khiển
+ Mạch định thời watchdog timer được giữ nhịp tưg một bộ dao động RC riêng biệt trên chip Bằng cách điều khiển mạch chia tần số watchdog timer, khoảng thời gian reset mạch watchdog có thể được điều chỉnh Các khoảng reset mạch watchdog cũng phụ thuộc vào điện áp nguồn nuôi
+ Mạch watchdog đặt lại lệnh, WDR, reser mạch watchdog timer Tám chu ký chu trình đồng hồ khác nhau có thể được lựa chọn để xác định chu kỳ đặt lại(reset) Nếu như khoảng thời gian reset kết thúc mà không có sự xuất hiện của thao tác reset watchdog khác thì bộ điều khiển AVR được đặt lại và khởi động quá trình thực hiện chương trình từ vectơ reset
Trang 282.3 TẬP LỆNH DÙNG CHO AVR
+ Muốn viết chương trình điều khiển hoạt động của vi điều khiển, ta cần
nắm chắc công dụng và cú pháp của từng lệnh Sau đây là những lênh cơ bản và chức năng của chúng:
ADC Rd,Rr Cộng thanh ghi Rr với cờ nhớ vào thanh ghi Rd
ADD Rd,Rr Cộng thanh ghi Rr vào thanh ghi Rd
ADIW Rdl,K Cộng giá trị K ngay sát vào cặp thanh ghi
AND Rd,Rr Thanh ghi Rr và Rd liên kết logic VÀ(AND)
ANDI Rd,K K và thanh ghi Rd được liên kết logic AND(VÀ)
ASR Rd Dịch chuyển thanh ghi Rd một cách số học sang phải BCLR bit Xoá một bit trong thanh ghi trạng thái
BLD Rd,bit t Nạp cờ T vào thanh ghi Rd
BRBC bit, offset Nhảy tương đối đến giá trị offset nếu bit trong thanh ghi
SREG bị xoá
BRBS bit, offset Nhảy tương đối đến giá trị offset nếu như bit trong SREG
được đặt BRCC offset Nhảy tương đối đến giá trị offset nếu như cờ Carry bị xoá BRCS offset Nhảy tương đối đi giá trị offset khi cờ nhớ được đặt
BREQ offset Nhảy tương đói đến giá trị offset nếu như bằng
BRGE offset Nhảy tương đối đến giá trị offset nếu lớn hơn hoặc bằng BRHC offset Nhảy tương đối đến giá trị offset nếu cờ Half-Carry bị xoá BRHS offset Nhảy tương đối đến giá trị offset nếu cờ H-C được đặt BRID offset Nhảy tương đối đến giá trị offset nếu cờ ngắt bị xoá
BRIE offset Nhảy tương đối đến giá trị offset nếu cờ ngăt được đặt BRLO offset Thao tác nhay tương đối đi một giá trị offset nếu nhỏ hơn BRLT offset Nhảy tương đối đến giá trị offset nếu như nhỏ hơn
BRMI offset Nhảy tương đối đến giá trị offset nếu như âm
BRNE offset Nhảy tương đối đến giá trị offset nếu như không bằng
Trang 29BSET bit Đặt bit trong SREG
BST Rd,bit Lưu trữ bit của Rd trong T-Bit
CALL addr Gọi một chương trình con ở địa chỉ addr
CBI Port,bit Xoá một bit trong thanh ghi Port
CBR Rd,mask Xoá bit trong thanh ghi Rd
COM Rd Lấy bù theo 1 của thanh ghi Rd
CP Rd,Rr So sánh thanh ghi Rd với Rr
CPC Rd,Rr So sánh thanh ghi Rd với Rr và cờ nhớ
CPI Rd,K So sánh thanh ghi Rd với giá trị K ngay sát
CPSE Rd,Rr So sánh thanh ghi Rd với Rr và nhảy nếu bằng
DEC Rd Giảm nội dung thanh ghi Rd đi 1
ELPM Nạp thanh ghi R0 với một byte từ bộ nhớ chương trình mà
con trỏ Z và RAMPZ chỉ đến EOR Rd,Rr Thanh ghi Rr và Rd liên kết lôgic XOR
ICALL Lời gọi gián ttiếp một chương trình con
IN Rd,Port Nạp thanh ghi Rd bằng Port
INC Rd Tăng thanh ghi Rd lên 1
JMP addr Nhảy tới địa chỉ addr
Trang 30Lệnh Mô tả
LD Rd,X Nạp thanh ghi Rd gián tiếp qua con trỏ X
LD Rd,X+ Nạp thanh ghi Rd gián tiếp qua con trỏ X và sau đấy con trỏ
được tăng thêm 1
LD Rd,-X Nạp thanh ghi Rd gián tiếp qua con trỏ X đã đựơc giảm đi 1
LD Rd,Y Nạp thanh ghi Rd gián tiếp qua con trỏ Y
LD Rd,Y+ Nạp thanh ghi Rd gián tiếp qua con trỏ Y và sau đó con trỏ
được tăng thêm 1
LD Rd,-Y Nạp thanh ghi gián tiếp qua con trỏ Y đã được giảm đi 1 LDI Rd,K Nạp thanh ghi Rd với giá trị K ngay sát
LDS Rd,addr Nạp thanh ghi Rd trực tiếp bằng một byte từ SRAM
LMP Nạp thanh ghi R0 bằng 1byte từ bộ nhớ chương trình mà
con trỏ Z chỉ tới LSL Rd Dịch thanh ghi Rd theo cách lôgic sang phía bên trái
LSR Rd Dịch chuyển thanh ghi Rd sang phải theo cách Lôgic
MOV Rd,Rs Sao chép thanh ghi Rr vào Rd
NEG Rd Lấy đảo thanh ghi Rd
OR Rd,Rr Thanh ghi Rr và Rd được liên kết Hoặc
ORI Rd,K Các giá trị K ngay sát và thanh ghi Rd được liên kết Hoăc OUT Rd,Port Nạp thanh ghi Port với Rr
POP Rd Kéo thanh ghi Rd xuống từ ngăn xếp
PUSH Rd Đẩy thanh ghi Rd lên ngăn xếp
RCALL offset Gọi chương trình con cách xa 1offset so với địa chỉ hiện tại RET Trở về từ chương trình con
RETI Trở về từ chương trình con phục vụ ngắt
RJMP offset Nhảy so với địa chỉ hiện tại
ROL Rd Quay thanh ghi về bên phải
ROR Rd Quay thanh ghi về bên trái
Trang 31Lệnh Mô tả
SBC Rd,Rr Trừ thanh ghi Rr và cờ nhớ từ thanh ghi Rd
SBCI Rd,K Trừ các giá trị K ngay sát và cờ nhớ từ thanh ghi Rd
SBI Port,bit Đặt một bit trong thanh ghi Port
SBIC Port,bit Nhảy khi bit trong thanh ghi Port bị xoá
SBIS Port,bit Nhảy nếu như bit trong thanh ghi Port được đặt
SBIW Rdl,K Trừ các giá trị K ngay sát từ cặp thanh ghi Rdh:Rdl
SBRC Rr,bit Nhảy nếu như bit trong thanh ghi Rr bị xoá
SBRS Rr,bit Nhảy nếu bit trong thanh ghi Rr được đặt
SLEEP Đặt bộ điều khiển vào chế độ ngủ
ST X,Rr Lưu trữ thanh ghi Rr gián tiếp qua con trỏ X
ST X+,Rr Lưu trữ thanh ghi Rr gián tiếp qua con trỏ và sau đó con trỏ
tăng thêm 1
ST -X,Rr Lưu trữ thanh ghi Rr gián tiếp qua con trỏ X đã giảm đi 1 STD addr,Rr Lưu trữ thanh ghi Rr trực tiếp vào bộ nhớ SRAM
SUB Rd,Rr Trừ thanh ghi Rr từ thanh ghi Rd
SUBI Rd,K Trừ giá trị Kngay sát từ thanh ghi Rd
SWAP Rd Hoán đổi vị trí của hai nửa byte trên thanh ghi Rd
WDR Đặt lại bộ định thời Watchdog
Bảng 7 Tập lệnh của vi điều khiển AVR
Trang 322.4 CÁC CHẾ ĐỘ TRUY NHẬP ĐỊA CHỈ CỦA AVR
2.4.1 Địa chỉ thanh ghi đơn trực tiếp
+ Ở chế dộ này dị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).Ví dụ :
COM Rd NEG Rd …
2.4.2 Địa chỉ hai thanh ghi trực tiếp
+ Đâ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ương như chế độ trên
Ví dụ: ADD Rd,Rr …
2.4.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 là địa chỉ của thanh ghi nguồn hoặc đích
Ví dụ:
Out DDRB,R16
In R12, DDRB
2 4.4 Địa chỉ trực tiếp dữ liệu
+ Địa chỉ của dữ liệu trong RAM được đưa trực tiếp vào lệnh
2.4.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
Ví dụ: ST X,R11
LD R13,Y
Trang 332.4.7 Địa chỉ dữ liệu dán tiếp cùng với tăng hoặc giảm con trỏ
+ Ví dụ:
LD R17,X+
LD -Y,R14
…
2.4.8 Địa chỉ của hằng số trong bộ nhớ chương trình
+ Cách này chỉ sử dụng cho lệnh LPM : địa chỉ của hằng số được lưu trong thanh ghi Z
Ví dụ:
LDI R30,0x07 ;dia chi truc tiep du lieu 0x07
LDI R31,0xFF
LPM
2.4.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
2.5 GIAO DIỆN NỐI TIẾP THIẾT BỊ NGOẠI VI
+ 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 giữ 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
+ Để điều khiển khối giao tiếp SPI thì chúng ta có 3 thanh ghi.Đó là 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)