MCS51单片机作业解答

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORL A, B
MOVX @DPTR, A
INC R0
INC DPTR
DJNZ R2,ASC_TO_BCD1
RET
第5章单片机C51程序设计
解:
unsigned int htoi(unsigned char s[], unsigned int size)
{
unsigned int tmp[10];
unsigned int i = 0;
MOV @R0, A
INC R0
DJNZ R2,Mult10_DATA3
MOV R0 , #DATA1
MOV R1 , # DATA2
MOV R2, #10H
CLR C
Mult10_DATA4:
MOV A, @R0 ;*2*2*2
ADDC A, @R1 ; + *2
MOV @R0, A
INC R0
INC R1
tmp[i] = s[i] - 48;
else if((s[i]>='a') && (s[i]<='f'))
tmp[i] = s[i] - 'a' + 10;
else if((s[i]>='A') && (s[i]<='F'))
tmp[i] = s[i] - 'A' + 10;
else
tmp[i] = 0;
result = result + tmp[i]*count;
count = count*16;
}
return result;
}
解:
#include <stdio.h>
#include <string.h>
typedef unsigned char bool;
bool strend(unsigned char s[], unsigned char t[]);
Mult10_DATA2:
MOV A, @R0
ADDC A, @R0 ;*2*2
MOV @R0, A
INC R0
DJNZ R2,Mult10_DATA2
MOV R0 , #DATA1
MOV R2, #10H
CLR C
Mult10_DATA3:
MOV A, @R0
ADDC A, @R0 ;*2*2*2
第3章 MCS-51单片机的汇编语言指令系统
单片机的指令格式为: 操作码+操作数
[标号:] 操作码助记符 [目的操作数] [,源操作数] [;注释]
答:MCS-51单片机有7种寻址方式: 立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。
立即寻址——操作数在指令中直接给出。
MOV R1 , # DATA2
MOV R2, #10H
CLR C
Mult10_DATA1:
MOV A, @R0
ADDCA, @R0 ;*2
MOV @R0, A
MOV @R1, A
INC R0
INC R1
DJNZ R2,Mult10_DATA1
MOV R0 , #DATA1
MOV R2, #10H
CLR C
第6章单片机内部资源
解: 因为10KHZ的周期为100us ,定时器中断时间可为50us,因此有4中方式。
方式0:x= 213-50*(12/12) =8192-50 =1FCEH
= 1 1111 1100 1110B TH0 = FEH TL0 = 0EH
方式1: x= 216-50*(12/12) =65536-50 =FFCEH
unsigned int count = 1, result = 0;
unsigned int flag = 0;
if((s[i] == '0') && (s[i+1] == 'x') || (s[i+1] == 'X'))
flag = 2;
for(i=size-1; i>=flag; i--){
if((s[i]>='0') && (s[i]<='9'))
答:只允许数据单端输入输出的一段存储空间。
SP的作用是用来存放堆栈栈顶的地址。
因为SP的初值是07H,后继的是寄存器区和位寻址区,为了便于编程工作,要修改SP.
(8)程序状态字寄存器PSW的作用是什么?简述各位的作用。
答:PSW用来存放程序执行状态的信息,
CY—加减运算的进位、借位
AC—辅助进位标志,加减运算的低4位进位、借位
#define uchar unsigned char
uchar temp,num;
void main()
{
TMOD=0x10;
TH1=(65536-25000)/256;
TL1=(65536-25000)%256;
EA=1;
ET1=1;
TR1=1;
P1=0xff;
temp=0xfe;
while(1)
MUL AB
ADD A,#8
SJMP START_END
START_M: MOV B,A ; X<10
MUL AB
DEC A
SJMP START_END
START_B: MOV A,#41
START_END: MOV Y,A
SJMP $
解:data equ 50h
Num equ 08h
Result equ 54h
第4章MCS-51单片机汇编语言程序设计
解:x equ 5AH
Y EQU 5BH
ORG 0100H
START: CJNE A,#10, START1
START1: JC START_M ;X<10
CJNE A,#15, START2
START2: JNC START_B ;X>=15
MOV B,A ;10<=X<15
MCS51单片机作业解答
第二章 MCS-51单片机的结构和原理
(1) MCS-51单片机芯片包含哪些主要功能部件?
答:CPU、4KBROM、128B RAM、4个8位I/O口、2个定时计数器、串行I/O口、中断系统、时钟电路、位处理器、总线结构。
(2)MCS-51单片机的/EA端有何用途?
答:当/EA =0 只访问片外程序区;当/EA=1时,先访问片内程序区,当PC超过片内程序容量时,自动转向外部程序区。
分上电复位和手动复位。复位后PC=0000H ALE=0 /PSEN=1
(13)开机复位后,单片机使用的是哪组工作寄存器?它们的地址是什么?如何改变当前工作寄存器组?
答:单片机使用的是第0组工作寄存器R0-R7, 对应的地址为00H-07H,采用置位复位RS1、RS0,可以改变单片机使用的工作寄存器。
= 1111 1111 1100 1110B TH0 = FEH TL0 = CEH
方式2: x= 28-50*(12/12) =256-50 =CEH
int main()
{
unsigned char s1[] = "abcdefg";
unsigned char s2[] = "ef";
bool flag = strend(s1, s2);
printf("the result is %d\n", flag);
return 0;
}
bool strend(unsigned char s[], unsigned char t[])
(9)位地址65H与字节地址65H如何区别?位地址65H具体在片内RAM中什么位置?
答:位地址65H中是一位0/1的数据,字节地址65H是8位0/1的数据。
位地址65H在片内RAM中2CH单元第5位。
(10)什么是振荡周期、时钟周期、机器周期和指令周期?如何计算机器周期的确切时间?
答:振荡周期——为单片机提供信号的振荡源的周期
{
P1=temp;
}
}
void time1() interrupt 3
{
TH1=(65536-25000)/256;
TL1=(65536-25000)%256;
num++;
if(num==5)
{
num=0;
temp=(temp<<1|temp>>7);
}
}
答:不是, 5/9=0; 则c=0.
改为 C= 5.0/9.0 *(F-32.0) ;
答:(1)立即寻址 (2)直接寻址 (3)寄存器间接寻址 (4)寄存器寻址 (5)MOVC A @A+DPTR
变址寻址 (6)相对寻址 (7)CLR A 立即寻址 ,CLR C 位寻址
答:这2条指令的操作结果相当,但是前1条指令速度快,指令短
答:如A= 12H (PC) = 0FFEH + 20H +3= 1021H如A= 10H (PC)= 0FFEH +3 = 1001H
可寻址64KB的程序区
相对寻址——实现程序的相对转移,地址范围-128~+127
位寻址——按位寻址,操作数的地址为位地址。 可寻址 RAM区128bit 特殊功能区的128bit
答:对片内RAM可以用直接寻址和寄存器寻址方式。
对片外RAM可以用寄存器寻址方式-
答:在对片外RAM单元的寻址中用Ri间接寻址只能寻址当前页的256B,用dptr间接寻址可以直接寻址64KB的内存
(3)MCS-51单片机有哪些信号需要芯片引脚以第二功能的方式提供?
答:RXD、TXD、/INT0、/INT1、T0、T1、/WR、/RD
(4)MCS-51单片机的4个I/O口在使用上各有什么功能和特点?
答:P1口通用输入输出;P0口数据总线、地址总线低8位、通用输入输出
P2口地址总线高8位、通用输入输出
{
int ห้องสมุดไป่ตู้s = strlen(s);
int lt = strlen(t);
if (lt == 0)
return 1;
if (ls < lt)
return 0;
return !strcmp(&s[ls-lt],t);
}
解:晶振频率12MHZ,25ms中断1次,5次中断为125ms移位1次。
#define uint unsigned int
CAL_AVE: MOV R0, #DATA
MOV R2, #Num
MOV R3, #0
MOV R4, #0
CLR C
CAL_AVE1: MOV A, R4
ADDC A, @R0
MOV R4, A
MOV A, R3
ADDC A, #0
MOV R3 , A
DJNZ R2, CAL_AVE1
MOV R2, #3
JB ACC.0, CAL_ODD ;
INC EVEN
SJMP CAL_EVEN_ODD1
CAL_ODD: INC ODD
CAL_EVEN_ODD1: INC DPTR
DJNZ R2, CAL_EVEN_ODD2
RET
解:DATA_ASC EQU 2000H
DATA_BCD EQU 3000H
NUM EQU10
P3第2功能信号、通用输入输出。
(5)单片机的存储器分哪几个空间?试述各空间的作用。
答:程序存储器:内部ROM、外部ROM
数据存储器:内部基本RAM、专用寄存器区、外部RAM
(6)简述片内RAM中包含哪些可位寻址单元?
答:20H~2FH共16个可寻址单元
(7)什么叫堆栈?堆栈指针SP的作用是什么?在程序设计中为何要对SP重新赋值?
ASC_TO_BCD: MOVDPTR, #DATA_ASC
MOV P2, DPH
MOV R0, DPL
MOV DPTR,#DATA_BCD
MOV R2, #NUM
ASC_TO_BCD1: MOVX A, @R0
ANL A, #0FH
SWAP A
MOV B, A
INC R0
MOVX A, @R0
ANL A, #0FH
直接寻址——操作数存放的地址在指令中给出。可寻址RAM128B和特殊功能寄存器
寄存器寻址——操作数在寄存器中。可寻址4组寄存器共32个字节即00H—1FH
寄存器间接寻址——操作数的地址放在寄存器R0、R1、dptr中
@R0、R1可寻址256B @DPTR可寻址64KB
变址寻址——操作数的地址由变址寄存器A和基址寄存器DPTR、PC相加得到。
时钟周期——振荡脉冲2分频的信号
机器周期——完成一个基本操作需要的时间,是振荡周期/12=1T
指令周期——执行1条指令需要的时间 1~4T
(11)单片机工作时在运行出错或进入死循环时,如何处理?
答:复位处理,在单片机的RESET加持续1段时间的高电平
(12)使单片机复位的方法有几种?复位后单片机的初始状态如何?
CAL_AVE2:
CLR C
MOV A, R3
RRC A
MOV R3, A
MOV A, R4 ;/2
RRC A
MOV R4, A
DJNZ R2, CAL_AVE2
MOVResult, R3
RET
解:data1 equ 40h
Data2 equ 50h
Result equ 40h
Mult10_DATA:MOV R0 , #DATA1
DJNZ R2,Mult10_DATA4
RET
解:data equ 2000H
NUM EQU 100
EVENEQU 30H ;偶数
ODD EQU 31H ;奇数
CAL_EVEN_ODD: MOV DPTR , #DATA
MOV R2, #NUM
CAL_EVEN_ODD2: MOVX A, @DPTR
相关文档
最新文档