Giáo trình vi điều khiển 8051

58 10 0
Giáo trình vi điều khiển 8051

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Vi điều khiển 8051 KỸ THUẬT VI XỬ LÝ 8051 NỘI DUNG CHƯƠNG TRÌNH • Chương 1 Tổng quan về bộ vi xử lý và hệ vi xử lý • Chương 2 Vi điều khiển 8051 • Chương 3 Bộ đếm định thời và truyền thông nối tiếp trong 8.

KỸ THUẬT VI XỬ LÝ NỘI DUNG CHƯƠNG TRÌNH • Chương 1:Tổng quan vi xử lý hệ vi xử lý • Chương 2: Vi điều khiển 8051 • Chương 3: Bộ đếm/ định thời truyền thông nối tiếp 8051 • Chương 4: Lập trình ngắt 8051 • Chương 5: Bộ vi xử lý ARM Chương TỔNG QUAN VỀ BỘ VXL VÀ HỆ VXL 1.1 Bộ vi xử lý 1.1.1 Khái niệm trình phát triển VXL 1.1.2 Phân loại VXL 1.1.3 Cấu trúc chung VXL 1.2 Hệ vi xử lý 1.2.1 Cấu trúc phần cứng 1.2.2 Phần mềm 1.2.3 Hoạt động chung 1.1 BỘ VI XỬ LÝ 1.1.1 Khái niệm trình phát triển ❖ Khái niệm – Là vi mạch logic chế tạo theo công nghệ LSI (Large scale integrated) VLSI (very large scale integrated) – Hoạt động điều khiển chương trình đặt nhớ – Bộ VXL hạt nhân hệ VXL, nắm quyền kiểm sốt tồn thành phần có hệ thống – Thực phép toán số học, logic, đưa định thơng tin với giới bên ngồi qua cổng vào/ra điều khiển chương trình cài đặt nhớ ❖ Lịch sử trình phát triển 1.1 BỘ VI XỬ LÝ 1.1.2 Phân loại vi xử lý – VXLđanăng: bao gồm tất phần tử tính tốn chip (trừ nhớ cổng vào – 8086/8088, 6800) – Vi điều khiển: bao gồm nhớ cổng vào 1.1 BỘ VI XỬ LÝ 1.1.3 Cấu trúc chung vi xử lý Giaỉ mã lệnh Khối điều khiển Mạch phối với Bus 1.2 HỆ VI XỬ LÝ 1.2.1 Cấu trúc phần cứng 1.2 HỆ VI XỬ LÝ 1.2.2 Phần mềm ❖ Phần mềm chương trình người lập trình tạo để giải nhiệm vụ toán đặt thiết kế hệ thống Các chương trình đặt nhớ ROM RAM hệ thống hoạt động ❖ Trong máy tính, phần mềm phân lớp ▪ Các lớp chương trình quản lý, điều khiển, liệu cố định làm nhiệm vụ trung gian giữ người máy gọi hệ điều hành (HĐH) Các chương trình HĐH thường lớn nạp phần ROM, phần lại chứa nhớ nạp vào RAM khởi động máy ▪ Các chương trình người lập trình viết lớp ngồi để giải tốn đó, thực HĐH nạp vào RAM vị trí theo phân bố HĐH Khi phần cứng thực xong chương trình tốn giải 1.2 HỆ VI XỬ LÝ 1.2.3 Hoạt động hệ vi xử lý ❖ Quá trình nhận lệnh: CPU nhận lệnh từ nhớ trung tâm Để nhận byte lệnh, từ giá trị ghi địa lệnh, CPU tạo bit địa đưa Bus địa xác định byte lệnh cần lấy vào Sau CPU đưa tín hiệu điều khiển đọc byte lệnh CPU Khi nội dung ghi địa lệnh tự động tăng đơn vị để chuẩn bị cho việc nhận byte lệnh ❖ Quá trình giải mã lệnh: Byte lệnh byte mã lệnh CPU giải mã byte mã lệnh để xác định chức lệnh Nếu lệnh khơng cần tốn hạng chuyển sang chu lệnh Nếu lệnh cần toán hạng, CPU xác định toán hạng cho lệnh ❖ Quá trình thực lệnh – Nếu lệnh dừng, CPU dừng trình làm việc Reset – Nếu khơng phải CPU thực lệnh gửi kết Trong trình thực lệnh, lệnh thao tác VXL CPU thực lệnh, cịn lệnh cần thao tác với bên ngồi CPU gửi tín hiệu địa điều khiển để thực – Sau q trình lại quay lại lệnh Các trình nhận lệnh, giải mã lệnh thực lệnh tiến hành hay song song tuỳ theo cấu trúc VXL 1.2 HỆ VI XỬ LÝ 1.2.4 Các bước thiết kế hệ vi xử lý • Phân tích chức nhiệm vụ hệ vi xử lý cần thiết kế • Tổ chức phần cứng cho hệ vi xử lý cần thiết kế • Xây dựng phần mềm cho hệ vi xử lý cần thiết kế • Nạp chương trình cho hệ vi xử lý hiệu chỉnh hệ thống Chương VI ĐIỀUKHIỂN 8051 2.1 Tổng quan 8051 2.2 Sơ đồ chân tín hiệu 8051 2.3 Tổchứcbộnhớcủa 8051 2.4 Tập lệnh 8051 2.5 Khung chương trình hợp ngữ cho 8051 2.1 Tổng quan 8051 ▪ Đóng hộp 40 chân ▪ 4KB ROM ▪ 128 byte RAM ▪ cổng xuất nhập liệu bit ▪ cổng nối tiếp ▪ Timer 16 bit ▪ nguồn ngắt (2 ngắt ngoài) ▪ Khơng gian nhớ chương trình ngồi 64KB ▪ Khơng gian nhớ liệu ngồi 64KB ▪ 210 vị trí định địa bit ▪ Tần số xung nhịp (11.0592 MHz, 12 MHz, 24 MHz) 2.2 Sơ đồ, chức chân tín hiệu 8051 Hình 2.1 Sơ đồ chân 8051 2.2 Sơ đồ, chức chân tín hiệu 8051 • Port (từ chân 32 đến 39), có 02 chức năng: – Trong thiết kế tối thiểu, chân có chức xuất/nhập liệu; – Là byte địa thấp cho thiết kế có nhớ ngồi Các chân cổng P0 có dạng cực máng hở, nên phải nối với điện trở kéo 10KΩ bên ngồi, Hình 2.2 Hình 2.2 Mắc điện trở kéo cổng P0 2.2 Sơ đồ, chức chân tín hiệu 8051 • Port (từ chân đến 8), có 01 chức trao đổi liệu với thiết bị bên ngồi có yêu cầu • Port (từ chân 21 đến 28), có 02 chức năng: – Trao đổi liệu với thiết bị bên – Là byte cao địa cho thiết kế có nhớ ngồi • Port (từ chân 10 đến 17), có 02 chức năng: – Trao đổi liệu với thiết bị bên – Khi không hoạt động trao đổi liệu, chân Port thực chức riêng (Bảng 2.1) 2.2 Sơ đồ, chức chân tín hiệu 8051 • Bảng 2.1 Chức chân Port Địa bit Chức P3.0 RxD B0H Chân nhận dl nối tiếp P3.1 TxD B1H Chân phát dl nối tiếp P3.2 INT0 B2H Ngõ vào ngắt P3.3 INT1 B3H Ngõ vào ngắt P3.4 T0 B4H Ngõ vào định thời/đếm P3.5 T1 B5H Ngõ vào định thời/đếm P3.6 WR B6H Điều khiển ghi nhớ dl P3.7 B7H Điều khiển đọc nhớ liệu Bit Tên RD 2.2 Sơ đồ, chức chân tín hiệu 8051 • PSEN (program store enable)- chân 29: tín hiệu điềuOEkhiển cho phép truy xuất nhớ chương trình ngồi Thường nối với chân ROM phép đọc byte lệnh Trong suốt thời gian tìm – nạp lệnh chân mức logic Khi thực thi chương trình ROM nội, chân khơng tích cực (logic 1) • EA-chân 31: mức logic 1, 8051 thực thi chương trình ROM • ALE (address latch enable): Port sử dụng làm bus địa nội Nếu mức logic 0, thực thi chương trình từ nhớ ngồi • RST (Reset): bình thương mức logic thấp Khi có mức logic cao vi điều khiển khởi động lại, giá trị ghi bị xóa, đếm chương trình PC=0 (tức CPU nhận lệnh địa 0000h – địa khởi động 8051) • Chân XTAL1, XTAL2: mạch tạo dao động ngồi cho 8051 Hình 2.3 2.2 Sơ đồ, chức chân tín hiệu 8051 Hình 2.3 Mạch tạo dao đơng, Reset cho 8051 2.3 Tổ chức nhớ 8051 2.3.1 Tổ chức nhớ Hình 2.8 trình bày vùng nhớ RAM có 128 byte gán địa từ 00H đến 7FH -Từ 00H đến 1FH (32 byte) băng ghi ngăn xếp -Từ 20H đến 2FH (16 byte) định địa bit Vùng nhớ truy nhập theo byte, hoặt bit tùy theo lệnh Ví dụ: MOV A, 2Ch ; đọccả byte ORLA, #10000000B; set bit cao MOV 2CH, A; ghi lại byte Ba lệnh tương đương lệnh “SETB 67H” -Từ 30H đến 7FH (80 byte) sử dụng để lưu thông tin đọc ghi, hay gọi bảng nháp 80 byte thường sử dụng để lưu liệu tham số Hình 2.8 Tổ chức nhớ RAM JNC rel (2,2): Nhảy cờ nhớ không đặt JB bit,rel (3,2): Nhảy tương đối bit trực tiếp đặt JNB bit,rel (3,2): Nhảy tương đối bit trực tiếp không đặt JBC bit,rel bit (3,2): Nhảy tương đối bit trực tiếp đặt , xóa CJNE A,data,rel (3,2): So sánh liệu trực tiếp với A nhảy không CJNE A,#data,rel (3,2): So sánh liệu tức thời với A nhảy không CJNE Rn,#data,rel (3,2): So sánh liệu tức thời với nội dung ghi Rn nhảy không CJNE @Ri,#data,rel (3,2): So sánh liệu tức thời với liệu gián tiếp nhảy không DJNZ Rn,rel (2,2): Giản ghi Rn nhảy không DJNZ data,rel (3,2): Giảm liệu trực tiếp nhảy không PHẦN I: Câu 2: Xác đ ịnh bảng phân v ùng địa cho cá c tín hi ệu chọn chip (/CS) ứng với mạch giải mã địa sau: - Đ ể 74HC138 hoạt động chân cho phép phải tích cực: + G1=1=> A14,A15 =1 + G2A,G2B=1 =>/G2A,/G2B =0 - Đường A11,12,13 nối v chân điều khiển A,B,C nên vùng b ộ nhớ quy định 11 đường địa lại(A0 -A10) có dung lư ợng 211=2048 b Câu 3: Xác đ ịnh bảng phân v ùng đ ịa ch o tín hi ệu chọn chip (/CS) ứng với mạch giả i m ã địa sau: - A15=1 - A12,13,14 - A,B,C - A0 - A11(12 đư ờng)=>2 12 =4096 byte Câu 8: Dùng vi mạch 74138 cổng logic cần thiết để thiết kế mạch giải mã địa cho kit 8051 với chip RAM 16KB chip RAM 8KB Xác định rõ vùng địa cho chip + RAM 16KB= 214 byte -> 14 đường địa chỉ(A0- A13) + RAM8KB =213 byte -> 13 đường địa chỉ(A0- A12) ➔ Chọn phân vùng 16KB: + Đưa đường địa A0-A13 đến RAM 16KB , A0-A12 đến RAM 8KB +2 đường địa cao A14,A15 đưa đến giải mã 3-8(72138) Câu 9: Dùng vi m ạch 74138 v c logic cần thiết để thiết kế mạch giải m ã địa cho kit 8051 v ới chip RAM 8KB v chip RAM KB Xác định r õ vùng địa cho chip - RAM 8KB= 13 byte - > Có 13 đư ờng địa chỉ(A0 - A12) - RAM 4KB= chỉ(A0 - A11) 12 byte - > Có 12 đư ờng địa - > Ch ọn v ùng địa 8KB Câu 10: a Hãy vẽ bảng địa (bảng phân vùng địa chỉ) nhớ cho chip RAM, chip 2KB, biết địa bắt đầu C000H b Hãy thiết kế mạch giải mã địa cho chip RAM dùng IC 74138 cổng logic cần thiết Giải: a RAM 2KB =211 byte ->11 đường địa chỉ(A0-A10) b Câu 12: a Hãy vẽ bảng địa (bảng phân vùng địa chỉ) nhớ cho chip RAM, chip 2KB, biết địa bắt đầu 4000H b Hãy thiết kế mạch giải mã địa cho chip -> Chọn phân vùng 4KB Giai: a/ RAM 2KB =2 A10) 11 byte ->11 đường địa chỉ(A0 - Câu 15: Thi ết kế mạch giải m ã địa d ùng I C 74138 tạo tín hiệu chọn chip cho n hớ RAM theo bảng phân v ùng địa sau: T bảng phân v ùng suy có: - RAM 4KB = A11) - RAM 8KB - RAM 16KB 212 byte- > 12 đường địa chỉ(A0 - Câu 16: Sử dụng IC 74138 cổng logic cần thiết để thiết kế mạch giải mã địa tạo tín hiệu chọn chip (tích cực mức thấp) theo bảng phân vùng địa sau (không quan tâm đến đặc tính truy xuất): Từ bảng phân vùng suy có: - CHIP 1KB= 210 byte-> có 10 đường địa (A0- A9) Câu 17: S dụng IC 74138 v c logic cầ n thiết để thiết kế mạch giải m ã địa tạo tín h iệu chọn chip (tích c ực mức thấp) theo bảng p hân v ùng địa sau (không quan tâm đến đặc tính truy xu ất): T bảng phân v ùng suy r a có: - CHIP 16KB= 214 byte- > có 14 đường địa chỉ(A0 - A13) T bảng phân v ùng suy có: - CHIP 1KB= chỉ(A0 - A9) 210 byte-> có 10 đư ờng địa Câu 23: Thi ết kế mạch giải m ã đị a tạo tín hiệu chọn chip cho RAM 16KB Xác đ ịnh r õ vùng địa cho RAM - RAM 16KB= chỉ(A0 - A13) Câu 20: Thi ết kế mạch giải m ã địa tạo tín h iệu chọn chip (tích c ực mức thấp) cho n hớ RAM theo bảng phân v ùng địa chỉ: 214 byte- > có 14 đư ờng địa Câu 27: Câu 25: Thi ết kế mạch giải m ã địa tạo tín h iệu chọn chip (tích c ực mức thấp) cho n hớ RAM theo bảng phân v ùng địa chỉ: T bảng phân v ùng suy có: + RAM 4KB = chỉ(A0 - A11) 212 byte- > Có 12 đ ường địa +1 RAM 8KB + RAM 16KB +1 RAM 32KB ➔ Ch ọn phân vùng 4KB Dùng vi mạch 74138 cổng logic cần thiết để thiết kế mạch giải mã địa cho kit 8051 với chip RAM 16KB chip RAM 8KB Xác định rõ vùng địa cho chip + RAM 16KB= 214 byte-> có 14 đường địa chỉ(A0- A13) +RAM 8KB= 213 byte-> có 13 đường địa chỉ(A0- A12) Chọn phân vùng 16KB Bài chọn sai link kiện Khi làm viết tên chân CE TH RAM ROM Đường bus đường chiều , đường liệu đường chiều 32KB=2^15byte => dùng 15 đường địa A14->A0 8KB=2^13 byte => dùng 13 đường địa A12->A0 Để tổ chức nhớ 32K*8bith cần 32/8=4 (cái ic) ) A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 RAM 0 0 0 0 0 0 0 2000H … … RAM1 0 1 1 1 1 1 1 1 3FFFH 0 0 0 0 0 0 0 4000H … … … Ram2 1 1 1 1 1 1 1 5FFFH 1 0 0 0 0 0 0 6000H … … Ram3 1 1 1 1 1 1 1 7FFFH 0 0 0 0 0 0 0 8000H … … 0 1 1 1 Ram4 1 1 1 C1(A15) B(A14) A(A13) Y(Đầu ra) 0 Y1(Ram1) Y2(Ram2) 1 Y3(Ram3) 0 Y4(Ram4) 9FFFH ROM ; 8K => dùng 13 đường địa A0->A12 IC ROM: 2K => dùng 11 đường địa A0->A10 Để tổ chức nhớ 8k*8bit cần 8/2=4 (cái IC) (chọn chân thừa cho CBA để ứng với Yra ) ( Bài rom link kiện ) A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 ROM 0 0 0 0 0 0 0 8000H … … ROM1 0 0 1 1 1 1 1 87FFH 0 0 0 0 0 0 8800H … … … ROm2 0 1 1 1 1 1 1 8FFFH 0 0 0 0 0 0 0 9000H … … Rom3 0 1 1 1 1 1 1 97FFH 0 1 0 0 0 0 0 9800H … … 0 1 1 1 Rom4 1 1 1 C (A13) B (A12) A(A11) Y(Ra) 0 0 0 1 1 9FFFH ... hệ vi xử lý cần thiết kế • Tổ chức phần cứng cho hệ vi xử lý cần thiết kế • Xây dựng phần mềm cho hệ vi xử lý cần thiết kế • Nạp chương trình cho hệ vi xử lý hiệu chỉnh hệ thống Chương VI ĐIỀUKHIỂN... thống Chương VI ĐIỀUKHIỂN 8051 2.1 Tổng quan 8051 2.2 Sơ đồ chân tín hiệu 8051 2.3 Tổchứcbộnhớcủa 8051 2.4 Tập lệnh 8051 2.5 Khung chương trình hợp ngữ cho 8051 2.1 Tổng quan 8051 ▪ Đóng hộp 40 chân... điều khiển chương trình cài đặt nhớ ❖ Lịch sử trình phát triển 1.1 BỘ VI XỬ LÝ 1.1.2 Phân loại vi xử lý – VXLđanăng: bao gồm tất phần tử tính tốn chip (trừ nhớ cổng vào – 8086/8088, 6800) – Vi điều

