intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương II: Tìm hiểu vi điều khiển AVR

Chia sẻ: Nguyễn Mạnh Tuấn | Ngày: | Loại File: DOC | Số trang:30

308
lượt xem
107
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

AVR là một họ vi điều khiển do hãng Atmel sản xuất. Atmel cung cấp các vi điều khiển phổ biến như 8051, AT91 ARM7, Atmel AVR 8-bit RISC, và mới đây là DSP dual-CPU AT57.

Chủ đề:
Lưu

Nội dung Text: Chương II: Tìm hiểu vi điều khiển AVR

  1. Chương II: Tìm hiểu vi điều khiển AVR 2.1 Giới thiệu Tổng quan về AVR − AVR là một họ vi điều khiển do hãng Atmel sản xuất. Atmel cung cấp các vi điều khiển phổ biến như 8051, AT91 ARM7, Atmel AVR 8-bit RISC, và mới đây là DSP dual-CPU AT57. Atmel AVR32 là một vi điều khiển lai DSP với 7 tầng pipeline và khả năng thực thi song song.. AVR là chip vi điều khiển 8 bits với cấu trúc tập lệnh đơn giản hóa-RISC(Reduced Instruction Set Computer), một kiểu cấu trúc đang thể hiện ưu thế trong các bộ xử lí. Hình 1 ảnh một chip AVR 2.1.1 Ưu thế của MCU AVR: Kết nối phần cứng cho AVR đơn giản với những linh kiện thông dụng như điện trở, tụ điện, thạch anh. Dòng ra điều khiển Port lớn và không cần dùng điện trở kéo. Thiết kế mạch nạp cho AVR khá đơn giản giao tiếp qua cổng LPT, COM, USB. Hỗ trợ ISP lập trình trực tiếp trên mạch. Hỗ trợ lập trình trên nền ngôn ngữ ASM, C với nhiều công cụ hỗ trợ như CodeVision, AVR Studio. Hầu hết các chip AVR có những tính năng (features) sau: Xung External OSC lên đến 16Mhz và Internal OSC 8Mhz. Bộ nhớ chương trình Flash có thể lập trình lại rất nhiều lần và dung l ượng lớn có thể ghi và xóa trên 1000 lần. Bên cạnh đó bộ nhớ EEPROM có thể lập trình được. 32 Port xuất nhập. 8 bits, 16 bits timer/counter tích hợp PWM. Các bộ chuyển đối Analog – Digital phân giải 10 bits Analog comparator. Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232).
  2. • Giao diện nối tiếp Two –Wire –Serial (tương thích chuẩn I2C) Master và Slaver. Giao diện nối tiếp Serial Peripheral Interface (SPI). 2. 1.2Một số dòng AVR: Nhìn chung AVR có các dòng chính sau: * tinyAVR — the ATtiny series - 1–8 kB program memory - 6–32-pin package - Limited peripheral set * megaAVR — the ATmega series - 4–256 kB program memory - 28–100-pin package - Extended instruction set (Multiply instructions and instructions for handling larger program memories) - Extensive peripheral set - XMEGA — the ATxmega series - 16–384 kB program memory - 44–64–100-pin package (A4, A3, A1) - Extended performance features, such as DMA, "Event System", and cryptography support. - Extensive peripheral set with DACs - Application specific AVR - megaAVRs with special features not found on the other members of the AVR family, such as LCD controller, USB controller, advanced PWM, CAN etc. Một số dòng AVR phổ biến như : AT90S1200 , AT90S2313 , AT90S2323 AT90S2343, AT90S2333, AT90S4433, AT90S4414, AT90S8515, AT90S4434, AT90S8535, AT90C8534, ATtiny10, ATtiny11, ATtiny12, ATtiny15, ATtiny22, ATtiny26, ATtiny28, ATmega16, ATmega8/8515/8535, ATmega161, ATmega162, ATmega163, ATmega169 ATmega32 ATmega323 ATmega103 ATmega64/128/2560/2561
  3. 2.2 Cấu trúc phần cứng của Atmega16 2.2.1 Cấu trúc vi điều khiển Atmega 16 Sơ đồ cấu trúc CPU của ATmega16 để tăng tối đa hiệu suất và tính tương thích, vi điều khiển AVR sử dụng kiến trúc Havard tức là bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau cả về vùng nhớ và đường bus. Bộ nhớ chương trình của AVR là bộ nhớ Flash có dung lượng 128 Kb.
  4. Bộ nhớ chương trình có độ rộng bus là 16 bit. Những địa chỉ đầu tiên của bộ nhớ chương trình được dùng cho bảng vecto ngắt. Bộ nhớ chương trình Flash được chia thành 2 phần, phần chương trình khởi động và phần chương trình ứng dụng. Cả hai phần đều dành những bit khóa cho việc bảo vệ ghi và đọc/ghi. Lệnh SPM dùng ghi vào phần bộ nhớ chương trình Flash ứng dụng phải ở một nơi nhất định trong phần bộ nhớ chương trình khởi động. Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là bộ nhớ SRAM và bộ nhớ EEPROM. Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại nằm tách biệt nhau và được đánh địa chỉ riêng. Các câu lệnh trong bộ nhớ chương trình được thực hiện với một cấp ống dẫn riêng. Khi một lệnh được thực hiện thì lệnh tiếp theo được mang về sẵn từ b ộ nhớ chương trình. Ý tưởng này cho phép mỗi lệnh được thực hiện trong chỉ một chu kỳ xung nhịp. Bộ nhớ chương trình trong hệ thống là bộ nhớ Flash có thể lập trình lại. Truy cập nhanh tệp thanh ghi chứa 32 thanh ghi 8 bit làm việc mục đích chung với thời gian truy cập trong một chu kỳ xung nhịp. Điều này cho phép đơn vị xử lý số học và logic (ALU) hoạt động trong một chu kỳ đơn. Một hoạt động điển hình của ALU là hai toán hạng được lấy ra từ tệp thanh ghi, hoạt động thực hiện tính toán giữa các toán hạng, sau đó kết quả lại được lưu vào tệp thanh ghi, tất cả các công việc đó được thực hiện trong một chu kỳ xung nhịp. Có 6 trong 32 thanh ghi có thể được sử dụng như 3 con trỏ thanh ghi đ ịa chỉ gián tiếp 16 bit cho việc ghi địa chỉ vùng nhớ dữ liệu, cho phép có thể tính toán địa chỉ. Một trong số những con trỏ địa chỉ này có thể dược dùng nhưmột con trỏ địa chỉ để tra bảng trong bộ nhớ chương trình Flash. Các thanh ghi này là các thanh ghi 16 bit X, Y và Z. ALU hỗ trợ các phép tính số học và logic giữa các thanh ghi hoặc giữa hằng số với một thanh ghi. Các phép tính với 1 thanh ghi riêng lẻ có thể cũng đ ược thực hiện trong ALU. Sau mỗi phép tính số học thanh ghi trạng thái được cập nhật đ ể phản ánh thông tin về kết quả của phép tính. Dòng chương trình đ ược qui đ ịnh bởi các lênh nhảy có điều kiện và không điều kiện và các lệnh gọi, có thể tr ực
  5. tiếp địa chỉ trong toàn bộ không gian địa chỉ. Hầu hết các lệnh của AVR có dạng 1 từ 16 bit. Mỗi địa chỉ của bộ nhớ chương trình chứa một lệnh 16 hoặc 32 bit. Trong suốt thời gian phục vụ ngắt hoặc gọi chương trình con, địa chỉ của bộ đếm chương trình được cất vào ngăn xếp (stack). Ngăn xếp thực tế được đặt trong vùng dữ liệu chung SRAM, do đó kích thước của ngăn xếp chỉ bị giới hạn bởi tất cả kích thước SRAM và cách sử dụng SRAM. Tất cả người sử dụng chương trình phải khai báo vị trí ban đầu của SP (stack pointer: con trỏ ngăn xếp) trong chương trình reset (trước khi thực hiện các chương trình con hay thực hiện ngắt). Con trỏ ngăn xếp SP được đọc/ghi có thể truy nhập vào vùng nhớ I/O. Bộ nhớ dữ liệu SRAM có thể truy nhập dễ dàng thông qua 5 chế độ địa chỉ khác nhau được hỗ trợ trong kiến trúc của AVR. Đơn vị ngắt linh hoạt có các thanh ghi điều khiển riêng của nó trong vùng nhớ I/O với một bit cho phép ngắt toàn cục trong thanh ghi trạng thái. Tất cả các ngắt đều có các vector ngắt riêng biệt trong bảng vector ngắt. Các ngắt có quy ền ưu tiên ngắt khác nhau tùy thuộc vào vị trí của vector ngắt. Vector ngắt có địa chỉ càng thấp có mức ưu tiên càng cao. Vùng nhớ I/O chứa 64 địa chỉ cho các chức năng ngoại vi như các thanh ghi điều khiển, SPI, và các chức năng I/O khác. Vùng nhớ I/O có thể truy cập trực tiếp hoặc như các vị trí trong vùng nhớ dữ liệu theo địa chỉ trong tệp thanh ghi từ $20 đến $5F 2.2.2 Tính năng vi điều khiển AVR Atmega16 Ngày nay công nghệ số đã và đang được ứng dụng rộng rãi trong mọi ngành c ủa hoa học kỹ thuật. Ở các nước công nghiệp, truyền động điện đã ứng dụng rất thành công công nghệ này với những ưu việt hơn so với phương pháp điều khiển tương tự truyền thống như: - Mềm dẻo trong việc thay đổi cấu trúc và tham số của hệ thống tự động. - Độ chính xác cao. - Có khả năng chống nhiễu tốt. - Dễ dàng tự động hóa. Việc ứng dụng công nghệ số, sử dụng vi điều khiển trong việc thiết kế và chế tạo bộ khởi động mềm là hoàn toàn phù hợp với điều kiện thực tế và xu thế chung. Sử dụng công nghệ số trong thiết kế, chế tạo bộ khởi động mềm có thể giúp ta dễ dàng tạo dáng đường đặc tính khởi động theo ý muốn mà bằng mạch điều khiển
  6. tương tự để làm được việc này thì sẽ gặp nhiều khó khăn. Vi điều khiển ATmega16 là vi điều khiển thuộc họ AVR của hãng Atmel, là một dòng vi điều khiển tích hợp cao với những chức năng cơ bản nhưng rất cần thiết trong những ứng dụng cụ thể. Vi điều khiển ATmega16 cung cấp những tính năng sau: - 16K bytes bộ nhớ chương trình dạng flash có thể Read-While-Write . - 512 bytes EEPROM. - 1K byte RAM tĩnh (SRAM). - 32 đường kết nối I/O mục đích chung. - 32 thanh ghi làm việc mục đích chung được nối trực tiếp với đơn vị xử lý số học và logic (ALU). - Một giao diện JATG cho quét ngoại vi. - Lập trình và hỗ trợ gỡ rối trên chip. - 3 Timer/Counter linh hoạt với các chế độ so sánh. - Các ngắt ngoài và ngắt trong (21 nguyên nhân ngắt). - Chuẩn truyền dữ liệu nối tiếp USART có thể lập trình. - Một ADC 10 bit, 8 kênh với các kênh đầu vào ADC có thể lựa chọn bằng cách lập trình. - Một Watchdog Timer có thể lập trình với bộ tạo dao động bên trong. - Một cổng nối tiếp SPI ( serial peripheral interface). - 6 chế độ tiết kiệm năng lượng có thể lựa chọn bằng phần mềm. - Lựa chọn tần số hoạt động bằng phần mềm. - Đóng gói 40 chân kiểu PDIP. - Tần số tối đa 16MHz. - Điện thế 4,5– 5,5V 2.2.3 Mô tả hoạt động của cấu trúc Thanh ghi trạng thái là một thanh ghi có 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.
  7. Hình 5. Thanh ghi trạng thái SREG C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập) Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0) N: Negative Flag (Nếu kết quả của phép toán là âm) V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2) V, For signed tests (S=N XOR V) S: N H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau) T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung gian trong các lệnh BLD,BST). I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt. Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.) Con trỏ ngăn xếp (SP)Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặc biệt 8 bit. Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớ RAM là $5E). Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp. Hình 6. Thanh ghi con trỏ ngăn xếp Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC đ ược l ưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí. Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.
  8. Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình tr ạng sẵn xàng cho đổi dữ liệu của mình. Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hợc khi nó đã truyền được một byte thì cờ TX được thiết lập… Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện l ại và l ưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngăt nó đang thực hiện. Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên .Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp. Trường hớp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ. Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua. Bộ nhớ ngăn xếp là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên. Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP. Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ :SPL : 0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E. Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp s ẽ giảm 1 khi thực hiện lệnh push. Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Như vậy con trỏ ngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con được gọi hoặc các ngắt được cho phép phục vụ. Và giá trị ngăn xếp ít nhất cũng phải lớn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi. Ví dụ: char cSREG; cSREG = SREG; /* store SREG value */ /* disable interrupts during timed sequence */ CLI();
  9. EECR |= (1
  10. cung cấp điện trở kéo lên bên trong (được chọn cho từng bit). - Port B(PB7..PB0): Cổng B là một cổng I/O 8 bit hai chiều trực tiếp có các điện trở kéo lên bên trong (được chọn cho từng bit). Ngoài ra Port B còn đ ược s ử dụng cho các chức năng đặc biệt khác: - Port C(PC7..PC0): Port C cũng là một cổng I/O 8 bit hai chiều tr ực ti ếp với các điện trở kéo lên bên trong (được chọn cho từng bit). Khi giao diện JTAG được phép hoạt động, các điện trở kéo lên của các chân PC5(TDI), PC3(TMS), và PC2(TCK) sẽ vẫn hoạt động cả khi xảy ra reset. Port C được sử dụng cho giao diện JTAG và các chức năng đặc biệt khác như trong bảng: - Port D(PD7..PD0): là một cổng I/O 8 bit hai chiều trực tiếp có các điện trở kéo lên bên trong (được chọn cho từng bit). Port D cũng được dùng cho các chức năng đặc biệt khác của ATmega16 như trong bảng:
  11. - RESET : Là đầu vào reset. Một tín hiệu mực thấp đặt vào chân này trong khoảng thời gian dài hơn độ dài xung nhỏ nhất sẽ phát ra một reset, ngay cả khi xung nh ịp không hoạt động. Xung ngắn hơn thì không đảm bảo để phát ra một reset. - XTAL1: đầu vào cho bộ khuếch đại đảo dao động và đầu vào đến mạch hoạt động đồng hồ xung nhịp bên trong. - XTAL2: đầu ra cho bộ khuếch đại đảo dao động - AVCC: là chân cấp nguồn áp cho Port A và bộ chuyển đổi A/D. Chân này nên được nối với VCC cả khi ADC không được sử dụng. nếu ADC đ ược sử dụng, chân AVCC nên được nối với VCC qua bộ lọc thông thấp. - AREF: chân điện áp tham chiếu của bộ chuyển đổi A/D 2.3.ngôn ngữ lập trình Ngôn ngữ lập trình C là ngôn ngữ khá mạnh và được nhiều người sử dụng. Lập trình bằng ngôn ngữ cấp cao như C giúp xây dựng các ứng dụng nhanh chóng và dễ dàng hơn. Sau đây sẽ giới thiệu một cách cơ bản nhất về cách viết chương trình cho AVR sử dụng ngôn ngữ C. Một chương trình C cho AVR thường bao gồm những thàn phần cơ bản như: chú thích (comments), biểu thức (expressions), câu lệnh (statements), khối (blocks), các toán tử, cấu trúc điều khiển (flow controls), hàm (function)…. Chú thích (comments): Chú thích là những đoạn trong chương trình dùng đ ể giải thích hay bình phẩm những gì ta làm trong chương trình, phần chú thích không được biên dịch vì vậy nó không có bất kỳ ảnh hưởng nào đến hoạt động của chương trình. Có hai cách để tạo phần chú thích trong C là chú thích theo từng dòng bằng cách đặt ở đầu dòng chú thích dấu “//” và chú thích block bằng cách kẹp đo ạn c ần chú thích vào giữa /*…*/. Tiền xử lý (preprocessor): là một tiện ích của ngông ngữ C, các preprocessor được trình biên dịch xử lý trước tất cả các phần khác. Các preprocessor được bắt đầu bằng dấu “#”, trong ngôn ngữ C có hai preprocessor được sử dụng phổ biến nhât đó là #include và #define. Preprocessor #include dùng để chỉ định 1 file được đính kèm trong quá trình xử lý, và #define dùng để định nghĩa một chuỗi thay thế hoặc 1 macro.
  12. Biểu thức (expressions): là một phần của các câu lệnh, biểu thúc có thể bao gồm các biến, các toán tử, gọi hàm…. Biểu thức trả về một giá trị đơn. Biểu thức không phải là một câu lệnh hoàn chỉnh. Câu lệnh (statements): là một dòng lệnh hoàn chỉnh có thể bao gồm các từ khóa (key words), các biểu thức các câu lệnh khác và được kết thúc bằng dấu “;”. Khối (blocks): là sự kết hợp của nhiều câu lệnh để cùng thực hiện một nhiệm vụ nào đó. Khối được kẹp giữa hai dấu mở khối “{” và đóng khối “}”. Toán tử (operators): là những ký hiệu báo cho trình biên dịch biết nhũng nhiệm vụ cần thực hiện. - Các toán tử đại số - Các toán tử logic và quan hệ
  13. - Các toán tử truy nhập và kích thước - Các toán tử thao tác bit
  14. Cấu trúc điều khiển (flow controls): Các cấu trúc điều khiển cho phép chương trình thực hiện đúng theo ý tưởng của người viết chương trình. Các cấu trúc điều khiển thường dùng trong lập trình C: - “If (điều kiện) câu lệnh;” Nếu điều kiện là đúng thì thực hiện câu l ệnh ti ếp theo sau, câu lệnh có thể được viết cùng dòng hay dòng sau từ khóa if. Điều kiện là một biểu thức bất kỳ có thể là sự kết hợp của nhiều điều kiện thông qua các toán tử quan hệ AND(&&), OR(||), … Điều kiện được cho là đúng khi nó khác 0 Trong trường hợp cần thực thi nhiều câu lệnh khi một điều kiện nào đó thỏa mãn ta có thể đặt các câu lệnh đó trong một khối: If (điều kiện) { Ccâu lệnh ; … } - “If (điều kiện) câu lệnh 1; else câu lệnh 2;”: Nếu điều kiện đúng thì thực hiện câu lệnh 1, nếu không đúng thì thực hiện câu lệnh 2. Việc đặt else và các câu lệnh trên cùng 1 dòng hay khác dòng không làm thay đổi ý nghĩa của cấu trúc; Nếu cần thực hiện nhiều câu lệnh thì các câu lệnh cần được dặt trong 1 khối: If (điều kiện){ Câu lệnh 1; Câu lệnh 2; … } Else { Câu lệnh 1; Câu lệnh 2; … } - Trong trường hợp có nhiều khả năng xảy ra cho 1 biểu thức (hay một biến) với mỗi khả năng lại cần thực hiện một công việc nào đó, ta có thể sử dụng cấu trúc switch: Switch (biểu thức){ Case hằng _số_1: Các câu lệnh 1;
  15. Break; Case hằng_số_2: Các câu lệnh 2; Break; Defaul: Các câu lệnh khác; } Cấu trúc switch hoạt động theo cách thức sau: Đầu tiên chương trình tính giá tr ị của biểu thức sau đó lần lượt dem so sánh với các giá trị hằng số đặt phía sau từ khóa case. Biểu thức có giá trị bằng hằng số nào thì thực hiện các câu lệnh trong case đó dến khi tìm thấy từ khóa break. Có thể đặt bao nhiêu case tùy ý. Nếu giá trị của biểu thức không tương ứng với các hằng số thì chương trình th ực hi ện các câu l ệnh trong phần defaul: (nếu có phần này). - Cấu trúc lặp While: “while (điều kiện) câu lệnh 1”. Ý nghĩa của cấu trúc lặp while là thực hiện câu lệnh 1 (hoặc 1 khối câu lệnh đặt trong dấu “{ }”) khi điều kiện còn đúng. - Cấu trúc lặp for : “for (biểu thức 1; biểu thức 2; biểu thức 3) câu lệnh”. Trong đó biểu thức 1 là biểu thức khởi tạo, biểu thức 2 là điều kiện, biểu thức 3 là bi ểu thức th ực hiện sau. Biểu thức 1 được thực hiện 1 lần sau đó ch ương trình ki ểm tra điêu ki ện qua biểu thức 2, nếu điều kiện đúng câu lệnh được thực hiện, sau đó thực hi ện biểu th ức 3 rồi lại quay lại kiểm tra điều kiện. Cứ như vậy tới khi điều ki ện không còn đúng n ữa thì chương trình thoát khỏi vòng lặp. Hàm (functions): Trong C có rất nhiều hàm, mỗi hàm dùng để thực hiện một ch ức năng cụ thể. Các hàm trong C thường được thiết kế nhỏ gọn, để có những hàm ph ức tạp người dùng cần tự tạo ra. Các từ khóa (key words): Từ khóa là những từ quy định của ngôn ngữ C nh ư tên các kiểu dữ liệu (char, int, unsigned int, …); tên các cấu trúc đi ều khi ển (if, while, for,…). Cần chú ý không được đặt tên biến trùng với từ khóa. Các ki ểu dữ liệu th ường dùng khi lập trình C cho viđiều khiển: Tên kiểu dữ liệu Số byte Khoảng dữ liệu - 127 đến 127 hoặc 0 đến 255 Char 1 0 đến 255 Unsigned char 1 - 127 đến 127 Signed char 1 - 32767 đến 32767 Int 2 0 đến 65353 Unsigned int 2 - 32767 đến 32767 Singed int 2 - 32767 đến32767 Short int 2
  16. 0 đến 65353 Unsigned short int 2 - 32767 đến 32767 Singed short int 2 - 2147483647 đến 2147483647 Long int 4 0 đến 4294967295 Unsigned long int 4 - 2147483647 đến 2147483647 Singed long int 4 - (263 – 1) đến (263 – 1) Long long int 8 0 đến (264 – 1 ) Unsigned long long 8 int - (263 –1) đến (263 –1) Signed long long int 8 2.3.1 Hướng dẫn cài đặt và tạo một project mới Cài đặt trình biên dịch CoddeVision AVR C trong thư mục mặc định : C:/Cvavr. Theo các bước sau Chạy file cài đặt trong thư mục chứa Lựa chọn ngôn ngữ cho giao diện chương trình =>chọn ngôn ngữ và ấn phím ok Chương trình trình yêu cầu đọc hướng dẫn sử dụng và chọn thư mục mặc đ ịnh sau khi chọn xong thư mục chứa ta ấn next sẽ có cửa số thong báo như sau
  17. Chọn lntall xuất hiện cửa sổ thông báo hoàn thành cài đăt và chọn finish Sau khi cài đặt xong ta chạy chương trình bằng file cvavr.exe trong thư mục: C:/Cvavr/bin Tạo một project mới bằng cách chọn File/New trong bảng chọn (menu option), cửa sổ trong hình vẽ hiện ra: Chọn “Project” sau đó ấn “OK”. Cửa số sau hiện ra: Ấn “yes” để sử dụng CodeWizardAVR viết chương trình tự động. 2.3.2 Cách sử dụng CodeWizardAVR lập trình tự động : CodeWizardAVR làm đơn giản hóa việc viết những đoạn code mở đầu cho những loại vi điều khiển AVR khác nhau. Sau khi ấn “yes” trong cửa số “confirm” ở trên sẽ hiện ra cửa sổ để chọn lựa:
  18. Trong bài toán điều khiển bộ khởi động mềm này ta chọn chip ATmega16 với tần số xung nhịp là 16MHz. Định dạng các cổng vào/ra phù hợp với mục đích s ử dụng bằng cách chọn tab “Ports” Cài đặt mặc định của tất cả các cổng I/O là các đầu vào (input). Nếu muốn sử dụng bit nào làm nơi xuất dữ liệu ta cần cài đặt cho bit đó thành đ ầu ra (output) bằng cách click vào vào bit đó.
  19. Định dạng các Timer bằng cách chọn tab “Timer” Chọn tần của timer phù hợp với giá trị tần số xung nhịp, chọn chế độ hoạt động và các ngắt timer định sử dụng. Ngoài ra có thể định dạng cho các chức năng khác như ngắt ngoài, ADC,… bằng cách lựa chọn các tab tương ứng. Sau khi đã lựa chọn hết các chức năng cần sử dụng của vi điều khiển ta lưu project bằng cách chọn File/Generate, Save and Exit trong menu option.
  20. CodeWizardAVR sẽ tạo ra một phần khung chương trình bằng ngôn ngữ C với các chế độ, các ngắt chính xác như đã lựa chọn ở trên. Sau khi chọn File/Generate, save and exit trong menu option cửa sổ trong hình hiện ra để giúp người lập trình lưu project: Nhấn nút “Create New Folder” để tạo một file mới chưa tất cả các file trong project, sau đó dặt tên file và nhấn nút “Save” để lưu file nguồn trình biên dịch C (C compiler source file) dưới dạng file *.c , một hộp hội thoại nữa hiện ra: Trong hộp hội thoại này ta phải xác định rõ tên của project và lưu dưới dạng file *.prj trong cùng một thư mục với C compiler source file đã lưu ở trên. Cuối cùng, một hộp hội thoại nữa hiện ra nhắc chúng ta lưu CodeWizard project file
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2