MCS51单片机作业解答
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
时钟周期——振荡脉冲2分频的信号
机器周期——完成一个基本操作需要的时间,是振荡周期/12=1T
指令周期——执行1条指令需要的时间 1~4T
(11)单片机工作时在运行出错或进入死循环时,如何处理?
答:复位处理,在单片机的RESET加持续1段时间的高电平
(12)使单片机复位的方法有几种?复位后单片机的初始状态如何?
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
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
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[]);
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;
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超过片内程序容量时,自动转向外部程序区。
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
答:(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
答:只允许数据单端输入输出的一段存储空间。
SP的作用是用来存放堆栈栈顶的地址。
因为SP的初值是07H,后继的是寄存器区和位寻址区,为了便于编程工作,要修改SP.
(8)程序状态字寄存器PSW的作用是什么?简述各位的作用。
答:PSW用来存放程序执行状态的信息,
CY—加减运算的进位、借位
AC—辅助进位标志,加减运算的低4位进位、借位
分上电复位和手动复位。复位后PC=0000H ALE=0 /PSEN=1
(13)开机复位后,单片机使用的是哪组工作寄存器?它们的地址是什么?如何改变当前工作寄存器组?
答:单片机使用的是第0组工作寄存器R0-R7, 对应的地址为00H-07H,采用置位复位RS1、RS0,可以改变单片机使用的工作寄存器。
(3)MCS-51单片机有哪些信号需要芯片引脚以第二功能的方式提供?
答:RXD、TXD、/INT0、/INT1、T0、T1、/WR、/RD
(4)MCS-51单片机的4个I/O口在使用上各有什么功能和特点?
答:P1口通用输入输出;P0口数据总线、地址总线低8位、通用输入输出
P2口地址总线高8位、通用输入输出
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;
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
第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
第3章 MCS-51单片机的汇编语言指令系统
单片机的指令格式为: 操作码+操作数
[标号:] 操作码助记符 [目的操作数] [,源操作数] [;注释]
答:MCS-51单片机有7种寻址方式: 立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。
立即寻址——操作Байду номын сангаас在指令中直接给出。
= 1111 1111 1100 1110B TH0 = FEH TL0 = CEH
方式2: x= 28-50*(12/12) =256-50 =CEH
直接寻址——操作数存放的地址在指令中给出。可寻址RAM128B和特殊功能寄存器
寄存器寻址——操作数在寄存器中。可寻址4组寄存器共32个字节即00H—1FH
寄存器间接寻址——操作数的地址放在寄存器R0、R1、dptr中
@R0、R1可寻址256B @DPTR可寻址64KB
变址寻址——操作数的地址由变址寄存器A和基址寄存器DPTR、PC相加得到。
{
int ls = 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
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[])
P3第2功能信号、通用输入输出。
(5)单片机的存储器分哪几个空间?试述各空间的作用。
答:程序存储器:内部ROM、外部ROM
数据存储器:内部基本RAM、专用寄存器区、外部RAM
(6)简述片内RAM中包含哪些可位寻址单元?
答:20H~2FH共16个可寻址单元
(7)什么叫堆栈?堆栈指针SP的作用是什么?在程序设计中为何要对SP重新赋值?
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