Ngày đăng: 29/09/2022, 12:16

Hình ảnh liên quan

Hình 2.1. Sơđồ chân của 8051 - Giáo trình vi điều khiển 8051

Hình 2.1..

Sơđồ chân của 8051 Xem tại trang 7 của tài liệu.
Hình 2.2. Mắc điện trở kéo cổng P0 - Giáo trình vi điều khiển 8051

Hình 2.2..

Mắc điện trở kéo cổng P0 Xem tại trang 8 của tài liệu.
• Bảng 2.1 Chức năng của các chân Port 3 - Giáo trình vi điều khiển 8051

Bảng 2.1.

Chức năng của các chân Port 3 Xem tại trang 9 của tài liệu.
Hình 2.3. Mạch tạo dao đông, Reset cho 8051 - Giáo trình vi điều khiển 8051

Hình 2.3..

Mạch tạo dao đông, Reset cho 8051 Xem tại trang 10 của tài liệu.
Hình 2.8. trình bày vùng nhớ RAM trong có 128 byte được gán địa chỉ từ 00H đến 7FH.  - Giáo trình vi điều khiển 8051

Hình 2.8..

trình bày vùng nhớ RAM trong có 128 byte được gán địa chỉ từ 00H đến 7FH. Xem tại trang 10 của tài liệu.
2.3. Tổchứcbộnhớ 8051 - Giáo trình vi điều khiển 8051

