Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
1,89 MB
Nội dung
BỘ CÔNG NGHIỆP TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HCM KHOA CÔNG NGHỆ ĐIỆN TỬ Đồ Án Tốt nghiệp Đề Tài: LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 GVHD :ThS HUỲNH MINH NGỌC LỚP :CDDT6K SINH VIÊN :LÊ VĂN LONG MSSV :04CDDT406 ĐẶNG ĐỨCTRUNG MSSV : 04CDDT439 Tp HCM ,Tháng Năm 2007 Đồ Án Tốt Nghiệp SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K GVHD:Huỳnh Minh Ngọc Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN SVTH : Lê Văn Long MSSV : 04CDDT406 Đặng Đức Trung MSSV : 04CDDT439 GVHD : ThS Huỳnh Minh Ngọc Ngày Tháng Năm 2007 SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc LỜI CẢM ƠN Chúng xin chân thành cảm ơn Thầy Huỳnh Minh Ngọc tận tình giúp đỡ chúng em suốt trình thực đồ án Chúng xin chân thành cảm ơn thầy cô giáo khổ công truyền thụ kiến thức cho chúng em giúp chúng em phục vụ công tác tốt trường Cuối cảm ơn chân thành đến ba mẹ , người thân, bạn bè Những người động viên, hỗ trợ để chúng tơi hồn thành đồ án SVTH: Lê Văn Long & Đặng Đức Trung SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc PHẦN I TỔNG QUAN ĐỀ TÀI I ĐẶT VẤN ĐỀ: Ngày nay, ứng dụng Vi điều khiển sâu vào đời sống sinh hoạt sản xuất người Thực tế hầu hết thiết bị điện dân dụng có góp mặt Vi Điều Khiển vi xử lí Ứng dụng vi điều khiển thiết kế hệ thống làm giảm chi phí thiết kế hạ giá thành sản phẩm đồng thời nâng cao tính ổn định thiết bị hệ thống.Trên thị trường có nhiều họ vi điều khiển: họ 8051 Intel, 68HC11 Motorola, Z80 hãng Zilog, PIC hãng Microchip, H8 Hitachi,vv… Việc phát triển ứng dụng hệ vi xử lý đòi hỏi hiểu biết phần cứng phần mềm, mà hệ vi xử lý sử dụng để giải tốn khác Tính đa dạng ứng dụng phụ thuộc vào việc lựa chọn hệ vi xử lý cụ thể vào kỹ thuật lập trình Ngày vi xử lý có mặt nhiều thiết bị điện tử đại: từ đầu đĩa CD, máy thu hình, máy ghi hình, dàn âm HiFi, điều khiển lò sưởi thiết bị điều khiển dùng công nghiệp Lĩnh vực ứng dụng hệ vi xử lý rộng lớn: từ nguyên cứu khoa học, truyền liệu, đến công nghiệp, lượng, giao thông y tế… Tùy theo kinh nghiệm mức độ thông thạo mà sử dụng ngơn ngữ khác hợp ngữ như: C, C++, Visual basic để có chương trình chất lượng cao II NỘI DUNG CỦA ĐỀ TÀI: Sơ lược vi điều khiển AT89C51 Khảo sát vi điều khiển AT89C2051 hãng ATMEL • Gồm sơ đồ chân linh kiện • Sơ đồ khối AT89C2051 • Các nội dụng ứng dụng AT89C2051 Giới thiệu phần mềm Keil Software µViSion Ứng dụng ngơn ngữ C Assembly điều khiển lập trình led • Ứng dụng cho led đơn, led đoạn, led ma trận… Kết luận hướng phát triển đề tài SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc PHẦN II NỘI DUNG ĐỀ TÀI CHƯƠNG 1: GIỚI THIỆU BỘ VI ĐIỀU KHIỂN 89C2051 89C51 I.GIỚI THIỆU BỘ VI ĐIỀU KHIỂN 89C2051 I.1 CÁC ĐẶC ĐIỂM Tương thích với sản phẩm họ MSC-51 2K byte nhớ Flash lập trình Khả :1000 chu kì ghi/xóa Tầm điện áp hoạt động từ 2,7 V đến 6V Tầm tần số hoạt động từ Hz đến 21 MHz mức khóa nhớ chương trình (program memory) RAM bên (internal RAM) có dung lượng 128 x bit 15 đường I/O lập trình định thời /đếm 16 bit nguồn (nguyên nhân ) ngắt Kênh nối tiếp UART lập trình Các ngõ kích LED trực tiếp Mạch so sánh tương tự chip (on-chip analog comparator) Các chế độ nghỉ công suất thấp chế độ giảm cơng suất I.2 MƠ TẢ Chip AT89C2051 chip vi điều khiển CMOS bit điện áp thấp, hiệu suất cao có 2K byte nhớ Flash đọc, xóa lập trình PEROM (Flash programmable and erasable readonly memory) Linh kiện sản xuất cách sử dụng công nghệ nhớ không thay đổi mật độ cao Atmel tương thích với tập tệp MCS-51 chuẩn cơng nghiệp Bằng cách kết hợp CPU 8-bit đa linh hoạt với Flash chip đơn tinh thể , Atmel AT89C2051 chip vi điều khiển mạnh cung cấp giải pháp linh động cao mang lại hiệu giá thành cho nhiều ứng dụng điều khiển nhúng (embedded control application) AT89C2051 cung cấp đặc tính chuẩn sau : nhớ Flash 2K byte , 128 byte RAM , 15 đường I/O, định thời/đếm 16-bit , kiến trúc ngắt hai mức vector, port nối tiếp hồn tồn song cơng , mạch so sánh tương tự xác, mạch dao động tạo xung clock chip Ngoài AT89C2051 thiết kế có mạch logic tĩnh cho hoạt động giảm đến tần số Hz hỗ trợ chế độ tiết kiệm công suất lựa chọn phần mềm Chế dộ nghĩ ( idle mode ) dùng CPU cho phép RAM, định thời/đếm, port nối tiếp hệ thống ngắt tiếp tục hoạt động Chế độ giảm cơng suất trì nội dung RAM làm dừng mạch dao động, không cho phép chức khác chip hoạt động lần reset cứng (nghĩa ta thiết lập lại trạng thái ban đầu [reset] cho chiop mạch điện bên ngoài) SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc I.3 CẤU HÌNH CHÂN Hình 1.1 I.4 SƠ ĐỒ KHỐI SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc Hình 1.2 RAM ADDR REGISTER: ghi địa RAM RAM: vùng nhớ truy cập ngẫu nhiên (RAM) FLASH: vùng nhớ FLASH B REGISTER:thanh ghi B ACC: chứa STACK POINTER: trỏ vùng nhớ xếp chồng PROGRAM ADDRESS REGISTER: ghi địa chương trình TMP1: ghi tạm TMP2: ghi tạm ALU: đơn vị số học/logic BUFFER: đệm PC INCREMENTER: tăng ghi đếm chương trình PC INTERRUPT, SERIAL PORT AND TIMER BLOCKS: khối ngắt, port nối tiếp định thời SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc PROGRAM COUNTER: đếm chương trình PC PSW: từ trạng thái chương trình TIMING AND CONTROL:mạch logic điều khiển định thời INSTRUCTION REGISTERED: ghi lệnh DPTR: trỏ liệu PORT1 LATCH: chốt port PORT3 LATCH: chốt port ANALOG COMPARTOR:bộ so sánh tương tự OSC:mạch dao động PORT DRIVERS: mạch kích port PORT DRIVERS: mạch kích port I.5 MÔ TẢ CHÂN VCC Chân cấp điện áp Vcc cho chip GND Chân nối đất Port Port port I/O (port nhập/xuất: input/output port) hai chiều 8-bit Các chân port từ P1.2 đến P1.7 cung cấp mạch kéo lên bên (internal pull-ups) Các chân P1.0 P1.1 yêu cầu mạch kéo lên bên ngồi P1.0 P1.1 cịn sử dụng làm ngõ vào dương (AIN0) ngõ vào âm (ÁIN), theo thứ tự, mạch so sánh tương tự xác chip (on – chip precision analog comparator) Các mạch đệm ngõ (output buffer) port hút dịng 20mA kích trực tiếp thị LED Khi logic ghi đến chân port 1, chân sử dụng làm ngõ vào Khi chân từ P1.2 đến P1.7 sử dụng làm ngõ vào kéo xuống mức thấp từ bên ngoài, chúng cung cấp dòng (IIL) mạch kéo lên bên Port nhận liệu chương trình hay kiệu mã (code data) thời gian lập trình kiểm tra nhớ Flash Port Các chân port từ P3.0 đến P3.5, P3.7 chân I/O hai chiều với mạch kéo lên bên P3.6 nối dây cứng làm ngõ vào nối đến ngõ mạch so sánh chip khơng thể truy cập chân I/O có mục đích tổng quát Các mạch đệm ngõ port hút dịng 20mA.Khi logíc ghi đến chân port 3, chân kéo lên mức cao mạch kéo lên bên sử dụng làm ngõ vào Khi ngõ vào, chân port kéo xuống mức thấp mạch bên ngồi cung cấp dịng (IIL) mạch kéo lên Các chân port sử dụng cho chức đặc biệt khác AT89C2051 liệt kê ( bảng 11,1) Port nhận số tín hiệu điều khiển để lập trình kiểm tra nhớ Flash Bảng 1.1 RST SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc Ngõ vào reset (thiết lập lại trạng thái ban đầu) Tất chân I/O reset đến mức logíc sau RST lên mức cao Việc trì chân RST mức cao chu kỳ máy mạch dao động hoạt động reset chip XTAL Ngõ vào đến mạch khuếch đại dao động đảo ngõ vào đến mạch tạo xung clock bên XTAL Ngõ từ mạch khuếch đại dao động đảo I.6 CÁC ĐẶC TÍNH CỦA MẠCH DAO ĐỘNG XTAL XTAL ngõ vào ngõ ra, theo thứ tự, mạch khuếch đại đảo cấu hình để trở thành mạch dao động chip trình bày hình 1.3 Một tinh thể thạch anh mạch cộng hưởng gốm sử dụng Để kích chip từ nguồnxung clock bên ngồi, chân XTAL khơng kết nối chân ATAL kích trình bày hình 1.4 Khơng có u cầu chu kỳ nhiệm vụ (duty cycle) tín hiệu xung clock bên ngồi ngõ vào đến mạch ngõ vào đến mạch tạo xung clock bên qua flipflop làm nhiệm vụ chia tần số, đặc tính điện áp tối thiểu tối đa mức cao mức thấp phải xem xét Hình 1.3 kết nối mạch dao động Lưu ý: C1,C2=30pF ± 10pF thạch anh ; C1,C2=40pF ± 10pF cộng hưởng gốm Hình 1.4: Cấu hình kích xung clock bên ngồi I.7CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 10 Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc Nhiều chương trình mẫu chương sử dụng đoạn mã bắt đầu sau: #include Các tập tin định nghĩa ghi lưu thư mục C:\KEIL\C51\INC Đoạn mã sau trích từ tập tin định nghĩa ghi cho port song song I/O sfr sfr sfr sfr P0 P1 P2 P3 = = = = 0x80; 0x90; 0xA0; 0xB0; // // // // 8-bit 8-bit 8-bit 8-bit I/O I/O I/O I/O Port Port Port Port P0 P1 P2 P3 Bạn định giá trị SFRs cách trực tiếp mã nguồn C tiêu đề flie sfr IE = 0xA8; sbit EA = IE^7; // Interrupt Enable register at SFR address 0xA8 // global Interrupt Enable Flag (bit of SFR IE) Chú y: Khi bạn lấy ghi giá trị ghi đặc biệt bạn cần phải khai báo SFR tập tin nguồn Bit ký hiệu SFR định nghĩa cho bit địa ghi SFR, mà định vị theo địa 0x80, 0x88, 0x90 … 0xF8 Register Banks ( ghi lưu trữ ) Vi điều khiển 8051 xây dựng dựa vào vùng nhớ với tám ghi thông dụng (R0 –R70) Mỗi ghi ghi byte đơn Tám ghi đa dụng quản lý việc lưu trữ ghi lưu trữ 8051 cung cấp ghi lưu trữ mà bạn sử dụng Quá trình làm việc ghi dễ dàng nhận thấy bạn thực ngắt Dùng cho chương trình C 8051 ta khơng cần chọn mở ghi chương trình mặc đinh chọn ghi lưu trữ Các ghi lưu trữ 1, 2, quá trình ngắt để tránh việc lưu trữ khôi phục ngăn xếp Các điều kiện ngắt ( Interrupt Service Routines ) Trình biên dịch C51 cho phép viết điều kiện ngắt C trình biên dịch sử dụng cách hiệu mã khởi đầu mã kết thúc điều tiết mở ghi lưu trữ Các điều kiện ngắt khai báo sau: void function_name (void) interrupt interrupt_number [using register_bank] Chỉ số ngắt (interrupt number) giúp xác định địa véc tơ ngắt hàm ngắt Sử dụng bảng sau để xác định số ngắt: Interrupt Number Address Interrupt Number Address (EXTERNAL INT 0) 0003h 16 0083h (TIMER/COUNTER 0) 000Bh 17 008Bh (EXTERNAL INT 1) 0013h 18 0093h (TIMER/COUNTER 1) 001Bh 19 009Bh (SERIAL PORT) 0023h 20 00A3h (TIMER/COUNTER 2) 002Bh 21 00ABh (PCA) 0033h 22 00B3h SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 56 Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc 003Bh 23 00BBh 0043h 24 00C3h 004Bh 25 00CBh 10 0053h 26 00D3h 11 005Bh 27 00DBh 12 0063h 28 00E3h 13 006Bh 29 00EBh 14 0073h 30 00F3h 15 007Bh 31 00FBh Việc sử dụng thuộc tính ta rõ ghi lưu trữ suốtt thời gian thực hàm ngắt Những điều ngắt khoảng ngắn hiệu khơng sử dụng thuộc tính, chúng sử dụng ghi lưu trữ bạn kiểm chứng hai đoạn mã essembler xem hiệu chúng Chú y: Các hàm kèm theo điều kiện ngắt cần phải biên tập với thị NOAREGS Việc bảo đảm việc biên dịch không phát sinh việc thay đổi ghi tuyệt đối Ví dụ sau cho ta thấy hàm ngắt tiêu biểu: #include // Special Function Registers of 80C51 CPU #pragma NOAREGS // not use absolute register symbols (ARx) // for functions called from interrupt routines static void HandleTransmitInterrupt (void) { : : } static void HandleReceiveInterrupt (void) { : : } #pragma AREGS // for other code it is save to use ARx symbols static void com_isr (void) interrupt using { if (TI) HandleTransmitInterrupt (); if (RI) HandleReceiveInterrupt (); } Trong ví dụ điều kiện ngắt chi số ngắt thiết lập Tên hàm ngắt com_isr Khi lệnh ngắt thực kéo theo, mã mục lưu vào ghi CPU chọn ghi lưu trữ Khi thủ tục ngắt kết thúc giá trị ghi khôi phục Sau đoạn mã sinh lậnh ngắt kể Chú ý nội dung ghi lưu trữ hốn đổi khơi phục lại sau 0000 C0E0 Pointer 0002 C083 0004 C082 0006 C0D0 ; FUNCTION com_isr (BEGIN) PUSH ACC ; Save the Accumulator and Data PUSH PUSH PUSH DPH DPL PSW ; Save PSW (and the current Register Bank) SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 57 Đồ Án Tốt Nghiệp 0008 : : 0052 0054 0056 0058 005A 75D008 MOV D0D0 D082 D083 D0E0 32 GVHD:Huỳnh Minh Ngọc PSW,#08H ; This selects Register Bank POP PSW ; Restore PSW (and prior reg bank) POP DPL POP DPH POP ACC ; Restore the Accumulatorand DPTR RETI ; FUNCTION com_isr (END) Các ghi cho phép ngắt (Interrupt Enable Registers) 8051 cung cấp điều kiện ngắt cho nhiều chip ngoại vi Quá trình ngắt hồn tồn phụ thuộc vào bit EA Interrupt Enable (IE) SFR Khi bit EA lên mức trình ngắt thực Khi bit EA xuống mức q trình ngắt bị vơ hiệu Mỗi q trình ngắt kiểm sốt than ghi IE SFR Tên số chip 8051 có ghi IE Kiểm tra tài liệu chip để tận dụng q trình ngắt Các port song song vào/ra (Parallel Port I/O) Một chip 8051 bình thường có port vào song song mà bạn kết nối với thiết bị ngoại vi Chúng Port 0, Port 1, Port 2, Port Một số IC 8051 mở rơng có tới Port xuất nhập Port Direction Width Alternate use P0 I/O bits Mux'd 8-bit bus: A0-A7 & D0-D7 P1 I/O bits P1.0-P1.7: Available for user I/O P2 I/O bits Mux'd 8-bit bus: A8-A15 P3 I/O bits P3.0: RXD (Serial Port Receive) P3.1: TXD (Serial Port Transmit) P3.2: /INT0 (Interrupt input) P3.3: /INT1 (Interrupt input) P3.4: T0 (Timer/Counter Input) P3.5: T1 (Timer/Counter Input) P3.6: /WR (Write Data Control) P3.7: /RD (Read Data Control) Các Port IC 8051 bình thường khơng có liệu ghi điều khiển Thay vào đó, chân Port 1, Port 2, Port chân tăng lên mà chúng đầu nhập hay đầu xuất Để ghi giá trị vào Port bạn đơn giản ghi giá trị tùng chân Port Để lấy giá trị từ Port trước hết giá trị chân phải ghi ( giá trị ban đầu sau RESET ) Ví dụ sau chương trình ghi xuất giá trị Port I/O: sfr P1 = 0x90; sfr P3 = 0xB0; sbit DIPswitch = P1^4; sbit greenLED = P1^5; // SFR definition for Port // SFR definition for Port // DIP switch input on Port bit // green LED output on Port bit void main (void) { unsigned char inval; SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 58 Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc inval = 0; // initial value for inval while (1) { if (DIPswitch == 1) { // check if input P1.4 is high inval = P1 & 0x0F; // read bit from P1 greenLED = 0; // set output P1.5 to low } else { // if input P1.4 is low greenLED = 1; // set output P1.5 to high } P3 = (P3 & 0xF0) | inval; // output inval to P3.0 P3.3 } } Timer/Counter ( định thời đếm ) IC 80C52 có ba Timer/Counter (Timer 0, Timer 1, Timer 2) Timer Timer có chức thơng thường Timer có khả ứng dụng cao Các timer hoạt động độc lập với với kiểu định thời, kiểu đếm, kiểu phát tốc độ baud (cho Port tuần tự) Chương trình sau ví dụ dùng Timer tạo xung vng có tần số 10KHz #include /* * Timer Interrupt Service Routine: executes every 100 clock cycles */ static unsigned long overflow_count = 0; void timer1_ISR (void) interrupt { overflow_count++; } // Increment the overflow count /* * MAIN C function: sets Timer1 for 8-bit timer w/reload (mode 2) * The timer counts to 255, overflows, is reloaded with 156, and * generates an interrupt */ void main (void) { TMOD = (TMOD & 0x0F) | 0x20; reload) TH1 TL1 ET1 TR1 EA = = = = = 256 - 100; TH1; 1; 1; 1; while (1); timer ISR will // Set Mode (8-bit timer with // Reload TL1 to count 100 clocks // Enable Timer Interrupts // Start Timer Running // Global Interrupt Enable // Do Nothing (endless-loop): the SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 59 Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc // occur every 100 clocks Since the 80C51 CPU runs // at 12 MHz, the interrupt happens 10 KHz } Bộ biến đổi tương tự – số Các biến đổi tương tự số A/D linh kiện có số thành viên họ 8051 phổ biến Các biến đổi A/D thường điều khiển thông qua ghi chủ ADCON, ghi gán cho vị trí cịn trống đoạn nhớ dành cho SFR, chi ADCON cho phép người sử dụng chọn lựa kênh cần biến đổi A/D, bặ đầu biến đổi kiểm tra trạng thái lần biến đổi Các biến đổi A/D điển hình cần 40 chu kỳ lệnh để hoàn tất việc biến đổi chúng cấu hình để tạo ngắt vào lúc hồn tất việc biến đổi, việc làm cho vi điều khiển định hướng đến vector ngắt cụ thể dành cho việc biến đổi A/D thông thường khuyết điểm biến đổi A/D yêu cầu vi điều khiển phải mức tính cực thay vào nghỉ để chờ ngắt việc biến đổi hoàn tất Kết việc biến đổi đọc từ SFR khác cặp SFR, phụ thuộc vào độ phân giãi biến đổi Chương trình sau ví dụ chuyển đổi tương tự từ tín hiệu ngõ vào sang số: #include #include void main (void) { unsigned char chan_2_convert; SCON = 0x50; TMOD |= 0x20; TH1 = 0xA0; TR1 = 1; TI = 1; // Configure the serial port // Configure A/D to sequentially convert each input channel ADCCON1 = 0x7C; while (1) { unsigned int conv_val; unsigned char channel; // 0111 1100 // Start a conversion and wait for it to complete chan_2_convert = (chan_2_convert + 1) % 8; ADCCON2 = (ADCCON2 & 0xF0) | chan_2_convert; SCONV = 1; while (ADCCON3 & 0x80); // Read A/D data and print it out channel = ADCDATAH >> 4; SVTH:Lê Văn Long & Đặng Đức Trung CDDT6K Trang 60 Đồ Án Tốt Nghiệp GVHD:Huỳnh Minh Ngọc conv_val = ADCDATAL | ((ADCDATAH & 0x0F)