单片机实验总结(山科考试参考)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档