《PIC单片机练习题解答(共10页).doc》由会员分享,可在线阅读,更多相关《PIC单片机练习题解答(共10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上PIC单片机习题第一次一、选择题(B)1、PIC单片机采用 总线结构。A、普林斯顿 B、哈佛2、PIC16F877单片机精简指令集系统共 C 条。A、75 B、133 C、35 D、1113、PIC16F877单片机程序存储器和数据存储器的宽度是 B 和 。A、8,8 B、14,8 C、16,8 D、16,164、PIC16F877单片机共 C 中断源。A、5 B、8 C、14 D、165、PIC16F877单片机共 C 端口。A、3 B、4 C、5 D、66、PIC16F877单片机共有 C 个定时/计数器A、1 B、2 C、3 D、47、PIC16F877单片机定
2、时器1具有的特殊功能是 D 。A、定时 B、计数 C、PWM D、CCP8、若端口B接8个按键,则该端口的TRISB应初始化成A、0x00 B、0xFF C、0x0F D、0xF09、TMR0的位宽度为A、8 B、16 C、32 D、6410、 PIC16F877 单片机外围接口区域包括RA,RB,RC,RD 和RE 5个端口,而每个端口均有多条输入/输出可编程的引脚,合计5个端口共有_C_条引脚.A. 30 B. 34 C.33 D.3111、PIC16F877 单片机外围接口区域包括RA,RB,RC,RD 和RE 5 个端口.在下列端口中,_D_并不具备8 条引脚.A. RA,RB B.
3、RC,RD C. RB,RC D. RA,RE二、问答题1、如何确定I/O端口的输入和输出?答:根据方向控制TRIS确定,高电平做输出,低电平做输入。2、在确定A、B、C、D、E端口的功能时,首先要执行什么操作?答:确定端口方向。3、PIC16F877单片机有几个定时/计数器?他们的区别是什么?答:TMR0 8位宽 与WDT共用预分频器TMR1 16位宽 与CPP模块配合使用可实现捕捉和比较功能TMR2 只作定时;8位宽 与PWM模块配合使用可实现脉宽调制输出功能4、PIC单片机具有的优点有哪些?答、1、哈佛总线结构;2、指令系统采用RISC技术;3、代码压缩率高;4、IO端口驱动负载能力较强
4、及功耗低等。三、程序设计题1、电路如图所示,编程实现走马灯的运行效果,即D0D7循环被依次点亮,但同一时刻只有一个灯亮。单片机主频为4MHz。2、电路如图所示,编程实现4个数码管显示数值5678。单片机主频为4MHz。3、电路如图所示为3个按键控制8只LED灯显示状态,其中3个按键开关组成独立式键盘,分别用key 1键控制灯依次左移循环点亮,key2键控制灯右移循环点亮,key3键控制8灯闪烁。 第二次作业1、 假如PIC 单片机的系统时钟振荡频率是4MHz,那么执行一条非转移类指令的真实时间应该是_D_usA. 0.5 B. 2 C. 3 D. 12、 在PIC单片机系统配置和程序设计中,采
5、用很有特色的哈佛总线结构,其根本意义就在于_B_.A. 减少CPU的功耗 B. 数据存储器和程序存储器总线分离C. 提高端口的驱动能力C. 可以方便进行在线调试3、 PIC单片机与其他单片机相比,具有以下这些明显的优点,但_C_除外.A. 哈佛总线结构B.精减指令RISC结构C. 存储器大D.驱动能 力强4、在PIC16F877 单片机系统配置中,特别引入A/D 转换器(ADC),它具有_个模拟量输入通道. A. 5 B. 8 C. 10 D. 65、PIC16F877 单片机的ADC转换器具有_A_位的分辩率。A. 10 B. 12 C. 8 D. 146、 PIC16F877 单片机多数I
6、/O 引脚都设计有第2功能,甚至还有第3功能,RA端口中可以承担A/D 转换中负参考电压端(VREF-)的引脚是_B_.A. RA0 B. RA2 C. RA3 D. RA47、 在PIC16F877单片机ADC转换模块中,配置有8个模拟量输入通道,分别由_两个端口中的引脚承担.A. RA和RC B. RC和RB C. RB和RD D. RA和RE二、AD转换的中断程序设计1、设计一个电子温度测量仪的雏形,温敏电阻(R2)感受外界温度变化,单片机实时采集RA0引脚的模拟量将其转化为数字量,通过端口C连接的一位LED数码管显示AD转换结果的高8位(要求画出程序流程图,写出相关中断程序)。说明:R
7、2是一个温敏电阻,其电阻值随温度的变化而变化。#include_CONFIG(0x3B31);int adcdata=0;/const unsigned char seg710=0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90;/Void interrupt ISR() if(ADIE&ADIF) ADIF=0;/ adcdata=(unsigned int)ADRESH)0;i-) for(j=0;j67;j+) ;void display(unsigned int idata) unsigned char i,j; / unsigned
8、int t; unsigned char numstr5=0,0,0,0,0;/处理数据idata numstr1=idata/1000;/千位数 numstr2=(idata%1000)/100; /百位数 numstr3=idata%100/10; / 十位数 numstr4=idata%10; /个位数 for(i=0;i10;i+) PORTD=0x01; for(j=1;j=4;j+) PORTC=seg7numstrj; delay(5); PORTD=PORTD1; void main() char i; int voltage=0; TRISA=0x01;/ TRISB=0x0
9、0; TRISC=0x00; TRISD=0x00; /* ADFM=1;/右对齐 PCFG3=0;PCFG2=0;PCFG1=0;PCFG0=0;/全为模拟引脚,参考电压为VDD,VSS /*以上5条语句可以用 ADCON1=0b00000000; ADCS1=1;ADCS0=0;/使用内部RC振荡器作为时钟 CHS2=0;CHS1=0;CHS0=0;/选择AN0通道 ADON=1;/开启AD转换器 /*以上6条语句可以用 ADCON0=0b11000001;/*开中断 ADIE=1; ADIF=0; PEIE=1; GIE=1; for(i=0;i4900|voltage100) /报警
10、for(i=0;i5;i+) delay(1);RB0=!RB0; /发出500Hz的声音 第三次作业一、选择题1、A/D转换器将转换的10位数字量放入A、ADRESH B、ADRESL C、ADCON0 D、ADRESH和ADRESL2、PIC单片机I/O端口驱动负载的能力较强,每这并不表示所有端口都同时具有这样的功效.对整个单片机而言,所有输入/输出驱动小于_C_ mA。A. 100 B. 150 C. 250 D. 2003、预分频器最大的分配比是 CA、1:64 B、1:128 C、1:2564、TXSTA是 B A、接收状态控制寄存器 B、发送状态控制寄存器 C、接收寄存器 D、发送
11、寄存器5、PIC16F877单片机把要发送的数据放入 A、TXREG B、RCREG C、TXSTA D、RCSTA6、PIC16F877单片机接收到一个数据,CPU自动将接收的数据放入A、TXREG B、RCREG C、TXSTA D、RCSTA二、判断题1、PIC单片机采用哈佛总线结构,在芯片内部数据总线和指令总线分离,允许采用不同的字节宽度。2、PIC16F877单片机的数据存储器共有512字节单元空间,即0000H01FFH。3、PIC16F877单片机的程序存储器共有8K14位单元空间,即0000H01FFH。4、TIMER0与其他部件配合具有捕捉功能。5、PIC16F877的三个定
12、时器都是8位宽可编程定时器。6、PIC16F877单片机的A/D转换器具有8个模拟输入通道。7、PIC16F877单片机的A/D转换器具有8位分辨率。8、PIC16F877单片机的RA端口全部能做A/D转换器功能引脚。9、PIC16F877单片机的RB0端口除了作为一般IO口还可作外部中断输入端。10、PIC16F877单片机端口RB引脚中,只有RB4RB7具有电平变化中断功能。11、PIC16F877单片机I/O端口驱动负载能力较弱。12、INTF外部中断标志位是硬件置1,软件清0。13、TXIF发送中断标志位和RCIF接收中断标志位都是硬件置1,软件清0。14、波特率指的是每秒中传送的字节
13、数。15、异步通信是以帧为单位的。16、SPBRG波特率因子寄存器写入的是波特率。17、PIC16F877单片机主要用PORTA、PORTB、PORTC、PORTD和PORTE5个寄存器与外界交换的信息。18、OPTION寄存器的上电复位的初始状态为0xFF。三、程序设计1、下图为一个双机通信的线路图,2个单片机通过异步串行通信接口相连的方式为:RX和TX交叉连接。左边的单片机U1为发送,每按一下按键S1就发送一个数,从1开始发送,每送一个数,此数加1,(即09)。发送的数同时在D口上输出显示。读写其发送与接收程序,并补充相应的语句。(两单片机主频都是4MHz)/双方通信协议为:波特率9600
14、bps,数据格式:8位数据位,无奇偶校验,1位停止位/发送方串行通信U1,按一下发送键便发送一个数据,从1开始发送,随后按一下键数值自动加1,到9后以后循环从0开始发送。专心-专注-专业#include_CONFIG(0x3B31);unsigned char num=0; /发送数据变量const char seg10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/显示数值笔段码/延时子程序void delay(unsigned int ms)unsigned int i,j; for(i=ms;i0;i-) for(j=0;j67;j
15、+) ;/发送初始化子程序void transinit() TRISB=0x01; /发送按键为输入 TRISC7=1; /RX引脚置为输入 TRISC6=0; /TX引脚置为输出 TRISD=0; /RD端口方向控制寄存器为输出 PORTD=0; /PORTD清0 INTE=1 ; /打开全局中断使能位 GIE=1 ; /打开外部中断使能位 SPBRG=25 ; /选择波特率9600 RCSTA=0b10010000; /高速,8位数据 TXSTA=0b00100100; /外部中断INT子程序void interrupt INTISR() if(INTF=1&INTE=1) INTF=0
16、;/清INT中断标志 RB1=1 ;/发送指示灯亮 num+ ;/发送数据+1 if(num=10)num=0; TXREG=num ;/将发送数据放入TXREG中 PORTD=segnum ;/同时将发送的数据送PORTD显示 delay(100);/延时 RB1=0;/发送指示灯灭 /主程序main() transinit() ; /调发送初始化子程序 RB1=0; / 发送指示灯灭 while(1); / 循环等待/接收方串行通信U2/保证每次接收到完整的数据包/PIC单片机主频:4MHz,波特率9600bps/数据格式:8位数据位,无奇偶校验,1位停止位#include_CONFIG(
17、0x3B31);const char seg10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/延时子程序void delay(unsigned int ms)unsigned int i,j; for(i=ms;i0;i-) for(j=0;j67;j+) ;/接收初始化子程序void receivinit() TRISB=0x00; TRISC6=0; / TRISC7=1;/ TRISD=0x00;/ GIE=1; / PEIE=1;/ RCIE=1;/ SPBRG=25;/波特率9600 TXSTA=0b00100100;/高速,8位数据 RCSTA=0b10010000; / /接收中断服务子程序void interrupt rcISR() unsigned char x; /接收数据暂存变量 if(RCIE=1&RCIF=1) RB1=1; /接收指示灯亮 X=RCREG ;/将RCREG中的数据放入x中 PORTD=segx; /接收数据显示 delay(100); / RB1=0; / /main() receivinit(); /调接收初始化子程序 RB1=0; /接收指示灯灭 while(1); /循环等待
限制150内