单片机答案汇编 联系客服

发布时间 : 星期五 文章单片机答案汇编更新完毕开始阅读268310a2f524ccbff121849a

单元中去。

答:#include

#include void main(void) {

unsigned int temp;

temp = DWORD[0x0030]; XWORD[0x1000] = temp; while(1); }

5-5 试编写一段程序,将外部数据存储器40H单元中的内容传送到50H单元。 答:方法一:

#include #include void main(void) {

XBYTE[0x0050] = XBYTE[0x0040]; while(1); }

方法二:

#include #include void main(void) {

unsigned char xdata *xp; unsigned char data temp; xp = 0x0040; temp = *xp; xp = 0x0050; *xp =temp; while(1); }

5-6 试编写—段程序,将R3中的数乘以4。 答:#include

void main(void) {

unsigned int data *a; #pragma asm

MOV 30H, R3 #pragma endasm a = 0x30; *a = *a*4; while(1); }

5-7 试编写—段程序,将R2中的各位倒序排列后送入R3中。

答:考虑C中没有循环移位,对于这种很低级的运算,采用嵌入汇编的方式完成。

#include void main(void) {

#pragma asm MOV R7, #08H MOV R3, #00H DEL: CLR CY MOV A, R2

RLC A

MOV R2, A MOV A, R3 RRC A MOV R3, A DJNZ R7, DEL #pragma endasm while(1); }

5-8 试编写—段程序,将P1口的高5位置位,低3位不变。 答:#include

void main(void) {

P1 |= 0xf8; while(1); }

5-9 设8次采样值依次存放在20H~27H的连续单元中,采用算术平均值滤波法求采样平均值,结果保留在30H单元中。试编写程序。 答:#pragma small

#include void main(void) {

unsigned char *dp = 0x20,i; float temp = 0; for(i=0;i<8;i++) {

temp += *dp; dp++; }

temp /= 8; dp = 0x30; *dp = temp; while(1); }

5-10 从20H单元开始有一无符号数据块,其长度在20H单元中。编写程序找出数据块中最小值,并

存入21H单元。 答:#pragma small

#include void main(void) {

unsigned char *dp, num, min, i; dp = 0x20; num = *dp; dp++;

for(i=1;i

min = *dp; dp++;

if(min>*dp) min = *dp; }

dp = 0x21; *dp = min; while(1); }

6-10 某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H。试编写主程序及中断服务程序(转至相应的 入口即可)。

答:对系统的三个外中断源,可利用MCS-51的2个外中断源INT0和INTI,再将定时/计 数器T1 作为扩展的外部中断使用,INT0接外中断源3,INTI接外中断源2,定时/计数器T1接外中断源1,3个中断源设置为同级中断,外中断源1、2、3依次接到P1.0、P1.1、P1.2上。

汇编语言程序代码如下: ORG 0000H ;复位入口地址 AJMP MAIN ;转主程序 ORG 0003H AJMP INT1 ORG 0100H

MAIN: MOV TMOD, #60H ;T1方式2 MOV TH1, #0FFH

MOV TL1, #0FFH ;置初值 SETB TR1 ;启动计数器T1 SETB EA ;CPU中断开放 SETB ET1 ;允许T1中断

SETB IT0 ;允许外中断0产生中断 SETB IT1

SETB PX0 ;外中断0为高级中断 SETB PX1 SETB PT1

SETB IT0 ;外中断0为跳沿触发方式 SETB IT1

LOOP1: SJMP LOOP1 ;等待中断 ;中断服务程序 ORG 1000H

INT1: PUSH PSW ;保护现场 PUSH ACC

JB P1.0,IR1 ;P1.0高,外中断1有请求 JB P1.1,IR2 ;P1.1高,外中断2有请求 JB P1.2,IR3 ;P1.2高,外中断3有请求 INTIR: POP ACC ;恢复现场 POP PSW

RETI ;中断返回 ORG 2000H

IR1: … … ;外中断1的中断处理程序 AJMP INTIR ORG 2100H

IR2: … … ;外中断2的中断处理程序 AJMP INTIR ORG 2200H

IR3: … … ;外中断3的中断处理程序 AJMP INTIR END

7-5 采用定时/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-51单片机的晶体振荡器频率为6MHz,请使用方式1实现,要求编写出程序。 答: ORG 0000H

START: CLR TR0 MOV TMOD, #05H

MOV TH0, #0FFH MOV TL0, #9CH ;计数器初始化 S0: JBC TF0, NEXT SJMP S0

NEXT: CLR TR0 MOV TMOD, #01H MOV TH0, #0F8H MOV TL0, #30H ;定时器初始化 SETB TR0

S1: JBC TF0, START SJMP S1 END

7-7 编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10:1的矩形脉冲。 答:本题采用晶体振荡器频率为12MHz,使用定时器配合计数器,设计成一个40μs定时将P1.0置0和一个400μs定时将P1.0置1。

ORG 0000H ;中断入口地址 AJMP START

ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ORG 0030H

START: MOV SP, #5FH

MOV 30H, #00H ;软件计数器清零 MOV TMOD, #02H ;T0工作在方式1 MOV TH0, #216 MOV TL0, #216 SETB EA SETB ET0 SETB TR0 ;任意程序段

TIME0: PUSH ACC ;中断处理子程序 PUSH PSW CLR P1.0 INC 30H MOV A, 30H

CJNE A, #10, T0_4 SETB P1.0

MOV 30H, #00H T0_4: POP PSW POP ACC RETI END

7-9 利用定时/计数器T0产生定时时钟,由P1口控制8个指示灯。编一个程序,使8个指示灯依次一个一

个闪动,闪动频率为20次/秒(8个灯依次亮一遍为一个周期)。

答:本题采用晶体振荡器频率为12MHz,每个灯的闪烁周期是:50ms,采用工作方式1。

ORG 0000H AJMP START ORG 000BH AJMP TIME0 ORG 0030H

START: MOV SP, #5FH MOV R7, #0FEH