C语言100题.docx
- 文档编号:9285891
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:26.32KB
C语言100题.docx
《C语言100题.docx》由会员分享,可在线阅读,更多相关《C语言100题.docx(23页珍藏版)》请在冰豆网上搜索。
C语言100题
第三章习题与思考题
1.89c2051单片机能提供几个中断源、几个中断优先级?
各个中断源的优先级怎样确定?
在同一优先级中,各个中断源的优先顺序怎样确定?
试通过修改IP寄存器,使串行口中断优先级最高,定时器T1的中断优先级最低,其余中断优先顺序不变。
2.89c2051单片机外部中断源有负电平触发和下边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?
怎样设定?
3.在一个应用系统中,时钟频率为12MHz,一个外部中断请求信号的宽度为300ns的负脉冲,应该采样哪种触发方式?
如何实现?
4.89c2051单片机响应中断请求后,哪些中断请求标志位不能自动清除?
CPU在什么时候查询中断请求标志位?
满足什么条件才响应?
5.如果某一中断服务程序中没有改写工作寄存器R0~R7的指令,则进入中断服务程后,是否需要切换工作寄存器区?
简述原因。
6.用89c2051的P1口接8个LED发光二极管,由
接一消抖开关,开始P1.0的LED亮,以后每中断一次,下一个LED亮,顺序下移,且每次只有一个LED亮,周而复始,画出电路并编写程序。
7.在上题电路的基础上,要求8个LED同时亮或同时灭,每中断一次,变反一次,编写程序。
习题解答
1.答:
有5个中断源,2个中断优先级。
在同一优先级中,各个中断源的优先顺序:
外部中断0定时器/计数器T0溢出中断外部中断1定时器/计数器T1溢出中断串行口中断
中断源
同一级的中断优先级
外部中断0
最高
定时器/计数器T0溢出中断
外部中断1
定时器/计数器T1溢出中断
串行口中断
最低
IP=0x10;
2.答:
对边沿触发的外部中断,CPU响应中断后,硬件会自动清除中断请求标志IE0和IE1
对负电平触发的外部中断,CPU响应中断后,硬件不会自动清除中断请求标志IE0和IE1,需要用硬件线路和软件相互配合来清零。
IT0和IT1为0时外部中断为负电平触发,IT0和IT1为1时外部中断为下边沿触发。
3.答:
应采样边沿触发方式,因为fosc=12M,Tm=1μs,所以外部中断请求信号可直接至P3.2或P3.3即可。
4.答:
对负电平触发的外部中断,CPU响应后硬件不会自动清除中断请求标志IE0和IE1,
需要用硬件线路来清零。
对串行口中断,CPU响应后,中断标志位不会自动清除,必须用软件清除。
若CPU关闭中断,但外部事件又有中断申请或定时时间到或串行口发送/接受完一帧数据,则采用查询中断请求标志位的方式来编写控制程序。
在中断请求和初始化后,CPU响应中断的条件:
(1)有中断请求信号。
(2)CPU开中断。
(3)没有高级或同级中断服务程序在执行。
(4)当前执行指令完毕或不是执行对IE、IP的操作。
5.答:
不用,因为主程序对R0—R7中所写的内容在中断服务程序没有被改写,也就是说,在中断服务程序中不会用到R0—R7,所以不用切换工作寄存器。
6.答:
电路图略
#include”reg51.h”
sbitP32=P3^2;
voidint0(void)interrupt0using1
{if(P1!
=0x00)
P1=P1<<1;
Else
P1=0x01;
}
main()
{
P1=0x01;
EA=1;
EX0=1;
IT0=1;
while
(1);
}
7.答:
#include”reg51.h”
sbitP32=P3^2;
voidint0(void)interrupt0using1
{
P1=~P1;
}
main()
{
P1=0xff;
EA=1;
EX0=1;
IT0=1;
while
(1);
}
第四章习题与思考题
1.89c2051单片机的定时/计数器做定时器用时,其定时时间与哪些因素有关?
作计数器时,对外界计数频率有何限制?
定时器作定时和计数时,其计数脉冲分别由谁提供?
2.如果89c2051单片机的系统晶振频率为12MHz,分别指出定时/计数器方式1和方式2最长定时时间。
3.若要求89c2051单片机的定时/计数器的运行控制完全由TR1、TR0确定和完全由P3.5、P3.4引脚的控制时,其初始化编程应作何处理?
4.89c2051单片机的定时/计数器T0已预制为FFFFH,并选定于方式1的计数方式,问此时定时/计数器T0实际用途将是什么?
5.由89c2051单片机的P1口控制8个指示灯,利用定时/计数器T0产生定时时钟。
编一个程序,使8个指示灯依次点亮,点亮频率为1Hz,当8个指示灯全亮后,则全部熄灭,依次循环。
6.89c2051单片机系统,时钟频率为12MHz,定时/计数器T0用于20ms定时,定时/计数器T1用于100次计数,两者均要求重复工作,试编写达到上述要求的程序。
7.用p1.0输出1KHz和500Hz的音频信号驱动扬声器,作为报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一个接近开关进行控制,当开关合上响报警信号,当开关断开报警信号停止,编出程序。
8.试用89c2051单片机的定时/计数器T1对外部事件计数。
要求每计数100,就将T1改成定时方式,控制P1.7输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。
设晶振频率为24MHz。
习题解答
1.答:
定时时间主要由计数初值、机器周期(即晶振频率)确定。
作为计数器用时,外界的最高计数频率不高于fosc/24。
定时器作定时用时,其计数脉冲由晶振频率经12分频后提供;定时器作计数用时,其计数脉冲由外部事件(脉冲)提供。
2.答:
方式1的最长定时时间为32768μs。
方式2的最长定时时间为128μs。
3.答:
当89c2051单片机的定时/计数器的运行控制完全由TR1、TR0控制时,定时/计数器应工作于非门控方式,即设置TMOD时,GATE位应取0;当89c2051单片机的定时/计数器的运行控制完全由P3.5、P3.4引脚控制时,定时/计数器应工作于门控方式,即设置TMOD时,GATE位应取1。
4.答:
当定时/计数器工作于方式1计数方式时,且初值设置为FFFFH时,则每来一个事件,定时/计数器将产生溢出,向CPU申请中断,此时定时/计数器T0实际用途为监测外部事件。
5.答:
频率为1HZ,周期为1S。
#include
unsignedchari;
voidtimer(void)interrupt1using1
{
i++;
if(i==20)
{
i=0;
FO=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
}
Main()
{
P1=0x01;
TM0D=0x01;
EA=1;
ET0=1;
TR0=1;
F0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
while
(1)
{
P1=0x00;
while(F0);
P1=0x01;
F0=1;
while(F0);
P1=0x07;
F0=1;
while(F0);
P1=0x07;
F0=1;
while(F0);
P1=0x0F;
F0=1;
while(F0);
P1=0X1F;
F0=1;
while(F0);
P1=0x3F;
F0=1;
while(F0);
P1=0x7F;
F0=1;
while(F0);
P1=0xff;
F0=1;
}
6.答:
#include
unsignedchari,j;
main()
{
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
TMOD=0x51;
IP=0x0A;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
while
(1);
}
voidtimer(void)interrupt1using1
{
i++;
if(i==20)
{i=0;
}
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
voidtimer2(void)interrupt3using2
{
j++;
if(j==100)
{
j=0;
}
TH1=(65536-100)/256;
TL1=(65536-100)%256;
}
7.答:
设晶振频率为12MHZ,取基准时间为1ms。
设P1.7=0时,进行报警;P1.7=1时,报警结束。
#include
unsignedchari,j;
sbitp10=P1^0;
sbitp37=P3^7;
bitflag=0;
main()
{
EA=1;
ET0=1;
TMOD=0x01;
F0=1;
while
(1)
{
while(p37==0)
{
TR0=1;
if(flag==1)
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
}
else
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
while(F0);
F0=1;
}
}
}
voidtimer(void)interrupt1using1
{
p10==~p10;
i++;
if(i==100)
{
i=0;
F0=1;
flag=~flag;
}
if(flag==1)
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
}
else
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
}
8.答:
因为晶振频率为24MHz,所以机器周期为0.5μs。
#include
unsignedchari,j;
sbitp37=P3^7;
bitflag=0;
main()
{
EA=1;
ET1=1;
TMOD=0x50;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
TR1=1;
F0=1;
while
(1);
}
voidtimer(void)interrupt1using1
{
flag=~flag;
if(flag==1)
{
TMOD=0x01;
P37=1;
TH1=(65536-10000*2)/256;
TL1=(65536-10000*2)%256;
}
else
{
TMOD=0x50;
P37=0;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
}
}
第五习题与思考题
1.简要叙述LED数码管的结构和分类。
2.解释下列术语:
(1)静态显示
(2)动态显示(3)位选,段选。
3.按下列要求编制数字0-9的LED数码管8段字段码表。
(1)共阴极逆序,小数点亮(即a高位);
(2)共阳极逆序,小数点亮(即a高位)。
4.已知数字0-9存在数组a[10]中,现要求将数组a[10]中的数字依次转换成ASCII码之后送LED数码管显示,请画出电路图并编写程序。
5.用89C2051设计接有5个共阴极数码管的动态显示接口电路,用BCD7段译码器CD4511作为LED数码管的字段控制,阴极用非门74LS04反向门驱动,字型选择由P1口提供,位选择由P3口控制。
P1.7接开关,当开关拨向位置“1”时,显示“12345”字样,当开关拨向位置“2”时,显示“HELLO”字样,画出电路原理图并编写程序。
6.设计一60秒倒计时时钟电路,时间到,P3.7输出报警,画出电路原理图并编写程序。
习题与思考题
1、解释下列术语:
(1)静态显示
(2)动态显示(3)位选,段选。
答:
(1)静态显示:
静态显示方式是将各位的位选段连在一起接低电平(或高电平),
段选线分别与8位的锁存器相连。
各位在显示时相互独立,而且每一位的显示字符一经确定,则相应的锁存器进行输出锁存,直到想显示另一个字符为止。
(2)动态显示:
所谓的动态显示是采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
(3)位选是每个显示器的公共极COM(位选线)是各自独立地受I/0线独立控制,实现各个分时选通。
段选是把所有显示器的8个笔画段a-h同名端并联在一起,由一个8位I/O口控制,形成段选线的多路复用。
2、用89C2051设计接有5个共阴极数码管的动态显示接口电路,用74LS373接成直通方式作为驱动电路,阴极用非门74LS04反向门驱动,字型选择由P1口提供,位选择由P3口控制。
P1.7接开关,当开关拨向位置“1”时,显示“12345”字样,当开关拨向位置“2”时,显示“HELLO”字样,画出电路原理图并编写程序。
答:
#include
#defineucharunsignedchar
sbitP17=P1^7;
main()
{
ucharcodetabl[5]={0x86,0xdb,0xef,0xe6,0xed};
ucharcodetab2[5]={0xf8,0xf9,0xb8,0xb8,0xbf};
uchari;
uintj;
while
(1)
{
P3=0x01;
for(i=0;i<5;i++)
{
if(P17==1)
P1=tab1[i];
else
P1=tab2[i];
P3<<=1;
for(j=0;j<=25000;j++);
}
}
}
3、设计一60秒倒计时时钟电路,时间到,P3.7输出报警,画出电路原理图并编写程序。
答:
#include
sbitP17=P1^7;
unsignedchara[]={0x3f,0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06};
unsignedchari,j,k,m,n;
unsignedcharcount1,count2;
voidTimer(void)interrupt1
{
count1++;
if(count1==20)
{
i++;
count2++;
count1=0;
}
if(count2==10)
{
i=0;
count2=0;
}
if(i==1)
{
j++;
}
if((i==1)&&(j==10))
{
j=0;
}
if((j==0)&&(i==0))
{
for(k=0;k<20000:
k++)
{
P37=0;
for(m=0;m<100;m++);
P37=1;
for(n=0;n<100;n++);
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
Main()
{
P37=1;
EA=1;
ET0=1;
TR0=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
While
(1)
{
P1=a[i];
P30=0;P31=1;
For(m=0;m<100;m++);
P1=a[j];
P30=1;P31=0;
For(n=0;n<100;n++);
}
}
第六习题与思考题
1.为什么要消除按键的机械抖动?
消除按键的机械抖动的方法有哪几种?
原理是什么?
2.说明矩阵式键盘按键按下的识别原理。
3.用89c2051单片机的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意),画出电路并编出程序。
4.现用89C2051单片机的I/O口去检测开关S1、S2的通断状态,若S1接通,转去执行子程序SUB1;若S2接通,转去执行子程序SUB2;请画出电路连接图,并编制程序(要有消除开关抖动措施)。
5.设计一个键盘显示接口电路,要求用9个键盘(3×3)控制一位LED数码管,9个键盘依次代表数字键1---9,当按下某一数字键,LED数码管就显示这个数字(如按数字键5,LED数码管就显示5),若没有新的数字键按下,数码管显示值不变。
请画出硬件控制线路图,编写控制软件。
6.利用89c2051单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接2个拨动开关K1、K4,用来作加计数和减计数开关。
具体的电路原理图如下图所示
7.如图4.14.2所示,用AT89c2051的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。
习题与思考题
1、用89c2051单片机的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意),画出电路并编出程序。
答:
#include
sbitP3_7=P3^7;
unsignedcharcount;
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidmain(void)
{
while
(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
count++;
if(count==16)
{
count=0;
}
P1=~count;
while(P3_7==0);//等待按键释放
}
}
}
}
2、现用89C2051单片机的I/O口去检测开关S1、S2的通断状态,若S1接通,转去执行子程序SUB1;若S2接通,转去执行子程序SUB2;请画出电路连接图,并编制程序(要有消除开关抖动措施)。
#include
SbitP30=P3^0;
SbitP31=P3^1;
Unsigneda1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
Unsigneda2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
Voidsub1(void)
{
For(i=0;i<8;i++)
{
P1=a1[i];
Delay10ma();
}
}
Voidsub2(void)
{
For(i=0;i<8;i++)
{
P1=a2[i];
Delay10ma();
}
}
Main()
{
While
(1)
{
If(P30==0)
{
Delay10ms();
If(P30==0)
{
Sub1();
}
}
If(P31==0)
{
Delay10ms();
If(P31==0)
{
Sub2();
}
}
}
}
4、利用89c2051单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接四个拨动开关K1-K4,用P3.6/WR和P3.7/RD端口接两个轻触开关,用来作加计数和减计数开关。
具体的电路原理图如下图所示
#include
unsignedcharcurcount;
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidmain(void)
{
curcount=P3&0x0f;
P1=~curcount;
while
(1)
{
if(P3_6==0)
{
delay10ms();
if(P3_6==0)
{
if(curcount>=15)
{
curcount=15;
}
else
{
curcount++;
}
P1=~curcount;
while(P3_6==0);
}
}
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
if(curcount<=0)
{
curcount=0;
}
else
{
curcount--;
}
P1=~curcount;
while(P3_7==0);
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 100