Khi ấy việc điều khiển anten có thể trở nên đơn giản hơn là mua thiết bị phần cứng như của hãng YEASU chẳng hạn, một phần mềm đi kèm hoặc tải sẵn trên mạng cùng với một thiết bị định vị
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Văn Đang
XÂY DỰNG BỘ ĐO ĐẠC XÁC ĐỊNH GÓC TÀ VÀ
GÓC PHƯƠNG VỊ TRONG HỆ THỐNG ANTEN
ĐỊNH HƯỚNG
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Nghành: Điện tử - Viễn thông
HÀ NỘI – 2005
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Văn Đang
XÂY DỰNG BỘ ĐO ĐẠC XÁC ĐỊNH GÓC TÀ VÀ
GÓC PHƯƠNG VỊ TRONG HỆ THỐNG ANTEN
ĐỊNH HƯỚNG
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Nghành: Điện tử - Viễn thông
Cán bộ hướng dẫn: TS Ngô Diên Tập
HÀ NỘI – 2005
Trang 3Sinh viên Nguyễn Văn Đang
Trang 4một card giao tiếp sử dụng vi điều khiển AT89C51 nhằm xác định góc tà và góc
phương vị trong hệ thống anten định hướng Card được thiết kế với việc sử dụng
AT89C51 và ADC0809 trong việc thu tín hiệu từ hai ngõ vào tương tự phản hồi từ
anten Hai tín hiệu phản hồi từ anten là hai giá trị thế tương tự được dội lại từ hai biến
trở gắn với trục quay của hai motor xoay góc tà và góc phương vị Hai thế này có độ
lớn quan hệ chặt chẽ với giá trị góc tương ứng của anten
Mô hình card giao tiếp phải thiết kế trên cơ sở có thể mở rộng đề tài với việc điều khiển anten định hướng bám sát vệ tinh thu tín hiệu từ vệ tinh Tức là về mặt phần
cứng nó phải đảm bảo chức năng thu thập xử lý trung gian dữ liệu và xuất ra các tín
hiệu điều khiển anten quay bám sát vệ tinh
Trang 5MỤC LỤC CHƯƠNG 1 GIỚI THIỆU KHÁI QUÁT VỀ CƠ CẤU ĐIỀU KHIỂN CỦA ANTEN
ĐỊNH HƯỚNG 10
CHƯƠNG 2 BỘ VI ĐIỀU KHIỂN HỌ MCS-51 VÀ VI ĐIỀU KHIỂN AT89C51 12
2.1 Giới thiệu chung .12
2.2 Khảo sát vi điều khiển AT89C51 (8051) .13
2.3 Cấu trúc khối bên trong của AT89C51 13
2.3.1 Port 0 .15
2.3.2 Port 1 .15
2.3.3 Port 2 .15
2.3.4 Port 3 .15
2.3.5 Chân cho phép bộ nhớ chương trình PSEN .16
2.3.6 Chân cho phép chốt địa chỉ ALE 16
2.3.7 Chân truy xuất ngoài EA 16
2.3.8 Chân RESET (RST) .17
2.3.9 Chân XTAL1 và XTAL2 17
2.3.10 Các chân nguồn .17
2.3.11 Cấu trúc của port xuất/nhập 17
2.3.12 Tổ chức bộ nhớ 18
2.3.13 Truy xuất bộ nhớ chương trình ngoài: 26
2.3.14 Truy xuất bộ nhớ dữ liệu ngoài: 27
2.3.15 Lệnh reset: 28
2.3.16 Hoặt động định thời (timer): 29
2.3.17 Nguồn tạo xung nhịp .32
2.3.18 Hoạt động port nối tiếp 35
2.3.19 Hoạt động ngắt .39
2.3.20 Các ngắt của AT89C51 .41
2.4 Tập lệnh của AT89C51 42
2.4.1 Các chế độ đánh địa chỉ: trong tập lệnh có 8 chế độ đánh địa chỉ: 42
2.4.2 Các nhóm lệnh của AT89C51: 45
CHƯƠNG 3 CHUYỂN ĐỔI TƯƠNG TỰ SỐ 48
3.1 Giới thiệu 48
3.2 Nguyên tắc chuyển đổi tương tự sang số 48
3.3 Các phương pháp biến đổi tương tự sang số .49
3.3.1 ADC kiểu tức thời (kiểu flash) .49
3.3.2 ADC kiểu bậc thang (kiểu servo) .50
3.3.3 ADC bám sát (tracking) 50
3.3.4 ADC hoạt động theo phương pháp tích phân .51
3.3.5 ADC xấp xỉ liên tiếp ( successive approximation ADC) 52
3.4 Các đặc trưng kỹ thuật của ADC 53
CHƯƠNG 4 HỆ THỐNG ĐO LƯỜNG 54
4.1 Hệ thống đo lường .54
4.2 Hệ thống đo lường số .54
4.2.1 Sơ đồ khối của hệ thống đo lường số 55
4.2.2 Nguyên lý hoặt động .55
Trang 6CHƯƠNG 5 THIẾT KẾ MẠCH 56
5.1 Nhiệm vụ cần thiết kế 56
5.2 Sơ đồ tổng thể 56
5.3 Thiết kế bộ chuyển đổi ADC: 58
5.3.1 Giới thiệu ADC0809: 58
5.3.2 Mạch tạo xung dao động dùng các cổng NOT để tạo dao động cho ADC như sau: .61
5.4 Thiết kế mạch .63
5.4.1 Khối cấp nguồn 64
5.4.2 Khối tạo xung nhịp .64
5.4.3 Khối ghép nối với máy tính 66
5.4.4 Sử dụng các chân của ADC0809 66
5.4.5 Sử dụng các chân của vi điều khiển AT89C51 .68
5.5 Quá trình làm mạch – thi công .69
CHƯƠNG 6 VIẾT CHƯƠNG TRÌNH VÀ VẬN HÀNH 72
6.1 Giải thuật chương trình 72
6.1.1 Giới thiệu 72
6.1.2 Lưu đồ giải thuật cho chương trình .72
6.2 Chương trình chính 73
6.2.1 Chương trình chính viết cho AT89C51 .73
6.2.2 Giải thích chương trình 75
6.3 Chương trình viết để đọc dữ liệu trên máy tính Đọc từ cổng COM do vi điều khiển AT89C51 gửi đến .76
CHƯƠNG 7 KẾT QUẢ THÍ NGHIỆM, ĐÁNH GIÁ KẾT QUẢ VÀ KẾT LUẬN 77
7.1 Kết quả thí nghiệm và đánh giá kết quả .77
7.1.1 Kết quả sự phụ thuộc của giá trị ADC vào góc phương vị 77
7.1.2 Kết quả sự phụ thuộc của giá trị thế tương tự phản hồi từ anten vào góc tà .78
7.1.3 Nhận xét kết quả 78
7.2 Kết luận .79
Trang 7LỜI NÓI ĐẦU
Trong thời đại công nghiệp như hiện nay, các kỹ thuật điều khiển và hệ điều
khiển phát triển đến chóng mặt Việc ứng dụng các thành tựu khoa học công nghệ hiện
đại vào khắp các lĩnh vực xã hội đang được thực hiện trên những quy mô lớn chưa
từng thấy Các thiết bị mang tính chất “tự động” đang ngày càng phổ biến không chỉ
trong các dây truyền công nghiệp hiện đại mà còn xuất hiện rất phổ biến trong hầu hết
mọi lĩnh vực của đời sống xã hội Mà thường thì tiền đề của các phép điều khiển các
cơ cấu chấp hành là dựa trên những tín hiệu phản hồi từ cơ cấu chấp hành, tín hiệu này
được thu thập để từ đó xử lý dữ liệu và ra lệnh điều khiển cơ cấu chấp hành theo ý
muốn của ta Như vậy các kỹ thuật đo lường góp một vị trí trọng yếu trong các hệ
thống “tự động”
Trong các phép điều khiển các hệ thống từ đơn giản đến phức tạp đa số các kỹ
thuật đo lường đều có điểm chung nhất quán là chuyển đổi các đại lượng ít khi là điện
sang điện từ đó xử lý kết quả thu được và đưa ra các quyết định điều khiển phần tử
chấp hành trong các hệ thống điều khiển hoặc đơn giản hơn chỉ là hiển thị kết quả thu
được trong các hệ thống đo lường thuần túy
Trong các hệ thống Anten định hướng cũng vậy, các kỹ thuật điều khiển Anten
cũng rất phong phú Thuật toán nào cũng phải đủ hiệu quả thì mới có thể điều khiển
anten bám sát (tracking) vệ tinh (các vệ tinh trượt theo quỹ đạo) một cách chính xác,
đây là cơ sở để có được tín hiệu thu được rõ nét và tất nhiên dù là thuật toán điều khiển
thế nào đi nữa thì việc điều khiển chỉ có thể chính xác nếu như các giá trị phản hồi từ
anten (mang thông tin về hướng bám) phải thu đươc kịp thời và chính xác, các giá trị
đó là hai đại lượng góc tà (elevation) và góc phương vị (azimuth) Hai đại lượng góc
này được chuyển đổi thành tín hiệu điện tương ứng thông qua việc gắn với cơ cấu trục
quay của anten với một biến trở, khi anten quay thì biến trở quay và sẽ phản hồi về hệ
thống điều khiển một điện thế tương tự một chiều về bộ điều khiển Việc xác định hai
giá trị tương ứng mang thông tin về góc tà và góc phương vị này chính là nội dung của
đề tài
trước khá ổn định và các anten định hướng phải bám sát theo các quỹ đạo này để thu
tín hiệu phản hồi từ vệ tinh Các chương trình điều khiển anten thực tế đã được các nhà
Trang 8sản xuất phần cứng hay các nhà cung cấp dịch vụ thu ảnh vệ tinh viết sẵn đem bán
hoặc đi kèm phần cứng hoặc thậm trí đưa miễn phí trên Internet Khi ấy việc điều
khiển anten có thể trở nên đơn giản hơn là mua thiết bị phần cứng (như của hãng
YEASU chẳng hạn), một phần mềm đi kèm hoặc tải sẵn trên mạng cùng với một thiết
bị định vị toàn cầu GPS cầm tay dùng để xác định vị trí anten trên trái đất làm dữ liệu
đầu vào cho phần mềm xác định quỹ đạo cần bám vệ tinh cho anten và quá trình điều
khiển sẽ diễn ra một cách tự động
Thực ra trong đề tài này em không có tham vọng lớn gì ngoài việc tìm hiểu bộ
giao diện GS232 trong hệ thống điều khiển anten định hướng trọn gói của hãng
YEASU Trên cơ sở những hiểu biết của mình về bộ điều khiển này, cùng những kiến
thức tích lũy được trong những năm học đại học cộng với sự hướng dẫn của thầy giáo,
em thiết kế một bộ giao diện có chức năng tương tự, với mụch đích là nghiên cứu, tiếp
cận công nghệ
Mặc dù em đã rất cố gắng nhưng do thời gian làm khóa luận rất hạn chế và trình
độ hiểu biết của em còn thấp nên việc thực hiện đề tài sẽ còn gặp nhiều điều chưa hợp
lý, có thể còn sai sót Vậy em mong quý thầy cô cùng bạn bè thông cảm và chỉ dẫn em
nhiều hơn Em xin chân thành lắng nghe những góp ý từ mọi phía Cuối cùng một lần
nữa em xin chân thành cảm ơn thầy cô cùng bạn bè sinh viên đã giúp đỡ em rất nhiều
trong thời gian làm khóa luận
Giới hạn của đề tài:
Tìm hiểu mạch chức năng của bộ giao diện đo lường góc tà và góc phương vị
GS232 của hãng YEASU
Từ đó xác định nhiệm vụ yêu cầu cần giải quyết là thiết kế một bộ giao diện xác
định góc tà và góc phương vị Module này còn có thể đưa ra những quyết định điều
khiển xoay anten theo hai góc để bám sát vệ tinh
Viết chương trình phần mềm vận hành bộ giao diện và phần mềm thu thập dữ liệu
trong máy tính
Mục đích nghiên cứu:
Là để nghiên cứu học tập, thực hành thiết kế chế tạo một bo mạch điện tử trong
đo lường và điều khiển dựa trên ứng dụng các vi điều khiển Cũng là cơ sở để kiểm
chứng những kiến thức học được trên học đường và còn là dịp để em có thể khẳng
định khả năng của mình đối với thực tế
Trang 9Bản chất của đề tài là thực hiện việc tìm hiểu sử dụng vi điều khiển Để từ đó
ứng dụng thiết kế các hệ thống đo lường và điều khiển ở mức độ không thật sự phức
tạp Chứ không phải là một cái gì đó đòi hỏi trình độ cao, liên qua các hệ thống anten
định hướng và vệ tinh nhân tạo
Trang 10CHƯƠNG 1 GIỚI THIỆU KHÁI QUÁT VỀ CƠ CẤU ĐIỀU KHIỂN CỦA
ANTEN ĐỊNH HƯỚNG
Trong các hệ thống anten định hướng bám sát vệ tinh, cơ cấu điều khiển dựa trên việc đóng ngắt các rơle bằng các xung logic mức TTL làm đóng hoặc ngắt mạch
điện làm quay môtơ của bộ xoay góc tà hoặc bộ xoay góc phương vị theo chiều thuận
hoặc chiều nghịch Tổ hợp của hai vận tốc góc quay này tạo nên vận tốc và hướng bám
của anten đối với vệ tinh Khi môtơ quay thì đồng thời làm quay một biến trở và biến
trở dội lại một điện thế tương tự một chiều về bộ giao diện Giá trị điện thế tương tự
dội từ anten về bộ giao diện sẽ mang thông tin về góc
Hình vẽ sau mô tả phần nào cơ cấu của hệ thống anten định hướng và cơ cấu xác đinh góc và điều khiển nó:
Hình 1 Mô hình hệ điều khiển anten và anten thực tế Người ta thiết kế trên thực tế một cách hợp lý sao cho khi môtơ quay tương ứng làm anten quay quét toàn bộ dải góc (với góc tà có dải góc nằm trong khoảng 00 đến
1800, còn bộ quay góc phương vị thì có dải góc là từ 00 đến 3600), thì biến trở quay và
có điện thế dội lại tương ứng trong khoảng 0V đến 5V
Như vậy với bộ phận góc tà ta thấy: Khi anten quay từ 00 đến 1800 thì thế biến thiên trong khoảng 0V đến 5V Do đó nếu ta thu được thế tương tự có giá trị là U(v)
thì góc tà của anten khi ấy được xác định:
Trang 11Góc tà = xU
5
Tương tự như vậy với bộ phận góc phương vị thì: Khi anten quay từ 00 đến 3600
thì thế cũng biến thiên trong khoảng 0V đến 5V, nếu như ta thu được thế tương tự có
giá trị là U(v) thì góc phương vị được xác định là:
5
360
(độ)
Nhiệm vụ của em ở đây là cần phải xác định được các góc này bằng một board
mạch phần cứng giao tiếp với máy tính để hiển thị kết qủa
Như vậy một board mạch sẽ cần có một bộ chuyển đổi đại lượng điện áp từ
tương tự sang số để có thể xử lý được, tức là một chíp ADC cần đến
Một chíp ADC cần đến để chuyển đổi tương tự - số cho hai lối vào tương tự, và
phải cần đến một chíp vi điều khiển với nhiệm vụ điều khiển chíp ADC, xử lý, tổ chức
dữ liệu số thu được thế nào đấy để truyền thông với máy tính có thể thực hiện được
Nhưng quan trọng hơn cả là đưa ra các tín hiệu điều khiển đóng ngắt mạch làm quay
motor xoay anten
Như vậy trong mạch giao diện quan trọng nhất sẽ là vi điều khiển và bộ chuyển
đổi tương tự số (chip ADC) ngoài ra còn một số linh kiện quan trọng khác nữa, ta sẽ
lần lượt xét đến từng linh kiện một trong các chương tiếp theo
Trang 12CHƯƠNG 2 BỘ VI ĐIỀU KHIỂN HỌ MCS-51 VÀ VI ĐIỀU KHIỂN
AT89C51
Vi điều khiển là trái tim trung tâm của khối giao diện, vi điều khiển mà em sử
dụng trong khối giao diện là AT98C51 là một vi điều khiển thuộc họ MCS-51 của
Intel do hãng ATMEL sản xuất Sự lựa chọn vi điều khiển AT89C51 là vì trong mô
hình này một vi điều khiển thuộc họ 8051 là hợp lý, mặc dù đây không phải là một vi
điều khiển mạnh, nhưng nó rất phổ biến, đơn giản, giá thành hấp dẫn và quan trọng
hơn là nó hoàn toàn đủ khả năng thực hiện được mụch đích mà ta yêu cầu Có thể có
những vi điều khiển hợp lý hơn như PSOC, BASIC TEMP, AVR , nhưng có lẽ sẽ là
lãng phí không cần thiết
2.1 Giới thiệu chung
Vào năm 1971 tập đoàn Intel đã giới thiệu 8080, bộ vi xử lý thành công đầu
tiên Sau đó không lâu Motorola, Zilog và một số hãng khác cũng giới thiệu bộ vi xử
lý tương tự 6800, 1801, 6502 và Z80 Bản thân các vi mạch này tuy không có nhiều
tính hiệu quả sử dụng nhưng khi là một phần của một máy tính đơn board thì chúng trở
thành thành phần trung tâm trong các sản phẩm có ích dùng để nghiên cứu và thiết kế
Năm 1976 Intel giới thiệu bộ vi điều khiển đầu tiên 8748, vi mạch 8748 chứa
17000 transitor bao gồm một CPU, 1Kbyte ROM, 64 byte RAM, 27 chân xuất nhập và
một bộ định thời 8 bit, IC này và các tiếp theo của MCS-48 nhanh chóng trở thành
chuẩn công nghiệp trong các ứng dụng hướng điều khiển Đến năm 1980 Intel tăng
thêm một bước ngoặt nữa khi công bố chip 8051 bộ vi điều khiển đầu tiên của họ
MCS-51 với 4K byte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2
bộ định thời 16 bit
Ta có thể khái niệm vi điều khiển là mạch tích hợp trên một chip có thể lập
trình được, dùng để điều khiển hoặt động của một hệ thống Theo các tập lệnh của
người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo
thời gian và tiến hành đóng mở một cơ cấu nào đó Các vi điều khiển ngày càng được
sử dụng rộng rãi, nó có trong các thiết bị điện, điện tử dân dụng, các bộ vi điều khiển
điều khiển hoặt động của TV, Tủ lạnh, lò vi sóng, điều khiển từ xa Trong các hệ
thống tự động hóa trong các nhà máy xí nghiệp, công ty sản xuất công nghiệp Trong
các hệ thống thông minh mang tính chất tự động thì vai trò của vi điều khiển càng
quan trọng
Trang 132.2 Khảo sát vi điều khiển AT89C51 (8051)
Các thông số chính như sau:
4K byte EPROM có thể lập trình được, chịu được 1000 lần ghi/xóa
128 byte RAM
4 cổng vào ra 8 bit
Hai bộ định thời 16 bit
Một cổng giao tiếp nối tiếp
Có thể quản lý 64Kbyte không gian bộ nhớ mở rộng chương trình
Có thể quản lý 64Kbyte không gian bộ nhớ mở rộng dữ liệu
Một bộ xử lý logic (thao tác mức bit đơn)
210 bít được địa chỉ hóa
6 nguồn tạo ngắt
Có chế độ hoặt động tiết kiệm năng lượng
2.3 Cấu trúc khối bên trong của AT89C51
Thành phần chính của vi điều khiển AT89C51 là bộ xử lý trung tâm (CPU) bao
gồm:
Thanh ghi tích lũy ACC
Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia
Đơn vị logic toán học (ALU: Arithmetic Logical Unit)
Từ trạng thái chương trình (PSW : Prorgam Status Word)
Bốn băng thanh ghi
Con trỏ ngăn xếp
Ngoài ra còn bộ nhớ chương trình, bộ giải mã lệnh, bộ điều khiển thời gian và logic
có khả năng đưa một tín hiệu giữ nhịp từ bên ngoài Chương trình đang chạy có thể
cho dừng lại nhờ một khối điều khiển ngắt ở bên trong Các nguồn ngắt có thể là: các
biến cố ở bên ngoài, sự tràn bộ đếm định thời hoặc cũng có thể là giao diện nối tiếp
Hai bộ định thời 16 bít hoặt động như một bộ đếm
Hình trang bên nói lên sơ đồ khối của vi điều khiển AT89C51
Trang 14Hình 2 Sơ đồ khối của AT89C51
Các chân (trong kiểu đóng gói DIP – dual inline package chẳng hạn)
Hình 3 Các chân của AT89C51 trong kiểu đóng gói DIP
Ta thấy 32/40 chân của AT89C51 có công dụng xuất nhập, và 24/32 chân này kiêm 2 mụch đích (công dụng) Mỗi đường có thể hoặt động xuất nhập hoặc hoặt động
như các đường điều khiển hoặc đường địa/chỉ dữ liệu trong chế độ đa hợp
Trang 1532 chân nêu trên hình thành 4 port 8-bit Với các thiết kế yêu cầu một mức tối thiểu bộ nhớ ngoài hoặc các thành phần bên ngoài khác, ta có thể sử dụng các port này
làm nhiệm vụ xuất/nhập 8 đường cho mỗi port có thể được xử lý như một đơn vị giao
tiếp với các thiết bị song song như máy in, bộ biến đổi ADC hoặc hoặt động ở chế độ
đơn bít như chuyển mạch, LED, FET, động cơ, loa, v.v
Bảng 1 Các chân của port 3
Với port 1 có hai chân có chức năng riêng là:
P1.1 T2EX Nạp lại/ thu nhận của bộ định thời 2
Trang 162.3.5 Chân cho phép bộ nhớ chương trình PSEN
AT89C51 cung cấp cho ta 4 tín hiệu điều khiển bus Tín hiệu cho phép bộ nhớ
chương trình PSEN (program store enable) là tín hiệu xuất trên chân 29 Đây là tín
hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài Chân này thường nối
với chân cho phép OE (output enable) của EPROM (hoặc ROM) để cho phép đọc các
byte lệnh
Tín hiệu PSENở logic 0 trong suốt thời gian tìm nạp lệnh Các mã nhị phân của
chương trình hay opcode (mã thao tác) được đọc từ EPROM, qua bus dữ liệu và được
chốt vào thanh ghi lệnh IR để được giải mã
tích cực (logic 1)
2.3.6 Chân cho phép chốt địa chỉ ALE
AT89C51 dùng chân 30, chân xuất tín hiệu cho phép chốt địa chỉ ALE (address
latch enable) để giải đa hợp (demultiplexing) bus dữ liệu và bus địa chỉ Khi port 0
được sử dụng làm bus địa chỉ/dữ liệu đa hợp, chân ALE xuất tín hiệu để chốt địa chỉ
(byte thấp của địa chỉ 16-bit) vào 1 thanh ghi ngoài trong suốt ½ đầu chu kỳ của bộ
nhớ Khi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp lệ
trong suốt ½ còn lại của chu kỳ bộ nhớ
điều khiển và có thể được dùng làm xung clock cho phần còn lại của hệ thống Nếu
mạch dao động có tần số 12 MHz, tín hiệu ALE có tần số 2 MHz Ngoại lệ duy nhất là
trong thời gian thực thi lệnh MOVX, một xung ALE sẽ bị bỏ qua Chân ALE còn được
dùng để nhận xung ngõ vào lập trình cho EPROM trên chip đối với các phiên bản của
8051 có EPROM này
2.3.7 Chân truy xuất ngoài EA
Ngõ vào này (chân 31) có thể được nối với 5V (logic 1) hoặc với GND (logic
0) Nếu chân này nối lên 5V, AT89C51 thực thi chương trình trong ROM nội, còn nếu
được nối GND thì (và chân PSENcũng ở logic 0), chương trình cần thực thi chứa
trong bộ nhớ ngoài
Trang 172.3.8 Chân RESET (RST)
Ngõ vào này (chân 9) là ngõ vào xóa chính (master reset) của AT89C51 dùng
để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tắt là reset hệ thống Khi lối
vào này được treo ở logic 1 tối thiểu hai chu kỳ máy, các thanh ghi bên trong của
AT89C51 được nạp các giá trị thích hợp cho việc khởi động lại hệ thống
2.3.9 Chân XTAL1 và XTAL2
Mạch dao động bên trong AT89C51 được ghép với thạch anh bên ngoài ở hai chân XTAL1 và XTAL2 (chân 18 và chân 19) Các tụ ổn định cũng được yêu cầu như
trên hình này Tần số danh định của thạch anh là 12MHz cho hầu hết các chip họ
MCS-51
2.3.10 Các chân nguồn
(GND) được nối vào chân 20
2.3.11 Cấu trúc của port xuất/nhập
Sơ đồ mạch bên trong cho các chân của port xuất/nhập được vẽ đơn giản như sơ
đồ sau:
Hình 4 Cấu trúc của port xuất nhập
Việc ghi đến một chân của port sẽ nạp lại dữ liệu vào bộ chốt của port, ngõ ra Q của bộ chốt điều khiển một transistor trường và transistor này nối với chân của port
Khả năng fanout của các port 1, 2 và 3 là 4 tải vi mạch TTL loại Shottky công suất
thấp (low power – LS) còn của port 0 là 8 tải loại LS Lưu ý là điện trở kéo lên (pull
up) sẽ không có ở port 0 (trừ phi port này làm nhiệm vụ của bus địa chỉ/dữ liệu đa
hợp), do vậy một điện trở kéo lên bên ngoài phải được cần đến Giá trị điện trở này
phụ thuộc vào đặc tính ngõ vào của thành phần nối với chân của port
Trang 182.3.12 Tổ chức bộ nhớ
Hầu hết các vi xử lý (CPU) đều có không gian nhớ chung cho dữ liệu và
chương trình Điều này cũng hợp lý vì các chương trình thường được lưu trên đĩa và
được nạp vào RAM để thực thi, do đó cả dữ liệu và chương trình đều lưu trú trong
RAM
Các chíp vi điều khiển hiếm khi được sử dụng giống như các CPU trong các hệ
thống máy tính, thay vào đó chúng được dùng làm thành phần trung tâm trong các
thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và
hệ điều hành Chương trình điều khiển phải thường trú trong ROM Như vậy cả
chương trình và dữ liệu có thể được lưu trữ trong AT89C51, dù vậy chúng có thể được
mở rộng bằng các thành phần bên ngoài lên 64k bytes bộ nhớ chương trình và 64k
bytes bộ nhớ dữ liệu
Bộ nhớ bên trong bao gồm ROM và RAM trên chíp của AT89C51:
RAM trên chip bao gồm nhiều phần: Phần lưu trữ đa dụng, phần lưu trữ địa chỉ
hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt
Các thanh ghi và các port xuất nhập đã được xếp trong bộ nhớ và có thể được truy
xuất trực tiếp như các địa chỉ bộ nhớ khác
Trang 19Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các bộ vi xử
lý khác
Chi tiết về bộ nhớ RAM on-chip:
giữa các bank thanh ghi (00H-1FH), RAM địa chỉ hóa từng bit (20H-2FH), RAM đa
dụng (30H-7FH) và các thanh ghi chức năng đặc biệt (80H-FFH)
RAM đa dụng: Dưới đây là bảng địa chỉ RAM trên chip:
Bảng 2 Địa chỉ RAM
2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50
17
10
BANK 2 0F
07
Trang 20
Bảng 3 Địa chỉ RAM (tiếp)
Địa chỉ byte địa chỉ từng bit
FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B
E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW B8 - - - BC BB BA B9 B8 IP B0 B7 B6 B5 B4 B3 B2 B1 B0 P3 A8 AF - - AC AB AA A9 A8 IE A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
99 Not bit addressable SBUF
98 9F 9E 9D 9C 9B 9A 99 98 SCON
90 97 96 95 94 93 92 91 90 P1 8D Not bit addressable TH1 8C Not bit addressable TH0 8B Not bit addressable TL1 8A Not bit addressable TL0
89 Not bit addressable TMOD
88 8F 8E 8D 8C 8B 8A 89 88 TCON
87 Not bit addressable PCON
83 Not bit addressable DPH
82 Not bit addressable DPL
81 Not bit addressable SP
80 87 86 85 84 83 82 81 80 PO Bảng tóm tắt bộ nhớ dữ liệu trên chip
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy suất tự do bằng
dùng cách đánh địa chỉ trực tiếp hoặc gián tiếp Ví dụ, để đọc nội dung ở địa chỉ 5FH
của RAM nội vào thanh ghi tích lũy lệnh sau sẽ được dùng:
Lệnh này di chuyển một byte dữ liệu dùng cách đánh địa chỉ trực tiếp để xác
định “địa chỉ nguồn” (5FH) Đích nhận dữ liệu được ngầm xác định là thanh ghi tích
lũy A
RAM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ gián tiếp
qua R0 hay R1 Ví dụ, sau khi thi hành cùng nhiệm vụ như lệnh đơn ở trên:
Trang 21Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 và
lệnh thứ hai dùng địa chỉ trực tiếp để di chuyển dữ liệu được trỏ bởi R0 vào thanh ghi
tích lũy
RAM địa chỉ hóa từng bit:
AT89C51 chứa 210 bit được địa chỉ hóa, trong đó 128 bít là ở các địa chỉ byte
20H đến 2FH, và phần còn lại trong các thanh ghi chức năng đặc biệt
của vi điều khiển nói chung Các bit có thể được đặt, xóa, AND, OR với một lệnh
đơn Đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc – sửa – ghi để đạt được hiệu qủa
tương tự Hơn nữa, các port I/O cũng được địa chỉ từng bit làm đơn giản phần mềm
xuất nhập từng bit
Có 128 bit được địa chỉ hóa đa dụng ở các byte 20H đến 2FH Các địa chỉ này
được truy xuất như các byte hoặc các bit phụ thuộc vào lệnh được dùng Ví dụ, để đặt
bít 67H, ta dùng lệnh sau:
SETB 67H Chú ý rằng “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “địa chỉ byte
2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này
Các băng thanh ghi
32 byte thấp nhất của bộ nhớ nội là dành cho các bank thanh ghi Bộ lệnh của
AT89C51 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định (sau khi reset lại hệ thống)
các thanh ghi này ở các địa chỉ 00H-07H Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05H
vào thanh ghi tích lũy
Đây là lệnh một byte dùng địa chỉ thanh ghi Tất nhiên, thao tác tương tự có thể
được thi hành bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:
Các lệnh dùng các thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn các lệnh
tương ứng nhưng dùng địa chỉ trực tiếp Các giá trị dữ liệu được dùng thường xuyên
nên dùng một trong các thanh ghi này
Trang 22Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chọn bank
thanh ghi trong từ trạng thái chương trình (PSW) Giả sử rằng bank thanh ghi 3 được
tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H:
Ý tưởng dùng “các bank thanh ghi” cho phép “chuyển hướng” chương trình
nhanh và hiệu quả (từng phần riêng rẽ của phần mềm sẽ có một bộ thanh ghi riêng
không phụ thuộc vào các phần khác)
Các thanh ghi chức năng đặc biệt:
Các thanh ghi nội của AT89C51 được truy xuất ngầm định bởi bộ lệnh Ví dụ
lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1 Tác động này được
ngầm định trong mã lệnh
Các thanh ghi trong AT89C51 được định dạng như một phần của RAM trên
chip Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi trực tiếp, sẽ không có
lợi khi đặt chúng vào trong RAM trên chip) Đó là lý do để AT89C51 có nhiều thanh
ghi Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR – special funtion
register) ở vùng trên của RAM nội, từ địa chỉ 80H – FFH Chú ý rằng hầu hết 128 địa
chỉ từ 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SFR được truy xuất
dùng địa chỉ trực tiếp Chú ý rằng một vài SFR có thể địa chỉ hóa bit hoặc byte Người
thiết kế phải thận trọng khi truy xuất bit và byte Ví dụ lệnh sau:
Sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không thay đổi Ta thấy rằng
E0H đồng thời là địa chỉ byte của thanh ghi tích lũy và là địa chỉ bit có trọng số nhỏ
nhất trong thanh ghi tích lũy Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ bit
là có hiệu quả
Từ trạng thái chương trình:
Từ trạng thái chương trình (PSW – program status word ) ở địa chỉ 0DH chứa
các bít trạng thái như trong bảng tóm tắt sau:
Trang 23Bảng 4 Từ trạng thái chương trình
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3
PSW.2 PSW.1 PSW.0
CY
AC F0 RS1 RS0
OV
P
D7H D6H D5H D4H D3H
D2H D1H D0H
Cờ nhớ
Cờ nhớ phụ
Cờ 0 Bit chọn bank thanh ghi Bit chọn bank thanh ghi
00=bank 0; địa chỉ 00H-07H 01=bank 1: địa chỉ 08H-0FH 10=bank 2: địa chỉ 10H-17H 11=bank 3: địa chỉ 18H-1FH
Cờ tràn
Dự trữ
Cờ Parity
Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh toán
học: nó sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn
phép trừ Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh sau:
ADD A, #1
Sẽ trả về thanh ghi tích lũy kết quả 00H và set cờ nhớ trong PSW Cờ nhớ cũng có thể
xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành trên bit Ví dụ, lệnh sẽ AND
bit 25H với cờ nhớ và đặt kết quả trở vào cờ nhớ:
ANL C,25H
Cờ nhớ phụ: khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit
thấp trong khoảng 0AH đến 0FH Nếu các giá trị cộng được là số BCD, thì sau
lệnh cộng cần có DA A (hiệu chỉnh thập phân thanh ghi tích lũy) để mang kết quả
lớn hơn 9 trở về tâm từ 0 đến 9
Cờ 0: cờ 0 (F0) là một bit cờ đa dụng dành cho các ứng dụng của người dùng
Các bít chọn bank thanh ghi: Các bit chọn băng thanh ghi (RS0 và RS1) xác định
bank thanh ghi được tích cực Chúng được xóa sau khi reset lại hệ thống và được
thay đổi bằng phần mềm nếu cần Ví dụ, ba lệnh sau đây cho phép bank thanh ghi 3
và di chuyển nội dung của thanh ghi R7 (địa chỉ là 1FH) đến thanh ghi tích lũy:
Cờ tràn: (OV) được set một lệnh cộng hoặc trừ nếu có một phép toán bị tràn Khi
các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit này để
xác định xem kết quả của nó có nằm trong tầm xác định không Khi các số không
Trang 24dấu được cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn +127 hoặc nhỏ
hơn -128 sẽ set bit OV
Thanh ghi B:
phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong A và
B rồi trả kết quả 16 bit trong A (byte thấp) và B (byte cao) Lệnh DIV AB sẽ chia A
cho B rồi trả về kết quả nguyên trong A và phần dư trong B Thanh ghi B cũng có thể
được xem như thanh ghi đệm đa dụng Nó được địa chỉ hóa từng bit bằng các địa chỉ
bit từ F0H đến F7H
Con trỏ ngăn xếp:
Con trỏ ngăn xếp (SP – stack pointer) là một thanh ghi 8 bit ở địa 81H Nó chứa
địa chỉ của byte dữ liệu hiện hành trên đỉnh của ngăn xếp Các lệnh trên ngăn xếp bao
gồm các thao tác cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn xếp Lệnh cất dữ
liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu, và lệnh lấy dữ liệu ra khỏi ngăn
xếp sẽ đọc dữ liệu và giảm SP Ngăn xếp của AT89C51 được giữ trong RAM nội và
được giới hạn các địa chỉ có thể truy xuất bằng địa chỉ gián tiếp Chúng là 128 byte
đầu của AT89C51
Để khởi động lại SP với ngăn xếp bắt đầu tại 60H, các lệnh sau đây được dùng:
Vùng stack được giới hạn là 32 bytes vì địa chỉ cao nhất của RAM trên chip là
7EH Giá trị 5FH được dùng ở đây vì SP tăng lên 60H trước khi thao tác cất vào stack
đầu tiên được thực thi
Người thiết kế có thể chọn không phải khởi động lại con trỏ ngăn xếp mà để nó
lấy gia trị mặc định khi reset hệ thống Giá trị mặc định đó là 07H và kết quả là ngăn
xếp đầu tiên để cất dữ liệu có địa chỉ 08H Nếu phần mềm ứng dụng không khởi động
lại SP, bank thanh ghi 1 (có thể cả 2 và 3) sẽ không dùng được vì vùng RAM này đã
được dùng làm ngăn xếp
thời và lấy lại dữ liệu hoặc được truy xuất ngầm bằng các lệnh gọi chương trình con
(ACALL, LCALL) và các lệnh trở về (RET, RETI) để cất và lấy lại bộ đếm chương
trình
Con trỏ dữ liệu:
Trang 25Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi
16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao) Ba lệnh sau sẽ ghi 55H
vào RAM ngoài ở địa chỉ 1000H:
MOVX @DPTR,A
Lệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích lũy,
lệnh thứ hai cũng dùng địa chỉ tức thời lần này để tải dữ liệu 16 bit 1000H vào con trỏ
dữ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệu trong A (55H) đến
RAM ngoài ở địa chỉ được chứa trong DPTR (1000H)
Các thanh ghi port xuất nhập: Các thanh ghi port của AT89C51 bao gồm port 0 ở
địa chỉ 80H, port 1 ở địa chỉ 90H, port 2 ở địa chỉ A0H và port 3 ở địa chỉ B0H Tất cả
các port đều được địa chỉ hóa từng bit Điều này cung cấp một khả năng giao tiếp
thuận lợi
Các thanh ghi định thời:
AT89C51 chứa hai bộ định thời đếm 16 bit được dùng trong việc định thời hoặc
đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (TH0: byte cao) Timer
1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao) Việc vận hành timer được
set bởi thanh ghi timer mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển timer
(TCON) ở địa chỉ 88H Chỉ có TCON được địa chỉ hóa từng bit
Các thanh ghi điều khiển cổng nối tiếp: AT89C51 chứa một port nối tiếp trên chip
dành cho việc trao đổi thông tin với thiết bị nối tiếp như máy tính, modem hoặc cho
việc giao tiếp với các IC khác có giao tiếp nối tiếp (có bộ chuyển đổi A/D, các thanh
ghi dịch ) Một thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ
cả hai dữ liệu truyền và nhận Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì
đọc SBUF Các mode vận hành khác nhau được lập trình qua thanh ghi điều khiển port
nối tiếp (SCON) được địa chỉ hóa từng bit và ở địa chỉ byte là 98H
Các thanh ghi ngắt: AT89C51 có cấu trúc ngắt 5 nguồn ngắt, 2 mức ưu tiên Các ngắt
bị cấm sau khi reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép
ngắt(IE) ở địa chỉ 8AH Cả hai thanh ghi được địa chỉ hóa từng bit
Các thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất PCON ở địa chỉ 87H chứa nhiều bit điều khiển
Chúng được tóm tắt trong bảng sau:
Trang 26Bảng 5 Thanh ghi điều khiển công suất
PD IDL
-Bít tăng gấp đôi tốc độ baud, bit này khi set làm cho tốc độ baud tăng 2 ở chế độ 1, 2 và 3 của port nối tiếp
-Không định nghĩa -Không định nghĩa -Không định nghĩa -Bit cờ đa mụch đích 1 -Bit cờ đa mụch đích 2 -Nguồn giảm; thiết lập để tích cực chế độ nguồn giảm, chỉ ra khỏi chế độ bằng cách reset
-Chế độ nghỉ; thiết lập để tích cực chế độ nghỉ
Chỉ ra khỏi chế độ bằng cách reset hệ thống
Bộ nhớ ngoài:
AT89C51 có khả năng mở rộng bộ nhớ đến 64K bộ nhớ chương trình và 64K
bộ nhớ dữ liệu bên ngoài Do đó có thể dùng thêm ROM và RAM nếu cần
Khi dùng bộ nhớ ngoài, port 0 không còn là một port I/O thuần túy nữa Nó
được đa hợp kênh giữa bus địa chỉ ( A0-A7 ) và bus dữ liệu ( D0-D7 ) với tín hiệu
ALE để chốt byte thấp của địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ Port 2 thông thường
được dùng cho byte cao của địa chỉ
Trong nửa đầu của mỗi chu kỳ bộ nhớ, byte thấp của địa chỉ được cấp trong
port 0 và được chốt bằng xung ALE Một IC chốt 74HC373 ( hoặc tương đương ) sẽ
giữ byte địa chỉ thấp trong phần còn lại của chu kỳ bộ nhớ Trong nửa sau của chu kỳ
bộ nhớ port 0 được dùng như bus dữ liệu và được đọc hoặc ghi tùy theo lệnh
2.3.13 Truy xuất bộ nhớ chương trình ngoài:
Bộ nhớ chương trình ngoài là một IC ROM được phép bởi tín hiệu PSEN Hình
sau mô tả một cách nối một EPROM vào AT89C51:
D0-D7 EPROM A0-A7 A8-A15
OE
D 74HC373 Q
Trang 27Hình 6 Giao tiếp giữa AT89C51 và EPROM
Một chu kỳ đọc máy AT89C51 có 12 chu kỳ xung nhịp Nếu bộ dao động trên
chip được lái bởi một thạch anh 12 MHz thì chu kỳ máy kéo dài 1µs Trong một chu
kỳ máy sẽ có 2 xung ALE và 2 byte được đọc từ bộ nhớ chương trình (nếu lệnh hiện
hành là một byte thì byte thứ hai sẽ được loại bỏ)
Giản đồ thời gian của một chu kỳ lấy lệnh được cho bởi hình sau:
Hình 7 Giản đồ thời gian đọc bộ nhớ chương trình ngoài
2.3.14 Truy xuất bộ nhớ dữ liệu ngoài:
Hình 8 Giao tiếp giữa AT89C51 và RAM
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi/đọc bằng các tín
hiệu WR và RD (các chân P3.6 và P3.7 thay đổi chức năng) Chỉ có một cách truy xuất
D 74HC373 Q
G
D0-D7 EPROM A0-A7
A8-A15
OE WE
Trang 28bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16 bit hoặc R0
và R1 xem như thanh ghi địa chỉ
Kết nối bus địa chỉ và bus dữ liệu giữa RAM và AT89C51 cũng giống EPROM
và do đó cũng có thể lên đến 64 byte bộ nhớ RAM Ngoài ra, chân RD của AT89C51
được nối tới chân cho phép xuất (OE) của RAM và chân WR được nối tới chân ghi
AT89C51 được reset bằng cách giữ chân RST ở mức cao ít nhất trong 2 chu kỳ
máy và nó trả về mức thấp RST có thể được kích khi cấp điện dùng một mạch RC
Hình 10 Mạch reset hệ thống
Trang 29Trạng thái của tất cả các thanh ghi của AT89C51 sau khi reset hệ thống được
tóm tắt trong bảng sau:
Bảng 6 Trạng thái các thanh ghi sau khi reset
Đếm chương trình Tích lũy
B PSW
SP DPTR Port 0-3
IP
IE Các thanh ghi định thời SCON
SBUF PCON(HMOS) PCON(CMOS)
0000H 00H 00H 00H 07H 0000H FFH XXX00000B 0XX00000B 00H 00H 00H 0XXXXXXB 0XXX0000B
Quan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình, nó được
đặt lại 0000H Khi RST trở lại mức thấp, việc thi hành chương trình luôn bắt đầu ở địa
chỉ đầu tiên trong bộ nhớ trong chương trình: địa chỉ 0000H Nội dung của RAM trên
chip không bị thay đổi bởi lệnh reset
2.3.16 Hoặt động định thời (timer):
Giới thiệu
Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần số nối
tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp Ngõ ra của tần số cuối
làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ) Giá trị nhị phân
trong các flip-flop của các timer Ví dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH
Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H
AT89C51 có hai bộ timer 16 bit, mỗi bộ có bốn cách làm việc Người ta sử
dụng các timer để: a) định khoảng thời gian giữa hai sự kiện b) đếm sự kiện hoặc c)
tạo tốc độ baud cho port nối tiếp trong AT89C51
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở một
khoảng đều đặn và đặt cờ tràn timer Cờ được dùng để đồng bộ hóa chương trình để
thực hiện một tác động như kiểm tra trạng thái của các cửa ngõ vào hoặc gửi các sự
kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của
timer 1 để đo thời gian trôi qua giữa hai sự kiện (ví dụ: đo độ rộng xung)
Trang 30Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện Một “sự kiện” là
bất cứ tác động nào ngoài có thể cung cấp một chuyển trạng thái trên một chân của
AT89C51 Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp
trong AT89C51
Truy xuất timer của AT89C51 dùng 6 thanh ghi chức năng đặc biệt cho trong
bảng sau:
Bảng 7 Thanh ghi chức năng đặc biệt dùng timer
TCON TMOD TL0 TL1 TH0 TH1
Điều khiển timer Chế độ timer Byte thấp của timer 0 Byte thấp của timer 1 Byte cao của timer 0 Byte cao của timer 1
88H 89H 8AH 8BH 8CH 8DH
Có Không Không Không Không Không
Thanh ghi chế độ timer (TMOD):
cho timer 0 và timer 1
Bảng 8 Tóm tắt thanh ghi TMOD
M1 M0
GATE C/T M1 M0
0=bộ định khoảng thời gian Bit 1 chọn chế độ (mode) Bit 0 chọn chế độ 00: chế độ 0: timer 13 bit 01: chế độ 1: timer 16 bit 10: chế độ 2: tự động nạp lại 8255A bit 11: chế độ 3: tách timer
Bit (mở) cổng Bit chọn counter/timer Bit 1 cuả chế độ Bit 0 cuả chế độ
Thanh ghi điều khiển timer (TCON):Thanh ghi TCON chứa các bit trạng thái và các
bit điều khiển cho timer 0 và timer 1
Bảng 9 Tóm tắt thanh ghi TCON
TCON.7
TCON.6
TF1 TR1
8FH 8EH
Cờ báo tràn timer 1 Đặt bởi phần cứng khi tràn, được xóa bởi phần mềm hoặc phần cứng khi bộ xử lý chỉ đến chương trình phục vụ ngắt
Bít điều khiển timer 1 chạy Đặt/xóa bằng phần mềm cho timer chạy/ngưng
Trang 31IE0 IT0
8DH 8CH 8BH 8AH
B9H 88H
Cờ ngắt bên ngoài 0 (kích khởi cạnh)
Cờ ngắt bên ngoài 0 (kích khởi cạnh hoặc mức)
Các chế độ timer:
a) chế độ 0, chế độ timer 13 bit
Để tương thích với 8048 (có trước 8051)
Ba bit cao của TLX (TL0 và/hoặc TL1) không dùng
Hoặt động như timer 16 bit đầy đủ
Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phần mềm MSB của
giá trị trong các thanh ghi timer là bit 7 của THx và LBS là bit 0 của TLx Các thanh
ghi timer (TLx/THx) có thể được đọc hoặc ghi bất cứ lúc nào bằng phần mềm
Xung nhịp
TLx THx (5 bit) (8 bit)
TFx
c) Chế độ 2 – chế độ tự động nạp lại 8 bit
TLx hoạt động như một timer 8 bit, trong khi đó THx vẫn giữ nguyên giá trị được
nạp Khi số đếm tràn từ FFH đến 00H, không những cờ timer được set mà giá trị trong
THx đồng thời được nạp vào TLx Việc đếm tiếp tục từ già trị nàylên đến FFH xuống
00H và nạp lại , chế độ này rất thông dụng vf sụ tràn timer xảy ra trong những
khoảng thời gian nhất định và tuần hoàn một khi đã khởi động TMOD và THx
Trang 32Timer 1 ngưng ở chế độ 3, nhưng có thể được khởi động bằng cách chuyển
sang chế độ khác Giới hạn duy nhất là cờ báo trang TF1 không còn bị tác động khi
timer 1 bị tràn vì nó đã được nối tới TH0
Khi timer 0 ở chế độ 3, có thể cho timer 1 chạy và ngưng bằng cách chuyển nó
ra ngoài và vào chế độ 3 Nó vẫn có thể được sử dụng bởi port nối tiếp như bộ tạo tốc
độ baud hoặc nó có thể được sử dụng bằng bất cứ cách nào không cần ngắt (vì nó
không còn được nối với TF1)
2.3.17 Nguồn tạo xung nhịp
(counter/timer) trong TMOD khi khởi động timer Một nguồn tạo xung nhịp dùng cho
định khoảng thời gian, cái khác cho đếm sự kiện
Trang 33Crytal
Timer Clock T0 or T1
0=Up (Internal Timing)
Định khoảng thời gian (interval timing)
Nếu C/T = 0 hoạt động timer liên tục được chọn và timer được dùng cho việc định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip Bộ
chia 12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho phần lớn các
ứng dụng Như vậy thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz Báo tràn
timer xảy ra sau một số cố định xung nhịp, phụ thuộc vào giá trị ban đầu được nạp vào
các thanh ghi timer TLx/THx
Đếm sự kiện (event counting)
Nếu C/T = 1, timer lấy xung nhịp từ nguồn bên ngoài Trong hầu hết các ứng
dụng nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một “sự kiện”,
timer dùng đếm sự kiện được xác định bằng phần mềm bằng cách đọc các thanh ghi
TLx/THx vì giá trị 16 bit trong các thanh ghi nayg tăng thêm 1 cho mỗi sự kiện
Bắt đầu dừng và điều khiển các timer
Phương pháp mới đơn giản nhất để bắt đầu (cho chạy) và dừng các timer là
dùng các bit điều khiển chạy: TRx trong TCON, TRx bị xóa sau khi reset lại hệ thống
như vậy, các timer theo mặc nhiên là bị cấm (bị dừng) TRx được đặt lên 1 bằng phần
mềm để cho các timer chạy
Trang 34Cho chạy và dừng timer
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển
các timer trong chương trình Ví dụ: cho timer 0 chạy bằng lệnh: SETB TR0 và dừng
bằng lệnh CLR TR0
Trình biên dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0” sang
địa chỉ bit đúng SETB TR0 chính xác giống như SETB 8CH
Khởi động và truy xuất các thanh ghi timer:
chế độ làm việc cho đúng Sau đó trong thân chương trình các timer được cho chạy,
dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật theo
đòi hỏi của các ứng dụng
TMOD là thanh ghi thứ nhát được khởi động vì nó đặt chế độ hoạt động Ví dụ
các lệnh sau khi khởi động timer 1 như timer 16bit (chế độ 1) có xung nhịp từ bộ dao
động trên chip cho việc định khoảng thời gian
Lệnh này sẽ đặt M1 = 0 và M0 = 1 cho chế độ 1, C/T và GATE = 0 cho xung
nhịp nội và xóa các bit chế độ timer 0 Dĩ nhiên timer thật sự không bắt đầu định thời
cho đến khi bit điều khiển chạy TR1 được đặt lên 1
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi
động Nhớ lại là các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp
FFFFH sang 0000H
Đọc timer dang chạy
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đang chạy vì
phải đọc 2 thanh ghi timer “sai pha” có thẻ xảy ra nếu byte thấp tràn vào byte cao giữa
hai lần đọc Giá trị có thể đọc được không đúng Giải pháp là đọc byte cao trước, byte
Trang 35sau, rồi lại byte cao một lần nữa Nếu byte cao đã thay đổi thì lập lại các hoạt động
đọc
Dãy các khoảng thời gian có thể định thời là bao nhiêu? vấn đề này được khảo
sát với AT89C51 hoạt động với tần số 12 MHz Như vậy xung nhịp của các timer có
tần số là 1 MHz
Khoảng thời gian ngắn nhất có thể có bị giới hạn không chỉ bởi tần số xung
nhịp của timer mà còn bởi phần mềm Do ảnh hưởng cảu thời khoảng thực hiện một
lệnh Lệnh ngắn nhất của AT89C51 là một chu kỳ máy hay 1 µs Sau đây là bảng tóm
tắt các kỹ thuật để tạo những khoảng thời gian có chiều dàu khác nhau (với giả sử
xung nhịp cho AT89C51 có tần số 12MHz)
Bảng 10 Kỹ thuật lập trình khoảng thời gian
Khoảng thời gian tối đa Kỹ thuật
≈ 10
256
65535 Không giới hạn
bằng phần mềm timer 8 bit với tự động nạp lại timer 16 bit
timer 16 bit cộng với các vòng lặp phần mềm
Các kỹ thuật để lập trình các khoảng thời gian (Fosc =12 MHz)
2.3.18 Hoạt động port nối tiếp
Giới thiệu
AT89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều hcế độ khác
trên một dãy tần số rộng Chức năng chủ yếu của một port nối tiếp là thực hiện chuyển
đổi song song sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp sang song song với
dữ liệu nhập
chân này có chức năng khác với hai bit của port 3 P3 ở chân 11 (TxD) và chân P3.0 ở
chân 10 (RxD)
Port nối tiếp cho hoạt động song công (full duplex: tức là thu và phát đồng thời)
và đệm lúc thu (receiver buffering) cho phép một ký tự sẽ được thu và được giữ trong
khi ký tự thứ hai được nhận Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được
the đầy đủ thì dữ liệu sẽ không bị mất
Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port nối
tiếp là : SBUF và SCON Bộ đếm port nối tiếp ( SBUF) ở tại địa chỉ 99H thật sự là hai
bộ đếm có thể hoạt động độc lập Viết vào SBUF để truy xuất dữ liệu thu được Đây là
hai thanh ghi riêng biệt thanh ghi chỉ ghi để phát và thanh ghi để thu
Trang 36SUBF (chỉ ghi) Thanh ghi dịch
SBUF (chỉ đọc)
BUS nội AT89C51 Hình 12 Sơ đồ port nối tiếp Thanh ghi điều khiển port nối tiếp ( SCON) ở địa chỉ 98H là thanh ghi có địa
chỉ bit chứa các bit trạng thái và các bit điều khiển Các bit điều khiển đặt chế độ hoạt
động cho port nối tiếp, và các bit trạng thái báo cáo kết thúc việc phát hoặc thu ký tự
Các bit trạng thái cóthể được kiểm tra bằng phần mềm hoặc có thể được lập trình để
tạo ngắt
Tần số làm việc của port nối tiếp còn gọi là tốc độ baud có thể cố định (lấy từ
bộ dao động của chip) Nếu sử dụng tốc độ baud thay đổi, timer 1 sẽ cung cấp xung
nhịp tốc độ baud và phải được lập trình
Thanh ghi hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi chế
độ port nối tiếp (SCON) ở địa chỉ 98 H Sau đây sác bảng tóm tắt thanh ghi SCON và
các chế độ của por nối tiếp:
Bảng 11 Tóm tắt thanh ghi điều khiển chế độ nối tiếp SCON
REN TB8 RB8
9FH 9EH 9DH
9CH 9BH 9AH
-Bit 0 của chế độ port nối tiếp -Bit 1 của chế độ port nối tiếp -Bit 1 của chế độ 2 port nối tiếp cho phép truyền thông đa xử lý trong các chế độ 2 và 3; RI sẽ không bị tác động nếu bit thứ 9 thu được là 0
-Cho phép bộ thư phải đặt lên 1 để thu ( nhận ) ký tự
-Bit 8 phát, bit thứ 9 được phát các chế độ 2
và 3; được đặt và xóa bằng phần mềm -Bit 8 thu, bit thứ 9 thu được
Trang 37-Cờ ngắt phát Đặt lên 1 khi kết thúc thu ký tự; được xóa băng phần mềm
-Cờ ngắt thu Đặt lên 1 khi kết thúc thu ký tự; được xóa bằng phần mềm
Bảng 12 Các chế độ port nối tiếp
Cố định (fosc/12) Thay đổi (đặt bằng timer)
Cố định(fosc/12 hoặc fosc/64) Thay đổi ( đặt bằng timer)
Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ Ví dụ,
Bit cho phép bộ thu (REN = Receiver Enable) trong SCON phải được đặt lên 1
bằng phần mềm để cho phép thu các ký tự Thông thường thực hiện việc này ở đầu
chương trình khi khởi động cổng nối tiếp, timer Có thể thực hiện việc này theo hai
Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3 phải được nạp vào trong TB8
bằng phần mềm Bit dữ liệu thứ 9 thu được đặt ở RB8 Phần mềm có thể cần hoặc
không cần bit dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật của thiết bị nối tiếp sử
dụng bit dữ liệu thứ 9 cũng đóng vai trò quan trọng trong truuyền thông đa xử lý
Thêm 1 bit parity:
Trang 38Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự Như đã xét ở các
chương trước, bit P trong từ trạng thái chương trình (PSW) được đặt lên 1 hoặc bị xóa
bởi chu ký máy để thiết lập kiểm tra chẵn với 8 bit trong thanh ghi tích lũy
Các cờ ngắt:
truyền thông nối tiếp dùng AT89C51 Cả hai bit được đặt lên 1 bằng phần cứng, nhưng
phải được xóa bằng phần mềm
Tốc độ baud port nối tiếp
Như đã nói, tốc độ baud cố định ở các chế độ 0 và 2 Trong chế độ 0 nó luôn
luôn là tần số dao động trên chip được chia cho 12 Thông thường thạch anh ấn định
tần số dao động trên chip của AT89C51 nhưng cũng có thể sử dụng nguồn xung nhịp
khác Giả sử với tần số dao động danh định là 12 MHz, tìm tốc độ baud chế độ 0 là
Hình 13 Các nguồn tạo xung nhịp cho port nối tiếp
Mặc nhiên, sau khi reset hệ thống, tốc độ baud chế độ 2 là tần số dao động chia
cho 64 Tốc độ baud cũng ảnh hưởng bởi 1 bit trong thanh ghi điều khiển nguồn cung
Trang 39cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bit SMOD lên một làm gấp đôi tốc độ
baud trong chế độ 1, 2 và 3 Trong chế độ 2, tốc độ baud có thể tăng gấp đôi từ giá trị
mặc nhiên của 1/64 tần số dao động (SMOD) đến 1/32 tấn số dao động (SMOD = 1)
Vì PCON không được định địa chỉ theo bit, nên để đặt bit SMOD lên 1 cần phải thao theo các lệnh sau:
MOV A, PCON ;lấy giá trị hiện thời của PCON
timer 1 Vì timer hoạt động ở tần số tương đối cao, tràn timer được chia thêm cho 32
(hay 16 nếu SMOD =1) trước khi cung cấp xung nhịp tốc độ baud cho port nối tiếp
2.3.19 Hoạt động ngắt
Ngắt là hoạt động ngừng tạm thời một chương trình này để thi hành một chương trình khác Các ngắt có một vai trò quan trọng trong thiết kế và khả năng thực
thi của vi điều khiển Chúng cho phép hệ thống đáp ứng không cùng lúc tới một công
việc và giải quyết một công việc nào đó trong khi một chương trình khác đang thực
thi
Một hệ thống được điều khiển bằng ngắt cho ảo giác là làm nhiều việc đồng thời Dĩ nhiên CPU mỗi lần không thể thực thi một chương trình để thực thi một
chương trình khác, rồi quay trở lại chương trình khi công việc khác đó thực hiện xong
Khi có yêu cầu ngắt, chương trình giải quyết yêu cầu ngắt được gọi là chương trình
phục vụ ngắt (ISR: Interrupt Service Reutine)
Tổ chức ngắt
AT89C51 có 5 nguồn ngắt:
2 ngắt ngoài
2 ngắt từ timer
1 ngắt port nối tiếp
Mỗi nguồn ngắt được cho phép hoặc không cho phép từng ngắt một qua thanh fhi chức năng đặc biệt cố định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa chỉ
A8H Cũng như các bit cho phép mỗi nguồn ngắt, có một bit cho phép hoặc cấm toàn
bộ được xóa để cấm tất cả các ngắt hoặc được đặt lên 1 để cho phép tất cả các ngắt
Bảng 13 Tóm tắt thanh ghi IE
Trang 40Bit Ký hiệu Địa chỉ bit Mô tả (1=cho phép, 0=cấm) IE.7
IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0
EA
EA ET5 E5 ET1 EX1 ET0 EX0
AFH AEH ADH ACH ABH AAH A9H A8H
Cho phép hoặc cấm toàn bộ Không được định nghĩa Cho phép ngắt từ timer 2 (8052) Cho phép ngắt Port nối tiếp Cho phép ngắt từ timer 1 Cho phép ngắt ngoài 1 Cho phép ngắt từ timer 0 Cho phép ngắt ngoài 0
PT2
PS PT1 PX1 PT0 PX0
BDH BCH BBH BAH B9H B8H
Không được định nghĩa Không được định nghĩa
Ưu tiên cho ngắt từ timer 2 (8052)
Ưu tiên cho ngắt port nối tiếp
Ưu tiên cho ngắt từ timer 1
Ưu tiên cho ngắt từ ngoài 1
Ưu tiên cho ngắt từ timer 0
Ưu tiên cho ngắt từ ngắt ngoài 0
Xử lý ngắt:
Khi có một ngắt xảy ra và được CPU chấp nhận, chương trình chính bị ngắt quãng Những hoạt động sau xảy ra:
Thi hành hoàn chỉnh lệnh đang hiện hành
Cất bộ đếm chương trình (PC) vào ngăn xếp
Trạng thái ngắt hiện hành được lưu lại
Các ngắt được chặn lại mức của ngắt
Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR
ISR được thực thi
ISR được thực thi để đáp ứng công việc của ngắt ISR hoàn tất bằng việc thực hiện lệnh RETI Điều này làm lấy lại giá trị cũ của PC từ ngăn xếp và lấy lại trạng thái
ngay trước khi ngắt của chương trinh mẹ chương trình mẹ lại tiếp tục được thi hành
tiếp tại vị trí mà nó dừng
Các vector ngắt: