Tải bản đầy đủ (.docx) (31 trang)

code thực hành vi xử lý viết bằng ngôn ngữ ASM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (731.89 KB, 31 trang )

I.

LED ĐƠN
1. BÀI TẬP YÊU CẦU
• Viết chương trình điều khiển 16 led đơn: chớp tắt 5 lần  2 led dịch từ trái sang phải  3 led
dịch từ phải sang trái sau đó lặp lại
2. PHẦN CỨNG

3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV P1,#0FFH
MOV P0,#0FFH
MOV R0,#5
CT:
LCALL CHOPTAT
DJNZ R0,CT
LCALL DICHLED
JMP MAIN
CHOPTAT:
MOV P1,#00H
MOV P0,#00H
LCALL DELAY
MOV P1,#0FFH
MOV P0,#0FFH
LCALL DELAY


RET
DICHLED:
MOV A,#0FFH


LA1:
CLR C
RRC A
MOV P1,A
LCALL DELAY
JB P1.6,LA1
LA2:
RR A
MOV P1,A
LCALL DELAY
JB P1.0,LA2
MOV P1,#0FEH
MOV P0,#07FH
LCALL DELAY
MOV A,#07FH
MOV P1,#0FFH
LA3:
CLR C
RRC A
MOV P0,A
LCALL DELAY
JB P0.6,LA3
LA4:

RR

A

MOV P0,A
LCALL DELAY

JB P0.0,LA4
MOV P0,#0FEH
CALL DELAY
MOV P0,#0FFH
LCALL DELAY
MOV A,#0FFH


LA5:
CLR C
RLC A
MOV P0,A
CALL DELAY
JB P0.2,LA5
LA6:
RL A
MOV P0,A
CALL DELAY
JB P0.7,LA6
MOV P0,#3FH
MOV P1,#0FEH
CALL DELAY
MOV P0,#7FH
MOV P1,#0FCH
CALL DELAY
MOV P0,#0FFH
MOV P1,#0F8H
MOV A,#0F8H
LA7:
RL A

MOV P1,A
CALL DELAY
JB P1.7,LA7
MOV P1,#3FH
CALL DELAY
MOV P1,#7FH
CALL DELAY
MOV P1,#0FFH
CALL DELAY
RET
DELAY:
MOV R5,#200


SC3:
MOV R6,#250
DJNZ R6,$
DJNZ R5,SC3
RET
END

4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x{
for(y=0;y<123;y++);}
}

void main()
{
while(1)
{
unsigned int a,b,c;
for(a=0;a<5;a++)
{
P1=0x00;
P0=0x00;
delay_ms(500);
P0=0xff;
P1=0xff;
delay_ms(500);
}
P0=0xff;
P1=0xeFf;
for(b=0;b<2;b++)
{
P1=P1>>1;


delay_ms(500);
}
for(b=0;b<6;b++)
{
P1=(P1>>1)|0x80;
delay_ms(500);
}
P1=0xfe;
P0=0x7f;

delay_ms(500);
P1=0xff;
P0=0x3f;
delay_ms(500);
for(c=0;c<8;c++)
{
P0=(P0>>1)|0x80;
delay_ms(500);
}
for(c=0;c<3;c++)
{
P0=P0<<1;
delay_ms(500);
}
for(c=0;c<5;c++)
{
P0=(P0<<1)|0x01;
delay_ms(500);
}
P0=0x3f;
P1=0xfe;
delay_ms(500);
P0=0x7f;
P1=0xfc;
delay_ms(500);


P0=0xff;
P1=0xf8;
delay_ms(500);

for(b=0;b<8;b++)
{
P1=(P1<<1)|0x01;
delay_ms(500);
}
}
}

II.

7 SEG (LED 7 ĐOẠN)

1. BÀI TẬP YÊU CẦU
• Viết chương trình điều khiển led 7 đoạn đếm từ 20 về 0
2. PHẦN CỨNG

