1. Trang chủ
  2. » Công Nghệ Thông Tin

tập lệnh cơ bản 8051

11 1,2K 4

Đ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

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 92,5 KB

Nội dung

Mỗi lệnh của Assembly có sự tiêu tốn dữ liệu byte và chu kì máy xác định.. Các lệnh cơ bản trong Assembly: Kí hiệu được dùng dưới đây: o Rn: Kí hiệu cho các thanh ghi R0 đến R7 của băng

Trang 1

3 Lập trình với ngôn ngữ ASSEMBLY

Ngôn ngữ Assembly là hợp ngữ rất gần với ngôn ngữ máy Mỗi lệnh của Assembly có sự tiêu tốn dữ liệu (byte) và chu kì máy xác định Do đó, chúng ta có thể dễ dàng nhận ra sự

bố trí dữ liệu của chương trình Lập trình bằng Assembly không có sự tiêu tốn do mã thừa như lập trình bằng ngôn ngữ C, một chương trình viết bằng Assembly chạy nhanh và hiệu quả hơn nhiều so với chương trình viết bằng C

Tuy nhiên do Assembly rất gần với ngôn ngữ máy nên đòi hỏi người lập trình phải có một trí nhớ tốt, nếu không, chúng ta phải chuẩn bị một chồng sách để có thể mở ra bất cứ lúc nào Và chúng ta rất khó có thể viết một chương trình lớn bằng Assembly

a Cấu trúc một chương trình Assembly:

Chúng ta hãy tham khảo đoạn code viết bằng Assembly để tìm hiểu cấu trúc của nó Chương trình nhấp nháy LED theo mã nhị phân tăng dần:

org 0000h ;Chương trình bắt đầu từ địa chỉ 0000h

main: ;Khai báo nhãn để sau này dùng câu lệnh nhảy để nhảy tới đây

;Thụt vào 1 kí tự tab cho dễ nhìn

inc a ;Tăng giá trị thanh ghi a lên một đơn vị

mov P0,a ;Chép nội dung thanh ghi a vào cổng P0

call delay ;Gọi hàm delay

jmp main ;Nhảy đến nhãn main

delay: ;Khai báo nhãn delay để lệnh call gọi tới1

mov R7,#255 ;Chép giá trị 255 vào thanh ghi R7

loop: ;Khai báo nhãn loop để nhảy về đây

mov R6,#255 ; Chép giá trị 255 vào thanh ghi R7

loop1: ;Khai báo nhãn loop1 để nhảy về đây

djnz R6,loop1 ;Giảm thanh ghi R6 đi 1 và nhảy nếu R6>0

djnz R7,loop ; Giảm thanh ghi R7đi 1 và nhảy nếu R7>0

ret ;Trở về từ hàm delay

end ;Kết thúc đoạn code

Rút ra cấu trúc của chương trình như sau:

org 0000h;Bắt đầu đoạn code

;Đoạn lệnh

end;Kết thúc đoạn code

Bắt đầu bằng câu lệnh ORG 0000H

Tiếp đến là đoạn lệnh Trong đoạn lệnh có các nhãn để rẽ nhánh chương trình

Mỗi lệnh bắt đều bắt đầu bằng tên lệnh, tiếp theo là kí tự trắng hay kí tự tab, rồi đến các tham số lệnh

Trang 2

Mỗi lệnh chỉ được viết trên 1 dòng.

Kết thúc bằng câu lệnh END

Chú ý: Trong Asembly không phân biệt chữ hoa hay chữ thường Dòng chú thích được đặt sau dấu chấm phẩy ‘;’

b Các lệnh cơ bản trong Assembly:

Kí hiệu được dùng dưới đây:

o Rn: Kí hiệu cho các thanh ghi R0 đến R7 (của băng thanh ghi được chọn)

o Data: Dữ liệu trực tiếp, là 1 byte dữ liệu bên trong RAM hoặc thanh ghi chức năng đặc biệt