2.3..

Tổchứcbộnhớ 8051 Xem tại trang 11 của tài liệu.
Bảng 2.2. Chọnbăng thanh ghi - Giáo trình vi điều khiển 8051

Bảng 2.2..

Chọnbăng thanh ghi Xem tại trang 11 của tài liệu.
• Không gian bộnhớ ROM, Hình 2.4 - Giáo trình vi điều khiển 8051

h.

ông gian bộnhớ ROM, Hình 2.4 Xem tại trang 12 của tài liệu.
Hình 2.4. Khơng gian bộnhớ ROM - Giáo trình vi điều khiển 8051

Hình 2.4..

Khơng gian bộnhớ ROM Xem tại trang 12 của tài liệu.
Hình 2.6. Khơng gian bộnhớ RAM - Giáo trình vi điều khiển 8051

Hình 2.6..

Khơng gian bộnhớ RAM Xem tại trang 13 của tài liệu.
• Khơng gian bộnhớ RAM, Hình 2.6 - Giáo trình vi điều khiển 8051

h.

ơng gian bộnhớ RAM, Hình 2.6 Xem tại trang 13 của tài liệu.
Hình 2.8. Cấu trúc chung của 1 IC nhớ - Giáo trình vi điều khiển 8051

Hình 2.8..

Cấu trúc chung của 1 IC nhớ Xem tại trang 14 của tài liệu.
Hình 2.10. Sơđồ SRAM 62256 - Giáo trình vi điều khiển 8051

