Từ giữa những năm 80 đến nay công nghệ chế tạo linh kiện bán dẫn có những phát triễn vược bật để hỗ trợ cho sự phát triễn của công nghệ thông tin, và sự tự động hóa trong công nghiệp, … Với độ tích hợp ngày càng cao, công suất tiêu tán bé hơn, thông minh hơn nó đã làm thay đổi hẵn cấu trúc của nền công nghiệp hiện tại. Bước vào đầu thế kỷ 21 kỹ thuật điện tử_vi điều khiển sẽ là “Chiếc chìa khóa kỹ thuật“ cho các nước trên thế giới bước vào kỷ nguyên mới_ kỷ nguyên của công nghệ thông tin. Tuy chỉ mới thâm nhập vào nước ta nhưng công nghệ điện tử đã phát triễn rất nhanh và ngày càng giữ vai trò quan trọng trong nền công nghiệp nước nhà. Hiện nay, do nhu cầu tự động háo, hiện đại hóa của các nghành nghề từ nông nghiệp đến công nghiệp. Dựa vào đó chúng em chọn đề tài “thiết kế mạch điều khiển động cơ DC và hiển thị tốc độ ra màn hình LCD.” Do kiến thức còn hạn chế, với kinh nghiệm ít ỏi và thời gian có hạn, chắc chắn rằng tập đồ án này ít nhiều không thể tránh khỏi thiếu sót, kính mong quí thầy cô và bạn bè vui lòng bỏ qua và đóng góp ý kiến để tập đồ án ngày càng hoàn thiện hơn. NHÓM THỰC HIỆN ĐỒ ÁN Lời cảm ơn Để hoàn thành được đồ án này không thể thiếu được sự gúp đỡ nhiệt tình của các bạn và thầy cô giáo. Chúng em xin chân thành gửi lời cảm ơn đên: Cô giáo Đặng Thị Hương Giang giáo viên trường ĐH KINH TẾ KỸ THUẬT CÔNG NGHIỆP. Cô đã hết lòng quan tâm, hướng dẫn tạo mọi điều kiện để chúng em hoàn thành tốt đồ án này. Thầy giáo Hà Thanh Sơn người trực tiếp hướng dẫn chúng em hoàn thành đồ án này. Chúng em cũng chân thành cảm ơn các thầy cô trong khoa điện điện tử đã chỉ dạy cho chúng em những kiến thức cần thiết cho đồ án, đồng thời nâng cao kiến thữ cho chúng em. Và cuối cùng xin gửi lời cảm ơn đến tất cả các bạn bè đã chung tay giúp sức cho chúng tôi trong những ngày tháng làm đồ án. Xin chân thành cảm ơn ! Nhóm thực hiện đồ án. Mục Lục Phần A: giới thiệu Lời giới thiệu Lời cảm ơn Phần B: nội dung chính Tóm tắt nội dung đề tài CHƯƠNG I GIỚI THIỆU LINH KIỆN QUAN TRỌNG TRONG ĐỒ ÁN I. GIỚI THIỆU CHUNG VỀ CHÍP ATMEGA8.........................................7 II. TÌM HIỂU LCD 16x2................................................................................22 III. TÌM HIỂU IC 74LS151 (74HC151)……………………………………..27 IV. TÌM HIỂU ĐỘNG CƠ DC……………………………………………….29 CHƯƠNG II MẠCH NGHUYÊN LÝ VÀ NGUYÊN LÝ LÀM VIỆC I. MẠCH ĐIỀU KHIỂN PHÍM BẤM ............................................................35 1. Sơ đồ nguyên lý 2. Nghuyên lý làm việc II. MẠCH ĐIỀU KHIỂN ĐỘNG CƠ DC ........................................................36 1. Sơ đồ nguyên lý 2. Nguyên lý làm việc III. MẠCH ĐIỀU KHIỂN TRUNG TÂM..........................................................37 1. Sơ đồ nguyên lý 2. Nguyên lý làm việc CHƯƠNG III CODE ĐIỀU KHIỂN THIẾT BỊ VÀ MÔ PHỎNG PROTEUS….38 1. Code điều khiển 2. Mạch mô phỏng CHƯƠNG IV: KẾT LUẬN ………………………………………………………44 TÀI LIỆU THAM KHẢO...............................................................................44 TÓM TẮT NỘI DUNG ĐỀ TÀI mạch điều khiển động cơ DC và hiển thị tốc độ ra màn hình LCD. Làm việc dựa trên việc điều khiển của khối chung tâm chính, mà ở đây là IC Atmega8 có chức năng điều khiển tốc độ của động cơ thông qua việc điều chỉnh 16 phím bấm( bao gông các phím số từ 0 đến 9 và các nút chức năng khác)được ghép gián tiếp với IC Atmega8 thông qua IC 74ls151 là IC dồn kênh 8 ngõ vào dữ liệu. khi muốn điều chỉnh độ rộng xung cấp cho động cơ thì ta dùng phím bấm ở đây dữ liệu tối đa là 255. Nếu vượt quá 255 hệ thống sẽ thông báo lỗi. độ rộng xung cấp cho động cơ được hiển thị thông qua màn hình LCD. Màn hình cho biết tốc độ của động cơ khi ta nhập 1 giá trị số liệu trong khoảng từ 0 đến 255. Từ đó ta biết được hướng điều chỉnh đọng cơ cho phù hợp với công việc yêu cầu.
Trang 1Nội dung: Thiết kế mạch điều khiển động cơ DC và hiển thị
Trang 2Phần A giới thiệu
Lời giới thiệu.
Từ giữa những năm 80 đến nay công nghệ chế tạo linh kiện bán dẫn có những phát triễn vược bật để hỗ trợ cho sự phát triễn của công nghệ thông tin, và sự tự động hóa trong công nghiệp, … Với độ tích hợp ngày càng cao, công suất tiêu tán bé hơn, thông minh hơn nó đã làm thay đổi hẵn cấu trúc của nền công nghiệp hiện tại Bước vào đầu thế kỷ 21 kỹ thuật điện tử_vi điều khiển sẽ là “Chiếc chìa khóa kỹ thuật“ cho các nước trên thế giới bước vào kỷ nguyên mới_ kỷ nguyên của công nghệ thông tin
Tuy chỉ mới thâm nhập vào nước ta nhưng công nghệ điện tử đã phát triễn rất nhanh và ngày càng giữ vai trò quan trọng trong nền công
nghiệp nước nhà
Hiện nay, do nhu cầu tự động háo, hiện đại hóa của các nghành nghề từ
nông nghiệp đến công nghiệp Dựa vào đó chúng em chọn đề tài “thiết
kế mạch điều khiển động cơ DC và hiển thị tốc độ ra màn hình
LCD.”
Do kiến thức còn hạn chế, với kinh nghiệm ít ỏi và thời gian có hạn, chắc chắn rằng tập đồ án này ít nhiều không thể tránh khỏi thiếu sót, kính mong quí thầy cô và bạn bè vui lòng bỏ qua và đóng góp ý kiến để tập đồ án ngày càng hoàn thiện hơn
NHÓM THỰC HIỆN ĐỒ ÁN
Trang 3Lời cảm ơn
Để hoàn thành được đồ án này không thể thiếu được sự gúp đỡ nhiệt tình của các bạn và thầy cô giáo Chúng em xin chân thànhgửi lời cảm ơn đên:
Cô giáo Đặng Thị Hương Giang giáo viên trường ĐH KINH
TẾ KỸ THUẬT CÔNG NGHIỆP Cô đã hết lòng quan tâm,
hướng dẫn tạo mọi điều kiện để chúng em hoàn thành tốt đồ án
này Thầy giáo Hà Thanh Sơn người trực tiếp hướng dẫn chúng
em hoàn thành đồ án này
Chúng em cũng chân thành cảm ơn các thầy cô trong khoa điện điện tử đã chỉ dạy cho chúng em những kiến thức cần thiết cho
đồ án, đồng thời nâng cao kiến thữ cho chúng em
Và cuối cùng xin gửi lời cảm ơn đến tất cả các bạn bè đã chung tay giúp sức cho chúng tôi trong những ngày tháng làm đồ án.Xin chân thành cảm ơn !
Nhóm thực hiện đồ án.
Trang 4Mục Lục
Phần A: giới thiệu
Lời giới thiệu
Lời cảm ơn
Phần B: nội dung chính
Tóm tắt nội dung đề tài
CHƯƠNG I GIỚI THIỆU LINH KIỆN QUAN TRỌNG TRONG ĐỒ ÁN
I GIỚI THIỆU CHUNG VỀ CHÍP ATMEGA8 7
II TÌM HIỂU LCD 16x2 22
III TÌM HIỂU IC 74LS151 (74HC151)……… 27
IV TÌM HIỂU ĐỘNG CƠ DC……….29
CHƯƠNG II MẠCH NGHUYÊN LÝ VÀ NGUYÊN LÝ LÀM VIỆC I MẠCH ĐIỀU KHIỂN PHÍM BẤM 35
1 Sơ đồ nguyên lý 2 Nghuyên lý làm việc II MẠCH ĐIỀU KHIỂN ĐỘNG CƠ DC 36
1 Sơ đồ nguyên lý 2 Nguyên lý làm việc III MẠCH ĐIỀU KHIỂN TRUNG TÂM 37
1 Sơ đồ nguyên lý 2 Nguyên lý làm việc CHƯƠNG III CODE ĐIỀU KHIỂN THIẾT BỊ VÀ MÔ PHỎNG PROTEUS….38 1 Code điều khiển 2 Mạch mô phỏng CHƯƠNG IV: KẾT LUẬN ………44
TÀI LIỆU THAM KHẢO 44
Trang 5TÓM TẮT NỘI DUNG ĐỀ TÀI
mạch điều khiển động cơ DC và hiển thị tốc độ ra màn hình LCD
Làm việc dựa trên việc điều khiển của khối chung tâm chính, mà ở đây
là IC Atmega8 có chức năng điều khiển tốc độ của động cơ thông qua việc điều chỉnh 16 phím bấm( bao gông các phím số từ 0 đến 9 và các nút chức năng khác)được ghép gián tiếp với IC Atmega8 thông qua IC 74ls151 là IC dồn kênh 8 ngõ vào dữ liệu khi muốn điều chỉnh độ rộng xung cấp cho động cơ thì ta dùng phím bấm ở đây dữ liệu tối đa là 255 Nếu vượt quá 255 hệ thống sẽ thông báo lỗi độ rộng xung cấp cho động
cơ được hiển thị thông qua màn hình LCD Màn hình cho biết tốc độ của động cơ khi ta nhập 1 giá trị số liệu trong khoảng từ 0 đến 255 Từ đó ta biết được hướng điều chỉnh đọng cơ cho phù hợp với công việc yêu cầu.
Trang 6Phần B nội dung chính
Trang 7- Dung lượng bộ nhớ RAM: 1 KB.
Bộ nhớ chương trình có khả năng ghi 10.000 lần, bộ nhớ
EEPROM có thể ghi 100.000 lần.Hỗ trợ bootloader, có khả năng
tự ghi vào bộ nhớ chương trình, cập nhật chương trình cho chip
mà không cần mạch nạp
- Timer 8 bit: 2
- Timer 16 bit: 1
- ADC: 6 kênh, 10 bit
- Giao tiếp: TWI (I2C), UART, SPI
Trang 8AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ dữliệu (data memory bus) và đường truyền cho bộ nhớ chươngtrình (program memory bus) được tách riêng Data memory buschỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, vớiregister file Trong khi đó program memory bus có độ rộng 16bits và chỉ phục vụ cho instruction registers Hình 1 mô tả cấutrúc bộ nhớ của AVR.
Bộ nhớ chương trình (Program memory): Là bộ nhớ Flashlập trình được, trong các chip AVR cũ (như AT90S1200 hayAT90S2313…) bộ nhớ chương trình chỉ gồm 1 phần làApplication Flash Section nhưng trong các chip AVR mới chúng
ta có thêm phần Boot Flash setion Boot section sẽ được khảosát trong các phần sau, trong bài này khi nói về bộ nhớ chươngtrình, chúng ta tự hiểu là Application section Thực chất,application section bao gồm 2 phần: phần chứa các instruction
Trang 9(mã lệnh cho hoạt động của chip) và phần chứa các vector ngắt(interrupt vectors) Các vector ngắt nằm ở phần đầu củaapplication section (từ địa chỉ 0x0000) và dài đến bao nhiêu tùythuộc vào loại chip Phần chứa instruction nằm liền sau đó,chương trình viết cho chip phải được load vào phần này.
Vì chức năng chính của bộ nhớ chương trình là chứainstruction, chúng ta không có nhiều cơ hội tác động lên bộ nhớnày khi lập trình cho chip, vì thế đối với người lập trình AVR,
bộ nhớ này “không quá quan trọng” Tất cả các thanh ghi quantrọng cần khảo sát nằm trong bộ nhớ dữ liệu của chip
Hình 1 Tổ chức bộ nhớ của AVR
Bộ nhớ dữ liệu (data memory): Đây là phần chứa các thanhghi quan trọng nhất của chip, việc lập trình cho chip phần lớn là
Trang 10truy cập bộ nhớ này Bộ nhớ dữ liệu trên các chip AVR có độlớn khác nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộnhớ này được chia thành 5 phần:
trong hình 1, phần này bao gồm 32 thanh ghi có tên gọi làregister file (RF), hay General Purpose Rgegister – GPR, hoặcđơn giản là các Thanh ghi Tất cả các thanh ghi này đều là cácthanh ghi 8 bits như trong hình 2
Hình 2 Thanh ghi 8 bits
Tất cả các chip trong họ AVR đều bao gồm 32 thanh ghiRegister File có địa chỉ tuyệt đối từ 0x0000 đến 0x001F Mỗithanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị
có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31.Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từR0 đến R15 và phần 2 là các thanh ghi R16 đến R31 Các thanhghi này có các đặc điểm sau:
cần 1 chu kỳ xung clock
CPU của chip
cũng là đích chứa kết quả trả lại của phép toán
Để minh họa, hãy xét ví dụ thực hiện phép cộng 2 thanh ghi bằng instruction ADD như sau:
Trang 11Bạn thấy trong dòng lệnh trên, 2 thanh ghi R1 và R2 được
sử dụng trực tiếp với tên của chúng, dòng lệnh trên khi đượcdịch sang opcode để download vào chip sẽ có dạng:
0000110000010010 trong đó 00001=1 tức thanh ghi R1 và
00010 = 2 chỉ thanh ghi R2 Sau phép cộng, kết quả sẽ được lưuvào thanh ghi R1
Tất cả các instruction sử dụng RF làm toán hạng đều có thểtruy nhập tất cả các RF một cách trực tiếp trong 1 chu kỳ xungclock, ngoại trừ SBCI, SUBI, CPI, ANDI và LDI, cácinstruction này chỉ có thể truy nhập các thanh ghi từ R16 đếnR31
Thanh ghi R0 là thanh ghi duy nhất được sử dụng tronginstruction LPM (Load Program Memory) Các thanh ghi R26,R27, R28, R29, R30 và R31 ngoài chức năng thông thường cònđược sử dụng như các con trỏ (Pointer register) trong một sốinstruction truy xuất gián tiếp Chúng ta sẽ khảo sát vấn đề contrỏ sau này Hình 3 mô tả các chức năng phụ của các thanh ghi
Trang 12Hình 3 Register file.
Tóm lại 32 RF của AVR được xem là 1 phần của CPU, vìthế chúng được CPU sử dụng trực tiếp và nhanh chóng, để gọicác thanh ghi này, chúng ta không cần gọi địa chỉ mà chỉ cần gọitrực tiếp tên của chúng RF thường được sử dụng như các toánhạng (operand) của các phép toán trong lúc lập trình
gồm 64 thanh ghi được gọi là 64 thanh ghi nhập/xuất (64 I/Oregister) hay còn gọi là vùng nhớ I/O (I/O Memory) Vùng nhớI/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi Tất cả cácthanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ởđây Xem lại ví dụ trong bài 1, trong đó tôi có đề cập về việcđiều khiển các PORT của AVR, mỗi PORT liên quan đến 3
Trang 13thanh ghi DDRx, PORTx và PINx, tất cả 3 thanh ghi này đềunằm trong vùng nhớ I/O Xa hơn, nếu muốn truy xuất các thiết
bị ngoại vi khác như Timer, chuyển đổi Analog/Digital, giaotiếp USART…đều thực hiện thông qua việc điều khiển cácthanh ghi trong vùng nhớ này
Vùng nhớ I/O có thể được truy cập như SRAM hay như các thanh ghi I/O Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến 0x005F Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F.
Xét ví dụ instruction OUT dùng xuất giá trị ra các thanh ghiI/O, lệnh này sử dụng địa chỉ kiểu thanh ghi, cấu trúc của lệnhnhư sau: OUT A, Rr, trong đó A là địa chỉ của thanh ghi trongvùng nhớ I/O, Rr là thanh ghi RF, lệnh OUT xuất giá trị từ thanhghi Rr ra thanh ghi I/O có địa chỉ là A Giả sử chúng ta muốnxuất giá trị chứa trong R6 ra thanh ghi điều khiển hướng củaPORTD, tức thanh ghi DDRD, địa chỉ tính theo vùng I/O củathanh ghi DDRD là 0x0011, như thế câu lệnh của chúng ta sẽ có
muốn truy xuất DDRD theo dạng SRAM, ví dụ lệnh STS hayLDS, thì phải dùng địa chỉ tuyệt đối của thanh ghi này, tức giátrị 0x0031, khi đó lệnh OUT ở trên được viết lại là STS 0x0031,R6
Để thống nhất cách sử dụng từ ngữ, từ bây giờ chúng ta dùng khái niệm “địa chỉ I/O” cho các thanh ghi trong vùng nhớ I/O để nói đến địa chỉ không tính phần Register File, khái niệm
“địa chỉ bộ nhớ” của thanh ghi là chỉ địa chỉ tuyệt đối của chúng trong SRAM Ví dụ thanh ghi DDRD có “địa chỉ I/O” là 0x0011 và “địa chỉ bộ nhớ” của nó là 0x0031, “địa chỉ bộ nhớ”
= “địa chỉ I/O” + 0x0020.
Trang 14Vì các thanh ghi trong vùng I/O không được hiểu theo tên gọinhư các Register file, khi lập trình cho các thanh ghi này, ngườilập trình cần nhớ địa chỉ của từng thanh ghi, đây là việc tươngđối khó khăn Tuy nhiên, trong hầu hết các phần mềm lập trìnhcho AVR, địa chỉ của tất cả các thanh ghi trong vùng I/O đềuđược định nghĩa trước trong 1 file Definition, bạn chỉ cần đínhkèm file này vào chương trình của bạn là có thể truy xuất cácthanh ghi với tên gọi của chúng Giả sử trong ví dụ ở bài 1, đểlập trình cho chip Atmega8 bằng AVRStudio, dòng thứ 2 chúng
ta sử dụng INCLUDE "M8DEF.INC" để load file định nghĩacho chip ATMega8, file M8DEF.INC Vì vậy, trong sau này khimuốn sử dụng thanh ghi DDRD bạn chỉ cần gọi tên của chúng,
cho chứa các biến (tạm thời hoặc toàn cục) trong lúc thực thichương trình, vùng này tương tự các thanh RAM trong máy tínhnhưng có dung lượng khá nhỏ (khoảng vài KB, tùy thuộc vàoloại chip)
phép người sử dụng gắn thêm các bộ nhớ ngoài để chứa biến,vùng này thực chất chỉ tồn tại khi nào người sử dụng gắn thêm
bộ nhớ ngoài vào chip
ROM) là một phần quan trọng của các chip AVR mới, vì làROM nên bộ nhớ này không bị xóa ngay cả khi không cung cấpnguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữliệu Như trong hình 1, phần bộ nhớ EEPROM được tách riêng
và có địa chỉ tính từ 0x0000
Câu hỏi bây giờ là AVR hoạt động như thế nào?
Hình 4 biểu diễn cấu trong bên trong của 1 AVR Bạn thấyrằng 32 thanh ghi trong Register File được kết nối trực tiếp với
Trang 15Arithmetic Logic Unit -ALU (ALU cũng được xem là CPU củaAVR) bằng 2 line, vì thế ALU có thể truy xuất trực tiếp cùng lúc
2 thanh ghi RF chỉ trong 1 chu kỳ xung clock (vùng đượckhoanh tròn màu đỏ trong hình 4)
Hình 4 Cấu trúc bên trong AVR
Các instruction được chứa trong bộ nhớ chương trình Flashmemory dưới dạng các thanh ghi 16 bit Bộ nhớ chương trìnhđược truy cập trong mỗi chu kỳ xung clock và 1 instructionchứa trong program memory sẽ được load vào trong instructionregister, instruction register tác động và lựa chọn register filecũng như RAM cho ALU thực thi Trong lúc thực thi chươngtrình, địa chỉ của dòng lệnh đang thực thi được quyết định bởimột bộ đếm chương trình – PC (Program counter) Đó chính làcách thức hoạt động của AVR
Trang 16AVR có ưu điểm là hầu hết các instruction đều được thực thitrong 1 chu kỳ xung clock, vì vậy có thể nguồn clock lớn nhấtcho AVR có thể nhỏ hơn 1 số vi điều khiển khác như PIC nhưngthời gian thực thi vẫn nhanh hơn.
Stack.
Stack được hiểu như là 1 “tháp” dữ liệu, dữ liệu được chứavào stack ở đỉnh “tháp” và dữ liệu cũng được lấy ra từ đỉnh.Kiểu truy cập dữ liệu của stack gọi là LIFO (Last In First Out –vào sau ra trước) Hình 5 thể hiện cách truy cập dữ liệu củastack
Hình 5 Stack
Khái niệm và cách thức hoạt động của stack có thể được ápdụng cho AVR, bằng cách khai báo một vùng nhớ trong SRAM
là stack ta có thể sử dụng vùng nhớ này như một stack thực thụ
Để khai báo một vùng SRAM làm stack chúng ta cần xáclập địa chỉ đầu của stack bằng cách xác lập con trỏ stack-SP(Stack Pointer) SP là 1 con trỏ 16 bit bao gồm 2 thanh ghi 8 bitSPL và SPH (chữ L là LOW chỉ thanh ghi mang giá trị byte thấpcủa SP, và H = HIGH), SPL và SPH nằm trong vùng nhớ I/O
Trang 17Giá trị gán cho thanh ghi SP sẽ là địa chỉ khởi động của stack.Quay lại ví dụ ở bài 1, phần khởi tạo các điều kiện đầu.
; KHOI TAO CÁC DIEU KIEN DAU
dữ liệu được đẩy vào stack, SP sẽ giảm giá trị vì thế khởi động
SP ở vị trí cuối cùng của SRAM sẽ tránh được việc mất dữ liệu
do ghi đè Bạn có thể khởi động stack với 1 địa chỉ khác, tuynhiên vì lý do an toàn, nên khởi động stack ở RAMEND
Hai instruction dùng cho truy cập stack là PUSH và POP,trong đó PUSH dùng đẩy dữ liệu vào stack và POP dùng lấy dữliệu ra khỏi stack Dữ liệu được đẩy vào và lấy ra khỏi stack tại
vị trí mà con trỏ SP trỏ đến Ví dụ cho chip ATMega8,RAMEND=0x045F, sau khi khởi động, con trỏ SP trỏ đến vị trí0x045F trong SRAM, nếu ta viết các câu lệnh sau:
Trang 18LDI R16, 8
Khi đó nội dung của stack sẽ như trong hình 6
Hình 6 Nội dung stack trong ví dụ
Sau mỗi lần PUSH dữ liệu, SP sẽ giảm 1 đơn vị và trỏ vào
vị trí tiếp theo
Bây giờ nếu ta dùng POP để lấy dữ liệu từ stack, POP R2, thì R2
sẽ mang giá trị của ngăn nhớ 0x045D, tức R2=8 Trước khiinstruction POP được thực hiện, con trỏ SP được tăng lên 1 đơn
vị, sau đó dữ liệu sẽ được lấy ra từ vị trí mà SP trỏ đến trongstack
Stack trong AVR không phải là “vô đáy”, nghĩa là chúng tachỉ có thể PUSH dữ liệu vào stack ở 1 độ sâu nhất định nào đấy(phụ thuộc vào chip) Sử dụng stack không đúng cách đôi khi sẽlàm chương trình thực thi sai hoặc tốn thời gian thực thi vô ích
Vì thế không nên sử dụng stack chỉ để lưu các biến thôngthường Ứng dụng phổ biến nhất của stack là sử dụng trong cácchương trình con (Subroutine), khi chúng ta cần “nhảy” từ một
vị trí trong chương trình chính đến 1 chương trình con, sau khithực hiện chương trình con lại muốn quay về vị trí ban đầu trongchương trình chính thì Stack là phương cách tối ưu dùng để chứa
bộ đếm chương trình trong trường hợp này Xem lại ví dụ trongbài 1, trong chương trình chính chúng ta dùng lệnh RCALL
Trang 19DELAY để nhảy đến đoạn chương trình con DELAY, RCALL
là lệnh nhảy đến 1 vị trí trong bộ nhớ chương trình, trước khinhảy, PC được cộng thêm 1 và PUSH một cách tự động vàostack Cuối chương trình con DELAY, chúng ta dùng instructionRET, instruction này POP dữ liệu từ stack ra PC một cách tựđộng, bằng cách này chúng ta có thể quay lại vị trí trước đó.Chính vì các lệnh RCALL và RET sử dụng stack một cách tựđộng nên ta phải khởi động stack ngay từ đầu, nếu khôngchương trình sẽ thực thi sai chức năng
Tóm lại cần khởi động stack ở đầu chương trình và khôngnên sử dụng stack một cách tùy thích nếu chưa thật cần thiết
IV Thanh ghi trạng thái - SREG (STATUS REGISTRY).
Nằm trong vùng nhớ I/O, thanh ghi SREG có địa chỉ I/O là0x003F và địa chỉ bộ nhớ là 0x005F (thường đây là vị trí cuốicùng của vùng nhớ I/O) là một trong số các thanh ghi quan trọngnhất của AVR, vì thế mà tôi dành phần này để giới thiệu vềthanh ghi này Thanh ghi SREG chứa 8 bit cờ (flag) chỉ trạngthái của bộ xử lí, tất cả các bit này đều bị xóa sau khi reset, cácbit này cũng có thể được đọc và ghi bởi chương trình Chứcnăng của từng bit được mô tả như sau:
Hình 7 Thanh ghi trạng thái
Bit 0 – C (Carry Flag: Cờ nhớ): là bit nhớ trong các phépđại số hoặc logic, ví dụ thanh ghi R1 chứa giá trị 200, R2 chứa
70, chúng ta thực hiện phép cộng có nhớ: ADC R1, R2, sauphép cộng, kết quả sẽ được lưu lại trong thanh ghi R1, trong khi
Trang 20kết quả thực là 270 mà thanh ghi R1 lại chỉ có khả năng chứa tối
đa giá trị 255 (vì có 8 bit) nên trong trường hợp này, giá trị lưulại trong R1 thực chất chỉ là 14, đồng thời cờ C được set lên 1(vì 270=100001110, trong đó 8 bit sau 00001110 =14 sẽ đượclưu lại trong R1)
Bit 1 – Z (Zero Flag: Cờ 0): cờ này được set nếu kết quảphép toán đại số hay phép Logic bằng 0
Bit 2 – N (Negative Flag: Cờ âm): cờ này được set nếu kếtquả phép toán đại số hay phép Logic là số âm
Bit 3 – V (Two’s complement Overflow Flag: Cờ tràn của bù 2): hoạt động của cờ này có vẻ sẽ khó hiểu cho bạn vì nóliên quan đến kiến thức số nhị phân (phần bù), chúng ta sẽ đềcập đến khi nào thấy cần thiết
Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XORgiữa 1 cờ N và V, S=N xor V
Bit 5 – H (Half Carry Flag: Cờ nhờ nữa): cờ H là cờ nhớtrong 1 vài phép toán đại số và phép Logic, cờ này hiệu quả đốivới các phép toán với số BCD
Bit 6 – T (Bit Copy Storage): được sử dụng trong 2Instruction BLD (Bit LoaD) và BST (Bit STorage) Tôi sẽ giảithích chức năng Bit T trong phần giới thiệu về BLD và BST
Bit 7 – I (Global Interrupt Enable) : Cho phép ngắt toànbộ): Bit này phải được set lên 1 nếu trong chương trình có sửdụng ngắt Sau khi set bit này, bạn muốn kích hoạt loại ngắt nào
Trang 21cần set các bit ngắt riêng của ngắt đó Hai instruction dùng riêng
để Set và Clear bit I là SEI và CLI
Chú ý: tất cả các bit trong thanh ghi SREG đều có thể đượcxóa thông qua các instruction không toán hạng CLx và set bởiSEx, trong đó x là tên của Bit.Ví dụ CLT là xóa Bit T và SEI làset bit I
Tôi chỉ giải thích ngắn gọn chức năng của các bit trong thanhghi SREG, cụ thể chức năng và cách sử dụng của từng bit chúng
ta sẽ tìm hiểu trong các trường hợp cụ thể sau này, người đọc cóthể tự tìm hiểu thêm trong các tài liệu về INSTRUCTION choAVR
Tôi cung cấp thêm 1 bảng tóm tắt sự ảnh hưởng của các phép toán đại số, logic lên các Bit trong thanh ghi SREG
Trang 22Hình 8 Ảnh hưởng của các phép toán lên SREG.
TÌM HIỂU LCD 16x2
Text LCD là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc số trong bảng mã ASCII Khônggiống các loại LCD lớn, Text LCD được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự
ASCII Cũng vì lý do chỉ hiện thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (để phân biệt với