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 2Bà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 3rw=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 5lcd_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 7ANL 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 8MOVX 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 9SO_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 10LJMP 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 11LJMP 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 12L2: 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 14CJNE 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 15ANL 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 16DELAY: 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 17mov 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 18movx 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 19movx @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