- Hai bộ định thời 16bit Timer 0 và Timer1- Mạch giao tiếp nối tiếp - Bộ xử lý bit thao tác trên các bit riêng rẽ - Hệ thống điều khiển và xử lý ngắt - Các kênh điều khiển/ dữ liệu/ địa
Trang 1NhËn xÐt cña gi¸o viªn híng dÉn
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Hng Yªn, ngµy… th¸ng… n¨m 2008
Gi¸o viªn híng dÉn
NhËn xÐt cña gi¸o viªn Ph¶n biÖn
Trang 2………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Hng Yªn, ngµy… th¸ng… n¨m 2008 Gi¸o viªn ph¶n biÖn Môc lôc Lêi nãi ®Çu 4
Trang 3CHƯƠNG I tổng quan về bộ vi điều khiển AT89C51 5
1.1 Giới thiệu bộ vi điều khiển 89C51 5
1.2 Khảo sát bộ vi điều khiển AT89C51 5
1.2.1 Sơ đồ khối 7
1.2.2 Sơ đồ và ý nghĩa các chân 9
1.2.3 Tổ chức bộ nhớ 11
1.2.4 Các thanh ghi chức năng đặc biệt 16
1.2.5 Bộ nhớ ngoài 20
1.2.6 Lệnh reset 23
1.2.7 Hoạt động của bộ định thời (timer) 24
1.2.8 Hoạt động port nối tiếp 32
1.2.9 Hoạt động ngắt 37
1.2.10 Tập lệnh của 8951 41
CHƯƠNG II GIAO Tiếp máy tính 49
2.1 Giới thiệu các phơng pháp giao tiếp máy tính 49
2.1.1 Giao tiếp bằng Slot- Card 49
2.1.2 Giao tiếp bằng cổng song song 50
2.1.3 Giao tiếp bằng cổng nối tiếp 52
2.2 Các thông số kỹ thuật của RS232 53
2.2.1 Đặc tính điện học 53
2.2.2 Đặc tính cơ học 56
2.2.3 Chế độ làm việc 58
2.3 Giao tiếp máy tính với vi điều khiển 60
Chơng III điều khiển động cơ DC theo nhiệt độ 62
3.1 Khái quát về phơng pháp điều khiển động cơ theo nhiệt độ 62
3.1.1 Hệ thống đo lờng 62
3.1.2 Sơ đồ khối 62
3.1.3 Đo nhiệt độ 63
3.1.4 Chuyển đổi tơng tự- số 64
3.1.5 Sơ lợc về động cơ điện một chiều 65
3.2 Sơ lợc về các linh kiện sử dụng trong đề tài 67
3.2.1 Cảm biến nhiệt 67
3.2.2 ADC 0809 68
3.2.3 MAX 232 72
3.2.4 Động cơ DC 73
3.3 Thiết kế mạch 74
3.3.1 Mạch điều khiển 74
3.3.2 Mạch động lực 75
Trang 4CHƯƠNG IV Lập trình điều khiển 77
4.1 Giới thiệu ngôn ngữ lập trình Visual Basic 77
4.1.1 Đặt vấn đề 77
4.1.2 Đối tợng, thuộc tính và sự kiện 77
4.1.3 Truyền thông nối tiếp dùng ActiveX 78
4.2 Viết chơng trình 84
4.2.1 Chơng trình Lập trình VB giao tiếp giữa máy tính và vi điều khiển 84
4.2.2 Lu đồ thuật giải 87
4.2.3 Chơng trình vi điều khiển 90
Kết luận 100
Tài liệu tham khảo 102
Lời nói đầu Ngành công nghiệp điện tử là một trong những ngành công nghiệp phát triển hàng đầu trên thế giới Sự ra đời của hàng loạt các bộ vi xử lý, vi điều khiển với tính năng ngày càng đa dạng và tinh vi hơn đã chứng tỏ điều này Xu hớng phát triển của công nghiệp điện tử là mở rộng chức năng sản phẩm và nâng cao khả năng ứng dụng thực tế Chính vì vậy mà vi điều khiển hiện nay đợc sử dụng nhiều trong các thiết bị
điện tử và điện dân dụng nh TV, máy giặt, đầu đọc laser, điện thọai, lò vi-ba … , trong hệ thống sản xuất tự động nh Robot, dây chuyền tự động Các hệ thống càng
“thông minh” thì vai trò của hệ vi điều khiển càng quan trọng
Sự phát triển của khoa học kỹ thuật không thể thiếu đợc vai trò của thông tin liên lạc Nó góp phần quan trọng trong việc trao đổi thông tin giữa con ngời- con
ng-ời, con ngời – máy móc, máy móc- máy móc… Đặc biệt là trong thời đại máy tính
đợc sử dụng phổ biến nh hiện nay thì chúng ta đánh giá cao vai trò của máy tính trong việc điều khiển, giám sát các hệ thống sản xuất Hệ thống càng phức tạp thì vai trò nó càng quan trọng
Những lý do trên đã thúc đẩy chúng em thực hiện đề tài tốt nghiệp ứng dụng vi
điều khiển AT89C51 và khả năng giao tiếp của máy tính:
Trang 5“Điều khiển động cơ điện một chiều theo nhiệt độ có giao tiếp máy tính“
Sau một thời gian tìm hiểu, nghiên cứu tài liệu cùng với sự hớng dẫn tận tìnhcủa thầy Nguyễn Duy Bình, nhóm chúng em đã hoàn thành đề tài trên Do kiếnthức và kinh nghiệm còn hạn chế, đề tài của chúng em không tránh khỏi những thiếusót rất mong nhận đợc sự đóng góp của thầy cô cùng các bạn để hoàn thiện hơn
Chúng em xin chân thành cảm ơn!
Hng Yên, tháng 08 năm 2008
Nhóm SVTH
Lê Văn ThịnhNguyễn Thị Thùy Dung
CHƯƠNG I tổng quan về bộ vi điều khiển AT89C51
1.1 Giới thiệu bộ vi điều khiển 89C51
Bộ vi điều khiển viết tắt là Micro-controller, 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ệnhcủa ngời lập trình, bộ vi điều khiển tiến hành đọc, lu 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 đó
MCS-51 là họ IC vi điều khiển do hãng Intel sản xuất Các IC tiêu biểu cho họMSC51 là: 8051, 8031, 89C51, 892051… Việc xử lý trên Byte và các toán số học ởcấu trúc dữ liệu đợc thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên Ramnội Tập lệnh cung cấp một bảng tiện dụng của những lệnh số học 8 bit gồm cả lệnhcộng, trừ, nhân và lệnh chia
89C51 là một vi điều khiển 8 bit, chế tạo theo công nghệ CMOS chất lợng cao,với 4KB EEPROM (Flash Programmable and erasable read only memory) Thiết bịnày đợc chế tạo bằng cách sử dụng bộ nhớ không bốc hơi mật độ cao của ATMEL
và tơng thích với chuẩn công nghiệp MCS-51 về tập lệnh và các chân ra ATMELAT89C51 là một vi điều khiển mạnh mà nó cung cấp một sự linh động cao và giảipháp về giá cả đối với nhiều ứng dụng vi điều khiển
1.2 Khảo sát bộ vi điều khiển AT89C51
Bộ vi điều khiển AT8C951 thuộc hãng Atmel hoạt động ở tần số 12MHz, với
bộ nhớ ROM 4 Kbyte, bộ nhớ RAM 128 byte c trú bên trong và có thể mở rộng bộnhớ ra ngoài Ngoài ra, nó còn có:
Trang 6- Hai bộ định thời 16bit (Timer 0 và Timer1)
- Mạch giao tiếp nối tiếp
- Bộ xử lý bit (thao tác trên các bit riêng rẽ)
- Hệ thống điều khiển và xử lý ngắt
- Các kênh điều khiển/ dữ liệu/ địa chỉ
- Các thanh ghi chức năng đặc biệt
Bảng mô tả sự khác nhau giữa các họ vi điều khiển thuộc hãng Atmel:
EEPROM
3
Trang 71.2.1 Sơ đồ khối
Hình 1.1 : Sơ đồ khối AT89C51
Phần chính của vi điều khiển 8951 là bộ xử lý trung tâm (CPU: centralprocessing unit ) bao gồm:
- Thanh ghi tích lũy A
- Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic 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
Trang 8Hai bộ định thời 16 bit hoạt động nh một bộ đếm.
Các cổng (port0, port1, port2, port3 ) sử dụng vào mục đích điều khiển Cổng 3
có thêm các đờng dẫn điều khiển dùng để trao đổi với một bộ nhớ bên ngoài, hoặc
để đầu nối giao diện nối tiếp, cũng nh các đờng ngắt dẫn bên ngoài
ở giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ,làm việc độc lập với nhau Tốc độ truyền qua cổng nối tiếp có thể đặt trong vảyrộng và đợc ấn định bằng một bộ định thời
Trong vi điều khiển 8951 có hai thành phần quan trọng khác đó là bộ nhớ vàcác thanh ghi :
Bộ nhớ gồm có bộ nhớ Ram và bộ nhớ Rom dùng để lu trữ dữ liệu và mã lệnh.Các thanh ghi sử dụng để lu trữ thông tin trong quá trình xử lí Khi CPU làmviệc nó làm thay đổi nội dung cuả các thanh ghi
Trang 91.2.2 Sơ đồ và ý nghĩa các chân
Hình 1.2 : Sơ Đồ Chân 8951
ý nghĩa các chân nh sau:
Port0:
Port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡ nhỏ
( không dùng bộ nhớ mở rộng ) có hai chức năng nh các đờng IO Đối với các thiết
kế cỡ lớn ( với bộ nhớ mở rộng ) nó đợc kết hợp kênh giữa các bus
Port1:
Port1 là một port I/O trên các chân 1-8 Các chân đợc ký hiệu P1.0, P1.1, P1.2 … cóthể dùng cho các thiết bị ngoài nếu cần Port1 không có chức năng khác, vì vậychúng ta chỉ đợc dùng trong giao tiếp với các thiết bị ngoài
Port2:
Port2 là một port công dụng kép trên các chân 21 – 28 đợc dùng nh các đờng xuấtnhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng
Trang 10Port3 là một port công dụng kép trên các chân 10 – 17 Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của
8951 nh ở bảng sau:
P3.0 RXD Dữ liệu nhận cho port nối tiếpP3.1 TXD Dữ liệu truyền cho port nối tiếpP3.2 INT0 Ngắt ngoài 0
P3.3 INT1 Ngắt ngoài 1P3.4 T0 Chân vào của bộ Timer/ Counter 0P3.5 T1 Chân vào của bộ Timer/ Counter 1P3.6 WR Ghi dữ liệu vào bộ nhớ ngoàiP3.7 RD Đọc dữ liệu từ bộ nhớ ngoài
Bảng 1.1 : Chức năng của các chân trên port3
PSEN (Program Store Enable ):
PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều khiển để cho phép bộ nhớchơng trình mở rộng và thờng đợc nối đến chân OE (Output Enable) của mộtEPROM để cho phép đọc các bytes mã lệnh
PSEN sẽ ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chơng trình
đợc đọc từ EPROM qua bus và đợc chốt vào thanh ghi lệnh của 8951 để giải mãlệnh Khi thi hành chơng trình trong ROM nội (8951) PSEN sẽ ở mức thụ động(mức cao)
ALE (Address Latch Enable ):
Tín hiệu ra ALE trên chân 30 tơng hợp với các thiết bị làm việc với các xử lí
8585, 8088, 8086, 8951 dùng ALE một cách tơng tự cho làm việc giải các kênh cácbus địa chỉ và dữ liệu khi port 0 đợc dùng trong chế độ chuyển đổi của nó: vừa làbus dữ liệu vừa là byte thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào mộtthanh ghi bên ngoài trong nửa đầu của chu kỳ bộ nhớ Sau đó, các đờng port 0 dùng
để xuất hoặc nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và cóthể đợc dùng là nguồn xung nhịp cho các hệ thống Nếu xung trên 8951 là 12MHzthì ALE có tần số 2MHz Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ
bị mất Chân này cũng đợc làm ngõ vào cho xung lập trình cho EPROM trong 8951
Trang 11EA/Vpp (External Access):
Tín hiệu vào EA trên chân 31 thờng đợc mắc lên mức cao (+5V) hoặc mứcthấp (GND) Nếu ở mức cao, 8951 thi hành chơng trình từ ROM nội trong khoảng
địa chỉ thấp (4K) Nếu ở mức thấp, chơng trình chỉ đợc thi hành từ bộ nhớ mở rộng.Khi dùng 8031, EA luôn đợc nối mức thấp vì không có bộ nhớ chơng trình trên chip.Nếu EA đợc nối mức thấp bộ nhớ bên trong chơng trình 8951 sẽ bị cấm và chơngtrình thi hành từ EPROM mở rộng Khi chân này đợc cấp nguồn điện áp 12 V(Vpp)thì 8951 đảm nhận chức năng nạp chơng trình cho Flash bên trong nó
RST (Reset)
Ngõ vào RST trên chân 9 là ngõ reset của 8951 Khi tín hiệu này đợc đa lênmức cao (trong ít nhất 2 chu kỳ máy ), các thanh ghi trong 8951 đợc tải những giátrị thích hợp để khởi động hệ thống
XTAL1 & XTAL2
8951 có một bộ dao động trên chip Nó thờng đợc nối với thạch anh giữa haichân 18 và 19 Chân 18 là ngõ ra mạch khuếch đại dao động, chân 19 là ngõ vàomạch khuếch đại dao động.Tần số thạch anh thông thờng là 12MHz
Bộ nhớ bên trong bao gồm ROM (8951) và RAM trên chip, RAM trên chipbao gồm nhiều phần : phần lu trữ đa dụng, phần lu trữ địa chỉ hóa từng bit, các bankthanh ghi và các thanh ghi chức năng đặc biệt
FFFF FFFF
trìnhFF
Và RD
Trang 12a Chi tiết về bộ nhớ RAM trên chip
Nh ta đã thấy trên hình sau, RAM bên 8951 đợc phân chia giữa các bank thanhghi (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)
Bộ nhớ dữ liệu trên chip đợc tóm tắt nh sau:
Trang 13128 Byte thÊp cña RAM trong
§Þa chØ byte §Þa chØ bit
Trang 14Các thanh ghi chức năng đặc biệt (SFR)Mọi địa chỉ trong vùng RAM đa dụng đều có thể đợc truy xuất tự do dùngcách đánh địa chỉ trực tiếp hoặc gián tiếp Ví dụ, để đọc nội dung ở địa chỉ 5FH củaRAM nội vào thanh ghi tích lũy lệnh sau sẽ đợc dùng :
MOV A, 5FH
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 trong mã lệ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
RO hay R1 Ví dụ, sau khi thi hành cùng nhiệm vụ nh lệnh đơn ở trên:
MOV R0, #5FH
MOV A, @R0
Trang 15Lệnh đầu dùng định đị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 trực tiếp để di chuyển dữ liệu “đợc trỏ bởi R0” vào thanhghi tích lũy
b RAM địa chỉ hóa từng bit :
8951 chứa 210 bit đợc địa chỉ hóa, trong đó 128 bit 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
ý tởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính tiện lợi 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 chi xử lí đòi hỏi một chuỗi lệnh đọc – sửa – ghi để đạt đợc hiệu quả tơng
tự Hơn nữa, các port I/0 cũng đợc địa chỉ từng bit làm đơn giản phần mềm xuấtnhậ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 bit67H, 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ỉ byte2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này
c Các bank 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
8951 hỗ trợ 8 thanh ghi (RO đến R7) và theo mặc định (sau khi Reset hệ thống) cácthanh ghi này ở các địa chỉ 00H-07H Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05Hvào thanh ghi tích lũy:
MOV A,R5
Đâ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:
MOV A,05H
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ệnhtơng ứng nhng dùng địa chỉ trực tiếp Các giá trị dữ liệu đợc dùng thờng xuyên nêndùng một trong các thanh ghi này
Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chọn bankthanh ghi trong từ trạng thái chơng trình (PSW) Giả sử rằng bank thanh ghi 3 đợctích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H:
MOV R0,A
Trang 16và hiệu qủa (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).
1.2.4 Các thanh ghi chức năng đặc biệt
Các thanh ghi nội của 8951 đợ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 8951 đợ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 để 8951 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 Rgister) ở vùng trên của RAM nội, từ địa chỉ 80H đến 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 là đợc định nghĩa
Ngoại trừ tích lũy (A) có thể đợc truy xuất ngầm nh đã nói, đa số các SFR
đ-ợc truy xuất dùng địa chỉ trực tiếp chú ý rằng một vài SFR có thể đđ-ợc địa chỉ hóa bithoặ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:
SETB 0E0H
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à
PSW.4 RS1 D4H Bit 1 chọn bank thanh ghi
PSW.3 RS0 D3H Bit chọn bank thanh ghi
00=bank 0; địa chỉ 00H-07H01=bank 1: địa chỉ 08H-0FH10=bank 2:địa chỉ 10H-17H11=bank 3:địa chỉ 18H-1FH
Trang 17ADD A,#1
Sẽ trả về thanh ghi tích lũy kết qủa 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ànhtrên bit Ví dụ, lệnh sẽ AND bit 25H với cờ nhớ và đặt kết qủa trở vào cờ nhớ:
Cờ 0 (F0) là một bit cờ đa dụng dành các ứng dụng của ngời dùng
• Các bit chọn bank thanh ghi
Các bit chọn bank thanh ghi (RSO và RS1) xác định bank thanh ghi đợc tíchcực Chúng đợc xóa sau khi reset hệ thống và đợc thay đổi bằng phần mềm nếu cần
Ví dụ, ba lệnh sau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh ghiR7 (địa chỉ byte IFH) đến thanh ghi tích lũy:
SETB RS1
SETB RSO
MOV A,R7
Khi chơng trình đợc hợp dịch các địa chỉ bit đúng đợc thay thế cho các ký hiệu
“RS1” và “RS0” Vậy lệnh SETB RS1 sẽ giống nh lệnh SETB 0D4H
• Cờ Tràn
Trang 18cá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 qủa của nó có nằm trong tầm xác định không Khi các số không dấu
đ-ợc cộng, bit OV có thể đđ-ợc bỏ qua Các kết qủa lớn hơn +127 hoặc nhỏ hơn –128
sẽ set bit OV
b Thanh ghi B:
Thanh ghi B ở địa chỉ F0H đợc dùng cùng với thanh ghi tích lũy A cho các phéptoá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à Brồi trả về kết qủa 16 bit trong A (byte thấp) và B (byte cao) Lệnh DIV AB sẽ chia Acho B rồi trả về kết qủa 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ỉ bitFOH đến F7H
c Con trỏ ngăn xếp:
Con trỏ ngăn xếp (SP) là một thanh ghi 8 bit ở địa chỉ 81H Nó chứa địa chỉ củabyte 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ácthao 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ệuvà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ănxếp sẽ dọc dữ liệu và làm giảm SP Ngăn xếp của 8951 đợ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 8951
Để 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:
MOV SP,#%FHTrên 8951 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM trên chip
là 7FH Sở dĩ cùng giá trị 5FH vì SP sẽ tăng lên 60H trớc khi cất byte dữ lệu đầu tiên
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 giá trị mặc định khi reset hệ thống Giá trị măc định đó là 07H và kết qủa là ngăn đầ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
Ngăn xếp đợc truy xuất trực tiếp bằng các lệnh PUSH và POP để lu giữ tạm 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, LACALL) và các lệnh trở về (RET,RETI) để cất và lấy lại bộ đếm chơng trình
d Con trỏ dữ liệu:
Trang 19Con trỏ dữ liệu (DPTR) đợc dùng để truy xuất bộ nhớ ngoài là một thanh ghi 16bit ở địa chỉ 82H(DPL: byte thấp) và 83H (DPH:byte cao) Ba lệnh sau sẽ ghi 55Hvào RAM ngoài ở địa chỉ 1000H:
đến RAM ngoài ở địa chỉ đợc chứa trong DPTR (1000H)
e Các thanh ghi port xuất nhập:
Các port của 8951 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ 90 H, 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 đó cung cấp một khả năng giao tiếp thuận lợi
f Các thanh ghi timer:
8951 chứa 2 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 ở địachỉ 8BH (TL1:byte thấp) và 8DH (TH1: byte cao) việc vận hành timer đợc set bởithanh 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
g Các thanh ghi port nối tiếp:
8951 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với cácthiế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ó giaotiế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 ssẽ giữ cả hai giữ 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ậnhành khác nhau đợc lập trình qua thanh ghi điều khiển port nối tiếp (SCON) (đợc địachỉ hóa từng bit) ở địa chỉ 98H
h Các thanh ghi ngắt:
8951 có cấu trúc 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
i 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ềukhiển Chúng đợc tóm tắt trong bảng sau:
Trang 20Bit Ký hiệu ý nghĩa
7 SMOD Bit gấp đôi tốc độ baud, nếu đợc set thì tốc độ baud sẽ tăng
gấp đôi trong các mode 1,2 và 3 của port nối tiếp
3 GF1 Bit cờ đa dụng 1
2 GF0 Bit cờ đa dụng 0
1 PD Bit giảm công suất, đợc set để kích hoạt mode giảm công
suất, chỉ thoát khi reset
0 IDL Bit chọn chế độ nghỉ, set để kích hoạt mode Idle, chỉ thoát
khi có ngắt hoặc reset hệ thống
Bảng 1.3: Thanh ghi điều khiển công suất (PCON)
1.2.5 Bộ nhớ ngoài
8951 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ó đợchợ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ốtbyte thấp của địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ Port 2 thông thờng đợc dùngcho byte cao của bus đị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
a/ Truy xuất bộ nhớ chơng trình ngoài:
Bộ nhớ chơng trình ngoài là mộ IC ROM đợc phép bởi tín hiệu PSEN Hình saumô tả cách nối một EPROM vào 8951:
Trang 21Hình 1.4: Giao tiếp giữa 8951 và EPROM
Một chu kỳ máy của 8951có 12 chu kỳ xung nhịp Nếu bộ dao động trên chip
đ-ợc lái bởi một thạch anh 12MHz 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 lần lấy lệnh đợc
vẽ ở hình sau:
Hình 1.5: Giản đồ thời gian đọc bộ nhớ chơng trình ngoài.
b/ Truy xuất bộ nhớ dữ liệu ngoài:
Trang 22Hình 1.6: Giao tiếp giữa 8851 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ínhiệ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 truyxuất bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16 bithoặ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à 8951 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 8951 đợc nốitới chân cho phép xuất (OE) của RAM và chân WR đợc nối tới chân ghi (WR) củaRAM
Giản đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài đợc vẽ trên hình sau đối vớilệnh MOVX A, @DPTR:
Trang 23Hình 1.7: Giản đồ thời gian của lệnh MOVX
Giản đồ thời gian cho lệnh ghi (MOVX @DPTR, A) cũng tơng tự chỉ khác đờng
WR sẽ thay vào đờng RD và dữ liệu đợc xuất ra trên port 0 (RD vẫn giữ mức cao)
Trang 24Đếm chơng trìnhTích lũy
BPSWSPDPTRPort 0-3IPIECác thanh ghi định thờiSCON
SBUFPCON(HMOS)PCON(CMOS)
0000H00H00H00H07H0000HFFHXXX00000B0XX00000B00H
00H00H0XXXXXXB0XXX0000B
Bảng 1.4: Trạng thái các thanh ghi sau khi reset
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 RAMtrên chip không bị thay đổi bởi lệnh reset
1.2.7 Hoạt động của bộ định thời (timer)
a/ 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ốitiế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ốilàm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ) Giá trị nhị phântrong các flip-flop của timer có thể xem nh số đếm số xung nhịp (hoặc các sự kiện)
từ khi khởi động timer Ví dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH Cờ báotràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H
Trang 258951 có 2 timer 16 bit, mỗi timer có bốn cách làm việc Ngời ta sử dụng các timer để :
- Định khoảng thời gian
- Đếm sự kiện hoặc
- Tạo tốc độ baud cho port nối tiếp trong 8951
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ệnmộ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ácngõ 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 để
đo thời gian trôi qua giữa hai sự kiện (ví dụ : đo độ rộng xung)
Đế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 ngoài nào có thể cung cấp một chuyển trạng thái trên một chân của
8951 Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp trong8951
Truy xuất timer của 8951 dùng 6 thanh ghi chức năng đặc biệt cho trong bảngsau:
Trang 26CóKhông Không Không Không Không
Bảng 1.5: Thanh ghi chức năng đặc biệt dùng timer.
b/ Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0 và timer 1
Bảng 1.6: Tóm tắt thanh ghi TMOD
c/ 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
Trang 27Bit Ký
hiệu
Địachỉ
Mô tả
TCON.7 TF1 8FH Cờ báo tràn Timer 1 Đợc đặt bởi phần cứng khi bộ
Timer1 tràn, đợc xóa bởi phần cứng khi bộ xử lý chỉ đến chơng trình con phục vụ ngắt
TCON.6 TR1 8EH Bit điều khiển Timer 1hoạt động Đợc đặt/xóa bằng phần
mềm cho timer chạy/ngng
TCON.5 TF0 8DH Cờ báo tràn timer 0
TCON.4 TR0 8CH Bit điều khiển timer 0 hoạt động
TCON.3 IE1 8BH Cờ ngắt ngoài 1 Đợc đặt bởi phần cứng khi sờn xung
của ngắt ngoài 1 đợc phát hiện Đợc xóa bởi phần cứng khi ngắt đợc xử lý
TCON.2 IT1 8AH Bit điều khiển ngắt 1 để tạo ra ngắt ngoài Đợc đặt/ xóa
bởi phần mềm
TCON.1 IE0 89H Cờ cạnh ngoài 0
TCON.0 IT0 88H Bit điều khiển ngắt 0 để tạo ra ngắt ngoài
Bảng1.7: Bảng tóm tắt thanh ghi TCON
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 Timer
TLx THx
(5 bit) (8 bit) TFx
TLx THx (8 bit) (8 bit)
TFx
Trang 28Cờ báo tràn
• 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ày lên đến FFH xuống 00H và nạp lại chế độ này rất thông dụng vì 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
Xung nhịp Timer
Xung nhịp Timer
Cờ báo tràn
TLx(8 bit)
TFx
THx(8 bit)
TL1 TH1
Trang 29I/12 Fosc
Cờ báo tràn
e/ Nguồn tạo xung nhịp
Có hai nguồn tạo xung nhịp có thể có, đợc chọn bằng cách ghi vào bit C/T (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
• Đị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 địnhkhoả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 ứngdụng Nh vậy thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz Xóa tràntimer xảy ra sau một số (cố địng) xung nhịp, phụ thuộc vào giá trị ban đầu đợc nạpvà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 ứngdụ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”,
Trang 30TLx/THx vì giá trị 16 bit trong các thanh ghi này tăng thêm 1 cho mỗi sự kiện.Nguồn xung nhịp ngoài có từ thay đổi chức năng của các chân port 3 Bit 4 củaport 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên trong timer 0 và đợc gọi là “T0”.
Và p3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1
f/ 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ùngcác bit điều khiển chạy: TRx trong TCON, TRx bị xóa sau khi reset hệ thống Nhvậ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ầnmềm để cho các timer chạy
Timer
0=lên : timer dừng1=xuống : timer chạy
Cho 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ểncá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 SETB 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
g/ Khởi động và truy xuất các thanh ghi timer
Thông thờng các thanh ghi đợc khởi động một lần ở đầu chơng trình để đặt 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 đòihỏ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 16 bit (chế độ 1) có xung nhịp từ bộ dao
động trên chíp cho việc địng khoảng thời gian
TRx
Trang 31MOV TMOD, #00010000B
Lệnh này sẽ đặt M1=0 và M0=1 cho chế độ 1, C/T=0 và GATE=0 cho xungnhịp nội và xóa các bit chế độ timer 0 Dĩ nhiên timer thật sự không bắt đầu địnhthờ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 đang 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 caogiữa hai lần đọc Giá trị có thể đọc đợc không đúng Giải pháp là đọc byte cao trớc,
kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa Nếu byte cao đã thay đổi thìlập lại các hoạt động đọc
h/ Các khoảng ngắn và các khoảng dài
Dãy các khoảng thời gian có thể định thời là bao nhiêu? Vấn đề này đợc khảosát với 8951 hoạt động với tần số 12MHz 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ủatimer mà còn bởi phần mềm Do ảnh hởng của thời khoảng thực hiện một lệnh Lệnhngắn nhất 8951 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ài khác nhau (với giả sử xung nhịp cho 8951
có tần số 12 MHz)
Trang 32Khoảng thời gian tối đa Kỹ thuật
≈1025665536Không giới hạn
Bằng phần mềmTimer 8 bit với tự động nạp lạiTimer 16 bit
Timer 16 bit cộng với các vòng lặp phần mềm
Bảng 1.8: Các kỹ thuật để lập trình các khoảng thời gian (FOSC=12 MHz)
1.2.8 Hoạt động port nối tiếp
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD Các chân này
có các chức năng khác với hai bit của port 3 P3 ở chân 11 (TXD) và P3.0 ở chân 10(RXD)
Port nối tiếp cho hoạt động song công (full duplex : 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 thu
đầ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) ở đại chỉ 99H thật sử là hai bộ
đếm Viết vào SBUF để truy xuất dữ liệu thu đợc Đây là hai thanh ghi riêng biệtthanh ghi chỉ ghi để phát và thanh ghi để thu
Trang 33Hình 1.9: 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 độ baund có thể cố định (lấy từ
bộ giao động của chip) Nếu sử dụng tốc độ baud thay đổi, timer 1 sẽ cung cấp xungnhịp tốc độ baud và phải đợc lập trình
b/ Thanh ghi điều khiển port nối tiếp SCON
Chế độ 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ỉ 98H Sau đây các bảng tóm tắt thanh ghi SCON vàcác chế độ của port nối tiếp:
SCON.7 SM0 9FH Bit cho phép chọn chế độ cho cổng truyền
Trang 34SCON.6 SM1 9EH Bit cho phép chọn chế độ cho cổng truyền
nói tiếpSCON.5 SM2 9DH Bit cho phép truyền tin đa xử lý, thể hiện
ở các chế độ 2 và 3 ;RI sẽ không bị tác
động nếu bit thứ 9 thu đợc là 0 (SM2=1)SCON.4 REN 9CH Cho phép nhận nối tiếp Đợc đặt/ xóa bởi
phần mềmSCON.3 TB8 9BH Bit dữ liệu thứ 9 sẽ đợc truyền ở mode 2
và 3 Đợc đặt/ xóa bởi phần mềmSCON.2 RB8 9AH Bit dữ liệu thứ 9 đã đợc nhận ở mode 2 và
3 ở mode 1, nếu SM2= 0 thì RB8 là bitdừng đã đợc nhận
SCON.1 TI 99H Cờ ngắt truyền Đặt lên 1 bằng phần cứng
khi kết thúc truyền ký tự, đợc xóa bởiphần mềm
Trang 35SM0 SM1 Chế độ Đặc điểm Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (Fosc/12)
1 0 2 UART 9 bit Cố định (Fosc/12 hoặc Fosc/64)
Bảng 1.10: Các chế độ port nối tiếp.
Trớc khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ Ví dụ,lệnh sau:
sử dụng (bit dữ liệu thứ 9 cũng đóng vai một trò quan trọng trong truyền thông đa xửlý)
*Thêm 1 bit parity:
Trang 36ơng trớc, pit P trong từ trạng thái chơng trình (PSW) đợc đặt lên 1 hoặc bị xóa bởichu kỳ máy để thiết lập kiểm tra chẵn với 8 bit trong thanh tích lũy.
*Các cờ ngắt:
Hai cờ ngắt thu và phát (RI và TI) trong SCON đóng một vai trò quan trọngtruyền thông nối tiếp dùng 8951 Cả hai bit đợc đặt lên 1 bằng phần cứng, nhng phải
đợc xóa bằng phần mềm
d/ 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 8951 nhng 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à 1 MHz
b Chế độ 2
c Chế độ 1 và 3
Hình 1.10: 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ế độ là 2 tần số bộ dao độngchia cho 64 Tốc độ baud cũng ảnh hởng bởi 1 bit trong thanh ghi điều khiển nguồn
Trang 37cung cấp (PCON) Bit 7 của PCON là bit SMOD Đặt bit sMOD lên một làm gấp đôitốc độ baud trong chế độ 1,2 và 3 Trong chế độ 2, tốc độ baud có thể bị gấp đôi từgiá trị mặc nhiên của 1/64 tần số dao động (SMOD=0) đế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ảitheo các lệnh sau:
MOV A,PCON ; lấy giá trị hiện thời của PCON
SETB ACC.7 ; đặt bit 7 (SMOD) lên 1
MOV PCON,A ; ghi giá trị ngợc về PCON
Các tốc độ baud trong các chế độ 1 và 3 đợc xác định bằng tốc độ tràn của timer
1 Vì timer hoạt động ở tần số tơng đối cao, tràn timer đợc chia thêm cho 32 (hay 16nếu SMOD=1) trớc khi cung cấp xung nhịp tốc độ baud cho port nối tiếp
1.2.9 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 để tji hành một chơngtrì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 thicủa vi điều khiển Chúng cho phép hệ thốn đáp ứng không cùng lúc tới một côngviệc và giải quyết một công việc đó 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ơngtrình khác, rồi quay về chơng trình đầu khi có yêu cầu ngắt Chơng trình giải quyếtngắt đợc gọi là chơng trình phục vụ ngắt (ISR : Interrupt Sevice Reutine)
a/ Tổ chức ngắt
ở 8951 có 5 nguồn ngắt:
- 2 ngắt ngoài
- 2 ngắt từ timer
- 1 ngắt port nối tiếp
Tất cả các ngắt sẽ không đợc đặt sau khi reset hệ thống và cho phép ngắt riêng
rẽ bởi phần mềm
*Cho phép và không cho phép ngắt
Mỗi nguồn ngắt đợc cho phép hoặc không cho phép từng ngắt một qua thanhghi chức năng đặt biệt cố định địa chỉ bit IE (Interrupt Enable : cho phép ngắt) ở địachỉ 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ấmtoà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ácngắt Bảng tóm tắt thanh ghi IE:
Trang 38Bit Ký hiệu Địa chỉ bit Mô tả (1=cho phép,0=cấm)
AFHAEHADHACHABHAAHA9HA8H
Cho phép hoặc cấm toàn bộKhông đợc định nghĩaCho 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 1Cho phép ngắt ngoài 1Cho phép ngắt từ timer 0Cho phép ngắt ngoài 0
Bảng1.11: Bảng tóm tắt thanh ghi cho phép ngắt
*Ưu tiên ngắt
Mỗi nguồn ngắt đuợc lập trình riêng vào một trong hai mức u tiên qua thanh ghichức năng đặc biệt đợc địa chỉ bit IP (Interrupt priority : u tiên ngắt) ở địa chỉ B8H Bảng tóm tắt thanh ghi IP:
Trang 39IP.7 - - Không đợc định nghĩa
IP.5 PT2 BDH Ưu tiên cho ngắt từ timer 2 (8052)
IP.4 PS BCH Ưu tiên cho ngắt Port nối tiếp
IP.3 PT1 BBH Ưu tiên cho ngắt từ timer 1
IP.2 PX1 BAH Ưu tiên cho ngắt ngoài
IP.1 PT0 B9H Ưu tiên cho ngắt từ timer 0
IP.0 PX0 B8H Ưu tiên cho ngắt ngoài 0
Bảng 1.12: Bảng tóm tắt thanh ghi u tiên ngắt
Các ngắt u tiên đợc xóa sau khi reset hệ thống để đặt tất cả các ngắt ở mức utiên thấp hơn
0000H0003H000BH
Trang 40Bảng 1.13: Các Vector ngắt.
Vector reset hệ thống (RST ở địa chỉ 0000H) nó giống nh một ngắt Nó ngắt
ch-ơng trình chính và tải vào PC một giá trị mới
Khi chỉ đến một ngắt “cờ gây ngắt tự động bị xóa bởi phần cứng, trừ ra R1, T1cho các ngắt cổng nối tiếp Vì có hai nguồn có thể có cho ngắt này, không thực tế đểCPU xóa cờ ngắt này Các bit phải đợc kiểm tra trong ISR để xác định nguồn ngắt và
cờ tạo ngắt sẽ đợc xóa bằng phần mềm
c/ Các ngắt của 8951
*Các ngắt timer
Các ngắt timer có địa chỉ Vector ngắt là 000BH (timer 0) và 001BH (timer 1).Ngắt timer xảy ra khi các thanh ghi timer (TLx ITHx) tràn và set cờ báo tràn (TFx)lên 1 Các cờ timer (TFx) không bị xóa bằng phần mềm Khi cho phép các ngắt, TFx
tự động bị xóa bằng phần cứng khi CPU chuyển đến ngắt
*Các ngắt cổng nối tiếp
Ngắt cổng nối tiếp xảy ra khi hoặc cờ phát (TI) hoặc cờ ngắt thu (KI) đợc đặt lên
1 Ngắt phát xảy ra khi một ký tự đã đợc nhận xong và đang đợi trong SBUP để đợc
đọc
Các ngắt cổng nối tiếp khác với các ngắt timer Cờ gây ra ngắt cổng nối tiếpkhông bị xóa bằng phần cứng khi CPU chuyển tới ngắt Do có hai nguồn ngắt cổngnối tiếp Ti và RI Nguồn ngắt phải đợc xác định trong ISR và cờ tạo ngắt sẽ đợc xóabằng phần mềm Các ngắt timer cờ ngắt cờ ngắt đợc xóa bằng phần cứng khi CPU h-ớng tới ISR
*Các ngắt ngoài
Các ngắt ngoài xảy ra khi có một mức thấp hoặc cạnh xuống trên chân INT0hoặc INT1 của vi điều khiển Đây là chức năng chuyển đổi của các bit Port 3.(Port3.2 và Port 3.3)
Các cờ tạo ngắt này là các bit IE0 vá IE1 trong TCON Khi quyền điều khiển đãchuyển đến ISR, cờ tạo ra ngắt chỉ đợc xóa nếu ngắt đợc tích cực bằng cạnh xuống.Nếu ngắt đợc tích cực theo mức, thì nguồn yêu cầu ngắt bên ngoài sẽ điều khiểnmức của cờ thay cho phần cứng
Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống đợc lập trình quacác bit IT0 và IT1 trong TCON Nếu IT1 = 0, ngắt ngoài 1 đợc tác động bằng múc