CHƯƠNG I TỔNG QUAN VỀ VI ĐIỀU KHIỂN ATMEGA 1.1 Giới thiệu chung ATmega 8 có công suất cao, tiêu thụ năng lượng thấp, cấu RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8bit, 16 MIPA tại tấn số đặt 16MHz, bộ nhân 2 chu kỳ On-chip, Power-on Reset và Brown-out Dectectiion có thể lập trình, bộ dao động RC bên trong có thể lập trình các mức, 5 mode ngủ ( Idle, ADC Noise reduction, Power-save, power-down và Standby), có khả năng Reset khi bật nguồn, khả năng dò lỗi Brown out laapjt rình được, có nguồn ngắt trong và ngoài. Thiết bị được sản xuất áp dụng công nghệ tích hợp bộ nhớ non-volatile cao của Atmel. Bộ nhớ chương trình Flash này có thể lập trình thông qua ghép nối tiếp SPI bằng chương trình lập trình boot có thể sử dụng bất kỳ một ghép nối nào để download chương trình ứng dụng trong bộ nhớ Flash. Mạch gồm có Atmega8, Sim900, port mở rộng, cổng Com kết nối với máy tính, giao tiếp với Sim900.1:Sơ đồ cấu trúc ATmega8 ATmega8 là vi điều khiển 8 bit, 8Kbyte flash, 512byte EEPROM, 1Kbyte SRAM, có hai bộ timer/couter 8 bit và 01 bộ timer/couter 16 bit, có 3 kênh điều khiển xung, 6 kênh lối vào chuyển đổi DC độ phân giải 10 bit dựa trên kiến trúc RISC.
Sử dụng mạch giao động ngoài từ 0-8Mhz với Atmega8L, với atmega8 từ 0-16Mhz. ATmega 8 TIEU LUAN MOI download : skknchat@gmail.com 8 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm,.2 Cấu trúc nhân AVR AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữ liệu. Các lệnh được thực hiện chỉ trong một chu kỳ xung clock. Bộ nhớ chương trình được lưu trong bộ nhớ Flash.1 ALU ALU làm việc trực tiếp với các thanh ghi chức năng chung.
Các phép toán được thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit.2 Thanh ghi trạng thái Đây là thanh ghi trạng thái 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.2 : 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ụ.) TIEU LUAN MOI download : skknchat@gmail.3 Các thanh ghi chức năng chung Hình 1.
Thanh ghi chức năng chung 1.4 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.4: 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.5 Quản lý ngắt 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ẽ TIEU LUAN MOI download : skknchat@gmail.com 10 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ắtCPU 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ếplà 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.6 Cấu trúc bộ nhớ AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình.Ngoài ra ATmega8 còn có thêm bộ nhớ EEPROM để lưu trữ dữ liệu.1 Bộ nhớ chương trình (Bộ nhớ Flash) Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16.
Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trình ứng dụng. TIEU LUAN MOI download : skknchat@gmail.5: Bản đồ bộ nhớ chương trình 1.2 Bộ nhớ dữ liệu SRAM 1120 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội.6 Bản đồ bộ nhớ dữ liệu SRAM 1.3 Bộ nhớ dữ liệu EEPROM ATmega8 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một.3 Các cổng vào ra (I/O) Vi điều khiểnATmega8 có 23 đường vào ra chia làm hai nhóm 8bit và một nhóm 7 bít. Các đường vào ra này có rất nhiều tính năng và có thể lập trình được.Ở đây ta sẽ xét TIEU LUAN MOI download : skknchat@gmail.com 12 chúng là các cổng vào ra số.Nếu xét trên mặt này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hướng theo từng bit.
Và chứa cả điện trở pull-up (có thể lập trình được).Mặc dù mỗi port có các đặc điểm riêng nhưng khi xét chúng là các cổng vào ra số thì dường như điều khiển vào ra dữ liệu thì hoàn toàn như nhau.Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là : thanh ghi dữ liệu cổng (PORTA, PORTB, PORTC, PORTD) Các thanh ghi Port B Các thanh ghi Port C Các thanh ghi Port D 1.1 Thanh ghi DDRx Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hướng cổng PORTx (tức là cổng ra hay cổng vào). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx được định nghĩa như một cổng ra. TIEU LUAN MOI download : skknchat@gmail.com 13 Ngược lại nếu như bit đó không được set thì bit tương ứng trên PORTx được định nghĩa là cổng vào.2 Thanh ghi PORTx Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi được) nó là thanh ghi dữ liệu của cổng Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi ta ghi một bit lên thanh ghi này thì chân tương ứng trên port đó cũng có cùng mức logic.Trong trường hợp mà cổng được định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng.Cụ thể nếu bit nào đó của thanh ghi này được set (đưa lên mức 1) thì điện trở kéo lên (pull-up)của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái hi-Z.Thanh ghi này sau khi khởi động Vi điều khiểnsẽ có giá trị là 0x00.2 Thanh ghi PINx Đây là thanh ghi 8 bit chứa dữ liệu vào của PORTx (trong trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không thể ghi vào được.
Tóm lại - Để đọc dữ liệu từ ngoài thì ta phải thực hiện các bước sau: Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx (hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit). Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit). Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit). - Để đưa dữ liệu từ vi điều khiển ra các cổng cũng có các bước hoàn toàn tương tự.
Ban đầu ta cũng phải định nghĩa đó là cổng ra bằng cách set bit tương ứng của cổng đó….và sau đó là ghi dữ liệu ra bit tương ứng của thanh ghi PORTx.