Vi điều khiển AT89C52

Một phần của tài liệu Ứng dụng Neurofuzzy trong điểu khiển nhiệt độ thông qua Kit AT89C52 (Trang 57)

Do họ MCS-51TM đã trở thành chuẩn cơng nghiệp nên cĩ rất nhiều hãng sản xuất ra nĩ, điển hình là ATMEL Corporation. Hãng này đã kết hợp rất nhiều tính năng dựa trên nền tảng kỹ thuật của mình để tạo ra các vi điều khiển tương thích với MCS-51TM nhưng mạnh mẽ hơn.

AT89C52 là một vi điều khiển 8 bit do ATMEL sản xuất, chế tạo theo cơng nghệ CMOS, cĩ chất lượng cao, cơng suất thấp với 8 KB Flash (flash programmable and erasable read only memory). Thiết bị này được chế tạo bằng cách sử dụng kỹ thuật 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-51TM về tập lệnh và các chân ra. Flash on-chip cho phép bộ nhớ lập trình được lập trình trong hệ thống bởi một lập trình viên bình thường. Bằng cách nối 1 CPU 8 bit với một Flash trên một chip đơn, AT89C52 là một vi điều khiển mạnh (cĩ cơng suất lớn), cung cấp một sự linh động cao và giải pháp về giá cả đối với nhiều ứng dụng vi điều khiển.

Các đặc điểm chủ yếu của AT89C52 :

• Tương thích hồn tồn với họ MCS-51TM của Intel.

• Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.

• Độ bền : 1000 lần ghi/xĩa.

• Tần số hoạt động : 0 Hz đến 24 MHz.

• 3 chế độ khĩa bộ nhớ.

• 256 x 8-Bit RAM nội.

• 32 đường I/O lập trình được (4 port).

• 3 timer/counter 16-bit.

• 8 nguồn ngắt.

• Chế độ hạ nguồn và chế độ lười tiêu tốn cơng suất thấp. 2.1. Cấu tạo chân

Tùy theo khả năng (về kinh tế, kỹ thuật, …) mà các nhà sản xuất các sản phẩm ứng dụng cĩ thể chọn một trong 3 kiểu chân do ATMEL đưa ra.

2.2. Sơ đồ khối

2.3. Mơ tả chức năng của các chân Vcc : áp nguồn.

GND : đất.

Port 0 : là một port I/O 8-bit hai chiều, cực máng hở. Khi xuất ra, mỗi chân port cĩ thể lái 8 đầu vào TTL. Nếu ghi các mức 1 ra các chân port thì các chân này cĩ thể dùng như các đầu vào trở kháng cao.

Port 0 cũng cĩ thể được cấu hình thành một bus multiplex giữa địa chỉ thấp và dữ liệu khi truy cập chương trình hay dữ liệu từ bên ngồi. Trong chế độ này, port 0 cĩ điện trở pullup nội.

Port 0 cũng nhận các byte mã chương trình khi lập trình Flash và xuất ra mã chương trình khi kiểm tra, khi đĩ cần cĩ điện trở pullup bên ngồi.

Port 1 : là một port I/O 8-bit hai chiều cĩ pullup nội. Đầu ra port 1 cĩ thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo

lên do cĩ điện trở nội và cĩ thể dùng làm đầu vào. Khi vai trị là cổng nhập, những chân của port 1 bị kéo xuống thấp sẽ đổ dịng vì cĩ nội trở kéo lên.

Hơn nữa, P1.0 và P1.1 cĩ thể được dùng như là đầu vào bộ đếm timer/counter 2 bên ngồi (P1.0/T2) và xung kích (P1.1/T2EX).

Port 1 cũng nhận những byte địa chỉ thấp trong khi lập trình Flash và trong khi kiểm tra Flash .

Port 2 : là một port I/O 8-bit hai chiều cĩ pullup nội. Đầu ra port 2 cĩ thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo lên do cĩ điện trở nội và cĩ thể dùng làm đầu vào. Khi vai trị là cổng nhập, những chân của port 2 bị kéo xuống thấp sẽ đổ dịng vì cĩ nội trở kéo lên.