Hình 2.10..

Sơđồ SRAM 62256 Xem tại trang 15 của tài liệu.
Bảng 2.5 Thanh ghi từ trạng thái PSW - Giáo trình vi điều khiển 8051

Bảng 2.5.

Thanh ghi từ trạng thái PSW Xem tại trang 18 của tài liệu.
Xác định bảng phân vùng địa chỉ cho cá hi ệu chọn chip (/CS) ứng với mạch giải   ch ỉ sau:    - Giáo trình vi điều khiển 8051

c.

định bảng phân vùng địa chỉ cho cá hi ệu chọn chip (/CS) ứng với mạch giải ch ỉ sau: Xem tại trang 45 của tài liệu.
a. Hãy vẽ bảng địa chỉ (bảng phân vùng địa chỉ) bộnhớ cho 4 chip RAM, mỗi chip 2KB, - Giáo trình vi điều khiển 8051

a..

Hãy vẽ bảng địa chỉ (bảng phân vùng địa chỉ) bộnhớ cho 4 chip RAM, mỗi chip 2KB, Xem tại trang 48 của tài liệu.
a. Hãy vẽ bảng địa chỉ (bảng phân vùng địa chỉ) bộnhớ cho 4 chip RAM, mỗi chip 2KB, biết địa chỉ bắt đầu là C000H - Giáo trình vi điều khiển 8051