o @Ri: 1 byte dữ liệu vùng RAM được đánh địa chỉ bởi thanh ghi R0 hoặc R1

o #data: 1 byte dữ liệu tức thời (là những con số do người lập trình đặt sẵn)

o #data16: 2 byte dữ liệu tức thời (là những con số của người lập trình)

o Addr16: 16 bit địa chỉ của các lệnh nhảy xa và gọi xa

o Addr11: 11 bit địa chỉ của các lệnh nhảy tuyệt đối và gọi tuyệt đối

o Rel: 8 bit địa chỉ có dấu của các lệnh nhảy gần và gọi gần

Các lệnh cơ bản

v Các lệnh sao chép dữ liệu:

- Tên lệnh: MOV

MOV A,Rn (1 byte 1 chu kì máy) Chép nội dung thanh ghi Rn vào thanh ghi A

MOV A,data (2 byte 1 chu kì máy) Chép nội dung của data vào thanh ghi A

MOV A,@Ri (1 byte 1 chu kì máy) Chép nội dung của ô nhớ do Ri trỏ tới vào thanh ghi A

MOV A,#Data (2 byte 1 chu kì máy) Ghi dữ liệu tức thời vào thanh ghi A

MOV A,@A+DPTR (1 byte 2 chu kì máy) Chép nội dung của ô nhớ chương trình có địa chỉ A+DPTR vào thanh ghi A

MOV Rn,A (1 byte 1 chu kì máy) Chép nội dung thanh ghi A vào thanh ghi Rn

MOV Rn,data (2 byte 2 chu kì máy) Chép nội dung của data vào thanh ghi Rn

MOV Rn,#data (2 byte 1 chu kì máy) Ghi dữ liệu tức thời vào thanh ghi Rn

MOV data,A (2 byte 1 chu kì máy) Chép nội dung thanh ghi A vào data

MOV data,Rn (2 byte 2 chu kì máy) Chép nội dung thanh ghi Rn vào data

MOV data,data (3 byte 2 chu kì máy) Chép nội dung hai dữ liệu trực tiếp data với nhau MOV data,@Ri (2 byte 2 chu kì máy) Chép nộii dung ô nhớ do Ri trỏ tới vào data

MOV data,#data (3 byte 2 chu kì máy) Ghi dữ liệu tức thời vào data

MOV @Ri,A (1 byte 1 chu kì máy) Chép nội dung của thanh ghi A vào ô nhớ do Ri trỏ tới

MOV @Ri,data (2 byte 1 chu kì máy) Chép nội dung data vào ô nhớ do Ri trỏ tới

Trang 3

MOV @Ri,#data (2 byte 1 chu kì máy) Ghi dữ liệu trực tiếp vào ô nhớ do Ri trỏ tới MOV DPTR,#data (3 byte 2 chu kì máy) Ghi một hằng 16 bit vào thanh ghi DPTR MOV C,bit (2 byte 1 chu kì máy) Chép một bit trực tiếp vào cờ nhớ C

MOV bit,C (2 byte 2 chu kì máy) Chép trạng thái cờ nhớ C vào một bit trực tiếp

- Tên lệnh MOVC

MOVC A,@A+PC (1 byte 2 chu kì máy) Chép nội dung ô nhớ chương trình có địa chỉ A+PC vào thanh ghi A

- Tên lệnh MOVX

MOVX A,@Ri (1 byte 2 chu kì máy) Chép nội dung của ô nhớ bộ nhớ ngoài do Ri trỏ tới vào thanh ghi A (8 bit địa chỉ)

MOVX A,@DPTR (1 byte 2 chu kì máy) Chép nội dung của ô nhớ bộ nhớ ngoài do DPTR trỏ tới vào thanh ghi A (16 bit địa chỉ)

MOVX @Ri,A (1 byte 2 chu kì máy) Chép nội dung thanh ghi A ra ngoài

MOVX @DPTR,A (1 byte 2 chu kì máy) Chép nội dung thanh ghi A ra ngoài

