PIC单片机练习题解答.docx
《PIC单片机练习题解答.docx》由会员分享,可在线阅读,更多相关《PIC单片机练习题解答.docx(15页珍藏版)》请在冰豆网上搜索。
![PIC单片机练习题解答.docx](https://file1.bdocx.com/fileroot1/2022-10/24/8edd5a4c-14cf-4408-a540-e755fe205a89/8edd5a4c-14cf-4408-a540-e755fe205a891.gif)
PIC单片机练习题解答
PIC单片机习题
第一次
一、选择题
(B)1、PIC单片机采用总线结构。
A、普林斯顿B、哈佛
2、PIC16F877单片机精简指令集系统共C条。
A、75B、133C、35D、111
3、PIC16F877单片机程序存储器和数据存储器的宽度是B和。
A8,8B、14,8C、16,8D16,16
4、PIC16F877单片机共C中断源。
A5B、8C、14D、16
5、PIC16F877单片机共C端口。
A3B、4C、5D、6
&PIC16F877单片机共有C个定时/计数器
A1B、2C、3D、4
7、PIC16F877单片机定时器1具有的特殊功能是Db
A定时B、计数C、PWMD、CCP
8、若端口B接8个按键,则该端口的TRISB应初始化成
A0x00B|、OxFFC、OxOFD、OxFO
9、TMR啲位宽度为
A8B、16C、32D、64
10、PIC16F877单片机外围接口区域包括RA,RB,RC,RD和RE5个端口,而每个端口均
有多条输入/输出可编程的引脚,合计5个端口共有__C―引脚.
A.30B.34C.33D.31
11、PIC16F877单片机外围接口区域包括RA,RB,RC,RD和RE5个端口.在下列端口
中,D不具备8条引脚.
A..RA,RBB.RC,RDC.RB,RCD.RA,RE
二、问答题
1、如何确定I/O端口的输入和输出?
答:
根据方向控制TRIS确定,高电平做输出,低电平做输入。
2、在确定AB、C、DE端口的功能时,首先要执行什么操作?
答:
确定端口方向。
3、PIC16F877单片机有几个定时/计数器?
他们的区别是什么?
答:
TMR08位宽与WD共用预分频器
TMR116位宽与CPP模块配合使用可实现捕捉和比较功能
TMR2只作定时;8位宽与PW模块配合使用可实现脉宽调制输出功能
4、PIC单片机具有的优点有哪些?
答、1、哈佛总线结构;2、指令系统采用RISC技术;3、代码压缩率高;4、IO端口驱动负载能力较强及功耗低等。
三、程序设计题
1、电路如图所示,编程实现走马灯的运行效果,即DO-D7循环被依次点亮,但
同一时刻只有一个灯亮。
单片机主频为4MHz
tt]_nclude_COMFIG(0x3831>;
voidnidinCvoid)
<
unsignedcharjtdatai:
un5ignedintt;
TRISD-0X00:
whileC1>
<
ddtai=0x01;
Far(J=1;j<=8;J++)
{PDRTD^datai:
4=or(t=0;t<3O00O;t*+):
datai=datai<<1;
09C?
rLrtOLiTR&i
如⑷《潼1Mar
RAliWiKlIRB4-
RjOWH^FLfXVFifcFHtfr
RAliAOVFFFlFHfiffIX
RM/TCOifGO
冈3鼻百GW
R^rur^aswTiMRfaQAflJigjR旷HCIjrtldSiftOT
RFZlftnrTJCS-RC3fSIKEEL
氈U4ZdWyjA
MOLRAW1HVRCS5KI
HCitF&T^A
FCClP£J-tRCiUPTFIRZi2ra=T
才占戶廿!
=
JZ
R5
RCSTT■舟匾呻妝?
T
2、电路如图所示,编程实现4个数码管显示数值5678。
单片机主频为4MHz
上主主士二
口5C1IITLHH
RSCMITi
O«3fl5_Maj|
KADJjk'il]
田mrPDU
RA2JWJ2T^REF-.CI^EFRR=;
冃⑶』EEREM
Rft&PQ-
FUM1K也ST
REW^t-
KA5版-艸莓勺口DIJT
fifnriW5RP
FKirTicarocE?
RC1i'M4ECJR
RC2MTCPI
RcsrspuEnj
h*:
lF%tc7HV
fh:
5rSCC-■如m
RMuRiP*RWJFEPIWC^P2PtWSP)蹴业声M
熬曲5賂
1F
l・
is
•i
a
RCf
2E
s"
an
23
LT
J
ttinclude
_CONFIG(0x3B31>;
voiddelateunsigned£ntms)
{ur>signiedinti,j;
Forti=ns;i>0;i——>
For(j=0;j<&7;
{;>
>
constcharseg7[10]-{QxCB,.QxF9QhAU,1
0k92,0x8?
0kF8”0xSO„0x?
g>;//
display
uaidinaint)
unsignedchari.j;
unsignedctiarrnimstr[ii];//
THrSC-flxBO;
TRLSD-0X00;
"处理数据
nufristr[3]=lclata/1购肥"千位nunstr[2]=idatafel0BQ/100;"百苻nunstr[1]=idata%1B9S%i68/19;//十位nunstr[0]=Ldata%1B00%100%10;FF个位
"显示
while(1>
tFor(i=0;i<'t0;i^-+)
{PORTO-BkOI;
Foi-Cj-3:
j>=0;j-->
^PORTC-segZErtunistrEj)];delay
(1);PORlD=POHrD«1;}
3、电路如图所示为3个按键控制8只LED灯显示状态,其中3个按键开关组成
独立式键盘,分别用key1键控制灯依次左移循环点亮,key2键控制灯右移循
环点亮,key3键控制8灯闪烁。
ttincluda
_C0NFIG(ex3B3^l);ttdefinekey1RBOttdoFinekey2R81ttdeFineHH2
uoiddela^(unsignedintns){unsign&dinti,j;
For(i=ms;i>G;i——)for“
voidzuo^if)
{unsignedchari;
PORTD-CX01;
ForCl^l;i<8;i++)
>
PORID^OxOfi;
uoidyouyi(){unsignedchari;
PORrD=Oxso;
For(i=l;i<8;i++0
PORTD=PORTD»1;
>
PORTD=DxO(l;
>
n
uoidganshuo(){unsignedchari;
PORTD=BkOO:
Fort1=1;i<>i:
l++)
{delay(^DO);
PORTD=~POBID;
>
PORTD>6mOO;
}
uoidmain()
<
TRISB=BxFF;
TRISD=0xU0;
P0RTD=flxB0;whiled)
<
犍按下吗?
5虹砂(辆);"址吋云什砌
if(key1==0>//确去按下>if(key2»=0)//keyZ犍按下吗T
lf(K?
(j2==0)//确喜按下切ciuyi();》"调T若移子程序
>
i+(key3==0)//kpy2fit按下吗7>
>
第二次作业
1、假如PIC单片机的系统时钟振荡频率是4MHz污E么执行一条非转移类指令的真实
时间应该是__Dus
A.0.5B.2C.3D.1
2、在PIC单片机系统配置和程序设计中,采用很有特色的哈佛总线结构,其根本意义就
在于B.
A.减少CPU的功耗B.数据存储器和程序存储器总线分离
C.提高端口的驱动能力C.可以方便进行在线调试
3、PIC单片机与其他单片机相比,具有以下这些明显的优点,但—C外.
A.哈佛总线结构B.精减指令RISC结构
C.存储器大D.驱动能力强
4、在PIC16F877单片机系统配置中,特别引入A/D转换器(ADC),它具有个
模拟量输入通道•
A.5B.8C.10D.6
5、PIC16F877单片机的ADC转换器具有A位的分辩率。
A.10B.12C.8D.14
&PIC16F877单片机多数I/O引脚都设计有第2功能,甚至还有第3功能,RA端口中
可以承担A/D转换中负参考电压端(VREF)的引脚是___B.
A.RA0B.RA2C.RA3D.RA4
7、在PIC16F877单片机ADC转换模块中,配置有8个模拟量输入通道,分别由
两个端口中的引脚承担.
A.RA和RCB.RC和RBC.RB和RDD.RA和RE
二、AD转换的中断程序设计
1、设计一个电子温度测量仪的雏形,温敏电阻(F2)感受外界温度变化,单片机实时采集RA0引脚的模拟量将其转化为数字量,通过端口C连接的一位LED
数码管显示AD转换结果的高8位(要求画出程序流程图,写出相关中断程序)。
说明:
R是一个温敏电阻,其电阻值随温度的变化而变化。
#include
__CONFIG(Ox3B31);
intadcdata=0;//
constunsignedcharseg7[10]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};〃
VoidinterruptISR()
{if(ADIE&&ADIF)
{ADIF=0;//
adcdata=(((unsignedint)ADRESH)«8)+ADRESL;〃
ADGO=1;//
}
}
voiddelay(unsignedintms)
{unsignedinti,j;
for(i=ms;i>0;i--)
for(j=0;j<67;j++)
{;}
}
voiddisplay(unsignedintidata)
{unsignedchari,j;
//unsignedintt;
unsignedcharnumstr[5]={0,0,0,0,0};
//处理数据idata
numstr[1]=idata/1000;//千位数numstr[2]=(idata%1000)/100;//百位数
numstr[3]=idata%100/10;//十位数
numstr[4]=idata%10;//个位数for(i=0;i<10;i++)
{PORTD=0x01;
for(j=1;j<=4;j++){PORTC=seg7[numstr[