a..

Hãy vẽ bảng địa chỉ (bảng phân vùng địa chỉ) bộnhớ cho 4 chip RAM, mỗi chip 2KB, biết địa chỉ bắt đầu là C000H Xem tại trang 48 của tài liệu.
a/ RAM 2KB=2 11 byte- >11 đư ờng địa A10)    - Giáo trình vi điều khiển 8051

a.

RAM 2KB=2 11 byte- >11 đư ờng địa A10) Xem tại trang 49 của tài liệu.
Từ bảng phân vùng suy ra có: - Giáo trình vi điều khiển 8051

b.

ảng phân vùng suy ra có: Xem tại trang 49 của tài liệu.
chip (tích cực mức thấp) theo bảng phân vùng địa chỉ sau (khơng quan tâm đến đặc tính - Giáo trình vi điều khiển 8051

chip.

(tích cực mức thấp) theo bảng phân vùng địa chỉ sau (khơng quan tâm đến đặc tính Xem tại trang 50 của tài liệu.
- 4 CHIP 1KB= 210 byte-> có 10 đường địa chỉ(A0- A9) - Giáo trình vi điều khiển 8051

4.

CHIP 1KB= 210 byte-> có 10 đường địa chỉ(A0- A9) Xem tại trang 50 của tài liệu.
n thiết để iệu chọn   - Giáo trình vi điều khiển 8051

n.

thiết để iệu chọn Xem tại trang 51 của tài liệu.
Từ bảng phân vùng suy r -    3  CHIP  16KB=  2 14  byt  - Giáo trình vi điều khiển 8051

b.

ảng phân vùng suy r - 3 CHIP 16KB= 2 14 byt Xem tại trang 51 của tài liệu.
e- có 14 đư > ờng địa - Giáo trình vi điều khiển 8051

e.

có 14 đư > ờng địa Xem tại trang 51 của tài liệu.
Từ bảng phân vùng suy ra có: +  1 RAM 4KB =  2 12  byte -   Có 12 đ >  ch ỉ(A0 -   A11)    - Giáo trình vi điều khiển 8051

b.

ảng phân vùng suy ra có: + 1 RAM 4KB = 2 12 byte - Có 12 đ > ch ỉ(A0 - A11) Xem tại trang 53 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan