(028) 66844775 - 0902760910 banhang@phuclanshop.com
Danh mục sản phẩm

Giới thiệu Bạn trang Web: Có nhiều file .asm dùng làm thực hành với ic vi điêu khiển AT89C51

29 Tháng Tám 2015

Dẫn nhập

 

Ngày nay người thợ điện tử phải biết cách dùng các ic lập trình, như ic họ AT89C51..., với các ic này công việc của Bạn sẽ đơn giản hơn nhiều, chỉ cần một board mạch điện mẫu, Bạn đã có thể làm được rất nhiều công việc bằng cách viết lại các câu lệnh. Tất cả các câu lệnh sẽ tạo ra file nguồn, các file này thường lấy họ là .asm. Sau khi qua trình biên dịch, chúng ta sẽ có file mã với họ .hex và dùng hộp nạp nạp các mã lệnh vào nằm trong bộ nhớ EEPROM của các ic lập trình là xong. Vấn đề của chúng ta là làm sao biết cách để viết được các câu lệnh để nó chấp hành công việc theo đúng ý muốn của mình.

 

Khởi đầu Bạn hãy làm quen với các câu lệnh mà người có kinh nghiệm đã viết, xem họ viết như thế nào, qua phân tích và ghi nhớ, dần dần Bạn sẽ biết cách viết như một chuyên gia lập trình, lúc đó Bạn sẽ cảm thấy việc dùng các ic lập trình để giải quyết các công việc kỹ thuật là rất thích thú.

 

Trong bài này, tôi chọn ra trang web có nhiều file .asm để giới thiệu với Bạn, các file này phân ra theo nhóm, và các file đã được dùng trên board thực hành cụ thể nên nó có tính khả hành không bị lỗi rất đáng để Bạn tìm hiểu.

 

Nguyên bản viết bằng tiếng Hoa, nên tôi sẽ diễn dịch lại, mong Bạn đọc và hiểu được các phần soạn lại của tôi. Nếu có thắc mắc hãy cứ liên lạc với chúng tôi để cùng thảo luận cho ra. Chào, chúc học tập vui vẽ.

 

 

 

Giới thiệu trang web

 

Bạn thử vào website sau để tìm lấy các file .asm có liên quan đến công việc của Bạn.

 

Click vào dòng dẫn sau:  http://www.51c51.com/TIGAO.HTM

 

Khái quát về trang Web này: Trang Web này cho chúng ta nhiều bài thực hành, viết bằng ngôn ngữ assembler, nó được dùng cho board thực hành chạy với ic vi điều khiển AT89C51. Các file .asm chia ra theo từng nhóm, nó có liên quan đến nhiều loại phụ kiện, như: Bàn phím, màn hình, loa, motor, đèn số, ic nhớ, và các loại led...

 

Để dễ xem, tôi sẽ tách theo từng phần và giải thích tóm lượt ý nghĩa của các phần, trong mỗi phần sẽ chọn ra một vài file mẫu để phân tích và mở rộng ứng dụng của nó. Tôi nghĩ cách làm này sẽ giúp Bạn dễ tra cứu khi cần tham khảo.

 

 

 

 

 

 

Tóm lượt hộp thực hành dùng chạy các file họ .asm.

 

 

8

 

 

Board thực hành xây dựng treên ic vi điều khiển AT89C51. Trong hộp thực hành này, người ta tích hợp nhiều khối ngoại vi dùng kết hợp với ic lập trình. 

 

 

 

Khi muốn chạy một file .asm nào, chúng ta sẽ cho gắn dây theo hướng dẫn của nhà sản xuất. Tuy nhiên, nếu chúng ta không có hộp thực hành này, chúng ta chỉ cần tạo mạch điện tương ứng trên board cắm dạng năng đủ dùng cho chương trìnnh nguồn đang khảo sát mà thôi.

 

Một thí dụ: Viết chương trình nguồn cho chạy 8 Led trên một cảng của ic lập trình AT89C51.

 

Bạn vào trang web sau để có các bài thực hành như bảng liệt kê sau:

http://www.51c51.com/TEST/XL1000/xl100061.htm

 

 

 Trên đây liệt kê các bài thực hành được hướng dẫn làm thực hành trên hộp.

 

Bài thực hành cho chạy trên 8 Led. 8 Led gắn trên cảng p1. Đây là bài thực hành cơ bản nhất.

 

 

Với bài thực hành với 8 Led trên một cảng, chúng ta có sơ đồ mạch điện như hình trên. Bạn có thể cho cắm dây JP32 vào cảng p1. Với cách nối mạch này các Led sẽ tắt với mứa áp cao và sáng với mứa áp thấp. Tóm lại Bạn dùng port 1 để điều khiển các 8 led. Các điện trở 1K có tác dụng hạn dòng.

 