- Tên lệnh PUSH

PUSH data (2 byte 2 chu kì máy) Chép data lên ngăn xếp và tăng SP

- Tên lệnh POP

POP data (2 byte 2 chu kì máy) Chép dữ liệu từ ngăn xếp vào data và giảm SP

- Tên lệnh XCH

XCH A,Rn (1 byte 1 chu kì máy) Trao đổi dữ liệu giữa thanh ghi A và thanh ghi Rn XCH A,data (2 byte 1 chu kì máy) Trao đổi dữ liệu giữa thanh ghi A và data

XCH A,@Ri (1 byte 1 chu kì máy) Trao đổi dữ liệu giữa thanh ghi A và ô nhớ do Ri trỏ tới

- Tên lệnh XCHD

XCHD A,@Ri (1 byte 1 chu kì máy) Trao đổi hai nibble thấp của thanh ghi A và ô nhớ

do Ri trỏ tới

v Các lệnh số học

- Tên lệnh ADD

ADD A,data (2 byte 1 chu kì máy) A=A+data

ADD A,@Ri (1 byte 1 chu kì máy) A=A+@Ri

ADD A,#data (2 byte 1 chu kì máy) A=A+#data

ADD A,Rn (1 byte 1 chu kì máy) A=A+Rn

- Tên lệnh ADDC

ADDC A,Rn (1 byte 1 chu kì máy) A=A+Rn+C

ADDC A,@Ri (1 byte 1 chu kì máy) A=A+@Ri+C

ADDC A,data (2 byte 1 chu kì máy) A=A+data+C

Trang 4

ADDC A,#data (2 byte 1 chu kì máy) A=A+#data+C

- Tên lệnh SUBB

SUBB A,Rn (1 byte 1 chu kì máy) A=A-Rn-C

SUBB A,data (2 byte 1 chu kì máy) A=A-data-C

SUBB A,@Ri (1 byte 1 chu kì máy) A=A-@Ri-C

SUBB A,#data (2 byte 1 chu kì máy) A=A-#data-C

- Tên lệnh INC

INC A (1 byte 1 chu kì máy) Tăng nội dung thanh ghi A lên 1

INC Rn (1 byte 1 chu kì máy) Tăng nội dung thanh ghi Rn lên 1

INC data (2 byte 1 chu kì máy) Tăng data lên 1

INC @Ri (1 byte 1 chu kì máy) Tăng nội dung ô nhớ do Ri trỏ tới lên 1

INC DPTR (1 byte 2 chu kì máy) Tăng nội dung thanh ghi DPTR lên 1

- Tên lệnh DEC

DEC A (1 byte 1 chu kì máy) Giảm nội dung thanh ghi A xuống 1

DEC Rn (1 byte 1 chu kì máy) Giảm nội dung thanh ghi Rn xuống 1

DEC data (2 byte 1 chu kì máy) Giảm data xuống 1

DEC @Ri (1 byte 1 chu kì máy) Giảm nội dung ô nhớ do Ri trỏ tới 1

- Tên lệnh MUL

MUL AB (1 byte 4 chu kì máy) Nhân nội dung thanh ghi A với thanh ghi B Byte cao lưu trong thanh ghi B, byte thấp lưu trong A Nếu kết qủa lớn hơn 255 thì cờ OV bật, nếu không thì bị xoá Cờ C luôn bị xoá

- Tên lệnh DIV

DIV AB (1 byte 4 chu kì máy) Chia nội dung thanh ghi A cho thanh ghi B Phần nguyên lưu trong thanh ghi A, phần dư lưu trong thanh ghi B Cờ C và cờ OV đều bị xoá

- Tên lệnh DA

DA A (1 byte 1 chu kì máy) Hiệu chỉnh thập phân cho thanh ghi A

v Các lệnh luận lý

- Tên lệnh ANL

ANL A,Rn (1 byte 1 chu kì máy) AND nội dung thanh ghi A với Rn, llưu vào thanh ghi A