3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV DPTR,#MALED
MOV R0,#20
MOV R4,#170
LAP1:
MOV P0,#0FFH
MOV B,#10


MOV A,R0
DIV AB
MOV P2,#0BFH

MOVC A,@A+DPTR
MOV P0,A
CALL QUET
MOV P0,#0FFH
MOV A,B
MOV P2,#7FH
MOVC A,@A+DPTR
MOV P0,A
CALL QUET
MOV P0,#0FFH
MOV P2,#0DFH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0EFH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0F7H
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0FBH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH
MOV P2,#0FDH
MOV P0,#0C0H
CALL QUET
MOV P0,#0FFH

MOV P2,#0FEH


MOV P0,#0C0H
CALL QUET
DJNZ R4,LAP1
DEC R0
MOV R4,#170
CJNE R0,#-1,LAP1
SJMP MAIN
MALED:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
QUET:
MOV R2,#20
CV:
MOV R3,#15
DJNZ R3,$
DJNZ R2,CV
RET
END

4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x{
for(y=0;y<100;y++);}
}

unsigned char code a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{
char dem,chuc,dv;
unsigned int i;
while(1)
{
for(dem=20;dem>=0;dem--)


{
chuc=dem/10;
dv=dem%10;
for(i=0;i<130;i++)
{
P0=0xff;
P2=0x7F;
P0=a[dv];
delay_ms(1);
P0=0xff;
P2=0xBF;
P0=a[chuc];
delay_ms(1);
P0=0xff;
P2=0xDF;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xEF;
P0=a[0];

delay_ms(1);
P0=0xff;
P2=0xF7;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xFB;
P0=a[0];
delay_ms(1);
P0=0xff;
P2=0xFD;
P0=a[0];
delay_ms(1);
P0=0xff;


P2=0xFE;
P0=a[0];
delay_ms(1);
}
}
}
}

III.

PHẦN LCD
1. BÀI TẬP YÊU CẦU
Viết chương trình hiên thị tên trường,họ tên sinh viên,mã số sinh viên,lớp,môn học giáo viên
hướng dẫn nhóm thực hành trên 2 dòng của LCD


2. PHẦN CỨNG

3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H
MAIN:
MOV A,#38H
LCALL GUILENH
MOV A,#0CH
CALL GUILENH
MOV A,#01H
CALL GUILENH
MOV A,#80H


CALL GUILENH
MOV DPTR,#DONG1
CALL HIENTHI
CALL DELAY
MOV A,#0C0H
LCALL GUILENH
LCALL DELAY
MOV DPTR,#DONG2
CALL HIENTHI
CALL DELAY
MOV A,#01H
CALL GUILENH
MOV A,#80H
CALL GUILENH
MOV DPTR,#DONG3

CALL HIENTHI
CALL DELAY
MOV A,#0C0H
CALL GUILENH
MOV DPTR,#DONG4
CALL HIENTHI
CALL DELAY
MOV A,#01H
CALL GUILENH
MOV A,#80H
CALL GUILENH
MOV DPTR,#DONG5
CALL HIENTHI
CALL DELAY
MOV A,#0C0H
CALL GUILENH
MOV DPTR,#DONG6
CALL HIENTHI
CALL DELAY


SJMP MAIN
GUILENH:
MOV P3,A
CLR P2.0
CLR P2.1
SETB P2.2
CLR P2.2
LCALL wait
RET

DULIEU:
MOV P3,A
SETB P2.0
CLR P2.1
SETB P2.2
CLR P2.2
LCALL wait
RET
MOV R0,#0
HIENTHI:
MOV A,R0
MOVC A,@A+DPTR
CALL DULIEU
MOV A,#06H
LCALL GUILENH
LCALL DELAY
INC R0
CJNE R0,#15,HIENTHI
MOV R0,#0
LCALL DELAY
RET
DELAY:
MOV R4,#200
DC:

MOV R5,#200
DJNZ R5,$


DJNZ R4,DC

