Proteus của Labcenter Electronics là phần mền mô phỏng mạch đện rất được ưa thích hiện nay. So với phần mền mô phỏng mạch điện khác, Protues có rât nhiều ưu điểm nổi trội như: mô phỏng được rất nhiều linh kiện điện từ và thiết bị hiện thị, kết quả mô phỏng rất trực quan như một mạch điện thật, và một tính năng mà chúng ta những người học vi điều khiển quân tâm nhất là khả năng mô phỏng các chíp điều khiển với chương trình do người dùng nap. Protues hô trợ rất nhiều các chip viê điểu khiển như 8051, AVR, PIC, Nếu bạn muốn học AVR mà không có điều kiện hoặc kinh nghiệm để làm các mạch phát triển hoặc bạn muốn kiểm tra chương trình trước khi nạp vào mạch phát triển thì Protues là một lựa chọn không thể bỏ qua.
36 trang |
Chia sẻ: lethao | Lượt xem: 2487 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Đề tài Tìm hiểu AVR và lâp trình điều khiển Led 7 đoạn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
$33
PORTD
$12
$32
DDRD
$11
$31
PIND
$10
$30
PORTE
$03
$23
DDRD
$02
$22
PINE
$01
$21
PORTF
Không có
$62
DDRF
Không có
$61
PINF
$00
$20
PORTG
Không có
$65
DDRG
Không có
$64
PING
Không có
$6
Đưới đây là địa chỉ của tất cả các port.
Chú y: 3 bit cuối (bit 5, 6, 7) của các thanh ghi PORTG, DDRG và PING không sử dụng được. Khi đọc ta luôn nhận được giá trị 0.
Port A (PA0…PA7).
Port A là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong
(được lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port A có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hiệu đầu vào, các chân của cổng A sẽ tiêu thụ dòng nếu các điện trở pull-up bên trong được kích hoạt.
Port A được sử dụng làm các đường địa chỉ thấp và dữ liệu khi giao tiếp với bộ
nhớ ngoài theo bảng sau:
Các chân Port A cũng là ngõ vào analog của bộ chuyển đổi A/D
PA7…PA0
Chức năng bổ sung
PA7
ADC7 (địa chỉ và dữ liệu bit 7 giao tiếp với bộ nhớ ngoài)
PA6
ADC6 (địa chỉ và dữ liệu bit 6 giao tiếp với bộ nhớ ngoài)
PA5
ADC5 (địa chỉ và dữ liệu bit 5 giao tiếp với bộ nhớ ngoài)
PA4
ADC4 (địa chỉ và dữ liệu bit 4 giao tiếp với bộ nhớ ngoài)
PA3
ADC3 (địa chỉ và dữ liệu bit 3 giao tiếp với bộ nhớ ngoài)
PA2
ADC2 (địa chỉ và dữ liệu bit 2 giao tiếp với bộ nhớ ngoài)
PA1
ADC1 (địa chỉ và dữ liệu bit 1 giao tiếp với bộ nhớ ngoài)
Port B (PB0…PB7):
Port B là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong (đư ợc lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port B có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hi ệu đầu vào, các chân của cổng B sẽ ti êu thụ dòng nếu các điện trở pull-up bên trong đ ược kích hoạt.
Port B được sử dụng với những chức năng bổ sung theo bảng sau:
PB7…PB0
Chức năng bổ sung
PB7
OC2/OC1C( đầu ra so sánh v à đầu ra PWM cho timer/counter2 và đầu ra so sánh và đầu ra PWM C cho timer/counter1)
PB6
OC1B (đầu ra so sánh và đầu ra PWM B cho timer/counter1)
PB5
OC1A (đầu ra so sánh và đầu ra PWM A cho timer/counter1)
PB4
OC0 (đầu ra so sánh và đầu ra PWM cho timer/counter0)
PB3
MISO (đầu vào chủ/đầu ra tớ bus SPI)
PB2
MOSI (đầu ra chủ/đầu v ào tớ bus SPI)
PB1
SCK (chân Clock của SPI)
PB0
SS (ngõ vào chọn Slave của SPI)
Port C (PC0…PC7):
Port C là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong (đư ợc lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port C có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hi ệu đầu vào, các chân của cổng C sẽ ti êu thụ dòng nếu các điện trở pull-up bên trong đư ợc kích hoạt.
Port C được sử dụng với những chức năng bổ sung theo bảng sau:
PC7…PC0
Chức năng bổ sung
PC7
địa chỉ bit 15 giao tiếp với bộ nhớ ngoài
PC6
địa chỉ bit 14 giao tiếp với bộ nhớ ngoài
PC5
địa chỉ bit 13 giao tiếp với bộ nhớ ngoài
PC4
địa chỉ bit 12 giao tiếp với bộ nhớ ngoài
Pc3
địa chỉ bit 11 giao tiếp với bộ nhớ ngoài
PC2
địa chỉ bit 10 giao tiếp với bộ nhớ ngoài
PC1
địa chỉ bit 9 giao tiếp với bộ nhớ ngoài
PC
địa chỉ bit 8 giao tiếp với bộ nhớ ngoài
Port D (PD0…PD7)
Port D là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong (được lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port D có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hi ệu đầu vào, các chân của cổng D sẽ ti êu thụ dòng nếu các điện trở pull-up bên trong đ ược kích hoạt.)
Port D được sử dụng với những chức năng bổ sung theo bảng sau.
PD7…PD0
Chức năng bổ sung
PD7
T2 (ngõ vào của bộ đếm ngoài counter 2)
PD6
T1 (ngõ vào của bộ đếm ngoài counter 1)
PD5
XCK1 (chân I/O Clock của USART1)
PD4
ICP1 (chân bắt mẫu của Timer/Counter1)
PD3
INT3/TXD1(ngõ vào ngắt ngoài 3 hoặc truyền tín hiệu UART1)
PD2
INT2/RXD1(ngõ vào ngắt ngoài 2 hoặc nhận tín hiệu UART1)
PD1
INT1/ SDA (ngõ vào ngắt ngoài 1 hoặc Chân data I/O của giao thức Two-wire)
PD0
INT0/ SCL (ngõ vào ngắt ngoài 0 hoặc Chân Clock của giao thức
Port E (PE0…PE7)
Port E là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong (được lựachọn cho mỗi bit). Bộ đệm đầu ra của Port E có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hi ệu đầu vào, các chân của cổng E sẽ ti êu thụ dòng nếu các điện trở pull-up bên trong đư ợc kích hoạt.
Các chức năng khác của Port E
PE7… PD0
Chức năng bổ sung
PE7
INT7/ICP3 (ngõ vào ngắt ngoài 7 hoặc chân bắt mẫu của Timer/ Counter3)
PE6
INT6/T3 (ngõ vào ngắt ngoài 6 hoặc ngõ vào của bộ đếm ngoài Timer/Counter 3)
PE5
INT5/OC3C (ngõ vào ngắt ngoài 5 hoặc ngõ ra so sánh PWM C của Timer/Counter3)
PE4
INT4/OC3B (ngõ vào ngắt ngoài 4 hoặc ngõ ra so sánh PWM B của Timer/Counter3)
PE3
AIN1/OC3A (ngõ vào Negative của bộ so sánh analog hoặc ngõ ra so sánh PWM A của Timer/Counter3)
PE2
AIN0/ XCK0 (ngõ vào Possitive của bộ so sánh analog hoặc chân I/O Clock của USART0)
PE1
PDO/TXD0 (ngõ ra dữ liệu hoặc ngõ ra USART0)
PE0
PDI/RXD0 (ngõ vào dữ liệu hoặc ngõ vào USART0)
Port F (PF0…PF7):
Port F có chức năng làm đầu vào cho bộ chuyển đổi ADC tích hợp sẵn. Khi không được sử dụng với chức năng l àm đầu vào của ADC, Port F cũng là cổng I/O 8-bit hai chiều với các điện trở pull -up bên trong (đư ợc lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port F có đặc tính điều kiển cân đối với cả tín hiệu so urce và sink. Khi là tín hiệu đầu vào, các chân của cổng F sẽ tiêu thụ dòng nếu các điện trở pull -up bên trong được kích hoạt.
Port F được sử dụng với những chức năng bổ sung theo bảng sau:
PF0… PF7
Chức năng bổ sung
PF7
ADC7/TDI (ngõ vào ADC 7 hoặc chân dữ liệu vào Test JTAG)
PF6
ADC6/TDO (ngõ vào ADC 6 hoặc chân dữ liệu ngõ ra Test JTAG)
PF5
ADC5/ TMS (ngõ vào ADC 5 hoặc chân chọn Mode Test JTAG)
PF4
ADC4/ TCK (ngõ vào ADC 4 hoặc chân Clock Test JTAG
PF3
ADC3 (ngõ vào ADC 3)
PF2
ADC2 (ngõ vào ADC 2)
PF1
ADC1 (ngõ vào ADC 1)
PF0
ADC0 (ngõ vào ADC 0)
Port G (PF0… PG7)
Port G là cổng I/O 5-bit hai chiều với các điện trở pull -up bên trong
(được lựa chọn cho mỗi bit). Bộ đệm đầu ra của Port G có đặc tính điều kiển cân đối với cả tín hiệu source và sink. Khi là tín hi ệu đầu vào, các chân của cổng G sẽ t iêu thụ dòng nếu các điện trở pull-up bên trong đư ợc kích hoạt)
Port G được sử dụng với những chức năng bổ sung theo bảng sau:
Chân
Chức năng
PG4
TOSC1 (Chân 1 bộ dao động của Timer/Counter 0)
PG3
TOSC2 (Chân 2 bộ dao động của Timer/Counter 0)
PG2
ALE (cho phép ch ốt địa chỉ tới bộ nhớ ngoài)
PG1
RD(cho phép đ ọc bộ nhớ ngoài)
PG0
WR(cho phép vi ết tới bộ nhớ ngoài)
Sơ đồ chân của ATMEGA 128.
GND: Chân nối mass
VCC: Điện áp nguồn
Cấu trúc bộ nhớ của Atmage 128.
Bộ nhớ của ATmega 120.
Bộ nhớ của AVR có cấu trúc harvard là cấu trúc bus riêng cho bộ nhớ chường trình và bộ nhớ dữ liệu. Bộ nhớ AVR chia làm 2 phần chính bộ nhớ chương trình (program memory) và bộ nhớ dữ liệu (Data memory).
Bộ nhớ chương trình. Bộ nhớ chương trình của AVR có cấu trúc flash có dung lương 128 kbytes. Bộ nhớ chương trình có độ rộng 16 bit. Ở ATmega 128 bộ nhớ chương trình có thể được chia làm 2 phần: Phần boot loader (Boot loader program section) và phần ứng dụng (Applcation program section)
Phần boot loader chứa chương trình boot loader. Chương trình boot loader là một phần mền nhỏ nap trong vi điều khiển được chạy lúc khởi động. Phần mền này có thề tải vào trong vi điều khiển chương trình của người sử dụng và sau đó thược thi chương trình nay. Mỗi khi reset vi điều khiển CPU sẽ nhảy tới thực thi chương trình boot loader này trước, chương trình boot loader sẽ dò xem chương trình nào cần nạp vào vi điều khiển hay không, nếu có chương trình cần nạp, boot loader sẽ nạp vào vùng nhớ ứng dụng (Application program section) rồi thực thi chương trình này. Ngược lại boot loader sẽ chuyển sang chương trinh ứng dụng có sẵn trong vùng nhớ ứng dụng để thực thi chương trình nay.
Phần ứng dụng (Application program section ) là vùng nhớ chứa chương trình ứng ụng của người dùng. Kích thước của phần boot loader và phần ứng dụng có thể ùy chọn. Hình 2.1 thể hiện cấu trúc bộ nhớ chương trình có sử dụng và không sử ụng boot loader, khi sử dụng phần boot loader ta thấy 4 word đầu tiên thay vì chỉ thị cho CPU chuyển tới chương trình ứng dụng của người dùng (là chương trình có nhãn start) thì chỉ thị CPU nhảy tới phần chương trình boot loader để thực hiện trước, rồi mới quay trở lại thực hiện chương trình ứng dụng.
Bộ nhớ dữ liêu. 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 tách biệt nhau và được đánh địa chỉ riêng
Bộ nhớ SRAM có dụng lượng 4 K bytes, Bộ nhớ SRAM có hai chế độ hoạt động là chế độ thông thường và chế độ tương thích vớ ATmega103, muốn thiết lập bộ nhớ SRAM hoạt động theo chế độ nào ta sử dụng bit cầu chì M103C ( M103C fuse bit(9) )
Bộ nhớ SRAM ở chế độ bình thường : Ở chế độ bình thường bộ nhớ SRAM được
Chia thành 5 phần: Phần đầu là 32 thanh ghi chức năng chung (General Purpose Register ) R0 đến R31 có địa chỉ từ $0000 tới $001F. Phần thứ 2 là không gian nhớ vào ra với 64 thanh ghi vào ra ( I/O Register ) có địa chỉ từ $0020 tới $005F. Phần thứ 3 dùng cho vùng nhớ dành cho các thanh ghi vào ra mở rộng ( Extended I/O Registers ) có địa chỉ từ $0060 tới $00FF. Phần thứ 4 là vùng SRAM nội với 4096 byte có địa chỉ từ $0100 tới $10FF. Phần thứ 5 là vùng nhớ SRAM ngoài ( External SRAM ) bắt đầu từ địa chỉ $1100, vùng SRAM mở rộng này có thể mở rộng lên đến 64 K byte. Khi nói bộ nhớ SRAM có dung lượng 4 K byte là nói tới phần thứ 4 ( SRAM nội ). Nếu tính cả các thanh ghi thì bộ nhớ SRAM trong chế độ bình thường sẽ là 4.25 K byte = 4352 byte.
Bộ nhớ SRAM ở chế độ tương thích ATmega103 : Ở chế này bộ nhớ SRAM cơbản cũng giống ở chế độ bình thường, ngoại trừ phần thứ 3 là vùng nhớ dành chocác thanh ghi vào ra mở rộng không tồn tại, ngoài ra kích thước của phần SRAMnội ( internal SRAM ) chỉ có 4000 byte so với 4096 byte ở chế độ bình thường.
Bộ nhớ định thời của ATmega 128.
ATmega 128 có 4 bộ nhớ định thời, bộ nhớ 1 và 3 là bộ nhớ 16 bit, bộ nhớ định thời 0 và 2 là bộ nhớ định thời 8 bit. Dưới đây là mô tả chi tiết của 4 bộ nhới định thời.
BỘ ĐỊNH THỜI TIMER/COUTER 0:
Timer/Counter0 là Timer/Counter 8 bit với các đặc điểm chính
PWM
Phát tần số
Bộ định trước tỉ lệ đồng hồ 10bit
Các nguồn ngắt báo tràn và báo so sánh phù hợp (OCFO và TOVO)
Cho phét đồng tự báo động 32kHz bên ngoài bên ngoài đông lập với đồng hồ I/O
BỘ ĐỊNH THỜI TIMER/COUTER 2:
Timer/Counter2 là Timer/Counter 8 bits, v ới các đặc điểm chính:
PWM
Phát tấn số
Bộ định trước tỉ lệ đồng hồ 10bit
Các nguồn ngắt báo tràn và báo so sánh phù hợp (OCFO và TOVO)
BỘ ĐỊNH THỜI TIMER/COUTER 1 VÀ TIMER/COUNTER 3:
Timer/Counter1và Timer/Count er3 là các Timer/Counter 16 bits, với các đặc điểmchính
Thiết kế 16bit thực sự (cho phép tạo ra xung PWM 16bit)
2 bộ so sánh ngõ ra độc lập
1 bộ bắt mẫu từ ngõ vào
1 bộ giảm nhiều ngõ vào
Chế dộ xóa times khi đát tới giá trị so sánh.
Tạo tần số
Tạo xung PWM có thể thay đổi giá trị
Đếm sự kiện ngoài
Các chết độ hoạt động
Chế độ bình thường.
Chế độ xóa times khi đạt tới giá trị so sánh.
Chế độ PWM khi đạt tấn số cao
Chế độ PWM hiệu chỉnh ba pha
Chế độ PWM hiểu chỉnh ba pha và tấn số.
. IC giải mã 7447
Là IC có chức năng giả mã nhị phân BCD ra mã led 7 đoạn loại A chung.
Như vậy đầu vào có 4bit đầu ra có 7bit. Đều là dạng song song.
Chức năng các chân như sau.
A,B,C,D: Chân đầu vào mã BCD với trọng số bit tăng dần từ A – D
EBI: Ripple Blanking Input
RBO: Ripple Blanking Output
QA – QF: Đầu ra của mã 7 đoạn
Bảng chân lý:
LED
A
B
C
D
a
b
c
d
e
f
g
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
1
1
1
1
1
0
0
1
0
0
0
1
0
0
1
0
2
0
0
1
1
0
0
0
0
1
1
0
3
0
1
0
0
1
0
0
1
1
0
0
4
0
1
0
1
0
1
0
0
1
0
0
5
0
1
1
0
1
1
0
0
0
0
0
6
0
1
1
1
0
0
0
1
1
1
1
7
1
0
0
0
0
0
0
0
0
0
0
8
1
0
0
1
0
0
0
1
1
0
0
9
Chương II: Ngôn ngữ lập trình cho AVR
Giới thiêu.
Có rất nhiều phần mền hỗ trợ ngôn ngữ bậc cao như BascomAVR (Basic) hay codevisionAVR (C) mà bạn có thể không cần biết về cấu trúc của AVR. Tuy nhiên để hiểu thấu đáo về AVR bạn phai lập trình băng ngôn ngữ của nó, ASM. Lập trình bằng ASM giúp bạn hiểu tường tận về AVR, và tất nhiên lập trình bằng ASM bạn phải hiểu tường tần về AVR.
Các chỉ thị hợp dich.
Chương trình dịch Assembly làm việc trên file chương trình nguồn và một file nguồn bao gồm: các lệnh , các nhãn và các chỉ dẫn.Chúng được xếp tuần tự trong file nguồn.
Một dòng lệnh có chiều dài cực đại là: 120 kí tự.
Mọi dòng lệnh đều có thể đặt trước bởi một nhãn, nó là một chuỗi kí tự và kết thúc bằng dấu 2 chấm. Nhãn được sẻ dụng như là đích cho các lệnh nhảy, và các chỉ thị rẽ nhánh.Và còn được sử dụng như là tên biến trong bộ nhớ chương trình và bộ nhớ dữ liệu.
Một dòng lệnh có thể là một trong bốn dạng sau:
1. [nhan: ] chỉ_thị [toán_hạng] [;lời chú thích]
2. [nhan: ] lệnh [toán_hạng] [;lời chú thích]
3. ;chú thích
4. dòng trống (không chứa kí tự nào)
Một lời chú thích luôn đi sau dấu chấm phảy(“;”)và nó không được dịch
sang mã máy chỉ có tác dụng cho người đọc chương trình dẽ hiểu.
Chương trình Assembly hỗ trợ một số các chỉ thị.Các chỉ thị này không
được dịch ra mã nhị phân (mã máy).Và nó được sử dụng để điều khiển quá
trình dịch và cụ thể là: điều khiểu ghi lệnh vào bộ nhớ chương trình, định
nghĩa các biến …
Dưới đây là bảng các chỉ thị:
Chỉ thị
Mô tả
BYTE
Định nghĩa một biến kiểu byte
CSEG
Đoạn mã chương trình
DB
Định nghĩa một hắng số kiểu byte
DEF
Định nghĩa một tên gợi nhớ cho một thanh ghi
DEVICE
Định nghĩa loại VĐK cho chương trình
DSEG
Đoạn dữ liệu
DW
Định nghĩa một hằng số kiểu 2 byte (word)
ENDMACRO
Kêt thúc của một macro
EQU
Thay một biểu thức bằng một kí tự.
ESEG
Đoạn EEPROM
EXIT
Thoát ra từ một file
INCLUDE
Sử dụng mã nguồn từ một file khác
LIST
Cho phép tạo ra trong file list
LISTMAC
Cho phép thêm macro vào list khi được gọi
MACRO
Bắt đầu macro
NOLIST
Cho phép thêm macro vào list khi được gọi
ORG
Cho phép thêm macro vào list khi được gọi
SET
Cho phép thêm macro vào list khi được gọi
Tất cả các chỉ thị đều đặt sau dấu chấm (“.”).
1.1.BYTE :
Chỉ thị này giành trước tài nguyên bộ nhớ trong SRAM.Chỉ thị này phải đi sau một nhãn và có một tham số, nó chỉ ra số byte được giành trước.Chỉ thị này chỉ dùng trong đoạn dữ liệu.
Cú pháp :
LABEL: .BYTE expression
Ví dụ:
.DSEG
var1: .BYTE 1 ;
var2 : .BYTE 10;
.CSEG
ldi r30,low(var1);
Nếu như bạn nào đã học qua một ngôn ngữ cấp cao nào đó thì thực ra vùng nhớ này cũng như là một biến. Dữ liệu sẽ không tự động được ghi vào và chỉ khi bạn dùng các lệnh tác động đến nó mà thôi.Nhãn chính là địa chỉ đầu của đoạn bộ nhớ được giành trước.
1.2.Chỉ thị CSEG:
Chỉ thị này định nghĩa điểm bắt đầu của đoạn mã chương trình. Một file nguồn assembly có thể chứa nhiều đoạn mã chương trình, và chúng lại được liên kết thành một đoạn mã lệnh khi dịch. Chỉ thị BYTE không được sử dụng trong đoạn này. Một đoạn chương trình nếu không được định nghĩa là mã lệnh hay dữ liệu thì đều được mặc định là đoạn mã lệnh.Mối đoạn mã lệinh thì có một địa chỉ riêng 16 bit (hay là một từ). Chỉ thị ORG có thể được sử dụng để đặt vị trí của các đoạn mã lệnh và hằng số trong bộ nhớ chương trình. Chỉ thị này không kèm theo bất kì một tham số nào.
Cú pháp:
.CSEG
Ví dụ:
.DSEG
var1: .BYTE 1
.CSEG
CONST: .DW 2
MOV R1,R0
1.3.DB:
Định nghĩa các hằng số kiểu byte được lưu trong bộ nhớ chương trình hợac
bộ nhớ EEPROM.Và chỉ thị này luôn theo sau một nhãn. Chỉ thị này thường
được sử dụng trong việc lưu giữ các bảng và các biểu thức (nhưng có thể
tính ra giá trị cuối cùng). Các nhãn chính là địa chỉ khởi đầu cho giá trị ban
đầu của bảng. Chỉ dẫn này chỉ có thể đặt được trong đoạn mã hoặc đoạn bộ
nhớ EEPROM.
Các phần tử trong bảng được phân biệt bằng dấu phảy.
Cú pháp:
Label: .DB danh_sach_biểu_thức
Ví dụ:
.CSEG
Sin: .DB 0,1,2,3,4,6,7
.ESEG
const: .DB 1,2,3
Chú ý: Một số hay một biểu thức (phải có kết quả) nằm trong khoảng –128
đến 255.Nếu số đó là só âm thì sẽ được lưu dưới dạng 8bit mã bù 2.
1.4.DEF:
Chỉ thị này có tác dụng cho phép lập trình viên đặt tên cho một thanh ghi. Thay bằng nhớ thanh ghi đó lập trình viên có thể đặt tên cho nó với cái tên gợi nhớ hơn.
Cú pháp:
.DEF tên_gợi_nhớ=thanh_ghi
Ví dụ:
.DEF xh=R28
.DEF xl=R29
Chú ý: Một thanh ghi có thể có rất nhiều tên gợi nhó gán cho nó nhưng điều
đó sẽ rất nguy hiểm có thể vô tình bạn làm mất dữ liệu trong thanh ghi đó
mà bạn không mong muốn.
1.5.DEVICE:
Chỉ thị này chỉ cho chương trình dịch biết loại vi điều khiển mà ta đang viết
chương trình.
Cú pháp:
.DEVICE Loại_vi_điều_khiển
Ví dụ:
.DEVICE AT90S8535
Chỉ thị này sẽ báo cho chúng ta những lỗi sinh ra khi mà chương trình dịch
tìm thấy những lệnh cũng như những thiếtbị ngoại vi không được hỗ trợ trong loại vi điều khiển này.
1.6.DSEG:
Chỉ thị này định nghĩa điểm bắt đầu của đoạn dữ liệu.Một file nguồn có thể
có nhiều đoạn dữ liệu nhưng khi dịch chúng thì chúng được gộp liên kết vào
một đoạn.Một đoạn dữ liệu bình thường chỉ chứa duy nhất chỉ thị BYTE. Mỗi đoạn dữ liệu đều có một con trỏ vị trí riêng và đó là con trỏ 8 bit (vì chúng trong bộ nhớ RAM). Chỉ thị ORG có thể được sử dụng để đặt các
biến tại các vị trí xác định trong RAM (chỉ thị này sẽ được nói ở sau).
Cú pháp:
.DSEG
var1: .BYTE 1
table: .BYTE table_size
1.7.DW:
Đây là chỉ thị cho phép người sử dụng định nghĩa các hằng số ở dạng 2 byte
trong bộ nhớ chương trình hoặc bộn nhớ EEPROM nó hoàn toàn tương tự như chỉ thị DB.
Cú pháp:
Label: .DW danh_sách_biểu_thức
Ví dụ:
Var: .DW 12,354,3434,31345
1.8.ENDMACRO:
Kết thúc của một macro.Chỉ thị này không đi kèm một tham số nào cả.
Cú pháp:
.Endmacro
Ví dụ:
.Macro subi16
subi r16,low(@0)
subi r17,high(@0)
.Endmacro
1.9.EQU:
Chỉ thị EQU gán giá trị của một biểu thức cho một nhãn.Nhãn sau khi gán
giá trị trở thành một hằng số và không được định lại giá trị.
Cú pháp:
.EQU const=expression
Ví dụ:
.EQU io=0x23
.EQU ios=io-10
1.10. ESEG:
Hoàn toàn giống với CSEG
1.11. EXIT:
Chỉ thị EXIT báo cho chương trình dịch biết dừng việc đọc file lại. Bình thường thì chương trình dịch sẽ chạy cho tới khi hết file thì kết thúc. Nhưng
nếu như trong file có chứa chỉ thị này thì khi nào chương trình dịch gặp chỉ
thị này thì sẽ kết thúc qúa trình đọc.
Cú pháp: . EXIT
1.12.INCLUDE
Chỉ thị này báo cho chương trình dịch biết bắt đầu đợc từ một file xác định
cho tới khi hết file đó hoặc một chỉ thị ngừng đọc (EXIT).
Cú pháp:
.Include “tên_file”; Đôi khi cả tên file và đường dẫn.
Ví dụ:
;Nội dung của file iodef.asm”
.EQU sreg = 0x3f
.EQU sphigh=0x3e
.EQU splow=0x3d
;Trong chương trình
.INCLUDE “iodef.asm”
in r0,sreg ; đọc thanh ghi trang thái.
1.13.LIST:
Cho phép chương trình dịch tạo ra file list.
Cú pháp:
.LIST
Chú ý:Mặc định của chương trình dịch là cho phép tạo ra file list và chỉ thị
này luôn đi kèm với chỉ thị NOLIST.
1.14.LISTMAC:
Hoàn toàn giống với LIST nhưng với macro.
1.15.MACRO:
Chỉ dẫn khai báo macro.Vậy macro là gì? Macro thực ra là một đoạn chương
trình .Khi mà macro được gọi thì đoạn chương trình đó sẽ được dán vào vị
trí gọi macro. Tham số đi theo ngay sau chỉ thị này là tên của macro. Một macro có thể có tới 10 tham số.
Cú pháp:
.Macro macro_name
Ví dụ:
.Macro sub16
………..;lệnh gì đó
……….;lênh nào đó
.Endmacro
.CSEG
sub16 ;goi macro
1.16.NOLIST:
1.17. ORG:
Chỉ thị ORG thiết lập một con trỏ tuyệt đối .Giá trị được thiết lập chính là
tham số cho chỉ thị này. Nếu như chỉ thị này nằm trong đoạn dữ liệu thì vị trí
được thiết lập chính là một vị trí trong SRAM và cụ thể đó là vị trí bắt đầu
của biến đước khai báo sau chỉ thị BYTE.
Còn khi chỉ thị này được khai báo trong đoạn chương trình thì vị trí tuyệt đối đó nằm trong bộ nhớ chương trình và đoạn mã lệnh theo sau nó sẽ được ghi
vào bôin nhớ chương trình từ con trỏ đó.Và đối với đoạn ESEG cũng tương
tự.Nếu như chỉ thị này đi sau một nhãn thì nhãn đó có giá trị chính bằng tham số của chỉ thị này.
Cú pháp:
. org tham_só
hoặc Label: . org tham_số
Ví dụ:
.DSEG
. org 0x60
var1: .BYTE 2
. ESEG
. org 0x20
evar: .DB 0xff
.CSEG
. org 0x10
mov r0,r1
1.18.SET:
Gán một giá trị cho một nhãn. Nhãn này có thể sử dụng thay cho giá trị đó và nó hoàn toàn có thể bị thay đổi phụ thuộc vào chương trình.( Đây là điểm
khác biệt của nó so với chỉ thị EQU).
Một số chỉ thị khác :
.IFDEF
.IFNDEF
.IF
.IFDEF |.IFNDEF
...
.ELSE | .ELIF
...
.ENDIF
Ví dụ:
.MACRO SET_BAT
.IF @0>0x3F
.MESSAGE "Address larger than 0x3f"
lds @2, @0
sbr @2, (1<<@1)
sts @0, @2
.ELSE
.MESSAGE "Address less or equal 0x3f"
.ENDIF
.ENDMACRO
Assembly cho AVR.
Instruction chỉ dùng cho Register Files
LDI (Load Immediate): Load môt hằng số K vào thanh ghi Rd (Thanh ghi nguồn và cũng là thanh ghi đich thuộc Register File)
MOV (MOVE): Copy giá trị trong thanh ghi Rr (Thanh ghi nguồn thuộc Register File và thanh ghi Rd)
CLR (CLEAR Register):
SER (SET Register): set tất cả các bit tronh thanh ghi Rd lên 1, sau lệnh này thanh ghi Rd=0xFF.
CBR (CLEAR Bit in Register): xóa các bit trong thanh ghi Rd với “mặt nạ” K, nếu Bit nào trong K là 1 thì Bit tương ứng trong Rd sẽ bị xóa.
SBR (SẺ Bit in Register): set các bit trong thanh ghi Rd với “mặt nạ” K, nếu Bit nào trong K là 1 thì Bit tương ứng trong Rd sẽ được set lên 1.
BLD (Bit load from T Flag): Load giá trị trong cờ T của thanh ghi SREG vào bit thứ b trong thanh ghi Rd. Đây cũng chính là chức năng chính của cờ T.
BST (Bit Storage from T Flag): Copy bit thứ b trong thanh ghi Rd vào trong cờ T của thanh ghi SREG. Đây cũng chính là chức năng chính của cờ T.
CPI (COMPARE with Immediate): so sánh thanh ghi Rd với hằng số K, lệnh này làm thay đổi nhiều bit trong thanh ghi SREG trong đó sự thay đổi của cờ Zero là quan trọng nhất, nếu Rd = K cờ Z=1, ngược lại Z=0, sử dụng đặc điểm thay đổi của cờ Z kết hợp với lệnh BRNE hoặc BREQ chúng ta có thể tạo thành một lệnh rẽ nhánh.
ANDI (AND with Immediate): thực hiện phép Logic AND giữa thanh ghi Rd với hằng số K và kết quả đặt lại trong Rd.
AND ( (Logical AND): thực hiện phép Logic AND giữa 2 thanh ghi Rd và Rr , kết quả đặt lại trong Rd.
ORI (Logical OR with Immediate): thực hiện phép Logic OR giữa thanh ghi Rd với hằng số K và kết quả đặt lại trong Rd.
OR (Logical OR): thực hiện phép Logic OR giữa 2 thanh ghi Rd và Rr , kết quả đặt lại trong Rd.
LSL(Logical Shift Left): dịch tất thanh ghi Rd sang trái 1 vị trí, Bit 7 (bit lớn nhất) của Rd sẽ được chứa trong cờ nhớ C, bit 0 của Rd bị xóa thành 0. Thực chất LSL tương đương với phép nhân thanh ghi Rd với 2. Bạn xem hình minh họa bên dưới.
LSR (Logical Shift Right). dịch tất thanh ghi Rd sang phải 1 vị trí, Bit 0 (bit nhỏ nhất) của Rd sẽ được chứa trong cờ nhớ C, bit 7 của Rd bị xóa thành 0. Thực chất LSR tương đương với phép chia thanh ghi Rd cho 2. Bạn xem hình minh họa bên dưới.
SUBI (SUBtract Immediate): thực hiện phép trừ thanh ghi Rd với hằng số K, kết quả đặt lại trong Rd.
DEC (DECrement). giảm thanh ghi Rd 1 đơn vị và kết quả đặt lại trong Rd. Lệnh này đặc biệt thích hợp cho các ứng dụng lặp, kết hợp với BREQ hay BRNE có thể tạo thành 1 vòng lặp FOR.
MUL (MULtiply unsigned): thực hiện phép nhân không dấu 2 thanh ghi 8 bit Rd, Rr, kết quả là 1 số 16 bit đặt trong 2 thanh ghi R1:R0. Chú ý nếu Rd và Rr là các thanh ghi R1 và R0 thì kết quả sau khi tính được sẽ được viết đè lên. Xem hình minh họa instruction MUL bên dưới.
Instruction cho các thanh ghi I/O
Bốn instruction sau đây được thiết kế riêng để truy cập vùng nhớ I/O, các Instruction này sử dụng địa chỉ I/O của các thanh ghi trong vùng nhớ này. Vì là thiết kế riêng cho vùng nhớ I/O, bạn không thể sử dụng các thanh ghi này để truy cập RF hay SRAM. Trong các cú pháp của instruction này, khái niệm địa chỉ A là địa chỉ I/O 0 ≤ A ≥ 63, nếu trong ví dụ A = 0x00 thì đó là thanh ghi đầu tiên của vùng I/O, không phải là thanh ghi R0
OUT (OUTPUT Data): Xuất giá trị thanh ghi Rr ra thanh ghi có địa chỉ A trong vùng nhớ I/O. Đây là cách phổ biến nhất để xuất giá trị ra vùng I/O
IN (INPUT Data): Load giá trị từ thanh ghi có địa chỉ A trong vùng nhớ I/O vào thanh ghi Rr. Đây là cách phổ biến nhất để nhận giá trị từ vùng I/O
SBI (Set Bit in I/O Register): Set bit thứ b trong thanh ghi có địa chỉ A trong vùng nhớ I/O. Tuy nhiên lệnh này không có tác dụng trên toàn bộ vùng I/O mà chỉ có tác đối vói 32 thanh ghi đầu (địa chỉ từ 0 đên 31)
CBI (Clear Bit in I/O Register): Xóa bit thứ b trong thanh ghi có địa chỉ A trong vùng nhớ I/O. Tuy nhiên lênh này không có tác dụng trên toàn bộ vùng I/O mà chỉ có tác đối với 32 thanh ghi đầu.
Rẽ nhánh và vòng lăp.
Không giống như các ngô ngữ cấp cao khác, khi lập trình băng ASM bạn không được hỗ trợ các cấu trúc đi
Các file đính kèm theo tài liệu này:
- Tìm hiểu VĐK AVR và lâp trình điều khiển LED 7 đoạn.doc