ANL A,data (2 byte 1 chu kì máy) AND nội dung thanh ghi A với data, lưu vào thanh ghi A

ANL A, @Ri (1 byte 1 chu kì máy) AND nội dung thanh ghi A với @Ri, lưu vào thanh ghi A

ANL A,#data (2 byte 1 chu kì máy) AND nội dung thanh ghi A với #data, lưu vào thanh ghi A

Trang 5

ANL data,A (2 byte 1 chu kì máy) AND nội dung thanh ghi A với data, lưu vào data ANL data,#data (3 byte 2 chu kì máy) AND data với #data, lưu vào data

ANL C,bit (2 byte 2 chu kì máy) AND C với bit, lưu vào C

ANL C,/bit (2 byte 2 chu kì máy) AND C với đảo của bit, lưu vào C

- Tên lệnh ORL

ORL A,Rn (1 byte 1 chu kì máy) OR nội dung thanh ghi A với Rn, llưu vào thanh ghi A ORL A,data (2 byte 1 chu kì máy) OR nội dung thanh ghi A với data, lưu vào thanh ghi A

ORL A,@Ri (1 byte 1 chu kì máy) OR nội dung thanh ghi A với @Ri, lưu vào thanh ghi A

ORL A,#data (2 byte 1 chu kì máy) OR nội dung thanh ghi A với #data, lưu vào thanh ghi A

ORL data, A (2 byte 1 chu kì máy) Ornội dung thanh ghi A với data, lưu vào data

ORL data,#data (3 byte 1 chu kì máy) OR data với #data, lưu vào data

ORL C,bit (2 byte 2 chu kì máy) OR C với bit, lưu vào C

ORL C,\bit (2 byte 2 chu kì máy) OR C với đảo của bit, lưu vào C

- Tên lệnh XRL

XRL A,Rn (1 byte 1 chu kì máy) XOR nội dung thanh ghi A với Rn, llưu vào thanh ghi A

XRL A,data (2 byte 1 chu kì máy) XOR nội dung thanh ghi A với data, lưu vào thanh ghi A

XRL A,@Ri (1 byte 1 chu kì máy) XOR nội dung thanh ghi A với @Ri, lưu vào thanh ghi A

XRL A,#data (2 byte 1 chu kì máy) XOR nội dung thanh ghi A với #data, lưu vào thanh ghi A

XRL data,A (2 byte 1 chu kì máy) XORnội dung thanh ghi A với data, lưu vào data XRL data,#data (3 byte 1 chu kì máy) XOR data với #data, lưu vào data

- Tên lệnh SETB

SETB C (1 byte 1 chu kì máy) Bật cờ nhớ C

SETB bit (2 byte 1 chu kì máy) Bật bit trực tiếp

- Tên lệnh CLR

CLR A (1 byte 1 chu kì máy) Xoá thanh ghi A

CLR C (1 byte 1 chu kì máy) Xoá cờ nhớ C

CLR bit (2 byte 1 chu kì máy) Xoá bit trực tiếp

- Tên lệnh CPL

CPL A (1 byte 1 chu kì máy) Lấy bù thanh ghi A

Trang 6

CPL C (1 byte 1 chu kì máy) Lấy bù cờ nhớ C

CPL bit (2 byte 1 chu kì máy) Lấy bù bit trực tiếp

- Tên lệnh RL

RL A (1 byte 1 chu kì máy) Dịch trái thanh ghi A Giá trị của bit 7 lưu vào bit 0

- Tên lệnh RLC

RLC A (1 byte 1 chu kì máy) Dịch trái thanh ghi A Giá trị cũ của C được lưu vào bit 0 của A Bit 7 của A được lưu vào C

- Tên lệnh RR

RR A (1 byte 1 chu kì máy) Dịch phải thanh ghi A Giá trị của bit 0 được lưu vào bit 7

- Tên lệnh RRC

RRC A (1 byte 1 chu kì máy) Dịch phải thanh ghi A Giá trị của C lưu vào bit 7 của A, bit 0 của A lưu vào C