Port 2 phát byte địa chỉ cao trong khi nhận lệnh từ bộ nhớ chương trình ngồi và trong lúc truy xuất đến bộ nhớ dữ liệu ngồi mà cĩ sử dụng địa chỉ 16 bit (MOVX A, @DPTR). Trong ứng dụng này nĩ dùng điện trở nội kéo lên mạnh khi xuất 1. Khi truy xuất bộ nhớ dữ liệu ngồi dùng địa chỉ 8 bit, port 2 sẽ phát nội dung của thanh ghi P2

Port 2 cũng nhận byte địa chỉ cao trong lúc lập trình Flash và trong lúc kiểm tra Flash.

Port 3 : là một port I/O 8-bit hai chiều cĩ pullup nội. Đầu ra port 3 cĩ thể lái 4 đầu vào TTL. Khi viết các mức 1 ra các chân port thì chúng được kéo lên do cĩ điện trở nội và cĩ thể dùng làm đầu vào. Khi vai trị là cổng nhập, những chân của port 3 bị kéo xuống thấp sẽ đổ dịng vì cĩ nội trở kéo lên.

Port 3 cũng cĩ những chức năng của họ MSC-51 được liệt kê ở bảng sau:

BIT TÊN ĐỊA CHỈ BIT CHỨC NĂNG THAY THẾ

P3.0 RXD B0H Nhận dừ liệu cho port nối tiếp P3.1 TXD B1H Truyền dừ liệu cho port nối tiếp P3.2 INT0 B2H Ngắt ngồi 0

P3.3 INT1 B3H Ngắt ngồi 1

P3.4 T0 B4H Ngõ vào từ bên ngồi cho timer/counter 0 P3.5 T1 B5H Ngõ vào từ bên ngồi cho timer/counter 1 P3.6 WR B6H Xung ghi bộ nhớ dữ liệu ngồi

Chân Chức năng thay thế

