1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Chuẩn bị thí nghiệm vi điều khiển Đại Học Bách Khoa Hà Nội

20 2,3K 111

Đ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 20
Dung lượng 22,9 KB

Nội dung

Trang 1

Chuẩn bị thí nghiệm vi điều khiển

Bài 1: Điều khiển động cơ bước

Code assembly:

ORG 0000H

SJMP MAIN

ORG 0030H

MAIN:

MOV R1,#4

MOV A,#0FEH

SETB C

QUAY:MOV P1,A

LCALL DELAY

RL A

DJNZ R1,QUAY

SJMP MAIN

DELAY:

MOV R5,#20

L1: MOV R6,#20

L2: MOV R7,#248

DJNZ R7,$

DJNZ R6,L2

DJNZ R5,L1

RET

END

Trang 2

Bài 2: Hiển thị LCD 16x2

Code bằng C:

#include<regx51.h>

sbit rs=P3^3;

sbit rw=P3^4;

sbit en=P3^5;

sbit lcd_port=P0;

void delay_us(unsigned int t)

{

unsigned int i;

for(i=0;i<t;i++);

}

void delay_ms(unsigned int t)

{

unsigned int i,j;

for(i=0;i<t;i++)

{for(j=0;j<125;j++);}

}

// chuong trinh con tao mot xung tu cao xuong thap de kich chan chot tin hieu void lcd_enable()

{

en=1;

delay_us(3);

en=0;

delay_us(50);

}

// ham gui lenh len lcd

void lcd_sendcommand(unsigned char command)

{

rs=1;

Trang 3

rw=0;

lcd_port=command;

lcd_enable();

}

// chuong trinh con ghi du lieu len LCD

void lcd_senddata(unsigned char data)

{

rs=0;

rw=0;

lcd_port=data;

lcd_enable();

}

void lcd_clear()

{

lcd_sendcommand(0x01);

delay_us(10);

}

// chuong trinh con khoi tao lcd

void init()