- Tên lệnh SWAP

SWAP A (1 byte 1 chu kì máy) Hoán chuyển hai nibble của thanh ghi A

v Các lệnh chuyển điều khiển

- Tên lệnh ACALL

ACALL addr11 (2 byte 2 chu kì máy) Gọi chương trình con dùng địa chỉ tuyệt đối

- Tên lệnh LCALL

LCALL addr16 (3 byte 2 chu kì máy) Gọi chương trình con dùng địa chỉ dài

- Tên lệnh RET

RET (1 byte 2 chu kì máy) Trở về từ lệnh gọi chương trình con

- Tên lệnh RETI

RETI (1 byte 2 chu kì máy) Trở về từ lệnh gọi ngắt

- Tên lệnh AJMP

AJMP addr11 (2 byte 2 chu kì máy) Nhảy dùng địa chỉ tuyệt đối

- Tên lệnh LJMP

LJMP addr16 (3 byte 2 chu kì máy) Nhảy dùng địa chỉ dài

- Tên lệnh SJMP

SJMP rel (2 byte 2 chu kì máy) Nhảy dùng địa chỉ ngắn

- Tên lệnh JMP

JMP @A+DPTR (1 byte 2 chu kì máy) Nhảy gián tiếptừ con trỏ dữ liệu

- Tên lệnh JZ

JZ rel (2 byte 2 chu kì máy) Nhảy nếu thanh ghi A bằng 0

- Tên lệnh JNZ

JNZ rel (2 byte 2 chu kì máy) Nhảy nếu thanh ghi A khác 0

Trang 7

- Tên lệnh JC

JC rel (2 byte 2 chu kì máy) Nhảy nếu cờ nhớ C được bật

- Tên lệnh JNC

JNC rel (2 byte 2 chu kì máy) Nhảy nếu cờ nhớ C không được bật

- Tên lệnh JB

JB bit,rel (3 byte 2 chu kì máy) Nhảy nếu bit được bật

- Tên lệnh JNB

JNB bit,rel (3 byte 2 chu kì máy) Nhảy nếu bit không được bật

- Tên lệnh JBC

JBC bit,rel (3 byte 2 chu kì máy) Nhảy nếu bit được bật rồi xoá bit

- Tên lệnh CJNE

CJNE A,data,rel (3 byte 2 chu kì máy) Nhảy nếu A khác data

CJNE A,#data,rel (3 byte 2 chu kì máy) Nhảy nếu A khác #data

CJNE Rn,#data,rel (3 byte 2 chu kì máy) Nhảy nếu Rn khác #data

CJNE @Ri,#data,rel (3 byte 2 chu kì máy) Nhảy nếu ô nhớ do Ri trỏ tới khác data

- Tên lệnh DJNZ

DJNZ Rn,rel (2 byte 2 chu kì máy) Giảm Rn và nhảy khi Rn khác 0

DJNZ data,rel (3 byte 2 chu kì máy) Giảm data và nhảy nếu data khác 0

4 Lập trình nâng cao

Các bạn đã làm quen với những câu lệnh sao chép dữ liệu, các lệnh số học, lệnh logic, lệnh chuyển điều khiển Bây giờ dựa trên các câu lệnh trên, chúng ta sẽ làm quen với các công việc lập trình về bộ đếm – địinh thời, lập trình truyền thông nối tiếp, lập trình ngắt

Do ngôn ngữ C chạy không hiệu quả bằng Assembly, ngôn ngữ C không phát huy hết được khả năng của vi điều khiển Do đó tất cả các chương trình từ nay về sau đều viết bằng ngôn ngữ Assembly

a Lập trình bộ đếm và định thời (timer):

· Khảo sát các thanh ghi chức năng đặc biệt của bộ đếm – định thời (timer):

TÊN THANH

ĐỊA CHỈ HÓA BIT

TMOD Chọn kiểu cho các bộ đếm – định thời 89h Không