P1.0 T2 (đầu vào đếm cho Timer/Counter 2) P1.1 T2EX (xung kích capture/reload cho Timer/Counter 2 và điều khiển trực tiếp.

Port 3 cũng nhận vài tín hiệu điều khiển trong lúc lập trình Flash và trong lúc kiểm tra Flash.

RST : là ngõ vào Reset. Khi ngõ này được đưa lên cao (trong ít nhất hai chu kì máy), các thanh ghi bên trong AT89C51 được tải những giá trị thích hợp để khởi động hệ thống.

ALE/PROG (Address Latch Enable) : ALE là xung xuất cho phép chốt byte địa chỉ thấp khi truy cập bộ nhớ ngồi. Chân này cịn là ngõ vào của xung lập trình (PROG) khi lập trình Flash.

Trong hoạt động bình thường, ALE được phát xung với tần số 1/6 tần số dao động on-chip và cĩ thể được dùng như xung thời gian chuẩn bên ngồi. Tuy nhiên, cần chú ý là một xung ALE sẽ bị mất khi truy cập bộ nhớ ngồi. Cĩ thể hủy bỏ chức năng của ALE bằng cách set bit 0 của thanh ghi ở vị trí 8EH. Một khi bit này được set, ALE chỉ tích cực khi cĩ lệnh MOVX hoặc MOVC. Nếu khơng cĩ các lệnh này thì ALE ở mức cao. Việc set bit 0 của thanh ghi ở vị trí 8EH khơng làm ảnh hưởng đến vi điều khiển khi truy cập bộ nhớ ngồi.

PSEN (Program Store Enable) : PSEN là xung strobe báo hiệu việc đọc bộ nhớ chương trình ngồi, PSEN tích cực hai lần (mức thấp) mỗi chu kì máy, ngoại trừ hai xung PSEN bị mất khi truy xuất dữ liệu ngồi. Khi thi hành chương trình trong RAM nội, PSEN sẽ ở mức thụ động (mức cao). EA/VPP (External Access) : EA là ngõ vào để cho phép truy xuất bộ nhớ chương trình từ bên ngồi khi được nối với GND. Khi EA được treo lên nguồn VCC, chương trình sẽ được thực thi trong ROM nội. Chân này cũng nhận điện áp 12v (VPP) trong khi lập trình Flash.

XTAL1 : Đầu vào của bộ khuếch đại dao động đảo và cũng là đầu vào đến mạch tạo xung clock nội.

XTAL2 : Đầu ra của bộ khuếch đại dao động đảo.

2.4. Các thanh ghi chức năng (SFR-Special Funtion Reisters)

AT89C52 cĩ 26 thanh ghi chức năng được thiết kế như là một thành phần của RAM on-chip. Do đĩ mỗi thanh ghi cĩ một địa chỉ của nĩ, nằm trong vùng từ 80H đến FFH. Tuy nhiên, vùng này cũng là vùng bộ nhớ nên việc truy cập các thanh ghi này thơng qua các lệnh dùng định vị trực tiếp khác với việc truy cập vùng nhớ dùng định vị gián tiếp.

Chú ý là khơng phải tất cả các địa chỉ đều cĩ các thanh ghi, những địa chỉ khơng cĩ thanh ghi này cĩ thể khơng cĩ trên chip. Đọc những địa chỉ này sẽ cĩ những giá trị ngẫu nhiên và ghi những giá triï này cĩ những tác động khơng xác định trước.

Phần mềm của người dùng khơng nên ghi những giá trị 1 đến các vị trí này, bởi vì chúng cĩ thể được dùng trong tương lai. Trong trường hợp đĩ, giá trị của các bit luơn là 0.

Ngồi những thanh ghi tương tự 8051, AT89C52 cĩ thêm :

Các thanh ghi Timer 2 các bit điều khiển và trạng thái chứa trong thanh ghi T2CON và T2MOD cho Timer 2. Cặp thanh ghi RCAP2H và RCAP2L là những thanh ghi Capture/Reload trong chế độ capture 16 bit hay chế độ auto- reload 16 bit.

Ký hiệu Chức năng

TF2 Cờ tràn Timer 2, set khi Timer 2 tràn và phải được clear bằng phần mềm. TF2 sẽ khơng set khi RCLK = 1 hoặc TCLK = 1.

EXF2 Cờ ngồi của Timer 2, set khi xảy ra capture hoặc reload do T2EX xuống thấp và EXEN2 = 1. Nếu ngắt Timer 2 được kích hoạt, EXF2 = 1 sẽ làm CPU trỏ đến ISR của Timer 2. EXF2 phải được xĩa bằng phần mềm. EXF2 khơng gây nên ngắt trong chế độ đếm lên/xuống (DCEN = 1).

RCLK Kích hoạt xung clock bộ thu. Khi set, các xung tràn Timer 2 sẽ là xung clock cho bộ thu port nối tiếp trong mode 1 và 3. RCLK = 0 thì bộ thu port nối tiếp sẽ dùng các xung tràn của Timer 1.

TCLK Kích hoạt xung clock bộ phát. Khi set, các xung tràn Timer 2 sẽ là xung clock cho bộ phát port nối tiếp trong mode 1 và 3. TCLK = 0 thì bộ phát port nối tiếp sẽ dùng các xung tràn của Timer 1.

EXEN2 Kích hoạt bên ngồi. Khi set, cho phép capture hay reload khi T2EX xuống thấp (nếu Timer 2 khơng sử dụng cho port nối tiếp). EXEN2 = 0 làm cho Timer 2 bỏ qua các sự kiện trên T2EX.

TR2 Khởi động/Dừng Timer 2. TR2 = 1 làm khởi động Timer 2.

C/T2 Bit lựa chọn timer hay counter. C/T2 = 0 : timer. C/T2 = 1 : counter đếm sự kiện bên ngồi (kích cạnh xuống).

CP/RL2 Lựa chọn capture hay reload. CP/RL2 = 1: capture xảy ra khi T2EX xuống thấp nếu EXEN2 = 1. CP/RL2 = 0 : reload xảy ra khi Timer 2 tràn hoặc khi T2EX xuống thấp nếu EXEN2 = 1. Nếu TCLK hay RCLK = 1, bit này bị bỏ qua và timer bị ép vào chế độ reload khi Timer 2 tràn.

Các thanh ghi ngắt tập các bit riêng lẻ cho phép ngắt chứa trong thanh ghi IE. Thiết lập hai mức ưu tiên cho 6 nguồn ngắt bằng cách set các bit thanh ghi IP. 2.5. Bộ nhớ dữ liệu

AT89C52 cĩ 256 byte bộ nhớ RAM on-chip. Trong đĩ, 128 byte trên cĩ cùng địa chỉ với vùng thanh ghi chức năng nhưng cĩ cấu tạo vật lý riêng biệt.

Khi một lệnh truy cập một vị trí nội cĩ địa chỉ trên 7FH, chế độ địa chỉ nĩ sử dụng sẽ báo cho CPU biết vùng địa chỉ nào nĩ cần truy cập : RAM hay SFR. Các lệnh dùng địa chỉ trực tiếp sẽ truy cập vùng SFR. Ví dụ như lệnh sau đây sẽ truy cập SFR ở địa chỉ 0A0H (port 2)

MOV 0A0H,#data

Lệnh dùng địa chỉ gián tiếp sẽ truy cập 128 byte trên của RAM. Ví dụ như cũng truy cập địa chỉ 0A0H nhưng gián tiếp thơng qua R0.

MOV R0,#0A0H MOV @R0,#data

Chú ý rằng các tác vụ của stack vốn đã sử dụng địa chỉ gián tiếp nên vùng 128 byte trên của RAM rất tiện dụng để làm vùng stack.

2.6. Đặc tính bộ dao động

XTAL1 là đầu vào và đầu ra tương ứng của bộ khuếch đại đảo được dùng làm bộ dao động nội on-chip. Cĩ thể dùng thạch anh hay bộ cộng hưởng ceramic đều được.

Để lái vi điều khiển từ nguồn xung clock bên ngồi, XTAL2 phải được để trống trong khi XTAL1 nối đến nguồn lái. Khơng cĩ yêu cầu gì về duty cycle nhưng phải chú ý đến thời gian tối đa và tối thiểu của mức điện áp cao cũng như mức điện áp thấp.

2.7. Chế độ lười

Trong chế độ lười, CPU rơi vào trạng thái “ngủ” trong khi tất cả thiết bị ngoại vi vẫn cịn tích cực. Chế độ này được tạo ra bằng phần mềm. Nội dung của RAM on-chip và giá trị của các SFR vẫn được giữ nguyên. Kết

thúc chế độ lười bằng cách kích hoạt một ngắt hoặc reset phần cứng.

Chú rằng khi kết thúc chế độ lười bằng cách reset phần cứng thì thơng thường vi điều khiển sẽ gọi lại chương trình mà nĩ vừa thốt, cho đến hai chu kỳ máy trước khi thuật tốn reset chiếm quyền điều khiển. Phần cứng cấm truy cập RAM nội trong trường hợp này nhưng khơng cấm truy cập đến các chân port, do đĩ cĩ thể xảy ra những trường hợp khơng mong muốn. Để loại bỏ trường hợp này, lệnh ngay sau lệnh gọi chế độ lười khơng nên là lệnh ghi port hay ghi bộ nhớ ngồi.

2.8. Chế độ hạ nguồn

Trong chế độ hạ nguồn, bộ dao động ngừng, và lệnh gọi hạ nguồn là lệnh cuối cùng được thực thi. RAM on-chip và SFR duy trì giá trị của nĩ cho đến khi kết thúc chế độ hạ nguồn.

Kết thúc chế độ hạ nguồn chỉ bằng một cách duy nhất : reset phần cứng. Reset sẽ tạo lại giá trị cho SFR nhưng khơng thay đổi nội dung của RAM on-chip. Khơng nên reset trước khi Vcc phục hồi mức điện áp thơng thường của nĩ và phải giữ đủ lâu để bộ dao động phục hồi và ổn định.

5

5

A

ADDCC IICCLL77110099CCPPLL 1. SƠ LƯỢC VỀ CÁC PHƯƠNG PHÁP BIẾN ĐỔI AD

Tín hiệu trong thế giới thực thường ở dạng tương tự (analog), nên mạch điều khiển thu thập dữ liệu từ đối tượng điều khiển về (thơng qua các cảm biến) cũng ở dạng tương tự. Trong khi đĩ, bộ điều khiển ngày nay thường là các µP,

µC xử lý dữ liệu ở dạng số (digital). Vì vậy, cần phải chuyển đổi tín hiệu ở dạng tương tự thành tín hiệu ở dạng số thơng qua bộ biến đổi AD.

Cĩ nhiều phương pháp biến đổi AD khác nhau, ở đây chỉ giới thiệu một số phương pháp điển hình.

1.1. Biến đổi AD dùng bộ biến đổi DA

Trong phương pháp này, bộ biến đổi DA được dùng như một thành phần trong mạch.

+ -

vA

đầu vào analog

Đơn vị điều khiển 1 0 Thanh ghi Bộ biến đổi DA . . . vAX Kết quả digital So sánh OPAMP EOC (kết thúc chuyển đổi) Start Clock

Khoảng thời gian biến đổi được chia bởi nguồn xung clock bên ngồi. Đơn vị điều khiển là một mạch logic cho phép đáp ứng với tín hiệu Start để bắt đầu biến đổi. Khi đĩ, OPAMP so sánh hai tín hiệu vào angalog để tạo ra tín hiệu digital biến đổi trạng thái của đơn vị điều khiển phụ thuộc vào tín hiệu analog nào cĩ giá trị lớn hơn. Bộ biến đổi hoạt động theo các bước :

• Tín hiệu Start để bắt đầu biến đổi.

• Cứ mỗi xung clock, đơn vị điều khiển sửa đổi số nhị phân đầu ra và đưa vào lưu trữ trong thanh ghi.

• Số nhị phân trong thanh ghi được chuyển đổi thành áp analog vAX qua bộ biến đổi DA.

• OPAMP so sánh vAX với áp đầu vào vA. Nếu vAX < vA thì đầu ra ở mức cao, cịn ngược lại, nếu vAX vượt qua vA một lượng vT (áp ngưỡng) thì đầu ra ở mức thấp và kết thúc quá trình biến đổi. Ơû thời điểm này, vAX đã xấp xỉ bằng vA và số nhị phân chứa trong thanh ghi chính là giá trị digital xấp xỉ của vA (theo một độ phân giải và chính xác nhất định của từng hệ thống).

• Đơn vị điều khiển kích hoạt tín hiệu EOC, báo rằng đã kết thúc quá trình biến đổi.

Dựa theo phương pháp này, cĩ nhiều bộ biến đổi như sau : 1.1.1. Bộ biến đổi AD theo hàm dốc

Đây là bộ biến đổi đơn giản nhất theo mơ hình bộ biến đổi tổng quát trên. Nĩ dùng một counter làm thanh ghi và cứ mỗi xung clock thì gia tăng giá trị nhị phân cho đến khi vAX≥ vA. Bộ biến đổi này được gọi là biến đổi theo hàm dốc

+ -

vA

đầu vào analog

Counter Bộâ biến đổi DA . . . vAX Kết quả digital So sánh OPAMP EOC St ar t Clock Reset Clock vAX Start vA EOC tC Khi chuyển đổi hồn tất, counter ngừng đếm

vì dạng sĩng vAX cĩ dạng của hàm dốc, hay nối đúng hơn là dạng bậc thang. Đơi khi nĩ cịn được gọi là bộ biến đổi AD loại counter.

Hình trên cho thấy sơ đồ mạch của bộ biến đổi AD theo hàm dốc, bao gồm một counter, một bộ biến đổi DA, một OPAMP so sánh, và một cổng AND cho điều khiển . Đầu ra của OPAMP được dùng như tín hiệu tích cực mức thấp của

Một phần của tài liệu Ứng dụng Neurofuzzy trong điểu khiển nhiệt độ thông qua Kit AT89C52 (Trang 57)

Tải bản đầy đủ (PDF)

(186 trang)