单片机实验总结(山科考试参考)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、将(R2)和(R4)中的十六进制数相乘,结果存放在3AH(低字节)和3BH (高字节)单元中。
MOV A,R2
MOV B,R4
MUL AB
MOV 3AH,A
MOV 3BH,B
2、编写程序,把累加器A 中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的30H、31H、32H中。MOV B, #100
DIV AB
MOV 30H, A
MOV A, #10
XCH A, B
DIV AB
MOV 51H,A
MOV 52H,B
3、试编写程序,将R3中的低4位数与R4中的高4位数合并成一个8位数,并将其存放回R5中。
一法:MOV A,R3
ANL A,#OFH
MOV R5,A
MOV A,R4
ANL A,#FOH
ORL A,R5
MOV R5,A
二法:MOV A,R3
MOV @R0,A
MOV A,R4
XCHD A,@R0
MOV R5,A
4、试编写程序,将外部RAM 中1234H开始的16个单元的十六进制数存入内部RAM 30H到3FH单元中。MOV DPTR,#1234H
MOV R0,#30H
LOOP:MOVX A,@DPTR MOV @RO,A
INC DPTR
INC RO
CJNE R0,#40H,LOOP ;如果R0和立即数40H不相等则继续进行循环,相等跳出
5、已知被加数存在(R2)(R3)中,加数存在(R4)(R5)中,高位在前;试编两字节加法程序,将相加之和存放在30H(低位)、31H(高位)和32H(进位)中单元中。
MOV A,R3
ADD A,R5
MOV 30H,A
MOV A,R2
ADDC A,R4
MOV 31H,A
CLR A
ADDC A,#00H
MOV 32H,A
实验一:编写一套完整的汇编语言程序:将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H、41H和42H单元中。并生成main.lst文件和top.hex,假设:(R2)=12H,(R3)=34H,(R4) =56H,(R5)=78H
Org 0000h
Ljmp main
Org 100h Main: mov r2,#12h
Mov r3,#34h
Mov r4,#56h
Mov r5,#78h
mov a,r3
Add a,r5
Mov 42h,a
Mov a,r2
Addc a,r4
Mov 41h,a
Mov a,#00h
Addc a,#00h
Mov 40h,a
end
1.应用MOVC A,@A+DPTR指令求累加器A 的平方值Y(设Y<=15),并把结果送至R7中保存。并生成main.lst文件和top.hex,假设(A)=10。
Org 0000h
Ljmp main
Org 100h Main: mov a,#0ah
Mov dptr,#table
Movc a,@a+dptr
Mov r7,a Table:db0,1,4,9,16,25,36,4 9,64,81,100,121,144,169,1 96,225
End
实验二:编写一套完整的汇编语言程序:将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H、41H和42H单元中。并生成main.lst文件和
top.hex,假设:
(R2)=12H,(R3)=34H,(R4)
=56H,(R5)=78H
Org 0000h
Ljmp main
Org 100h
Main: mov r2,#12h
Mov r3,#34h
Mov r4,#56h
Mov r5,#78h
mov a,r3
Add a,r5
Mov 42h,a
Mov a,r2
Addc a,r4
Mov 41h,a
Mov a,#00h
Addca,#00h
Mov 40h,a
end
实例三:应用MOVC A,
@A+DPTR指令求累加器A
的平方值Y(设Y<=15),并把
结果送至R7中保存。并生
成main.lst文件和top.hex,
假设(A)=10。
Org 0000h
Ljmp main
Org 100h
Main: mov a,#0ah
Mov dptr,#table
Movc a,@a+dptr
Mov r7,a
Table: db
0,1,4,9,16,25,36,49,64,81,
100,121,144,169,196,225
end
实验三:1.四进制计数程序:
;************* 功能说明
;程序使用P4.7 P4.6 来显
示0~3的计数值
;定义P4端口的地址
LED7 BIT P1.7
LED8 BIT P1.6
LED9 BIT P4.7
LED10 BIT P4.6
P4 DATA 0C0H
;*****************************
org 0x0000
LJMP main
ORG 0x100
Main: ;USING 0
CLR PSW.3
CLR
PSW.4
Loop1: MOV A,#0
Loop2: JB ACC.0,
SETP41
SETB
LED9
JMP
CON
SETP41: CLR LED9
CON: JB
ACC.1,SETP42
SETB
LED10
JMP
CON1
SETP42:CLR LED10
CON1: MOV R0,#20
dly: ACALL delay
DEC R0
CJNE
R0,#0,dly
INC A
CJNE
A,#4,Loop2
JMP
Loop1
;********************
************
;// 函数: delay
;// 描述: 延时子程
序。
;********************
************
delay: MOV
R3, #0FFH
delay_1: MOV
R4, #0FFH
delay_2: DEC
R4
CJNE
R4,#0,delay_2
DEC R3
CJNE R3,#0,delay_1
RET
END
2.设计一个在0--15之间计
数(十六进制)的计数器,
并将程序和运行中的“LED7、
LED8、LED9和LED10闪
亮”的视频发到FTP上(15
秒以内)。
P1.7
LED8 BIT P1.6
LED9 BIT P4.7
LED10 BIT P4.6
P4 DATA 0C0H
P1M0 DATA 92H
P1M1 DATA 91H
P4M0 DATA 0B4H
P4M1 DATA 0B3H
org 0x0000
LJMP main
ORG 0x100
Main:;USING 0
MOV
P1M0,#00H
MOV
P1M1,#00H
MOV
P4M0,#00H
MOV
P4M1,#00H
CLR PSW.3
CLR PSW.4
Loop1:MOV A,#0
Loop2:JB ACC.0,
SETP41
SETB LED7
JMP CON
SETP41:CLR LED7
CON:JB
ACC.1,SETP42
SETB LED8
JMP CON1X
SETP42:CLR LED8
CON1X:JB
ACC.2,SETP43
SETB LED9
JMP CON1XY
SETP43:CLR LED9
CON1XY: JB
ACC.3,SETP44
SETB LED10
JMP CON1
SETP44:CLR LED10
CON1:MOV R0,#20
dly:ACALL delay
DEC R0
CJNE R0,#0,dly
INC A
CJNE A,#16,Loop2
JMP Loop1
delay: MOV
R3, #0FFH
delay_1:MOV
R4, #0FFH
delay_2:DEC
R4
;
CJNE
R4,#0,delay_2 ;
DEC
R3
CJNE
R3,#0,delay_1 ;
RET
END
实验四:中断程序
LED7 BIT P1.7
LED8 BIT P1.6
LED9 BIT P4.7
LED10 BIT P4.6
P4 DATA 0C0H
P1M0 DATA 92H
P1M1 DATA 91H
P4M0 DATA 0B4H
P4M1 DATA 0B3H
Org
0000h
LJMP main
ORG 0x0003
LJMP count
ORG 0x100
Main:USING 0
MOV SP, #40H
SETB IT0;见
P72 int0下降沿触发
SETB EX0
SETB EA
MOV A,#0
loop: ljmp loop
;******************************
**
;// 函数: count
;// 描述: 中断服务子程序
;******************************
**
count: PUSH DPH
PUSH 02H
JB ACC.0,
SETP41
SETB P4.7
JMP CON
SETP41: CLR P4.7
CON: JB
ACC.1,SETP42
SETB P4.6
JMP CON1
SETP42: CLR P4.6
CON1: INC A
POP DPH
POP
02H
RETI
END
1.设计一个在0--15之间计
数(16进制)的计数器,通
过STC学习板上的P3.6、
P3.7、P4.6和P4.7 端口上
的LED,显示计数的值。计
数触发脉冲由INT1实现。
将程序发到FTP。
P4 DATA 0C0H
P1M0 DATA 92H
P1M1 DATA 91H
P4M0 DATA 0B4H
P4M1 DATA 0B3H
Org 0000h
LJMP main
ORG 0x0013
LJMP count
ORG 0x100
Main:USING 0
MOV
P1M0,#00H
MOV
P1M1,#00H
MOV
P4M0,#00H
MOV
P4M1,#00H
MOV SP, #40H
SETB IT1
SETB EX1
SETB EA
MOV A,#0
loop: ljmp loop
count:PUSH DPH
PUSH 02H
ACALL DELAY
JNB P3.3,SETP0
RETI
SETP0:JB ACC.0,
SETP41
SETB P4.6
JMP CON
SETP41: CLR P4.6
CON: JB
ACC.1,SETP42
SETB P4.7
JMP CON1
SETP42: CLR P4.7
CON1: JB
ACC.2,SETP43
SETB P1.6
JMP CON2
SETP43:CLR P1.6
CON2: JB
ACC.3,SETP44
SETB P1.7
JMP CON3
SETP44:CLR P1.7
CON3: INC A
POP 02H
POP
DPH
RETI
delay: MOV
R3, #0FFH
delay_1:MOV
R4, #0FFH
delay_2:DEC
R4
CJNE
R4,#0,delay_2
DEC
R3
CJNE
R3,#0,delay_1
RET
END
实验五:C中断程序
#include"stc15.h"
//sfr P4=0xc0;
//sbit P47=P4^7;
//sbit P46=P4^6;
int i=0;
service_int0()inter
rupt 2
{if(i==4) i=0;
if(i==0)
{ P46=1;
P47=1;
}
else if(i==1)
{P46=0;
P47=1;
}
else if(i==2)
{P46=1;
P47=0;
}
else if(i==3)
{P46=0;
P47=0;
}
i=i+1;
}
void main()
{ P1M1=0;
P1M0=0;
P4M1=0;
P4M0=0;
IT1=1;
//TCON中的,决定中断源
类型
EX1=1;
EA=1;
while(1);
}
2.用C语言设计一个在
0--15之间计数(十六进制)
的计数器,并将程序在开发
板上运行,四位二进制的状
态用LED7、LED8、LED9
和LED10表示,将源程序
及汇编生成的.lst文件发到
FTP上。
#include"STC15.h"
#include
//sfr P1=0x90;
//sfr P4=0xc0;
//sbit P17=P1^7;
//sbit P16=P1^6;
//sbit P47=P4^7;
//sbit P46=P4^6;
int i=0;
service_int0()interrupt
2
{if(i==16)
i=0;
if(i==0)
{P17=1;
P16=1;
P47=1;
P46=1;
}
else if(i==1)
{ P17=1;
P16=1;
P47=1;
P46=0;
}
else if(i==2)
{P17=1;
P16=0;
P47=1;
P46=1;
}
else if(i==3)
{P17=0;
P16=0;
P47=1;
P46=1;
}
else if(i==4)
{P17=1;
P16=1;
P47=0;
P46=1;
}
else if(i==5)
{P17=0;
P16=1;
P47=0;
P46=1;
}
else if(i==6)
{P17=1;
P16=0;
P47=0;
P46=1;
}
else if(i==7)
{P17=0;
P16=0;
P47=0;
P46=1;
}
else if(i==8)
{ P17=1;
P16=1;
P47=1;
P46=0;
}
else if(i==9)
{P17=0;
P16=1;
P47=1;
P46=0;
}
else if(i==10)
{ P17=1;
P16=0;
P47=1;
P46=0;
}
else if(i==11)
{P17=0;
P16=0;
P47=1;
P46=0;
}
else if(i==12)
{P17=1;
P16=1;
P47=0;
P46=0;
}
else if(i==13)
{P17=0;
P16=1;
P47=0;
P46=0;
}
else if(i==14)
{ P17=1;
P16=0;
P47=0;
P46=0;
}
else if(i==15)
{ P17=0;
P16=0;
P47=0;
P46=0;