Trang 8

TH0 Byte cao của timer 0 8Ch Không

Bảng 1: Các thanh ghi đặc biệt của bộ timer

· Khảo sát thanh ghi TMOD:

Là thanh ghi dùng để chọn chế độ cho các bộ timer Thanh ghi này không được địa chỉ hoá các bit và điều này cũng không cần thiết

BIT TÊN BỘ

TIMER TÁC DỤNG

7 GATE 1 GATE=0 :Timer 1 bật khi TR1=1 GATE=1 :Timer 1 bật khi

TR1=1 và chân INT1=1

6 C/T 1 C/T=1 : Chọn đếm sự kiện C/T=0 : Chọn ghi giờ cho timer 1

5 M1 1 Bit 1 chọn kiểu của timer 1

4 M0 1 Bit 0 chọn kiểu của timer 1

3 GATE 0 GATE=0 :Timer 0 bật khi TR0=1 GATE=1 :Timer 0 bật khi

TR0=1 và chân INT0=1

2 C/T 0 C/T=1 : Chọn đếm sự kiện C/T=0 : Chọn ghi giờ cho timer 0

1 M1 0 Bit 1 chọn kiểu của timer 0

0 M0 0 Bit 0 chọn kiểu của timer 0

Bảng 2: Các bit trên thanh ghi TMOD

· Các chế độ của timer

0 0 0 Chế độ timer 13 bit Nghĩa là timer sử dụng 5 bit TH và 8 bit

TL

0 1 1 Chế độ timer 16 bit Nghĩa là timer sử dụng 8 bit TH và 8 bit

TL

1 0 2 Chế độ timer 8 bit, còn TH dùng để nạp lại giá trị khởi đầu

cho TL khi TL tràn

1 1 3 TL0 và TH0 được sử dụng như hai timer độc lập TL0 được

điều khiển bằng các bit của timer 0, còn TH0 được điều khiển bằng các bit của timer 1

Trang 9

Bảng 3: Các chế độ của timer

· Khảo sát thanh ghi TCON:

Là thanh ghi dùng để khởi động và điều khiển các bộ timer Thanh ghi này được địa chỉ hoá các bit

BIT KÍ HIỆU ĐỊA

CHỈ

TÁC DỤNG

TCON

7 TF1 8Fh Bit tràn của timer 1 Khi xảy ra tràn, TF1 tự động bật lên. TCON

6

TR1 8Eh Bit điều khiển bật tắt bộ timer 1

TCON

5

TF0 8Dh Bit tràn của timer 0 Khi xảy ra tràn, TF0 tự động bật lên

TCON

4

TR0 8Ch Bit điều khiển bật tắt bộ timer 0

TCON

3 IE1 8Bh Cờ cạnh ngắt ngoài 1 Được bật khi có cạnh xuống ở chân INT1 Được xoá khi thoát khỏi ngắt cứng định hướng đến thủ

tục phục vụ ngắt ngoài 1

TCON

2

IT1 8Ah Cờ kiểu ngắt 1 ngoài Nếu cờ này bật, ngắt ngoài sẽ được kích

hoạt khi có cạnh xuống ở chân INT1 Nếu không thì ngắt ngoài sẽ được bật khi có mức thấp ở chân INT1

TCON

1

IE0 89h Cờ cạnh ngắt ngoài 0 Được bật khi có cạnh xuống ở chân

INT0 Được xoá khi thoát khỏi ngắt cứng định hướng đến thủ tục phục vụ ngắt ngoài 0

TCON

0

IT0 88h Cờ kiểu ngắt 0 ngoài Nếu cờ này bật, ngắt ngoài sẽ được kích

hoạt khi có cạnh xuống ở chân INT0 Nếu không thì ngắt ngoài sẽ được bật khi có mức thấp ở chân INT0

Bảng 4: Các bit trong thanh ghi TCON

· Nguồn xung nhịp cho các timer