wait:
MOV TMOD,#10H
MOV TH1,#HIGH(-2000)
MOV TL1,#LOW(-2000)
CLR TF1
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
RET
DONG1:
DB " TRUONG DAI HOC "
DONG2:
DB " CN TP HCM "
DONG3:
DB " NGUYEN VAN DAN"
DONG4:
DB " MSSV:13095631"
DONG5:
DB " TH VI XU LY"
DONG6:
DB " NHOM 3 "
END

4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
#define LCD_DATA P0

void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x

{
for(y=0;y<100;y++);}
}
void lcd_cmd(unsigned char cmd)
{
RS=0;
RW=0;
LCD_DATA=cmd;
EN=0;
EN=1;
delay_ms(2);
}
void lcd_ch(char c)
{
RS=1;
RW=0;
LCD_DATA=c;
EN=0;
EN=1;
delay_ms(1);
}
void lcd_out(char *st)
{
unsigned char i=0;

while(st[i]!=0)
{
lcd_ch(st[i]);
i++;
}
}
void lcd_out_ch(unsigned char row,unsigned char col,char *st)
{
unsigned char cmd;
cmd=(row==1?0x80:0xc0)+col-1;


lcd_cmd(cmd);
lcd_out(st);
}
void lcd_int()
{
lcd_cmd(0x30);
delay_ms(5);
lcd_cmd(0x30);
delay_ms(1);
lcd_cmd(0x38);
lcd_cmd(0x01);
lcd_cmd(0x0C);
}
void main()
{
int i;
lcd_int();
lcd_out_ch(1,2,"TRUONG DAI HOC");

delay_ms(2000);
lcd_cmd(0xc0);
lcd_out_ch(2,5,"CN_TP_HCM");
delay_ms(2000);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_out_ch(1,1,"NGUYEN VAN DAN") ;
delay_ms(2000);
lcd_cmd(0xc0);
lcd_out_ch(2,1,"MSSV:13095631");
delay_ms(2000);
lcd_cmd(0x01);
lcd_cmd(0x80);
lcd_out_ch(1,1,"THUC HANH VI XU LY NHOM 3");
delay_ms(2000);
lcd_cmd(0xc0);


lcd_out_ch(2,1,"GVHD:NGUYEN TRUNG DUNG");
while(1)
{
for(i=0;i<16;i++)
{
delay_ms(500);
lcd_cmd(0x18);
}
for(i=0;i<18;i++)
{
delay_ms(500);
lcd_cmd(0x1c);

}
}
}

IV.

MA TRẬN PHÍM
1. BÀI TẬP YÊU CẦU
Viết chương trình ma trận phím

2. PHẦN CỨNG

3. CHƯƠNG TRÌNH VIẾT BẰNG ASM
ORG 0000H


MAIN:
MOV R0,#0
MOV A,#0
MOV R1,#0
LAP2:
MOV P1,0FFH
LCALL QUETPHIM
HIENTHI:
MOV R0,A
MOV DPTR,#MALED
LAP1:
MOV P0,#0FFH
MOV B,#100
DIV AB

MOV P2,#0FDH
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV P0,#0FFH
MOV A,B
MOV B,#10
DIV AB
MOV P2,#0FBH
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV A,B
MOV P0,#0FFH
MOV P2,#0F7H
MOVC A,@A+DPTR
MOV P0,A
LCALL QUET
MOV P0,#0FFH
MOV P2,#0FEH


MOV P0,#0C0H
LCALL QUET
MOV A,R0
SJMP LAP2
QUETPHIM:
MOV P1,#0FEH
JNB P1.4,XOA
JNB P1.5,KEY1