{

lcd_sendcommand(0x030); //chon che do 8 bit du lieu

delay_ms(5);

lcd_sendcommand(0x38); // chon hien thi 2 dong va ma tran 5x7 delay_ms(5);

lcd_sendcommand(0x0C); // bat hien thi, tat con tro

delay_ms(5);

lcd_sendcommand(0x06);

delay_ms(5);

lcd_sendcommand(0x01); // clear man hinh lcd

delay_ms(5);

Trang 4

// chuong trinh con tro ve dau dong

void lcd_home()

{

lcd_sendcommand(0x80);

}

// chuong trinh con gui mot kis tu len lcd

void lcd_putchar(unsigned char data)

{

rs=1;

lcd_sendcommand(data);

rs=0;

}

// chuong trinh con gui mot chuoi ki tu len lcd

void lcd_puts(unsigned char *s)

{

while(*s)

{

lcd_putchar(data);

s++;

} }

// ********************* ham main**************************** main()

{

lcd_init(); // khoi tao lcd

delay_ms(1000);

lcd_Puts("DESIGNER LE THIEN DUC");//Gui chuoi len LCD

delay_ms(1000);

lcd_Clear();//Xoa man hinh

Trang 5

lcd_Gotoxy(0,0);//Tro toi vi tri

lcd_Puts("Test LCD ");

delay_ms(2000);

lcd_clear();

lcd_Gotoxy(0,1);//Tro toi vi tri

lcd_Puts("PHIM BAN NHAN LA");

while(1);//ko lam gi ca

{

} }

Bài 3: Quét bàn phím hiển thị led 7 thanh

;chuong trinh quyet ban phim va hien thi LED

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

MOV A,#10000010b ; đây là từ điều khiển xuất ra từ vđk port A,port C là đầu ra còn port B là đầu vào

MOV DPTR,#8003H ; chọn thanh ghi điều khiển

MOVX @DPTR,A ; xuất từ điều khiển

MOV A,#11110000b

MOV DPTR,#8001H ; chỏ tới địa chỉ của port B

MOVX @DPTR,A ; cài đặt cho các bit cao của port B ở mức cao

Trang 6

; Đây là chương trình con kiểm tra phím đã được nhả hay chưa( đấy là sau khi bấm phím) để đảm bảo chắc chắn rằng phím ấn trước đo đã dc nhả ra

KEY1: MOV A,#11110000B

MOV DPTR,#8000H

MOVX @DPTR,A

MOV DPTR,#8001H

MOVX A,@DPTR

ANL A,#11110000B

CJNE A,#11110000B,KEY1

; Đây là chương trình con kiểm tra xem có phím nào được ấn hay không và chờ một phím được ấn

KEY2:

ACALL DELAY ;chờ khoảng 20ms

MOV DPTR,#8001H ; trỏ tới địa chỉ của port B

MOVX A,@DPTR ; đọc tất cả các hàng

ANL A,#11110000B ; che các bit không dùng tới

CJNE A,#11110000B,OVER ; Nếu có phim dc ấn thì nhảy đến chương trình con OVER (chương trình con đảm bảo cho bàn phim không bị lỗi xung nhiểu gây ra và kiểm tra xem phím đã dc nhấn thực sự hay không)

SJMP KEY2 ; Nếu các bit cao của port B đều là mức cao thì quay lạ nhãm KEY2 lặp lại quá trình quét

; chương trình con đảm bảo cho bàn phim không bị lỗi xung nhiểu gây ra và kiểm tra xem phím đã dc nhấn thực sự hay không

OVER:

MOV DPTR,#8001H; ; chỏ tới địa chỉ của port B

Trang 7

ANL A,#11110000B ; che cac bit khong dung

CJNE A,#11110000B,OVER1 ; neu phim dc bam,nhay den chuong trinh tim hang

;chương trìnhh con tìm hàng

OVER1:

MOV DPTR,#8000H ; chọn port A

MOVX @DPTR,A ; tiếp đất cột 1

MOV DPTR,#8001H; ; chọn port B

ANL A,#11110000B ; che các bit không dùng

LCALL DELAY

MOV A,#11111101B ; tiếp đất cột 2

MOV DPTR,#8000H ; chọn port A

MOV DPTR,#8001H; ; chọn port B

MOVX A,@DPTR

ANL A,#11110000B

CJNE A,#11110000B,FIND_HANG2

LCALL DELAY

MOV A,#11111011B ; tiep dat cot 3

MOV DPTR,#8000H; ; chọn port A

MOV DPTR,#8001H; ; CHON PORT B

Trang 8

MOVX A,@DPTR ; đọc tất cả các hàng

ANL A,#11110000B

CJNE A,#11110000B,FIND_HANG3

LJMP KEY2

; tập chương trình con tìm phím dã dc ấn

FIND_HANG1:

MOV DPTR,#8001H ; CHON PORT B

ANL A,#11110000B SO_1: CJNE A,#10110000B,SO_4 ; kiểm tra xem phím số 4 có dc ấn

không?,nếu không thì nhảy đến SO_4 tìm tiếp

LJMP HT_1 ; nếu phím dc ấn thì nhảy dến chương trình con hiển thị số 1 lên led

SO_4:

CJNE A,#11010000B,SO_7

LJMP HT_4

SO_7:

CJNE A,#11100000B,FIND_HANG2

MOV DPTR,#8001H; CHON PORT B

ANL A,#11110000B

SO_0:

CJNE A,#01110000B ,SO_2

LJMP HT_0

Trang 9

SO_2:

CJNE A,#10110000B,SO_5

LJMP HT_2

SO_5:

CJNE A,#11010000B,SO_8

LJMP HT_5

SO_8:

CJNE A,#11100000B,FIND_HANG3

LJMP HT_8

FIND_HANG3:

MOV DPTR,#8001H; CHON PORT B

ANL A,#11110000B

SO_9:

CJNE A,#11100000B,SO_3

LJMP HT_9

SO_3: CJNE A,#10110000B,SO_6

LJMP HT_3

SO_6:

CJNE A,#11010000B,FIND_HANG1

LJMP HT_6

HT_9:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#00001001B;

MOVX @DPTR,A;

Trang 10

LJMP KEY1

HT_7:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#00000111B;

MOVX @DPTR,A;

LJMP KEY1

HT_4:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#00000100B;

MOVX @DPTR,A;

LJMP KEY1

HT_1:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#00000001B;

MOVX @DPTR,A;

LJMP KEY1

HT_3:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11110011B;

MOVX @DPTR,A;

LJMP KEY1

HT_6:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11110110B;

MOVX @DPTR,A;

Trang 11

LJMP KEY1

HT_2:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11110010B;

MOVX @DPTR,A;

LJMP KEY1

HT_0:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11110000B; HIEN THI SO 0

MOVX @DPTR,A;

LJMP KEY1

HT_8:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11111000B;

MOVX @DPTR,A;

LCALL DELAY

LJMP KEY1

HT_5:

MOV DPTR,#8002H; CHO TOI DIA CHI CUA PC

MOV A,#11110101B;

MOVX @DPTR,A

LJMP KEY1

DELAY:

MOV R1,#4

L1: MOV R2,#10

Trang 12

L2: MOV R3,#249

DJNZ R2,L2 DJNZ R1,L1 RET

END

Trang 13

Bài 14: Giao tiếp relay với Led đơn

ORG 0000H SJMP MAIN ORG 0030H MAIN:

;CAI DAT IC 82C55

DAU VAO

MOV DPTR,#8003H

MOVX @DPTR,A

MOV DPTR,#8001H ; CHON PORT B

MOV A,#0FFH

MOVX @DPTR,A

;CHUONG TRINH CON KIEM TRA XEM PHIM CO DC AN KHONG

BACK:

MOV DPTR,#8001H

MOVX A,@DPTR

ANL A,#00FH ; CHE CAC BIT KHONG DUNG

Trang 14

CJNE A,#00FH,PHIM_1

SJMP BACK

; CHUONG TRINH CON QUET PHIM

PHIM_1:

LCALL DELAY

ANL A,#0FH CJNE A,#00001110B,PHIM_2 ; NEU PHIM 1 KO DC AN,NHAY DEN CHUONG TRINH QUET PHIM 2

MOVX A,@DPTR ; LAY DU LIEU TU PORT B ANL A,#0FH

CJNE A,#00001101B,PHIM_3

SJMP RL_2

PHIM_3: LCALL DELAY

MOV DPTR,#8001H

MOVX A,@DPTR ; LAY DU LIEU TU PORT B ANL A,#0FH

CJNE A,#00001011B,PHIM_4

SJMP RL_3

PHIM_4: LCALL DELAY

MOV DPTR,#8001H

MOVX A,@DPTR ; LAY DU LIEU TU PORT B

Trang 15

ANL A,#0FH CJNE A,#00000111B,BACK

SJMP RL_4

; CHUONG TRINH DIEU KHIEN RELAY

MOV A,#00000001B

MOVX @DPTR,A LJMP BACK RL_2:

MOV DPTR,#8000H

MOV A,#00000010B MOVX @DPTR,A LJMP BACK RL_3:

MOV DPTR,#8000H

MOV A,#00000100B MOVX @DPTR,A LJMP BACK RL_4:

MOV DPTR,#8000H

MOV A,#00001000B MOVX @DPTR,A LJMP BACK RET

;HAM TRE

Trang 16

DELAY: mov r0,#1

loop1:mov r1,#10

loop3:djnz r2,loop3

djnz r1,loop2 djnz r0,loop1 ret

END

CHỈNH SỬA BÀI CỦA THẦY:

main:

movx @dptr,a

Trang 17

mov dptr,#portb movx @dptr,a

back:

acall delay

movx a,@dptr

cjne a,#0fh,over sjmp back

over:

acall delay

movx a,@dptr

cjne a,#00001110b,but1 sjmp rl_0

but1:

movx a,@dptr

cjne a,#00001101B,but2 sjmp rl_1

but2:

Trang 18

movx a,@dptr

cjne a,#00001011B,but3 sjmp rl_2

but3:

movx a,@dptr

cjne a,#00000111B,but1 sjmp rl_3

rl_0:

movx @dptr,a ljmp back rl_1:

movx @dptr,a ljmp back rl_2:

movx @dptr,a ljmp back

Trang 19

movx @dptr,a ljmp back

loop1:mov r1,#10

loop3:djnz r2,loop3

djnz r1,loop2 djnz r0,loop1 ret

delayrun:

djnz r1,loop12 djnz r0,loop11 ret

end

Ngày đăng: 24/05/2014, 22:19

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w