Nếu Bạn tự ráp mạch thực hành Bạn chỉ cần ráp như sơ đồ mạch điện trên là đủ.

 

 

 

 Hình chụp cho thấy cách gắn dây trên hộp để làm bài thực hành.

 

 

Lưu đồ của bài làm thực hành.

 

 

 

 

  汇编语言参考程序:Chương trình nguồn viết với ngôn ngữ Assembler

 

org 0000h ;开始     

;  (khởi đầu từ thanh ghi có địa chỉ 0000h)                                 
ajmp loop 

;  (Nhẩy đến dòng có tên nhãn là loop)
org 0080h ;到0030h处避开00-30的敏感地址 

;  (Cho nhẩy qua các thanh ghi đã được dùng cho các lệnh ngắt)
loop: 

;  (Đặt tên nhãn dùng cho lệnh nhẩy)
mov p1,#0ffh ;关闭所有灯 

;  (0ffh là 11111111b, nghĩa là cho cả 8 chân ở mức áp cao để tắt 8 led)
clr p1.0 ;点亮灯p1.0   

;  (Cho chân p1.0 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay ;延时一段时间?  

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.1 ;点亮灯p1.1  

;  (Cho chân p1.1 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay 

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.2 ;点亮灯p1.2 

;  (Cho chân p1.2 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay 

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.3 ;点亮灯p1.3  

;  (Cho chân p1.3 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.4 ;点亮灯p1.4 

;  (Cho chân p1.4 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.5 ;点亮灯p1.5 

;  (Cho chân p1.5 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay 

; (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.6 ;点亮灯p1.6 

;  (Cho chân p1.6 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay

;  (cho nhẩy đến tên nhãn delay để làm chậm)
clr p1.7 ;点亮灯p1.7 

;  (Cho chân p1.7 xuống mức áp thấp, led ở đây sẽ sáng)
lcall delay 

;  (cho nhẩy đến tên nhãn delay để làm chậm)
AJMP LOOP ;到最开始loop处重新运行 

;  (Nhẩy về tên nhãn loop để lập lại)
delay:  

;  (Đặt tên nhãn cho chương trình làm chậm)

mov r5,#20 ;延时。

;  (chuyển số 20 vào thanh ghi r5)
d1: mov r6,#40  ;    

;  (chuyển số 40 vào thanh ghi r6)
d2: mov r7,#248 

;  (chuyển số 248 vào thanh ghi r7)
djnz r7,$ 

;  (Cho giảm trị trong r7 đến trị 0)
djnz r6,d2

;  (Cho giảm trị trong r6, quay lại d2 nếu  chưa bằng 0)
djnz r5,d1 

;  (Cho giảm trị trong r5, quay lại d1 nếu  chưa bằng 0)
ret 

;  (Quay lại sau lệnh Call)
end

;  (Dừng biên dịch)

 

 

 

 

c语言参考程序: Chương trình nguồn viết với ngôn ngữ C.

 

#include<reg51.h>

//头文件
#define uchar unsigned char

//宏定义,为方便编程
#define uint unsigned int
#define LED P1

//宏定义,将P1口定义为LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};

//定义一数组,内存放跑马灯数据
uchar *p=led_value;

//定义指针,指向跑马灯数组首地址


void delay() //延迟函数,与跑马灯跳动频率有关
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}

 

void run_led() //跑马灯运行函数
{
while(*p!=0x00)
{
LED=*p; //将数组中数据取出赋给P1口
p++; //预取下一数据
delay(); //延迟
}

p=led_value;
}


char code SST516[3] _at_ 0x003b; //仿真器保留
main() //主函数
{
while(1)
run_led(); //上电即运行跑马灯程序
}

 

 

 

 Bạn có thể tìm các file .asm ở đây    để tham khảo.

 

 

 

1. Các bài thực hành với các led.  

 

 

 

Trước hết Bạn vào trang Web để lấy ra file .asm. Thí dụ: Bạn nháy chuột trên file 8led.asm, Bạn sẽ thấy hiện ra các dòng lệnh như sau:

 

 

org 0000h

ajmp start

org 0030h
start:
mov a,#0ffh;
clr c;
mov r2,#08h;循环八次。
loop:

rlc a;带进位左移。
mov p1,a;输出到P1口。
call delay;延时一段时间
djnz r2,loop;反复循环
mov r2,#07h;再往回循环。
loop1:

rrc a;带进位右移
mov p1,a;输出到P1口。
call delay;延时一段时间
djnz r2,loop1;反复循环
jmp start;重新开始

delay:mov r3,#20;延时子程序
d1:

mov r4,#20
d2:

mov r5,#248
djnz r5,$
djnz r4,d2
djnz r3,d1
ret
end

 

 

 

Bây giờ muốn dịch file 8led.asm ra file mã. Bạn có thể dùng trình MIDE. Cách làm như sau:

 

 

 

Bạn cắt các dòng lệnh của file 8led.asm và cho dán vào cửa sổ của MIDE, hình chụp sau đây cho thấy caćh chúng ta đã làm điều này:

 

 

 

Sau khi biên dịch xong, chúng ta sẽ có file mã 8led.hex, nội dung của file này như sau:

 

:020000000130CD
:1000300074FFC37A0833F590120049DAF87A07138F
:10004000F590120049DAF880E77B147C147DF8DD26
:06005000FEDCFADBF622E3
:00000001FF
 

 

Đến đây, Bạn chỉ cần cho nạp các dòng mã lệnh này vào nằm trong vùng nhớ EEPROM của ic vi điều khiển đơn phiến AT89C51 là xong việc.

 

 

 

Hãy thử phân tích các câu lệnh viết trong file 8led.asm trên:

 

 

org 0000h

; khởi đầu thường từ thanh ghi có địa chỉ 0000h


ajmp start

 ; cho nhẩy đến tên nhãn là start


org 0030h

; địa chỉ thanh ghi, các thanh ghi trên đã dùng cho chức năng ngắt.


start:

; tên nhãn dùng cho lệnh nhẩy


mov a,#0ffh;

; chuyển 8 bit: 11111111b vào thanh ghi a


clr c;

; cho xóa bit cờ C


mov r2,#08h;循环八次。

; chuyển trị số ́ vào thanh ghi r2, dùng để đếm số lần


loop:

; đặt tên nhãn

 

rlc a;带进位左移。

; cho quay bit trong thanh a qua trái, quay có dùng cờ C


mov p1,a;输出到P1口。

; chuyển trị có trong thanh a vào thanh ghi p1


call delay;延时一段时间

; cho nhẩy đến dòng có tên nhãn là delay, mục đích làm chậm


djnz r2,loop;反复循环

; giải trị trong r2 theo bước -1, chưa bằng 0 nhẩy về dòng loop


mov r2,#07h;再往回循环。

; nạp lại trị 7 vào thanh ghi r2


loop1:

; đặt tên nhãn là loop1 dùng cho lệnh nhẩy

 

rrc a;带进位右移

; cho bit trong thanh a quay qua phải, có dùng bit cờ C


mov p1,a;输出到P1口。

; chuyển trị trong a ra port p1 để hiển thị trên 8 led


call delay;延时一段时间

; cho gọi chương trình làm chậm có tên nhãn là delay


djnz r2,loop1;反复循环

; cho giảm trị trong r2 theo bước -1, chưa bằng 0, quay lại loop1


jmp start;重新开始
; nhẩy trở lại dòng start để bắt đầu lại


delay:

; đặt tên nhãn là delay, chương trình làm chậm

 

mov r3,#20;延时子程序

; chuyển trị 20 vào thanh ghi r3


d1:

; đặt tên nhãn là d1

mov r4,#20

; chuyển trị âđ vào thanh ghi r4


d2:

; đặt tên nhãn là d2

 

mov r5,#248

; chuyển trị 248 vào thanh ghi r5


djnz r5,$

; cho trị trong r5 giảm theo bước -1, chờ đến khi trị trong r5 bằng 0


djnz r4,d2

; giảm trị trong r4, chưa bằng 0 nhẩy về d2

 

djnz r3,d1

; giảm trị trong r3, chưa bằng 0 nhẩy về d1


ret

; quay lại sau lệnh call


end

; dừng biên dịch. 

 

 

 

 

 

 

 

 2. Các bài thực hành với phím nhấn ma trận.

 

 

 

 

 3. Các bài thực hành với phím nhấn thường.

 

 

 

 

4. Các bài thực hành với màn hình lcd.

 

 

5. Các bài thực hành cho hiển thị chữ Hoa trên màn hình lcd.

 

 

 

 

 

6. Các bài thực hành với bộ điều khiển hồng ngoại. 

 

 

 

 

 

 

7. Các bài thực hành với loa, phát tín hiệu âm thanh.

 

 

 

 

 

8. Các bài thực hành với motor bước.

 

 

 

 

 

9. Các bài thực hành với đèn số dùng led mã 7 đoạn.

 

 

 

 

 

10. Các bài thực hành với đèn số dùng led mã 7 đoạn.

 

 

 

 

 

11. Các bài thực hành với ic biến đổi Digital ra Analog. 

 

 

 

 

 

12. Các bài thực hành với hộp thực hành XL2000 (1).

 

 

 

 

13. Các bài thực hành với hộp thực hành XL2000 (2).

 

 

 

 

 

 

14. Các bài thực hành với hộp thực hành XL2000 (3).

 

 

Vui lòng để lại bình luận
  • online support profile

    vivian.wang.yun

    Kinh doanh linh kiện và thiết bị ngành điện tử và điều khiển điện
Top