Nghiên cứu ứng dụng của bộ vi xử lý trong quản lý thư viện trường tiểu học Kim Đồng
Trang 1LỜI NÓI ĐẦU
Ngày này, việc ứng dụng máy tính vào các kỹ thuật đo lường và điều khiển
không còn mới vì khi các thiết bị, hệ thống đo lường và điều khiển được ghép
nối với máy tính sẽ có thời gian thu thập và xử lý dữ liệu ngắn trong khi mức độ
chính xác vẫn được đảm bảo, nhưng điều đáng quan tâm hơn cả là khả năng tự
động hoá trong việc thu thập và xử lý dữ liệu Chính vì điều này làm cho máy
tính được ứng dụng trong hầu hết vào các lĩnh vực trong cuộc sống hàng ngày
đặc biệt là trong lĩnh vực công nghiệp
Một bước tiến quan trọng trong kỹ thuật vi xử lý là sự ra đời của các bộ vi
xử lý kỹ thuật số Đây là một vi mạch điện tử có mật độ tích hợp cao bao gồm
rất nhiều các mạch số có khả năng nhận, xử lý và xuất dữ liệu Đặc biệt là quá
trình xử lý dữ liệu được thực hiện theo một chương trình là một tập hợp các lệnh
từ bên ngoài mà người sử dụng có thể thay đổi dễ dàng tùy thuộc vào từng ứng
dụng Do đó một bộ vi xử lý có thể thực hiện được rất nhiều các yêu cầu điều
khiển khác nhau tuỳ thuộc vào nhu cầu sử dụng
Sự ra đời của kỹ thuật vi xử lý là sự kết hợp giữa kỹ thuật phần cứng và
phần mềm đã làm cho hoạt động của các mạch điện tử trở nên mềm dẻo hơn với
những phần mềm rất linh hoạt mà người sử dụng có thể sửa chữa, thay đổi hoặc
bổ sung làm cho ứng dụng ngày càng trở nên hoàn thiện mà không cần phải thiết
kế lại toàn bộ ứng dụng
Trong đồ án này, em sử dụng vi mạch điều khiển AT90S8535 của hãng
Atmel để thiết kế một mạch đo nhiệt độ đơn giản Đây là một bộ vi xử lý 8 bit
năng lượng thấp (theo kiểu chíp CMOS) trên cơ sở cấu trúc RICS của hãng
Atmel, tốc độ xử lý dữ liệu của IC AT90S8535 rất cao (xấp xỉ 8 MISP tại tần số
8MHz) cho phép hệ thống có thể được thiết kế tối ưu làm tăng tốc độ xử lý Do
đó, nó cung cấp khả năng linh hoạt rất cao trong các ứng dụng nhúng Vì vậy,
việc tìm hiểu cấu trúc và đặc tính của vi mạch điều khiển AT90S8535 có thể
giúp chúng ta sử dụng vi mạch điều khiển này cho các ứng dụng cần thiết
Trang 2Em xin chân thành cảm ơn thầy cô đã tận tình hướng dẫn để em hoàn thành
đồ án này Tuy nhiên, do trình độ còn nhiều hạn chế nên đồ án không thể tránh
khỏi những thiếu sót, vì vậy em rất mong được sự chỉ bảo của các thầy cô cũng
như của những người đi trước trong lĩnh vực này để đồ án của em hoàn thiện
hơn qua đó em có thể xây dựng được những ứng dụng trong thực tế
Trang 3CHƯƠNG I
NHIỆM VỤ VÀ PHƯƠNG HƯỚNG THỰC HIỆN 1.1 Nhiệm vụ của đồ án
Từ mục đích tổng quát của đề tài là thiết kế và xây dựng một hệ thống đo
nhiệt độ đơn giản, có thể phân tách ra thành các nhiệm vụ chính cần thực hiện
như sau:
Thiết kế và xây dựng hệ thống ghép nối vi điều khiển (µC)
AT90S8535 với module LCD (4x20 character), keypad (16 keys), cảm biến
nhiệt LM335 Ngoài ra hệ thống còn phải có khả năng giao tiếp với máy
tính (PC) qua cổng RS 232
Hình 1.1 : Sơ đồ tổng thể của hệ thống cần thiết kế
Thiết kế và xây dựng phần mềm điều khiển µC để thu thập dữ liệu từ
cảm biến nhiệt nhiệt LM335, từ keypad hoặc từ PC Xử lý dữ liệu nhận
được để hiển thị trên LCD hoặc truyền sang PC
PC
RS 232
Trang 4Xây dựng phần mềm trên PC để có thể giao tiếp được với µC qua
Nghiên cứu và tìm hiểu bộ vi xử lý AT90S8535
Tìm hiểu sự hoạt động của module LCD và cảm biến nhiệt LM 335
Tìm hiểu sự hoạt động và phương pháp mã hoá keypad để có thể ghép
nối với µC
Tìm hiểu phương pháp truyền thông sử dụng chuẩn RS 232
Thiết kế sơ đồ mạch nối ghép giữa µC với LCD, keypad, IC LM335
và giữa µC với máy tính thông qua cổng RS 232
Lập trình phần mềm nạp cho µC để thực hiện các kết nối trên
Viết phần mềm trên PC để giao tiếp với µC qua cổng RS 232
Lắp giáp mạch đã thiết kế, chạy kiểm thử và đánh giá kết quả
Viết báo cáo tốt nghiệp
1.3 Phương hướng thực hiện
1.3.1 Lựa chọn thiết bị
a) Lựa chọn vi điều khiển :
Trong thực tế có rất nhiều các họ vi xử lý khác nhau có thể sử dụng được
trong ứng dụng này như họ vi điều khiển 8051 của Intel, 68hC11 của Motorola
Trang 5xử lý AT90S8535 của ATMEL, do đây là một sản phẩm mới của hãng ATMEL
nên việc tìm hiểu nó sẽ đem lại rất nhiều lợi ích trong việc thiết kế các ứng dụng
đo lường và điều khiển Về mặt cấu tạo nó cũng tương tự như bộ vi xử lý
AT90S8515 đã có từ khá lâu với 4 cổng I/O lập trình được Nhưng về mặt công
dụng thì bộ vi xử lý AT90S8535 được tích hợp nhiều chức năng hơn so với bộ
vi xử lý AT90S8515, đặc biệt trên µC AT90S8535 được tích hợp một bộ ADC
cho phép mỗi chân của port A được sử dụng là đầu vào cho bộ ADC, làm cho
việc sử dụng µC AT90S8535 trong các ứng dụng linh hoạt hơn rất nhiều so với
µC AT90S8515 đang được sử dụng rộng rãi tại Việt Nam
b) Thiết bị hiển thị dữ liệu :
Đối với các loại dữ liệu được hiển thị dưới dạng số thì giải pháp tối ưu là
sử dụng các LED 7 thanh do loại thiết bị hiển thị này có giá thành tương đối rẻ
Tuy nhiên, do ứng dụng không chỉ hiển thị chữ số (giá trị nhiệt độ) mà còn phải
hiển thị cả các ký tự trong bảng chữ cái, do đó lựa chọn thiết bị hiển thị LCD vì
loại thiết bị hiển thị này có khả năng hiển thị cả chữ cái và chữ số một cách rõ
nét Mặc dù so với các loại đèn LED thì LCD có giá thành cao hơn, nhưng bù lại
thiết bị hiển thị LCD có nhiều đặc tính ưu việt hơn hẳn so với các loại đèn LED
Đặc biệt, thiết bị LCD cung cấp khả năng hiển thị dữ liệu vô cùng linh hoạt do
ta có thể điều khiển xuất dữ liệu một cách trực tiếp thông qua tập lệnh điều
khiển của vi mạch điều khiển và bộ mã ký tự sẵn có trong CGRAM của LCD
Một điều cần quan tâm khác là thiết bị LCD tiêu tốn rất ít năng lượng
Trên thị trường hiện nay có khá nhiều module LCD của các hãng khác
nhau như Samsung, Hitachi, Motorola với nhiều loại kích thước Trong đồ án
sử dụng module LCD có kích thước 4x20 characters với 16 chân ghép nối
Không nhất thiết phải chọn hãng cung cấp vì các module LCD đều được xây
dựng theo cùng một tiêu chuẩn, do đó cách thức điều khiển và ghép nối các
module LCD thông dụng hiện nay cũng tương tự nhau
Trang 6c) Thiết bị vào dữ liệu và điều khiển (Keypad) :
Để người sử dụng có thể giao tiếp được với hệ thống, cần phải ghép nối µC
với một module keypad Do ứng dụng có thể làm việc với cả chữ cái và chữ số
nên ta sử dụng keypad loại 16 keys, trong đó mỗi một phím được thiết kế như
một công tắc để có thể nhập được dữ liệu có dạng như sau :
10 chữ số trong hệ thập phân từ 0 9
26 chữ cái la tinh từ A Z
Các phím điều khiển bao gồm : Send, Bspace, , , /, Clear
Do số ký tự có thể được sử dụng cùng với các phím chức năng lớn hơn rất
nhiều so với tổng số phím sẵn có trên module keypad Vì vậy, bắt buộc phải sử
dụng phương pháp Multikey, tức là sử dụng phần mềm để mỗi một phím trên
module keypad có thể mã hoá được không ít hơn hai ký tự khác nhau Bằng cách
này, với keypad có 16 phím ta có thể mã hoá được toàn bộ bảng chữ cái và chữ
số đồng thời vẫn có thể thực hiện được các chức năng điều khiển như trình bầy ở
trên
d) Giao tiếp giữa µC và PC :
Mặc dù hệ thống được thiết kế dựa trên µC AT90S8535 đã có thể làm việc
độc lập trong qua trình thu thập, xử lý và hiển thị dữ liệu tới người sử dụng mà
không cần có sự trợ giúp của PC Tuy nhiên, trong hầu hết các ứng dụng đều cần
phải lưu trữ lại dữ liệu mà nếu thực hiện việc này dựa trên µC AT90S8535 đòi
hỏi rất nhiều kỹ thuật và chi phí Trong khi đó, thao tác lưu trữ dữ liệu trên PC
lại rất đơn giản, vì vậy giải pháp tối ưu nhất là sử dụng PC để làm nhiệm vụ
phức tạp này Vấn đề còn lại chỉ là thao tác truyền dữ liệu cần lưu trữ từ µC sang
PC, việc này được thực hiện khá đơn giản vì bản thân µC AT90S8535 đã được
tích hợp một bộ UART để sử dụng trong hoạt động truyền tin với các thiết bị ở
Trang 7
7
PC theo chuẩn RS 232 là sự tương quan về mặt điện áp tín hiệu dạng TTL của
µC và điện áp tín hiệu dạng RS 232 của PC Để thực hiện việc chuyển đổi tín
ta sử dụng IC Max232, IC này có nhiệm vụ tạo ra tín hiệu ±10V từ mức điện áp
TTL để tạo sự tương thích về mức điện áp với chuẩn RS 232
1.3.2 Phương hướng thiết kế
Từ sơ đồ tổng thể của hệ thống như trên hình 1.1 và từ việc lựa chọn thiết
bị như trình bầy ở trên, hệ thống cần thiết kế có thể được thể hiện như trong sơ
đồ hình 1.2, trong đó :
Khối LCD display : Sử dụng module LCD sẵn có trên thị trường được
ghép nối với µC để hiển thị các thông tin cần thiết cho người sử dụng
Khối Keypad : Được nối ghép với µC để người sử dụng có thể nhập
dữ liệu hoặc điều khiển sự hoạt động của hệ thống Module này được thiết
kế dưới dạng các công tắc và sử dụng trực tiếp các đặc tính của các cổng
I/O lập trình được của µC để thực hiện mà không cần nguồn hỗ trợ bên
ngoài
Khối LM 335 : Là một IC cảm biến nhiệt làm nhiệm vụ biến đổi nhiệt
độ môi trường sang dạng điện áp để làm đầu vào cho bộ ADC của µC làm
việc
Khối Max 232 : Sử dụng IC Max 232 ghép nối trược tiếp với µC làm
nhiệm vụ trao đổi thông tin giữa µC và PC theo chuẩn RS 232
Khối nguồn : Làm nhiệm vụ biến nguồn xoay chiều 220V sang nguồn
một chiều ±5V ổn định để cấp nguồn cho các khối khác hoạt động
Hình 1.2 : Sơ đồ khối thiết kế phần cứng
LCD
I/O
Nguồn
Trang 8CHƯƠNG 2
LỰA CHỌN LINH KIỆN THIẾT KẾ
VÀ MỘT SỐ LÝ THUYẾT VỀ CHUYỂN ĐỔI A/D
2.1 Lựa chọn linh kiện thiết kế
2.1.1 Giới thiệu vi mạch điều khiển AT90S8535
AT90S8535 là một vi mạch điều khiển năng lượng thấp 8 bit (công nghệ
chíp CMOS) trên cơ sở cấu trúc RICS của hãng ATMEL, nó thuộc họ vi điều
khiển AT90S/LS8535 Bằng cách thực hiện mỗi lệnh trong một đơn chu kỳ,
AT90S8535 có thể đạt tới 1 MIPS cho mỗi MHz cho phép hệ thống có thể được thiết
kế một cách tối ưu nhất sự tiêu thụ năng lượng làm tăng tốc độ xử lý Về mặt cấu tạo
µC này cũng tương tự như µC AT90S8515 với 4 cổng I/O lập trình được, tuy
nhiên về mặt chức năng thì µC AT90S8535 được tích hợp thêm nhiều tính năng
mới mà µC AT90S8515 không có Các đặc trưng chính của µC AT90S8535
được trình bầy dưới đây :
• 8KB bộ nhớ chương trình
• 512 byte SRAM
• 32 line (4 cổng) I/O lập trình được
• 32 thanh ghi đa năng 8 bit
• 8 kênh đầu vào ADC riêng biệt với 10 bit kết quả
• 2 bộ Timer/Counter 8 bit với bộ đếm độc lập và chế độ so sánh
• 1 bộ Timer/Counter 16 bit với bộ đếm độc lập và các chế độ PWM
• 1 bộ UART lập trình trao đổi thông tin nối tiếp
Trang 9• 1 cổng phối ghép nối tiếp thiết bị ngoại vi SPI
• 3 chế độ làm việc là : Idle, Power-Save và Power-down
• Nguồn cung cấp từ 4.0 - 6.0V, tần số làm việc 0 - 8MHz
Vi mạch điều khiển AT90S8535 được chế tạo theo công nghệ chíp nhớ cố
định với mật độ cao Bộ nhớ Flash ISP trên chíp cho phép bộ nhớ chương trình
có thể được lập trình lại thông qua một cổng SPI phối ghép nối tiếp với thiết bị
ngoại vi Ngoài ra, µC AT90SS8535 còn hỗ trợ cho việc lập trình thông qua các
công cụ pháp triển hệ thống như C, assemblers
Vi điều khiển AT90S8535 có 4 cấu hình chân khác nhau là : PDIP (Có 40
chân), PLCC, TQFP, MLF (Có 44 chân) Sơ đồ chân của mỗi loại như sau
Hình 2.1 : Cấu hình chân của µC AT90S8535
Trang 10Chức năng các chân của µC AT90S8535 như sau :
VCC : Chân cấp nguồn 5V
GND : Chân nối đất
RESET : Là đầu vào reset Tín hiệu reset ở bên ngoài sẽ tạo ra bởi mức
thấp của trở kháng trên chân Reset Xung reset dài quá 50ns sẽ tạo ra tín
hiệu reset Xung ngắn hơn sẽ không đảm bảo phát sinh tín hiệu reset
XTAL1 : Là một đầu vào có tác dụng đảo chiều bộ khuếch đại tạo dao
động và là đầu vào của mạch điều khiển đồng hồ bên trong
XTAL2 : Là đầu ra của tín hiệu đảo từ bộ khuếch đại tạo dao động
AVCC : Là chân cung cấp điện áp cho cổng A và bộ chuyển đổi ADC,
nếu ADC không được sử dụng thì chân này phải được nối với nguồn 5V
(chân VCC), nếu ADC được sử dụng thì chân này phải được nối tới nguồn
Trang 11AREF : Là đầu vào chuẩn của tín hiệu tương tự cho bộ chuyển đổi
ADC Để cho ADC hoạt động được, nguồn sử dụng cho chân này phải có
phạm vị từ 2V đến AVCC
AGND : Chân nối đất của tín hiệu analog, nếu bo mạch có một mức
nối đất riêng của tín hiệu analog, thì chân này phải được nối tới mức nối
đất này Nếu không có, chân này được nối tới chân GND
Port A (PA7 PA0) : Là một cổng vào ra hai chiều 8 bit Các chân của
cổng có thể cung cấp các trở kháng trong cho phép chọn từng bit Đệm ra
của cổng A có khả năng kéo dòng lên tới 20mA và có thể điều khiển trực
tiếp sự hiển thị LED Khi các chân PA0 đến PA7 được sử dụng như các
cổng vào và ở mức thấp, chúng sẽ là đầu vào hiện thời nếu các điện trở
trong được kích hoạt Cổng A cũng có thể được sử dụng như những đầu
vào analog để đưa tín hiệu tới bộ bộ chuyển đổi ADC Các chân của cổng
A ở trạng thái không xác định khi reset, ngay cả khi đồng hồ không hoạt
động
Port B (PB7 BP0) : Là một cổng vào ra hai chiều 8 bit với các trở
kháng trong Đệm ra của cổng B có khả năng kéo dòng lên tới 20mA Khi
là đầu vào, các chân của cổng B trong trạng thái trở kháng thấp sẽ là đầu
vào hiện thời nếu các điện trở trong được kích hoạt Cổng B là cổng cung
cấp các chức năng khác nhau với những đặc tính đặc biệt của µC
AT90S8535 Các chân của cổng B ở trạng thái không xác định khi reset,
ngay cả khi đồng không hoạt động
Port C (PC0 PC7) : Là một cổng vào ra hai chiều 8 bit với các trở
kháng trong Đệm ra của cổng C có khả năng kéo dòng lên tới 20mA Khi
là đầu vào, các chân của cổng C trong trạng thái trở kháng thấp sẽ là đầu
vào hiện thời nếu các điện trở được kích hoạt Hai chân của cổng C có thể
được lựa chọn để sử dụng giống như bộ tạo dao động cho bộ
Trang 12Timer/Counter2 Các chân của cổng C ở trạng thái không xác định khi
reset, ngay cả khi đồng không hoạt động
Port D (PD0 PD7) : Là một cổng vào ra hai chiều 8 bit với các trở
kháng trong Đệm ra của cổng C có khả năng kéo dòng lên tới 20mA Khi
là đầu vào, các chân của cổng D trong trạng thái trở kháng thấp sẽ là đầu
vào hiện thời nếu các điện trở được kích hoạt Cổng D cũng cung cấp
những chức năng có đặc tính đặc biệt của µC AT90S8535 Các chân của
cổng D ở trạng thái không xác định khi reset, ngay cả khi đồng không
hoạt động
Hình 2.2 : Sơ đồ khối vi mạch điều khiển AT90S8535
Trang 132.1.1.1 Cấu trúc của vi mạch AT90S8535
Vi mạch điều khiển AT90S8535 có những phương thức truy cập nhanh tới
tâp thanh ghi đa năng bao gồm 32 thanh ghi 8 bit với thời gian truy cập trong
một đơn chu kỳ đồng hồ Điều này có nghĩa trong một đơn chu kỳ, một thao tác
của bộ ALU được thực hiện sẽ lấy hai toán hạng từ hai thanh ghi trong tập thanh
ghi, sau khi thao tác được thực hiện và kết qua trả sẽ được lưu trở lại tập thanh
ghi trong một chu kỳ đồng hồ
Sáu trong số 32 thanh ghi đa năng này có thể được sử dụng như 3 thanh ghi
địa chỉ gián tiếp 16 bit trỏ đến không gian địa chỉ dữ liệu, làm cho phép tính địa
chỉ đạt được hiệu quả cao Một trong 3 con trỏ địa chỉ này cũng được sử dụng
giống như con trỏ địa chỉ tới vùng nhớ dữ liệu cố định Các thanh ghi địa chỉ
này là các thanh ghi 16 bit X, Y, Z
Trang 14Hình 2.3 : Sơ đồ khối kiến trúc của µC AT90S8535
Bộ ALU cung cấp các chức năng tính toán số học và logic giữa các thanh
ghi hoặc giữa một hằng số và một thanh ghi Những thao tác của một thanh ghi
đơn cũng được thực hiện trong bộ ALU Sự hoạt động của ALU được phân chia
làm 3 loại chính là số học, logic và các chức năng bit
Ngoài các chức năng của thanh ghi, các chế độ đánh địa chỉ bộ nhớ thông
thường cũng có thể được sử dụng trên các tập các thanh ghi Điều này được thực
hiện qua việc tập thanh ghi được gán 32 địa chỉ thấp nhất của không gian địa chỉ
dữ liệu ($00 $1F), Cho phép chúng có thể được truy nhập như là là các địa chỉ nhớ
bình thường
Trang 15Timer/Couter, bộ chuyển đổi ADC và các chức năng I/O khác Vùng nhớ I/O có
thể được truy nhập trực tiếp hoặc gián tiếp thông qua tập các thanh ghi
µC AT90S8535 sử dụng kiến trúc Harvard - với bộ nhớ và bus độc lập cho
chương trình và dữ liệu Bộ nhớ chương trình được thực hiện với một “pipeline”
hai trạng thái Trong khi một lệnh đang được thực hiện, lệnh tiếp theo được nạp
trước từ bộ nhớ chương trình Cách thức này cho phép các lệnh liên tiếp được
thực hiện trong từng đơn chu kỳ đồng hồ Bộ nhớ chương trình là bộ nhớ Flash
cho phép nạp dữ liệu trong hệ thống
Với những lệnh nhẩy và lệnh gọi, toàn bộ không gian địa chỉ 4K được truy
nhập trực tiếp Hầu hết các lệnh của AVR đều có độ dài 16 bit Mỗi địa chỉ bộ
nhớ chương trình bao gồm một lệnh 16 bit hoặc 32 bit
Mỗi một module ngắt có những thanh ghi điều khiển trong không gian I/O
với một bit cho phép ngắt chung được đặt trong thanh ghi trạng thái Mỗi ngắt
khác nhau có một vector ngắt độc lập trong bảng vector ngắt ở tại vị trí bắt đầu
của bộ nhớ chương trình Mỗi ngắt khác nhau đều có mức độ ưu tiên tuân theo
vị trí vector ngắt của chúng Địa chỉ của vector ngắt càng thấp, mức độ ưu tiên
càng cao Khi xẩy ra ngắt, một chương trình con phụ vụ ngắt được gọi, địa chỉ
trở về PC được đẩy vào ngăn xếp Vùng nhớ ngăn xếp được cấp phát trong vùng
nhớ dữ liệu của SRAM và do đó, dung lượng của ngăn xếp bị giới hạn bởi tổng
dung lượng của SRAM và cách sử dụng thông thường của SRAM Tất cả các
chương trình của người sử dụng phải được khởi đầu bằng con trỏ ngăn xếp (SP)
trong thủ tục reset (trước khi các chương trình con hoặc các ngắt được thực thi)
Con trỏ stack sử dụng 10 bit để truy nhập ghi/đọc trong không gian I/O 512
byte dữ liệu SRAM có thể được truy cập dễ dàng bởi 5 chế độ địa chỉ khác nhau
được cung cấp bởi µC AT90S8535
Trang 16Hình 2.4 : Bản đồ bộ nhớ của µC AT90S8535 2.1.1.2 Tập thanh ghi đa năng của µC AT90S8535
Tất cả các thanh ghi trong tập thanh ghi của µC AT90S8535 khi thực một
hiện lệnh trong tập lệnh đều có thể được truy cập trực tiếp trong một đơn chu kỳ
đồng hồ Ngoại trừ 5 lệnh trực tiếp SBCI, SUBI, CPI, ANDI, ORI giữa một
hằng số và một thanh ghi và lệnh LDI sử dụng để nạp tức thì hằng dữ liệu,
những lệnh này phải sử dụng các thanh ghi của nửa thứ hai trong tập thanh ghi
(từ R16 R31) Các lệnh còn lại đều có thể sử dụng bất kỳ thanh ghi nào trong
tập thanh ghi
Trang 17Hình 2.5 : Địa chỉ 32 thanh ghi đa năng của µC
Qua hình 2.5 có thể thấy, mỗi thanh ghi đều được gán một địa chỉ trong
không gian địa chỉ dữ liệu, chúng được đặt trong 32 vị trí đầu tiên của không
gian dữ liệu sử dụng Mặc dù không được thực hiện một cách vật lý như trong
SRAM, việc tổ chức bộ nhớ này cung cấp sự linh hoạt lớn trong việc truy nhập
tới các thanh ghi, như các thanh ghi X, Y, Z có thể được thiết lập để trỏ tới bất
kỳ thanh ghi nào trong tập thanh ghi
Các thanh ghi từ R26 R31 được thêm vào một số chức năng nhằm mở rộng
khả năng sử dụng của tập thanh ghi Những thanh ghi này là những con trỏ địa
chỉ được sử dụng trong chế độ địa chỉ gián tiếp của không gian dữ liệu Ba thanh
ghi địa chỉ gián tiếp là X, Y, Z được mô tả như trong hình 2.6 :
Hình 2.6 : Mô tả các thanh ghi địa chỉ gián tiếp X, Y, Z
Trang 18Trong các chế độ địa chỉ khác nhau, các thanh ghi này có chức năng điều
chỉnh linh hoạt đối với từng trường hợp, tự động tăng, giảm hoặc không đổi
2.1.1.3 Bộ số học và Logic - ALU
Bộ ALU của µC AT90S8535 được nối trực tiếp với 32 thanh ghi đa năng
Trong một đơn chu kỳ đồng hồ, các thao tác của ALU giữa các thanh ghi trong
tập thanh ghi được thực hiện và giữa một thanh ghi với một hằng số hoặc trên
một đơn thanh ghi Các hoạt động của ALU được chia làm 3 loại chính là : số
học, logic và các phép toán trên bit
2.1.1.4 Đặc điểm các bộ nhớ trong của µC AT90S8535
a) Bộ nhớ chương trình (Flash program memory) : Trong µC AT90S8535
chứa đựng 8KB bộ nhớ Flash lập trình được dùng để lưu trữ chương trình Nó
được tổ chức như một bộ nhớ 4Kx16 bit để phù hợp với sự làm việc của các
lệnh có độ dài 16 hoặc 32 bit Bộ nhớ Flash này có thể chịu được ít nhất 1000
chu kỳ ghi/xoá Vì bộ đếm chương trình (PC) của µC AT90S8535 có độ dài 12
bit, do đó nó có thể mã hoá 4096 địa chỉ trong bộ nhớ chương trình
b) Bộ nhớ SRAM : 608 vị trí địa chỉ thấp nhất trong vùng nhớ dữ liệu
được dùng để địa chỉ hoá cho tập thanh ghi, bộ nhớ I/O và SRAM 96 vị trí địa
chỉ đầu tiên là của tập thanh ghi và bộ nhớ I/O, 512 vị trí địa chỉ tiếp theo là của
bộ nhớ SRAM Một địa chỉ bất kỳ trong trong không gian địa chỉ dữ liệu
SRAM đều có thể được xác định thông qua 5 chế độ địa chỉ khác nhau là : trực
tiếp, tương đối, gián tiếp, gián tiếp với sự giảm trước và gián tiếp với sự tăng
sau Trong tập thanh ghi, các thanh ghi từ R26 tới R31 được sử dụng như các
thanh ghi con trỏ địa chỉ gián tiếp
Ở chế độ địa chỉ trực tiếp có cho phép truy cập tới toàn bộ không gian dữ
liệu Chế độ địa chỉ tương đối cho phép xác định 63 vị trí địa chỉ từ địa chỉ cơ sở
Trang 19sự tự động giảm trước hoặc tăng sau, nội dung của các thanh ghi địa chỉ X, Y và
Z đều tự động tăng hoặc giảm sau khi thực hiện 32 thanh ghi đa năng, 64 thanh
ghi I/O và 512 byte của bộ nhớ trong SRAM trong AT90S8535, tất cả đều có thể
được truy nhập thông qua các chế độ địa chỉ này
Hình 2.7 : Tổ chức bộ nhớ SRAM của µC c) Bộ nhớ EEPROM : µC AT90S8535 có 512 byte bộ nhớ EEPROM,
được tổ chức như một không gian dữ liệu riêng biệt cho phép mỗi byte có thể
được ghi/đọc Bộ nhớ EEPROM có thể thực hiện ít nhất 100.000 chu kỳ ghi/xoá
Sự truy nhập giữa EEPROM và µC được thực hiện thông qua các thanh ghi địa
chỉ, thanh ghi dữ liệu và thanh ghi điều khiển của EEPROM, các thanh ghi này
có thể được truy cập trong không gian I/O Thời gian truy cập ghi EEPROM
trong phạm vi từ 2.5 đến 4 ms, tuỳ thuộc vào điện áp trên chân VCC EEPROM
có một chức năng tự động tính thời gian cho phép phần mềm của người sử dụng
kiểm tra khi byte tiếp theo có thể được ghi/đọc Một ngắt đặc biệt kiểm tra sự
sẵn sàng của EEPROM có thể được thiết lập để kích hoạt khi EEPROM sẵn
sàng tiếp nhận dữ liệu mới Để ngăn cản việc ghi EEPROM ngoài ý muốn, một
quy trình ghi cụ thể phải được tuân theo Khi đọc EEPROM, µC bị tạm dừng
trong 4 chu kỳ đồng hồ trước khi lệnh tiếp theo được thực hiện Khi ghi
Trang 20EEPROM, µC tạm dừng trong 2 chu kỳ đồng hồ trước khi thực hiện lệnh tiếp
theo
Thanh ghi địa chỉ EEPROM : EEARH và EEARL
Các thanh ghi địa chỉ của EEPROM (EEARH và EEARL) chỉ định địa chỉ
của một byte trong không gian 512 byte EEPROM Các byte dữ liệu của
EEPROM được địa chỉ hóa từ 0 đến 511
Thanh ghi dữ liệu EEPROM : EEDR
Trong thao tác ghi của EEPROM, thanh ghi EEDR chứa dữ liệu được ghi
tới EEPROM theo địa chỉ được xác định bởi thanh ghi EEAR Trong thao tác
đọc EEPROM, thanh ghi EEDR chứa dữ liệu đọc ra từ EEPROM tại địa chỉ cho
trong thanh ghi EEAR
Thanh ghi điều khiển EEPROM : EECR
• Bit 3 - EERIE : Bit cho phép sẵn sàng ngắt của EEPROM
Khi bit I trong thanh ghi SREG và bit EERIE được thiết lập, ngắt trạng thái sẵn
sàng của EPROM được cho phép Khi bị xoá ngắt bị vô hiệu hoá Ngắt trạng thái
sẵn sàng EEPROM tạo ra một ngắt cứng khi bit EEWE bị xoá
Trang 21Bit EEMWE xác định có hay không sự thiết lập bit EEWE để gây ra thao tác
ghi EEPROM Khi bit EEMWE được thiết lập, thì sự thiết lập của bit EEWE sẽ ghi
dữ liệu vào EEPROM tại địa chỉ đã lựa chọn Nếu bit EEMWE là 0, thì sự thiết lập
của bit EEWE sẽ không có kết quả Khi bit EEMWE đã được thiết lập bởi phần
mềm, phần cứng xoá bit này về 0 sau 4 chu kỳ đồng hồ.
• Bit 1 - EEWE : Bit cho phép ghi EEPROM
Tín hiệu cho phép ghi EEPROM (EEWE) là một xung chọn ghi tới
EEPROM Khi địa chỉ và dữ liệu đã được thiết lập phù hợp, bit EEWE phải
được thiết lập để ghi giá trị vào trong EEPROM Bit EEEMWE phải được thiết
lập khi giá trị logic 1 được ghi vào bit EEWE, nếu không thì không xẩy ra thao
tác ghi EEPROM Quy trình dưới đây phải được tuân theo khi ghi EEPROM
(thứ tự của bước 2 và 3 không cần quan tâm)
1 Đợi cho đến khi bit EEWE trở về 0
2 Ghi địa chỉ mới của EEPROM tới thanh ghi địa chỉ EEPROM (tuỳ chọn)
3 Ghi dữ liệu mới vào thanh ghi EEDR (tuỳ chọn)
4 Ghi giá trị logic 1 vào bit EEMWE trong thanh ghi EECR (Để có thể ghi
giá trị logic 1 vào bit EEMWE, thì bit EEWE phải được ghi là 0 trong cùng một
chu kỳ đồng hồ)
5 Trong vòng 4 chu kỳ đồng hồ sau khi thiết lập bit EEMWE, ghi giá trị
logic 1 tới bit EEWE
Chú ý : Một ngắt giữa bước 4 và 5 sẽ làm lỗi chu kỳ ghi, vì bit EEMWE sẽ
hết thời gian Nếu một thủ tục ngắt truy xuất tới EEPROM trong khi một ngắt
khác cũng đang truy xuất EEPROM, thì nội dung của các thanh ghi EEAR và
EEDR sẽ bị thay đổi, gây lỗi ngắt truy xuất EEPROM Để tránh những vấn đề
này cần xoá các cờ ngắt chung trong thời gian thực hiện 4 bước cuối cùng Khi
thời gian truy cập ghi kết thúc (2.5ms và VCC = 5V hoặc 4ms và VCC = 2.7V), bit
EEWE được xoá bởi phần cứng, Sử dụng phần mềm có thể thăm dò bít này và
đợi nó trở về không trước khi thực hiện ghi byte tiếp theo Khi bit EEWE đã
Trang 22được thiết lập, µC tạm dừng trong 2 chu kỳ đồng hồ trước khi lệnh tiếp theo
được thực hiện
• Bit 0 - EERE : Bit cho phép đọc EEPROM
Tín hiệu cho phép đọc EEPROM là xung chọn đọc đến EEPROM Khi địa
chỉ phù hợp được thiết lập trong thanh ghi EEAR, bit EERE phải được thiết lập
Khi bit EERE bị xoá bởi phần cứng, dữ liệu yêu cầu được tìm thấy trong thanh
ghi EEDR Sự truy xuất đọc EEPROM cần một lệnh và không cần thăm dò bit
EERE Khi bit EERE đã được thiết lập, µC tạm dừng trong 4 chu kỳ đồng hồ
trước khi lệnh tiếp theo được thực hiện
Người sử dụng cần phải thăm dò bit EEWE trước khi bắt đầu thao tác đọc
Nếu dữ liệu hoặc địa chỉ mới được ghi vào các thanh ghi vào/ra của EEPROM
khi một thao tác ghi đang diễn ra, thì thao tác ghi sẽ bị ngắt và kết quả không
được xác định
2.1.1.5 Các chế độ địa chỉ của µC AT90S8535
Vi mạch điều khiển AT90S8535 hỗ trợ các chế độ địa chỉ rất mạnh và hiệu
quả cao cho việc truy nhập tới bộ nhớ chương trình (bộ nhớ Flash) và bộ nhớ dữ
liệu (SRAM, tập thanh ghi và bộ nhớ I/O) Dưới đây là các chế độ địa chỉ của
µC AT90S8535 :
a) Địa chỉ trực tiếp một thanh ghi
Toán hạng được chứa trong thanh ghi d (Rd)
Trang 23b) Địa chỉ trực tiếp hai thanh ghi
Các toán hạng được chứa trong thanh ghi r (Rr) và d (Rd)
Kết quả được lưu trong thanh ghi d (Rd)
c) Địa chỉ I/O trực tiếp
Toán hạng địa chỉ chứa trong 6 bit LSB của từ lệnh,
n là địa chỉ của thanh ghi nguồn hoặc đích
d) Địa chỉ dữ liệu trực tiếp
16 bit địa chỉ dữ liệu được chứa trong 16 bit LSB của hai từ lệnh
Rd/Rr chỉ rõ thanh ghi nguồn hoặc thanh ghi đích
e) Địa chỉ dữ liệu tương đối
Trang 24Toán hạng địa chỉ là kết quả của nội dung thanh ghi Y hoặc Z
được cộng với địa chỉ chứa trong 6 bit LSB của từ lệnh (a)
f) Địa chỉ dữ liệu gián tiếp
Toán hạng địa chỉ là nội dung của thanh ghi X, Y hoặc Z
g) Địa chỉ dữ liệu gián tiếp giảm trước
Nội dung các thanh ghi X, Y, Z giảm 1 trước khi thực hiện Toán hạng địa chỉ là nội dung đã giảm của thanh ghi X, Y, Z
Trang 25h) Địa chỉ dữ liệu gián tiếp tăng sau
Thanh ghi X, Y hoặc Z được cộng 1 sau khi thực hiện
Địa chỉ toán hạng là nội dung của thanh ghi X, Y hoặc Z trước khi cộng
i) Địa chỉ cố định khi thực hiện lệnh LPM
Địa chỉ byte cố định được xác định bởi nội dung của thanh ghi Z
15 bit MSB lựa chọn địa chỉ từ (0 – 4K), bit LSB cho phép
chọn byte thấp nếu LSB = 0 hoặc byte cao nếu đặt LSB = 1
j) Địa chỉ gián tiếp trong bộ nhớ chương trình với lệnh IJMP và ICALL
Chương trình được tiếp tục thực hiện tại địa chỉ được chứa bởi thanh ghi Z
(Bộ đếm chương trình (PC) được nạp với nội dung của thanh ghi Z)
Trang 26k) Địa chỉ tương đối của bộ nhớ chương trình với lệnh RJMP và RCALL
Chương trình được tiếp tục thực hiện tại địa chỉ PC + k + 1 Địa chỉ tương đối k bắt đầu từ - 2048 tới 2047 2.1.1.6 Thời gian truy cập bộ nhớ và thời gian thực hiện lệnh
µC AT90S8535 được điều khiển bởi đồng hồ hệ thống 0, được tạo trực tiếp
từ đồng hồ bên ngoài của chip và không sử dụng bộ chia thời gian trong
Hình 2.8 mô tả quá trình tìm và thực hiện lệnh song song theo cấu trúc
Harvard và khái niệm tập thanh ghi truy nhập nhanh
Hình 2.8: Quá trình tìm và thực hiện lênh song song Hình 2.9 mô tả khái niệm thời gian thao tác trong của tập thanh ghi Trong
một đơn chu kỳ đồng hồ, một thao tác sử dụng hai toán hạng trong hai thanh ghi
của ALU được thực hiện và kết quả được lưu trở lại thanh ghi đích
Trang 27Hình 2.9: Hoạt động của ALU trong đơn chu kỳ đồng hồ
Sự truy nhập vào bộ nhớ SRAM được thực hiện trong hai chu kỳ đồng hồ
và được mô tả như hình dưới
Hình 2.10 : Các chu kỳ truy cập bộ nhớ SRAM 2.1.1.7 Không gian bộ nhớ I/O
Bảng 2.1 : Không gian I/O của µC AT90S8535
Địa chỉ I/O
(Địa chỉ SRAM)
Tên thanh ghi/cổng Chức năng
$3F ($5F) SREG Thanh ghi trạng thái
$3E ($5E) SPH địa chỉ byte cao của con trỏ Stack
$3D ($5D) SPL Địa chỉ byte thấp của con trỏ Stack
$3B ($5B) GIMSK Thanh ghi mặt nạ ngắt chung
$3A ($5A) GIFR Thanh ghi cờ ngắt chung
$39 ($59) TIMSK Thanh ghi mặt nạ ngắt của bộ Timer/Counter
$38 ($58) TIFR Thanh ghi cờ ngắt của bộ Timer/Counter
$35 ($55) MCUCR Thanh ghi điều khiển chung của MCU
$34 ($45) MCUSR Thanh ghi trạng thái chung của MCU
$33 ($53) TCCR0 Thanh ghi điều khiển bộ Timer/Counter 0
Trang 28$32 ($52) TCNT0 8 bit dữ liệu của bộ Timer/Counter 0
$2F ($4F) TCCR1A Thanh ghi điều khiển A của bộ Timer/Counter 1
$2E ($4E) TCCR1B Thanh ghi điều khiển B của bộ Timer/Counter 1
$2D ($4D) TCNT1H Byte cao của bộ Timer/Counter 1
$2C ($4C) TCNT1L Byte thấp của bộ Timer/Counter 1
$2B ($4B) OCR1AH Byte cao của thanh ghi A so với đầu ra của Timer/Counter1
$2A ($4A) OCR1AL Byte thấp của thanh ghi A so với đầu ra của Timer/Counter1
$29 ($49) OCR1BH Byte cao của thanh ghi B so với đầu ra của Timer/Counter1
$28 ($48) OCR1BL Byte thấp của thanh ghi B so với đầu ra của Timer/Counter1
$27 ($47) ICR1H Thanh ghi lưu trữ Byte cao của đầu vào Timer/Counter1
$26 ($46) ICR1L Thanh ghi lưu trữ Byte cao đầu vào của Timer/Counter1
$25 ($45) TCCR2 Thanh ghi điều khiển bộ Timer/Counter 2
$24 ($44) TCNT2 8 bit dữ liệu của bộ Timer/Counter 2
$23 ($43) OCR2 Thanh ghi so với đầu ra của bộ Timer/Counter 2
$22 ($42) ASSR Thanh ghi trạng thái chế độ không đồng bộ
$21 ($41) WDTCR Thanh ghi điều khiển mạch kiểm tra tuần tự bộ định thời gian
$1F ($3E) EEARH Thanh ghi địa chỉ Byte cao của EEPROM
$1E ($3E) EEARL Thanh ghi địa chỉ Byte thấp của EEPROM
$1D ($3D) EEDR Thanh ghi dữ liệu EEPROM
$1C ($3C) EECR Thanh ghi điều khiển EEPROM
$1B ($3B) PORTA Thanh ghi dữ liệu, cổng A
$1A ($3A) DDRA Thanh ghi điều hướng dữ liệu, cổng A
$19 ($39) PINA Các chân vào của cổng A
$18 ($38) PORTB Thanh ghi dữ liệu cổng B
$17 ($37) DDRB Thanh ghi điều hướng dữ liệu, cổng B
$16 ($36) PINB Các chân vào của cổng B
$15 ($35) PORTC Thanh ghi dữ liệu cổng C
$14 ($34) DDRC Thanh ghi điều hướng dữ liệu, cổng C
$13 ($33) PINC Các chân vào của cổng C
$12 ($32) PORTD Thanh ghi dữ liệu của cổng D
$11 ($31) DDRD Thanh ghi điều hưởng dữ liệu, cổng D
$10 ($30) PIND Các chân vào của cổng D
$0F ($2F) SPDR Thanh ghi dữ liệu cổng vào/ra của thiết bị ngoại vi
$0E ($2E) SPSR Thanh ghi trạng thái của SPI
$0D ($2D) SPCR Thanh ghi điều khiển SPI
$0C ($2C) UDR Thanh ghi dữ liệu vào/ra của bộ UART
$0B ($2B) USR Thanh ghi trạng thái UART
Trang 29$09 ($29) UBRR Thanh ghi tốc độ baud của UART
$08 ($28) ACSR Thanh ghi điều khiển và trạng thái của mạch so sánh Analog
$07 ($27) ADMUX Thanh ghi lựa chọn của bộ dồn kênh ADC
$06 ($26) ADCSR Thanh ghi điều khiển và trạng thái của bộ ADC
$05 ($25) ADCH Thanh ghi dữ liệu byte cao của bộ ADC
$04 ($24) ADCL Thanh ghi dữ liệu byte thấp của bộ ADC
Tất cả các cổng I/O của µC AT90S8535 và các thiết bị ngoại vi đều được
đặt trong gian cổng I/O Các vị trí cổng I/O được truy nhập bởi lệnh IN và OUT
truyền dữ liệu giữa 32 thanh ghi đa năng và không gian I/O Các thanh ghi I/O
có địa chỉ trong phạm vi từ $00 đến $1F có thể được truy nhập trực tiếp tới các
bit bằng cách sử dụng các lệnh SBI và CBI Trong các thanh ghi này, giá trị các
bit đơn có thể được kiểm tra bằng cách sử dụng các lệnh SBIS và SBIC Khi sử
dụng các lệnh I/O cụ thể IN và OUT, các địa chỉ I/O từ $00 đến $3F phải được
sử dụng Khi xác định địa chỉ các thanh ghi I/O như địa chỉ của SRAM, phải
thêm $20 vào các địa chỉ này
Bảng 2.2 : Vị trí các bit trong các thanh ghi I/O
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
$3F ($5F) SREG I T H S V N Z C
$3E ($5E) SPH - - - SP9 SP8
$3D ($5D) SPL SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
$3C ($5C) Res
$3B ($5B) GIMSK INT1 INT0 - - - -
$3A ($5A) GIFR INTF1 INTF0
$39 ($59) TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 - TOIE0
$38 ($58) TIFR OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 - TOV0
$37 ($57) Res
$36 ($56) Res
$35 ($55) MCUCR - SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
$34 ($54) MCUSR - - - EXTRF PORF
Trang 30$2E ($4E) TCCR1B ICNC1 ICES1 - - CTC1 CS12 CS11 CS10
$2D ($4D) TCNT1H Timer/Counter1 – Counter Register High Byte
$2C ($4C) TCNT1L Timer/Counter1 – Counter Register Low Byte
$2B ($4B) OCR1AH Timer/Counter1 – Output Compare Register A High Byte
$2A ($4A) OCR1AL Timer/Counter1 – Output Compare Register A Low Byte
$29 ($49) OCR1BH Timer/Counter1 – Output Compare Register B High Byte
$28 ($48) OCR1BL Timer/Counter1 – Output Compare Register B Low Byte
$27 ($47) ICR1H Timer/Counter1 – Input Capture Register High Byte
$26 ($46) ICR1L Timer/Counter1 – Input Capture Register Low Byte
$25 ($45) TCCR2 - PWM2 COM21 COM20 CTC2 CS22 CS21 CS20
$24 ($44) TCNT2 Timer/Counter2 (8 Bits)
$23 ($43) OCR2 Timer/Counter2 Output Compare Register
$22 ($42) ASSR - - - - AS2 TCN2UB OCR2UB TCR2UB
$21 ($41) WDTCR - - - WDTOE WDE WDP2 WDP1 WDP0
$20 ($40) Res
$1E ($3E) EEARL EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0
$1D ($3D) EEDR EEPROM Data Register
$1C ($3C) EECR - - - - EERIE EEMWE EEWE EERE
$1B ($3B) PORTA PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0
$1A ($3A) DDRA DDA7 DDA6 DDA5 DDA4 DDA3 DDA2 DDA1 DDA0
$19 ($39) PINA PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0
$18 ($38) PORTB PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
$17 ($37) DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0
$16 ($36) PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
$15 ($35) PORTC PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0
$14 ($34) DDRC DDC7 DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0
$13 ($33) PINC PINC7 PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0
$12 ($32) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0
$11 ($31) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0
$10 ($30) PIND PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0
$0F ($2F) SPDR SPI Data Register
$0E ($2E) SPSR SPIF WCOL - - - -
$0D ($2D) SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
$0C ($2C) UDR UART I/O Data Register
$0B ($2B) USR RXC TXC UDRE FE OR - - -
$0A ($2A) UCR RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8
$09 ($29) UBRR UART Baud Rate Register
$08 ($28) ACSR ACD - ACO ACI ACIE ACIC ACIS1 ACIS0
Trang 31$05 ($25) ADCH - - - ADC9 ADC8
$04 ($24) ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0
nó Chú ý đối với các lệnh CBI và SBI sẽ có tác dụng trên tất cả các bit trong
thanh ghi I/O và thao tác ghi lại 1 vào bất kỳ cờ nào đã được thiết lập đồng
nghĩa với việc xoá cờ đó Tuy nhiên, các lệnh CBI và SBI chỉ làm việc với các
thanh ghi có địa chỉ từ $00 đến $1F Chức năng của mỗi bit trong các thanh ghi
sẽ được giới thiệu trong từng phần có liên quan, dưới đây là hai thanh ghi chính
của vi mạch điều khiển AT90S8535
Thanh ghi trạng thái µC : SREG
Thanh ghi trạng thái (Status register) của µC AT90S8535 có địa chỉ tại vị
trí $3F ($5F) trong không gian I/O được định nghĩa như sau :
• Bit 7 - I : Bit cho phép ngắt chung (Global Interrupt Enable)
Bit cho phép ngắt chung phải được thiết lập để cho phép các ngắt Sau đó,
mỗi sự điều khiển ngắt cho phép riêng được thực hiện trong các thanh ghi điều
khiển độc lập Nếu bit cho phép ngắt chung bị xoá, thì không có ngắt nào được
cho phép Bit I được xoá bởi phần cứng sau khi một ngắt xảy ra và được thiết
đặt bởi lệnh RETI để cho phép các ngắt tiếp theo
• Bit 6 - T : Bit lưu trữ sao chép (Bit Copy Storage)
Các lệnh sao chép bit BLD (BitLoaD) và BST (BitSTore) sử dụng bit T
như là nguồn hoặc đích cho thao tác bit Một bit của một thanh ghi trong tập
Trang 32thanh ghi có thể sao chép vào trong bit T bằng lệnh BST và một bit trong T có
thể được sao chép vào một bit trong thanh ghi của tập thanh ghi bởi lệnh BLD
• Bit 5 - H : Bit cờ nhớ phụ (Half-carry Flag)
Cờ nhớ phụ H xác định số nhớ trong một số thao tác số học
• Bit 4 - S : Bit dấu (Sign Bit, S = N ⊕ V)
Bit dấu S luôn là một phép logic NAND giữa cờ phủ định N và cờ tràn số
bù hai V
• Bit 3 - V : Bit cờ tràn bù hai (Two’s Complement Oveflow Flag)
Cờ tràn số bù hai V hỗ trợ cho phép tính số bù hai
• Bit 2 - N : Bit cờ phủ định (Negative Flag)
Cờ phủ định N cho biết một kết quả âm từ một phép tính số học hoặc logic
• Bit 1 - Z : Bit cờ Zero (Zero Flag)
Cờ Zero Z cho biết một kết quả bằng không từ một phép tính số hoặc logic
• Bit 0 - C : Bit cờ nhớ (Carry Flag)
Cờ carry C xác định số nhớ trong một phép tính số hoặc logic
Chú ý : Thanh ghi trạng thái không tự động được lưu và khôi phục khi
tham gia vào một thủ tục ngắt hoặc khi trở về từ một thủ tục ngắt Do đó, nó phải được
thực hiện bởi phần mềm
Thanh ghi con trỏ ngăn xếp : SP
Con trỏ ngăn xếp của µC AT90S8535 được thực hiện như hai thanh ghi 8
bit ở địa chỉ $3E($5E) và $3D($5D) trong không gian I/O Do bộ nhớ SRAM
của AT90S8535 có $25F địa chỉ, do đó con trỏ SP cần sử dụng 10 bit để xác
định các vị trí địa chỉ cần thiết
Trang 33Con trỏ ngăn xếp SP trỏ tới vùng dữ liệu ngăn xếp trong SRAM nơi mà
một chương trình con phuc vụ ngắt và ngắt được định vị Không gian ngăn xếp
trong vùng dữ liệu SRAM phải được khai báo trong chương trình trước bất kỳ
lời gọi chương trình con nào được thực hiện hoặc bất kỳ ngắt nào được cho
phép Con trỏ ngăn xếp phải được thiết đặt ở những địa chỉ lớn hơn $60 SP
giảm đi 1 byte khi dữ liệu được đẩy vào Stack bởi lệnh PUSH và nó giảm đi 2
byte khi một địa chỉ được đẩy vào Stack trong lời gọi chương trình con hoặc
ngắt SP được tăng lên 1 byte khi dữ liệu được lấy ra khỏi Stack với lệnh POP
và nó được tăng 2 byte khi một địa chỉ được lấy ra từ Stack với lệnh trở về từ
chương trình con RET hoặc lệnh trở về từ một ngắt RETI
2.1.1.8 Ngắt và xử lý ngắt trong µC AT90S8535
µC AT90S8535 cung cấp 16 nguồn gây ngắt khác nhau và một ngắt Reset
Các ngắt này và ngắt Reset có một vector chương trình độc lập trong không gian
bộ nhớ chương trình Tất cả các ngắt được gán với các bit cho phép ngắt riêng
và phải được thiết lập cùng với bit I trong thanh ghi SREG để cho phép ngắt xảy
ra
Vị trí địa chỉ thấp nhất trong không gian bộ nhớ chương trình được tự động
định nghĩa là địa chỉ của vector Reset, tiếp theo đó là địa chỉ của các vector ngắt
khác Danh sách đầy đủ của các vector ngắt được thể hiện trong bảng 2.3, bảng
này cũng cho biết các cấp độ ưu tiên của các ngắt tuỳ theo vị trí địa chỉ của
vector ngắt của nó theo nguyên tắc, địa chỉ càng thấp thì mức độ ưu tiên càng
cao RESET có mức ưu tiên cao nhất, tiếp theo là INT0 v.v
Bảng 2.3 : Địa chỉ của các vector ngắt trong µC AT90S8535
TT Địa chỉ
vector ngắt Nguồn gây ngắt Định nghĩa ngắt
1 $000 RESET Reset và khởi động lại mạch Watchdog
2 $001 INT0 Yêu cầu ngắt từ bên ngoài cấp 0
Trang 343 $002 INT1 Yêu cầu ngắt từ bên ngoài cấp 1
4 $003 TIMER2 COMP Ngắt thích ứng so sánh của T/C 2
5 $004 TIMER2 OVF Ngắt tràn của T/C 2
6 $005 TIMER1 CAPT Ngắt lưu giữ sự kiện của T/C 1
7 $006 TIMER1 COMPA Ngắt thích ứng so sánh A của T/C 1
8 $007 TIMER1 COMPB Ngắt thích ứng so sánh B của T/C 1
9 $008 TIMER1 OVF Ngắt tràn của T/C 1
10 $009 TIMER0 OVF Ngắt tràn của T/C 0
11 $00A SPI, STC Ngắt kết thúc truyền nối tiếp qua SPI
12 $00B UART, RX Ngắt kết thúc nhận dữ liệu của UART
13 $00C UART, UDRE Ngắt báo thanh ghi dữ liệu của UART rỗng
14 $00D UART, TX Ngắt hoàn thành truyền dữ liệu qua UART
15 $00E ADC Ngắt hoàn thành chuyển đổi ADC
16 $00F EE_RDY Ngắt báo EEPROM đã sẵn sàng R/W
17 $010 ANA_COMP Ngắt so sánh độ dài tín hiệu Analog
Một chương trình bình thường có thể thiết lập cho các địa chỉ của vector
Reset và các vector ngắt khác như sau :
Địa chỉ Lệnh Nhãn/toán hạng Giải thích
$000 rjmp RESET ;Điều khiển Reset
$001 rjmp EXT_INT0 ;Điều khiển IRQ0
$002 rjmp EXT_INT1 ;Điều khiển IRQ1
$003 rjmp TIM2_COMP ;Điều khiển so sánh Timer2
$004 rjmp TIM2_OVF ;Điều khiển tràn Timer2
$005 rjmp TIM1_CAPT ;Điều khiển bắt sự kiện Timer1
$006 rjmp TIM1_COMPA ;Điều khiển so sánh A của Timer1
$007 rjmp TIM1_COMPB ;Điều khiển so sánh B của Timer1
$008 rjmp TIM1_OVF ;Điều khiển tràn Timer1
$009 rjmp TIM0_OVF ;Điều khiển tràn Timer0
$00a rjmp SPI_STC ;Điều khiển kết thúc truyền dữ liệu qua SPI
$00b rjmp UART_RXC ;Điều khiển kết thúc UART RX
$00c rjmp UART_DRE ;Điều khiển thông báo hết dữ liệu trong UDR
$00d rjmp UART_TXC ;Điều khiển kết thúc UART TX
$00e rjmp ADC ;Ngắt thông báo kết thúc chuyển đổi ADC
$00f rjmp EE_RDY ;EEPROM sẵn sàng
$010 rjmp ANA_COMP ;Điều khiển bộ so sánh tín hiệu tương tự
Trang 35$013 ldi r16, low(RAMEND)
$014 out SPL,r16
$015 <instr> xxx
Các nguồn Reset của µC AT90S8535
µC AT90S8535 có 3 nguồn Reset khác nhau là : Power-on Reset (Reset khi
nguồn bật), Reset ngoài và Watchdog Reset
• Power-on Reset : MCU được thiết lập lại khi điện áp cung cấp thấp hơn
ngưỡng điện áp Power-on Reset (VPOT)
• Reset ngoài : MCU được thiết lập lại khi một mức điện áp thấp xuất hiện
trên chân RESET trong khoảng thời gian lớn hơn 50ns
• Watchdog Reset : MCU được thiết lập lại khi chu kỳ của mạch Wachdog
timer kết thúc và mạch Wachdog được cho phép
Trong thời gian Reset, tất cả các thanh ghi I/O được thiết lập lại với giá trị
khởi tạo và sự thực hiện chương trình được bắt đầu từ địa chỉ $000 Lệnh đặt
trong địa chỉ $000 phải là lệnh RJMP (lệnh nhảy quan hệ) để thi hành thủ tục
Reset Nếu một chương trình không cho phép bất một ngắt nào, thì các vector
ngắt sẽ không được sử dụng và đoạn mã của chương trình có thể được đặt tại các
vị trí này
Thông tin về bất cứ nguồn Reset nào gây ra sự thiết lập lại MCU được thể
hiện đầy đủ trong các bit của thanh ghi trạng thái MCU - MCUSR
Thanh ghi trạng thái MCU : MCUSR
• Bit 7 2 : Ressered bits
• Bit 1 - EXTRF : Bit cờ Reset từ bên ngoài (EXTernal Reset Flag)
Trang 36Sau một tín hiệu Reset Power-on, bit này không được xác định (X) Nó chỉ
có thể được thiết lập bởi một tín hiệu reset từ bên ngoài Một tín hiệu Reset
Watchdog sẽ không thay đổi giá trị của bit này Bit này được xoá bằng cách ghi
giá trị logic 0 vào bit
• Bit 0 - PORF : Bit cờ Reset Power-on (Power-On Reset Flag)
Bit này chỉ được thiết lập bởi một tín hiệu Reset Power-on Một tín hiệu
Reset Watchdog hoặc tín hiệu Reset từ bên ngoài sẽ không làm thay đổi giá trị
của bit này Bit được xoá bằng cách ghi giá trị 0 vào bit
Bảng 2 4 : Giá trị của các bit EXTRF và PORF sau Reset
Nguồn Reset EXTRF PORF Power-on Reset Không thay đổi 1 External Reset 1 Không thay đổi Watchdog Reset Không thay đổi Không thay đổi
Có thể sử dụng các giá trị của các bít này để xác định một điều kiện gây ra
Reset Đối với phần mềm cần phải xoá cả hai bit PORF và EXTRF càng sớm
càng tốt trong chương trình Kiểm tra giá trị của các bit PORF và EXTR trước
khi các bit được xoá Nếu bit được xoá trước khi xuất hiện một tín hiệu Reset từ
bên ngoài hoặc của Watchdog, thì nguồn gốc của ngắt có thể được tìm thấy bằng
Trang 37và thanh ghi mặt nạ ngắt của các mạch Timer/Counter – TISMK (Timer/Counter
Interrupt Mask register)
Khi xẩy ra một ngắt, bit cho phép ngắt chung I bị xoá và tất cả các ngắt bị
cấm Sử dụng phần mềm có thể thiết lập cho bit I để cho phép các ngắt đang bị
che Bit I được lập sau khi thực hiện lệnh trở về từ ngắt - RETI
Khi bộ đếm chương trình PC trỏ tới một vector ngắt hiện tại để thực hiện
chương trình con phục vu ngắt, phần cứng sẽ xoá cờ ngắt tương ứng với ngắt
pháp sinh Một vài cờ ngắt cũng có thể được xoá bằng cách ghi giá trị logic 1
vào vị trí bit cờ đó Nếu một điều khiện ngắt xẩy ra khi bit cho phép ngắt tương
ứng bị xoá, thì cờ ngắt sẽ được thiết lập và được nhớ cho đến khi ngắt đó được
cho phép hoặc cờ được xoá bởi phần mềm
Nếu một hoặc nhiều điều kiện ngắt xẩy ra khi bit cho phép ngắt chung bị
xoá, các cờ ngắt tương ứng sẽ được thiết lập và được nhớ cho đến khi bit cho
phép ngắt chung được thiết lập và các ngắt sẽ được thực hiện tuỳ theo cấp ưu
tiên của mỗi ngắt
Chú ý : Mức ngắt ngoài không có cờ và sẽ chỉ được nhớ lâu bằng điều kiện
ngắt tích cực Ngoài ra, thanh ghi trạng thái SREG sẽ không tự động lưu lại khi
tham gia một ngắt và khôi phụ lại khi trở về từ chương trình con phục vụ ngắt,
do đó nó phải được điều khiển bằng phần mềm
Các thanh ghi điều khiển ngắt của µC AT90S8535
Thanh ghi mặt nạ ngắt chung : GIMSK (General Interrupt Mask)
• Bit 7 - INT1 : Bit cho phép ngắt ngoài mức 1 (External Interrupt Request 1 Enable)
Khi bit INT1 được thiết lập và bit I trong thanh ghi trạng thái SREG được
thiết lập, thì chân yêu cầu ngắt mức 1 từ bên ngoài được cho phép Các bit
Trang 38ISC11 và ISC10 trong thanh ghi điều khiển chung MCUCR sẽ xác định ngắt từ
bên ngoài được kích hoạt theo sườn lên hay sườn xuống hoặc theo mức nhận
biết của tín hiệu trên chân INT1 Sự kích hoạt trên chân này sẽ gây ra một yêu
cầu ngắt cho dù chân INT1 được cấu hình như một đầu ra Ngắt tương ứng của
một yêu cầu ngắt ngoài mức 1 được thực hiện từ địa chỉ $002 trong bộ nhớ
chương trình
• Bit 6 - INT0 : Bit cho phép ngắt ngoài mức 0 (External Interrupt Request 0 Enable)
Khi bit INT0 và bit I trong thanh ghi trạng thái SREG được thiết lập, thì
chân yêu cầu ngắt mức 0 từ bên ngoài được cho phép Các bit ISC01 và ISC00
trong thanh ghi điều khiển chung MCUCR sẽ xác định ngắt từ bên ngoài được
kích hoạt theo sườn lên hay sườn xuống hoặc theo mức nhận biết của tín hiệu
trên chân INT0 Sự kích hoạt trên chân này sẽ gây ra một yêu cầu ngắt cho dù
chân INT0 được cấu hình như một đầu ra Ngắt tương ứng của một yêu cầu ngắt
ngoài mức 0 được thực hiện từ địa chỉ $001 trong bộ nhớ chương trình
• Bit 5 0 : Reserved bits
Thanh ghi cờ ngắt chung : GIFR (General Interrupt Flag Register)
• Bit 7- INTF1 : Bit cờ ngắt ngoài mức 1 (External Interrupt Flag 1)
Khi một tín hiệu theo sườn hoặc một sự thay đổi mức logic trên chân INT1
sẽ gây ra một yêu cầu ngắt, bit INTF1 được thiếp lập Cờ này luôn được xoá khi
chân này được thiết lập cho các ngắt có mức yêu tiên thấp, do đó trạng thái của
một ngắt có mức ưu tiên thấp có thể được xác định bằng cách đọc bit này
Nếu bit I trong thanh ghi trạng thái SREG và bit INT1 trong thanh ghi mặt
nạ ngắt chung GIMSK được thiết lập, MCU sẽ nhẩy tới địa chỉ ngắt $002 Do
ngắt được tác động bởi tín hiệu sườn và sự thay đổi mức logic, cờ này được xoá
Trang 39khi thủ tục ngắt được thực hiện, nó cũng có thể được xoá bởi việc ghi giá trị
logic 1 vào vị trí của cờ
• Bit 6 - INTF0 : Bit cờ ngắt ngoài mức 0 (External Interrupt Flag 0)
Khi một tín hiệu sườn hoặc một sự thay đổi logic trên chân INT0 gây ra
một yêu cầu ngắt, bit INTF0 được thiếp lập Cờ này luôn được xoá (0) khi chân
này được đặt cấu hình cho các ngắt có mức ưu tiên thấp, như vậy trạng thái của
một ngắt có mức ưu tiên thấp có thể được xác định bằng cách đọc bit này
Nếu bit I trong thanh ghi trạng thái SREG và bit INT1 trong thanh ghi mặt
nạ ngắt chung GIMSK được thiết lập, MCU sẽ nhẩy tới địa chỉ ngắt $001 Do
ngắt được tác động bởi tín hiệu sườn và sự thay đổi mức logic, cờ này được xoá
khi thủ tục ngắt được thực hiện, nó cũng có thể được xoá bởi việc ghi giá trị
logic 1 vào vị trí của cờ
Thanh ghi mặt nạ ngắt của các bộ Timer/Counter : TIMSK
• Bit 7 - OCIE2 : Bit cho phép ngắt so sánh bằng T/C2 (Timer/Counter2 Output
Compare Match Interrupt Enable) Khi bit OCIE2 được thiết lập và bit I trong thanh ghi trạng thái (SREG)
được thiết lập, ngắt so sánh bằng T/C2 được cho phép Ngắt tương ứng tại địa
chỉ $003 được thực hiện nếu xuất hiện một tín hiệu so sánh bằng trong T/C2 (tức
là, khi bit OFC2 được thiết lập trong thanh ghi cờ ngắt T/C [TIFR])
• Bit 6 - TOIE2 : Bit cho phép ngắt tràn T/C2 (Timer/Counter2 Overflow
Interrupt Enable) Khi bit TOIE2 được thiết lập và bit I trong thanh ghi trạng thái (SREG)
được thiết lập, ngắt tràn T/C2 được cho phép Ngắt tương ứng tại địa chỉ $004
được thực hiện nếu xuất hiện một tín hiệu tràn trong T/C2 (tức là, khi bit TOV2
được thiết lập trong thanh ghi cờ ngắt T/C [TIFR])
Trang 40• Bit 5 - TICIE1 : Bit cho phép ngắt bắt sự kiện vào của T/C1 (Timer/Counter1
Input Capture Interrup Enable) Khi bit TICIE1 được thiết lập và bit I trong thanh ghi trạng thái (SREG)
được thiết lập, ngắt bắt sự kiện vào của T/C1 được cho phép Ngắt tương ứng tại
đại chỉ $005 được thực hiện nếu xuất hiện một sự kiện gây ra sự bắt tín hiệu trên
chân 20, PD6 (ICP) (tức là, khi bit ICF1 được thiết lập trong thanh ghi cờ ngắt
T/C [TIFR])
• Bit 4 - OCIE1A : Bit cho phép ngắt so sánh bằng A của T/C1 (Timer/Counter1
Output CompareA Match Interrupt Enable) Khi bit OCIE1A được thiết lập và bit I trong thanh ghi trạng thái được thiết
lập, ngắt so sánh bằng A của T/C1 được cho phép Ngắt tương ứng tại đại chỉ
$006 được thực hiện nếu xuất hiện một tín hiệu so sánh bằng A trong T/C1 (tức
là, khi bit OCF1A được thiết lập trong thanh ghi cờ ngắt T/C [TIFR])
• Bit 3 - OCIE1A : Bit cho phép ngắt so sánh bằng B của T/C1 (Timer/Counter1
Output CompareB Match Interrupt Enable) Khi bit OCIE1B được thiết lập và bit I trong thanh ghi trạng thái được thiết
lập, ngắt so sánh bằng B của T/C1 được cho phép Ngắt tương ứng tại địa chỉ
$007 được thực hiện nếu xuất hiện một tín hiệu so sánh bằnh B trong T/C1 (tức
là, khi bit OCF1B được thiết lập trong thanh ghi cờ ngắt T/C [TIFR])
• Bit 2 - TOIE1 : Bit cho phép ngắt tràn của T/C1 (Timer/Counter1 Overflow
Interrupt Enable)Khi bit TOIE1 được thiết lập và bit I trong thanh ghi trạng thái (SREG)
được thiết lập, ngắt tràn T/C1 được cho phép Ngắt tương ứng tại đại chỉ $008
được thực hiện nếu xuất hiện một tín hiệu tràn trong T/C1 (tức là, khi bit TOV1
được thiết lập trong thanh ghi cờ ngắt T/C [TIFR])
• Bit 1: Không sử dụng
• Bit 0 - TOIE0 : Bit cho phép ngắt tràn của T/C0 (Timer/Counter0 Overflow