JNB P1.6,KEY2
JNB P1.7,KEY3
MOV P1,#0FDH
JNB P1.4,KEY4
JNB P1.5,KEY5
JNB P1.6,KEY6
JNB P1.7,KEY7
MOV P1,#0FBH
JNB P1.4,KEY8
JNB P1.5,KEY9
JNB P1.6,CONG
JNB P1.7,TRU
MOV P1,#0F7H
JNB P1.4,BANG
JNB P1.5,ANS
RET
XOA:
JNB P1.4,$
MOV A,#0
JMP LAP2
RET
KEY1:
JNB P1.5,$
MOV A,#1
JMP HIENTHI
RET


KEY2:
JNB P1.6,$

MOV A,#2
JMP HIENTHI
RET
KEY3:
JNB P1.7,$
MOV A,#3
JMP HIENTHI
RET
KEY4:
JNB P1.4,$
MOV A,#4
JMP HIENTHI
RET
KEY5:
JNB P1.5,$
MOV A,#5
JMP HIENTHI
RET
KEY6:
JNB P1.6,$
MOV A,#6
JMP HIENTHI
RET
KEY7:
JNB P1.7,$
MOV A,#7
JMP HIENTHI
RET
KEY8:
JNB P1.4,$

MOV A,#8
JMP HIENTHI


RET
KEY9:
JNB P1.5,$
MOV A,#9
JMP HIENTHI
RET
CONG:
JNB P1.6,$
MOV R5,A
MOV R1,#1
JMP LAP2
RET
TRU:
JNB P1.7,$
MOV R5,A
MOV R1,#2
RET
BANG:
JNB P1.4,$
CJNE R1,#0,KQ1
JMP LAP2
KQ1:

CJNE R1,#1,KQ2
ADD A,R5
MOV R6,A

MOV R1,#0
JMP HIENTHI

KQ2:

MOV 00H,A
MOV A,R5
SUBB A,00H
MOV R1,#0
MOV R6,A
JMP HIENTHI
RET

ANS:


JNB P1.5,$
MOV A,R6
RET
QUET:
MOV R2,#15
CV:

MOV R3,#15
DJNZ R3,$
DJNZ R2,CV
RET

MALED:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

4. CHƯƠNG TRÌNH VIẾT BẰNG C
#include <REGX52.H>
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0;x{
for(y=0;y<123;y++);}
}
sbit HANG1=P1^0;
sbit HANG2=P1^1;
sbit HANG3=P1^2;
sbit HANG4=P1^3;
sbit COL1=P1^4;
sbit COL2=P1^5;
sbit COL3=P1^6;
sbit COL4=P1^7;
void main()
{
unsigned char KEY=0;


int CHUC,DV,I,TRAM,A,ANS;
unsigned char code a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
P1=0XFF;
P0=0XFF;
while (1)
{

HANG1=0;
if(COL1==0)
{
while(COL1==0)
{
}
KEY=0;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=1;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=2;
}
if(COL4==0)
{
while(COL4==0)
{
}
KEY=3;



}
HANG1=1;
HANG2=0;
if(COL1==0)
{
while(COL1==0)
{
}
KEY=4;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=5;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=6;
}
if(COL4==0)
{
while(COL4==0)
{
}
KEY=7;

}
HANG2=1;
HANG3=0;
if(COL1==0)


{
while(COL1==0)
{
}
KEY=8;
}
if(COL2==0)
{
while(COL2==0)
{
}
KEY=9;
}
if(COL3==0)
{
while(COL3==0)
{
}
A=1;
I=KEY;
}
if(COL4==0)
{
while(COL4==0)

{
}
A=2;
I=KEY;
}
HANG3=1;
HANG4=0;
if(COL1==0)
{
while(COL1==0)


{
}
if(A==1)
{
KEY=KEY+I;
ANS=KEY;
A=0;
}
if(A==2)
{
KEY=I-KEY;
A=0;
ANS=KEY;
}
}
if(COL2==0)
{
while(COL2==0)

{
}
KEY=ANS;
}
if(COL3==0)
{
while(COL3==0)
{
}
KEY=KEY+1;
A=0;
}
HANG4=1;
TRAM=KEY/100;
CHUC=(KEY%100)/10;
DV=(KEY%100)%10;


×