Hình 31: Nguyên tắc cung cấp xung nhịp cho các timer

· Các chế độ của timer

Chế độ 0:

Là chế độ định thời 13 bit Nguyên tắc hoạt động như sau

Hình 32: Nguyên tắc hoạt động của chế độ 1 Giá trị bộ đếm trong khoảng từ 0000h đến 1FFFh Khi giá trị tăng đến 1FFF FFFFh thì cờ tràn TF bật và giá trị được của bộ timer set về 0000h

Trang 10

Thời gian tối đa có thể định thời là 1FFFh x 1 (us) = 1FFFh (us) = 8191 (us) (thạch anh 12MHz)

Chế độ 1:

Là chế độ định thòi 16 bit với nguyên tắc hoạt động sau:

Hình 33: Nguyên tắc hoạt động chế độ 1 Khi giá trị đếm tăng đến FFFFh thì được set về 0000h và cờ tràn TF được bật

Giá trị tối đa có thể định thời là FFFFh x 1 (us) = FFFFh (us) = 65535 (us) (thạch anh 12MHz)

Chế độ 2:

Là chế độ tự nạp lại Byte thấp TL hoạt động định thời 8 bit còn byte cao TH dùng để sử dụng lưu trữ giá trị nạp lại

Hình 34: Nguyên tắc hoạt động chế độ 2 Khi giá trị đếm tăng đến FFh thì được set trở lại giá trị của TH (chứ không phải là giá trị 00h) và cờ tràn được bật Và bộ đếm bắt đầu từ giá trị TH trở lên

Chế độ 3:

Là chế độ timer chia sẻ Trong đó thanh ghi TL0 và TH0 hoạt động như hai bộ đếm độc lập với thanh ghi TL0, TH0 có các cờ tràn tương ứng là TF0 và TF1 Trong đó hai thanh ghi TL1 và TH1 tạm thời không sử dụng Chúng ta có thể khởi động nó nhưng cờ tràn TF1 không bị bật khi có sự tràn xảy ra

Hình 35: Mô tả hoạt động chế độ 3

· Phương pháp lập trình timer:

> Đặt vào thanh ghi TMOD để chọn đếm hoặc định thời, chọn bộ 0 hoặc 1, chọn chế độ 0,1,2,3

> Đặt vào các thanh gh TL giá trị cần thiết Trong chế độ 2 ta nạp giá trị khởi đầu cho thanh ghi TH

> Bật bit TR để khởi động timer

> Kiểm tra cờ tràn đã bật chưa (bằng lệnh JB TF1,nhãn Lệnh JB TF0,nhãn Lệnh JNB TF0,nhãn Lệnh JNB TF1,nhãn)

> Nếu cờ tràn đã bật thì xoá cờ, có thể dừng bộ định thời bằng cách xoá bit TR

· Ví dụ:

Chương trình sau tạo sóng 10 KHz ở chân P2.2

> Nếu thạch anh 12MHz => chu kì xung nhịp = 1us

> Ta có: f=10KHz => T=100us =>T/2=50us

Cứ sau 50us thì đảo chân P2.2 Vậy thì thanh ghi TL phải đếm từ giá trị = 256 – 50 = 206

Ta có chương trình sau:

org 0000h

mov TMOD,#00000010b;Chọn timer 0, chế độ 2

mov TH0,#206

setb TR0;Bật bộ timer 0

main:

Ngày đăng: 05/07/2014, 13:53

HÌNH ẢNH LIÊN QUAN

Bảng 2: Các bit trên thanh ghi TMOD - tập lệnh cơ bản 8051
Bảng 2 Các bit trên thanh ghi TMOD (Trang 8)
Bảng 1: Các thanh ghi đặc biệt của bộ timer - tập lệnh cơ bản 8051
Bảng 1 Các thanh ghi đặc biệt của bộ timer (Trang 8)
Bảng 3: Các chế độ của timer - tập lệnh cơ bản 8051
Bảng 3 Các chế độ của timer (Trang 9)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w