单片机部分习题答案资料
更新时间:2024-06-04 22:47:01 阅读量: 综合文库 文档下载
- 单片机9部分推荐度:
- 相关推荐
第2章:
2、CIP-51有哪些存储空间?各个存储空间的功能及寻址范围是什么?
有程序存储器、内部数据存储器、外部数据存储器、特殊功能寄存器和位寻址区五个独立的地址空间。 ? 程序存储器:存放程序和常数,容量为64KB,地址范围0000H-0FFFFH
? 内部数据存储器:用于通用寄存器和存放数据的临时存储器,容量为256B,地址范围00H-0FFH ? 外部数据存储器:用于存放数据,容量为64KB(有4KB在芯片内部),地址为0000-0FFFFH
? 特殊功能寄存器(SFR):提供对片内资源和外设的访问和控制,以及与外设的数据交换,C8051F020有122
个,离散分布在地址80H-0FFH中。
? 位地址空间:存放位变量,进行布尔运算,容量为256位,有内部RAM的20H-2FH(16字节,128位)和
部分SFR(字节地址可以被8整除的)组成,地址范围为00H-0FFH
3、CIP-51的内部RAM空间有多少字节?它们在应用中有什么专门用途?堆栈一般应设置在什么位置? ? 内部RAM有256字节
? 低128B中的00H-1FH用于通用寄存器,20H-2FH既可以字节寻址也可以位寻址,30H-7FH作一般存储器
用;高128B因为与SFR地址重叠,故只能间接寻址,也作一般存储器用
? 理论上堆栈可以设在内部数据存储器的任何位置,复位时堆栈指针SP为07H,但为了避开通用寄存器和位地
址空间,一般设在30H-0FFH。
5、读写内部RAM与外部RAM的数据时,使用的指令有什么区别?读程序存储器的数据的指令又有什么不同? 读写内部RAM用MOV指令;读写外部RAM用MOVX指令;读程序存储器用MOVC指令,写程序存储器用MOVX指令,但为与写外部RAM相区分,需要对相应SFR的相关位进行设置。 6、若(PSW)=0x10,则当前的R0~R7在内部RAM中有哪些单元?
由(PSW)=0x10可知RS1RS0=10,故通用寄存器R0-R7在内部RAM的0x10-0x17单元。(PSW的格式P22) 第一次作业存在的问题:
第一题:5个存储空间,有的同学写的不全,漏SFR和位寻址区;有的同学对位寻址区的寻址范围写的不对,应为0x00-0xff而非0x20-0x2f。
第三题:内部RAM每一部分的专门作用,尤其低128B要再分类说明;片内XRAM不算片内RAM;堆栈一般在0x30-0xff,而非0x30-0x7f。
第六题:部分同学不会做;要查询PSW的格式,RS1RS0的作用,P22表2-2
8、请叙述中断的响应过程。一个中断请求从提出到CPU响应最短要多长时间?如果CPU响应中断的条件全部具备,响应中断最长的时间是多少?在什么样的情况下会出现这个响应时间?
C8051F的每个系统时钟周期对中断标志采样并对优先级译码,如果允许中断响应,则置位相应的优先级状态触发器,然后执行一条硬件长调用指令,控制转移到相应的入口,清相应中断请求标志(有些需要在中断服务程序中清除,如RI、TI),接着PC压栈(但不保护PSW),将中断服务程序的入口地址送给PC,完成中断响应。 最快需要5个系统时钟周期:1个中断检测周期,4个对ISR的调用周期(LCALL)。最慢发生在CPU正在执行RETI指令的时候,需要再执行一条指令才能进入中断服务程序,而最慢的指令是DIV需要8个系统时钟周期。因此,最慢需要18个系统时钟周期:1个中断检测周期,5个执行RETI的周期,8个执行DIV指令的周期,4个对ISR的调用周期(LCALL)。
9、C8051F020单片机的外部RAM有片内和片外之分,如何实现片外的RAM?复用与非复用方式的外部RAM
是什么意思?数据总线和地址总线是如何连接的?
通过外部数据存储器接口EMIF实现片外数据存储器,用并行口P0-P3或P4-P7实现数据总线和地址总线,数据线和地址线可以复用也可以非复用,由EMIOCF控制。
复用是指数据总线和地址总线的低8位共用一组端口信号线。非复用是指数据总线和地址总线的低8位各用单独的一组端口信号线。
若用低端端口实现,复用时用P2口提供地址高8位,P3口提供地址低8位和数据线;非复用时用P1口提供高8位地址线,P2口提供地址线低8位,P3口提供数据线。若用高端端口实现,非复用则用P5、P6提供地址高、低8位,P7做数据线,复用则用P6提供地址线高8位,P7提供地址低8位和数据线。
10.什么是优先权交叉开关译码器?C8051F020单片机有多少数字I/O口?C8051F单片机的引脚与片内资源是如何对应的?
C8051F单片机没有为定时器、串行口、A/D、D/A等提供单独的引脚信号线,而是用并行口P0-P3提供,C8051F单片机允许使用部分数字和模拟外设,没有用到的就不用分配引脚信号,因此内部提供了一个优先交叉开关译码电路,实现P0-P3和这些资源的可编程连接,这就是优先交叉开关译码器。
C8051F单片机有64位数字I/O端口。其中P0-P3可以按照优先交叉开关译码的方式为片内资源分配引脚,用端口I/O交叉开关寄存器XBR0-XBR2实现。
11、假如一个单片机应用系统中要用到的资源位UART0、SMBus、SPI、和CP0分配端引口(共9个引脚)。另外将外部存储器解耦配置为复用方式并使用低端口。同时还将P1.2、P1.3、P1.4配置为模拟输入,以便用ADC1测量加在这些引脚上的电压。试用Config软件进行优先权交叉开关译码器的配置,写出配置步骤,配置XBR0~XBR2等相关SFR的值。
(1)按UART0EN=1(XBR0.2)、SMB0EN=1(XBR0.0)、SPI0EN=1(XBR0.1)、CP0E=1(XBR0.7)、EMIFLE=1(XBR2.1)设置XBR0、XBR1、XBR2得XBR0=0x87、XBR1=0x00、XBR2=0x02;
(2)存储器接口配置为复用方式并使用低端口,有PTRSEL=0(EMIOCF.5)、EMD2=0(EMIOCF.4); (3)P1.2~P1.4配置为模拟输入方式有:P1MDIN=0xe3;
(4)设置XBARE=1使能交叉开关,则XBR2=0x42。UART0优先级最高,P0.0、P0.1分配给TX0、RX0;SPI优先权次之,P0.2~P0.4分配给SCK、MISO、MOSI、P0.5~P0.7分配给ALE、/RD、/WR、P1.0分配给NSS;下一个优先的是SMBUS,P1.1分配给SDA、P1.2~P1.4做模拟量输入,跳过,P1.5分配给SCL;再下面的优先权是CP0,P1.6分配给CP0;
(5)UART0的TX0(P0.0)、ALE(P0.5)、/RD(P0.6)、/WR(P0.7)的输出设置为推挽方式,P0MDOUT=0xe1;(6)P2、P3设置为推挽方式P2MDOUT=0xff、P3MDOUT=0xff;
(7)P1设置为漏极开路方式,并禁止3个模拟输入的输出驱动:P1MDOUT=0x00、P1=0xff。 13、8051F单片机进入空闲方式时,单片机的振荡器是否工作?采用何种方法能使单片机退出空闲方式? 工作。复位或中断。
14、C8051F020有几个复位源,分别是什么?自己的项目中最常使用的是什么复位源?
7个:上/电复位、外部/RST引脚复位、外部CNVSTR信号复位、软件命令复位、比较器0复位、时钟丢失检测器复位、WatchDog超时复位。
15、再简单的试验程序中,如果看门狗定时器复位不使用,该如何禁用?
向WDTCN写入0xDE后,4个系统时钟周期内再写入0xAD。该过程不应被中断。C51代码: EA=0; //禁止中断
WDTCN=0xDE; WDTCN=0xAD; EA=1; //允许中断 第三章:
1、片外RAM从1000H~10FFH单元有一数据块,用汇编语言编写程序将其传送到片外RAM的2500H单元开始的区域中。
$INCLUDE(C8051F020.INC)
org 0000h mov dptr,#1000h
mov r2,#256(mov r2,#0) mov r3,#25h mov r4,#00h loop:movx a,@dptr
push dph
push dpl 或者 mov dph,r3 mov dpl,r4 movx @dptr,A pop dpl pop dph inc dptr inc r4 djnz r2,loop sjmp $ end
3、用汇编语言编写将累加器A的一位十六进制数(A的高4位为0)转换为ASCII码的程序,转换结果仍存放在累加器A中,要求用查表和非查表两种方式实现。
ADD A,#30H
CJNE A,#3AH,CONT CONT:JNC ADD7
JMP EXIT ADD7:ADD A,#7 EXIT:SJMP $ END
4、用汇编语言编程实现函数,设x的值存放在片内RAM的35H单元,y的值存放在片内RAM的36H单元。 y =x+1 ,x>10;0,5<=x<=10;-1,x<5 MOV A,35H ;取x
CJNE A,#11,NEXT1 ;与11比较,不等于11,转NEXT1 NEXT1:JNC NEXT2 ;大于等于11,转NEXT2
CJNE A,#5,NEXT3 ;小于11,再与5比较,不等于5转NEXT3
$INCLUDE(C8051F020.INC) org 0000h mov dptr,#1000h mov EMIOCN,#25H mov r2,#0H mov r0,#00H loop:movx a,@dptr movx @r0,a inc dptr inc r0 djnz r2,loop sjmp $ end ORG 0000H SJMP MAIN ORG 0100H MAIN:MOV R4,#0 MOV DPL,#0 NEXT:MOV DPH,#10H MOVX A,@DPTR MOV DPH,#25 MOVX @DPTR,A INC DPL DJNZ R4,NEXT(CJNE DPL,#0,NEXT) SJMP $ END;若两个区域的低8位地址不同,该方法不可以 NEXT3:JNC NEXT4 ; 无借位(大于等于5),转NEXT4 MOV A,#-1 ;小于5 AJMP NEXT5
NEXT4:MOV A,#0 ;5到10之间 AJMP NEXT5
NEXT2: ADD A,#1 ;大于10 NEXT5:MOV 36H,A SJMP $ END 或(同学作业):
X EQU 35H Y EQU 36H ORG 0000H AJMP START ORG 0100H START:MOV A,X
CLR C
SUBB A,#05H JNC NEXT MOV Y,#0FFH AJMP DONE NEXT:MOV A,X
CLR C SUBB A,#0BH JNC NEXT1 MOV Y,#00H AJMP DONE NEXT1:MOV A,X
INC A MOV Y,A DONE:SJMP DONE END
补充:符号函数 MOV A,35H JZ DONE JNB ACC.7,POSI MOV A,#-1(0FFH) SJMP DONE POSI: MOV A,#1 DONE: MOV 36H,A SJMP $ END 或 MOV A,35H JZ DONE MOV R0,#0FFH JB ACC.7,NEG MOV R0,#01H NEG: MOV A,R0 DONE: MOV 36H,A SJMP $ END 6、用汇编语言编写程序,将R0中的8位二进制数的各位用其ASCII码表示,结果保存到片内RAM的30H开始的单元中。
MOV R1,#30H MOV R7,#8 MOV A,R0 NEXT: RLC A
JC 0NE
MOV @R1,#30H JMP EXIT 或者 ONE: MOV @R1,#31H EXIT: INC R1
DJNZ R7,NEXT SJMP $ END
个数据块的第一字节用来存放数据块的长度。结果存入片内
MOV R0,#60H ACALL MAX
MOV B,A;第一个数据块最大值 MOV R0,#70H ACALL MAX
MUL AB;两个数据块最大值相乘 MOV 5FH,B MOV 5EH,A SJMP $
MAX: MOV A,@R0;数据块长度
DEC A MOV R7,A INC R0
MOV A,@R0;第一个数据
LOOP: CLR C
MOV B,A INC R0 MOV A,@R0
SUBB A,B;两个比较,也可以用CJNE实现 JNC NEXT MOV A,B SJMP NEXT1
$INCLUDE(C8051F020.INC) LOOP:MOV B,02H X DATA 30H Y EQU 20H ORG 0000H AJMP START ORG 0100H START:MOV DPTR,#TAB MOV SP,#3FH MOV R1,#X MOV Y,#00H MOV A,R0 DIV AB PUSH ACC MOV A,B MOVC A,@A+DPTR MOV @R1,A POP ACC INC R1 INC Y JNB Y.3,LOOP SJMP $ TAB :DB ‘0’,’1’ END 11、用汇编语言编程求两个无符号数据块中最大值的乘积。数据块的首地址分别为片内RAM的60H和70H,每
NEXT: ADD A,B
NEXT1:DJNZ R7,LOOP (下一行)RET 第4章:
5.利用C8051F020单片机的T0计数,每计10个脉冲,P1.0取反一次,试用查询和中断两种方式编程。 确定工作方式,计算初值:选方式2计数方式,初值=256-10=246=0xf6; 查询方式程序: sbit P1_0=P1^0; void main(void) {
//关看门狗 WDTCN=0xde; WDTCN=0xad; //配置交叉开关
XBR1=0x02;//允许T0外部输入 XBR2=0x40;//使能交叉开关 //初始化定时器0
TMOD=0x06;// 方式2计数 TL0=OxF6; TH0=OxF6; TR0=1;//启动T0 While(1) {
While(!TF0);//等待计数溢出 TF0=0; P1_0=!P1_0; } }
中断方式程序: sbit P1_0=P1^0; void main(void) {
//关看门狗 WDTCN=0xde; WDTCN=0xad; //配置交叉开关
XBR1=0x02;//允许T0外部输入 XBR2=0X40; //初始化定时器0
IE|=0x82;//允许T0中断 While(1);//等待中断 }
void T0_ISR(void) interrupt 1 {
P1_0=!P1_0; }
TMOD=0x06;// 方式2计数 TL0=OxF6; TH0=OxF6; TR0=1;//启动T0
8.在C8051F020单片机中,已知系统时钟频率为12MHz,编写程序使P1.0和P1.1分别输出周期为2ms和50μs的方波。
解:P1.0和P1.1分别每1ms和25μs取反一次即可。选T0方式1定时25μs,每溢出40次P1.0取反一次。初值计算:由P157公式:TC?2N?T12(1?T0M)?fosc,选T0M=0得: 程序:
sbit P1_0=P1^0; sbit P1_1=P1^1; int count=40; void main(void) {
//关看门狗 WDTCN=0xde; WDTCN=0xad; //使能交叉开关 XBR2=0x40; //初始化定时器0
TMOD=0x01;// 方式1定时 TL0=0xe7; TH0=0xff;
IE|=0x82;//允许T0中断 TR0=1;//启动T0 While(1);//等待中断 }
void T0_ISR(void) interrupt 1 {
TL0|=0xe7; TH0=0xff; P1_0=!P1_0; Count--;
If(Count==0){ P1_1=!P1_1; Count=40;}
a=216-25=65511=0xffe7;
}
15.当C8051F020的串行口工作在方式2、3时,它的第9数据位可用作“奇偶校验位”进行传送,接收端用它来核对接收到的数据正确与否。试编写串行口方式2带奇偶校验的发送和接收程序。 解:发送程序: void send(char ch) {
ACC=ch; TB80=P; SBUF0=ch; While (!TI0); TI0=0; }
接收程序: char receive(void) {
While (!RI0); RI0=0; ACC=SBUF0;
If (RB80==P) return ch; }
16. 设甲乙两机采用UART0方式1通信,波特率为4800,甲机发送0、1、2…、1FH,乙机接受并存放在内部RAM以20H为首地址的单元,试用查询和中断两种方式编写甲、乙两机的程序(系统时钟为12MHz) 设利用T1工作在定时方式2(自动重装初值)提供波特率,T1M=0(按振荡器12分频)计数,SMOD0=0,T1初值计算如下:
12?106?12(0?1)2SMOD0?SYSCLK?(12(T1M?1))X=256-=256-=250=FAH
32?波特率32?4800#include
unsigned char xdata tbuf[]={0x0,0x1,…,0x1f}; void main(void) {
unsigned char i;
unsigned char xdata *p=tbuf;
XBR0=0x04; //配置交叉开关 XBR2=0x40;
P0MDOUT|=0x01;//TX0(P0.0)为推挽输出方式 TMOD=0x20;
TH1=0xfa;
//初始化并启动T1
}
TL1=0xfa; TR1=1;
SCON0=0x40; for(i=0;i<32;i++) { }
SBUF0=*p; p++; while(!TI0); TI0=0;
//等待发送完成
//一字节送发送SBUF0 //UART0初始化
查询方式接收程序: #include
unsigned char i; char data *p; XBR2=0x40;
P0MDOUT|=0x01;//TX0(P0.0)为推挽输出方式 TMOD=0x20; }
……参考P195例4.7
正弦波发生器程序:DAC0输出更新发生在写DAC0H时: #include
TH1=0xfa; TL1=0xfa; TR1=1;
SCON0=0x50; p=0x20; for(i=0;i<32;i++) { }
while(!RI0); //等待UART0接收一个字符 RI0=0; *p=SBUF0; p++;
//放入接收缓冲区 //UART0初始化,允许接收 //地址指针初始化
//初始化并启动T1 //发送数据块地址指针
XBR0=0x04; //配置交叉开关
sfr16 DAC0=0xd2 void dac0_init(void); void main(void) {
uninsigned int i; float x,y;
WDTCN=0xde;//关看门狗 WDTCN=0xad;
dac0_init();//DAC0初始化 while(1) {
for(x=0;x<(2*3.14159);x+=0.1) {
//12位DAC的数字容量为4K(0-0FFFH),y的值最大为4096 y=2048*(sin(x)+1); } }
void dac0_int(void) { }
方波输出:定时器T3溢出时DAC更新。 #include
unsigned int i;
WDTCN=0xde;//关看门狗 WDTCN=0xad; REF0CN=0x03; DAC0CN|=0x08;
}
DAC0=y;//设置待转换的值并启动DA转换 for(i=0;i<=200;i++);//延时可改变正弦波的周期
Timer3_Init(SYSCLK/12/5); DAC_Init(); EA=1; while(1) {
DAC0L=0xf0;//设置待转换的值0FF0H DAC0H=0x0f; for(i=0;i<100;i++);
DAC0L=0x0; //设置待转换的值0000H DAC0H=0x0; for(i=0;i<100;i++); } }
void DAC_init(void) {
REF0CN=0x03;//内部偏压发生器和电压基准缓冲器工作 DAC0CN|=0x88;//使能DAC0,T3溢出时更新 }
void Timer3_Init(int counts) {
TMR3CN=0x00;//SYSCLK/12作为时基 TMR3RL=-counts;//重载值 TMR3=0xffff;//立即重载 EIE2|=0x01;//允许T3中断 TMR3CN=0x04;//启动T3 }
void Timer3_ISR(void) {
TMR3CN&=~(0x80);//清TF3 }
实验2:查表实验
$INCLUDE(C8051F020.INC) org 0000h mov dptr,#table mov a,#3 rl a mov r1,a movc a,@a+dptr
push dph push dpl
mov dptr,#2000h movx @dptr,a pop dpl pop dph inc dptr mov a,r1 movc a,@a+dptr mov dptr,#2001h movx @dptr,a l1:sjmp l1
table: dw 8000h,8001h,8002h,8003h end
或: MOV A,#3
CALL SEARCH MOV DPTR,#2000H MOV A,R2 MOVX @DPTR,A MOV A,R3 INC DPTR MOVX @DPTR,A SJMP $
SEARCH:MOV DPTR,#table
RL A MOV B,A
MOVX A,@A+DPTR MOV R2,A MOV A,B INC A
MOVX A,@A+DPTR MOV R3,A
RET table: dw 8000h,8001h,8002h,8003h END
正在阅读:
单片机部分习题答案资料06-04
工程经济学课程设计07-10
中国经济地理实习报告12-16
小学教育叙事范文10篇03-24
我的护蛋行动作文500字06-30
医患沟通试题及答案(1)09-18
新中大SE标准版操作流程手册11-08
2014年黑龙江赛区TI杯大学生电子设计竞赛成绩 - 图文10-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单片机
- 习题
- 答案
- 部分
- 资料
- 英语专业四级考前恶补
- 唯美励志句子大全
- 五沙热电超低排放可研-修改终稿 - 图文
- 边界和海洋权益争端尚存
- 最新的—2017年最新人音版二年级上册小学音乐教案全套
- 河南社会审计收费管理办法
- 2014数学建模B题论文(国赛二等奖)
- 第7章 机械传动
- 现代物流中的二维码技术探究
- 南京农业大学《园艺学总论》复试资料
- 江苏省无锡市滨湖区2018届九年级3月联考语文试题
- 高考地理预测:热点素材都可能植入考题
- 关键岗位考试练习题
- 2018年中国间苯二胺行业调研与调研报告目录
- (5套)2019年高考英语必修5(全册)语法点汇总(含所有重点单词及语
- 2010年市场营销部工作计划
- 湖北省黄冈市2018年中考物理试题(原卷版)
- 是投保人向保险人申请订立保险合同的书面要约
- 循化县防治包虫 病行动计划(2016-2020年)
- 生日文化主题餐饮项目策划方案