什么是单片机?单片机有哪些特点?单片机是指将CPU、RAM、ROM、中断系统、定时器以及I/O口等集成在一块芯片上构成的单片微型计算机。它有体积小、成本低、运用灵活、扩展能力强、抗干扰能力强等特点。何谓断点?程序正常运行时被中断请求信号打断的地方称为断点。单片机的应用系统可以分为哪几个通道?前向通道,后向通道,人机通道什么是汇编语言?用助记符、符号、数字等来表示指令的程序语言。ADC0809的EOC引脚有何作用?EOC转换结束信号,是芯片的输出信号。转换开始后,EOC信号变低;转换结束时,EOC返回高电平。这个信号可以作为A/D转换器的状态信号来查询,也可以直接用作中断请求信号。简述按键扫描的过程?①判断键盘中是否有键按下;②进行行扫描,判断是哪一个键按下,若有键按下,则调用延时子程序去抖动;③读取按键的位置码;④将按键的位置码转换为键值把长度为20的浮点型数组array,定义在片内RAM数据区域(不限制在低128字节区域)。其定义为:floatxdataarray[20]把长度为20的无符号整型数组array,定义在片内RAM数据区域(不限制在低128字节区域)。其定义为:unsignedintidataarray[20]把长度为50的有符号整型数组array,定义在片外RAM数据区域。其定义为:intxdataarray[50]某8位模数转换器与单片机并行连接,使用总线方式进行访问,已知转换器的地址为0x7ff0,欲通过指针变量pdac访问转换器,则指针变量pdac的定义方法为:unsignedcharxdata*pdac=0x7ff0某单片机有一个8位串口2数据缓冲特殊功能寄存器S2BUF,它的地址是0x9b,定义该特殊功能寄存器S2BUF的方法是:sfrs2buf=0x9b;89C52单片机有一个与定时器2相配套的16位捕获特殊功能寄存器RCAP2,它的地址是0xca,定义该特殊功能寄存器RCAP2的方法是:sfr16RCAP2=0xca'某单片机有一个8位串口2控制特殊功能寄存器S2CON,它的地址是0x9a,定义该特殊功能寄存器S2CON的方法是:sfrS2CON=0x9a欲在函数founct()中使用第3组工作寄存器,则定义函数时的说明部分应该是(假设不传递参数,没有返回值):voidfounct()using3欲在函数founct()中使用第2组工作寄存器,则定义函数时的说明部分应该是(假设不传递参数,返回无符号字符型数据):unsignedcharfounct()using2定义一个位变量flag,用于某种事件出现的标志,flag定义方法为:bitflag;中断服务程序与普通子程序有什么根本的区别?中断服务程序是随机发生的,结束后要返回断点。普通子程序是安排好的,没有断点。为什么定时器T1用作串行口波特率发生器时,常选用工作模式2?若已知系统时钟频率和通信用波特率,如何计算其初值?定时器的模式2是8位自动重装初值的方式,可以产生非常精确的定时时间,所以被用作串行口波特率发生器。定时器初值计算公式:X=256-fosc*(SMOD+1)/(384*波特率)编写定时器2中断服务函数int_t2(),则函数的说明部分应该是:voidint_t2()interrupt5数字4的共阳极段码是(99),共阴极段码是(66)。串行口中断请求标志RI和(T1)不会自动清除,必须用软件方式清0。哪些中断源的中断请求标志位是由硬件自动复位的?哪些中断的中断请求标志必须通过软件编程进行复位?外部中断和定时中断是自动复位。串行口中断。中断响应的时间是否使确定不变的?为什么?在实际以用中应如何考虑这一因素?中断响应的时间不是确定不变的。因为中断位置不确定。在实际应用中要考虑实时性要求高的场合合理安排程序。89C52单片机的串行口由哪些功能部件组成?各有什么作用?89C52通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界进行通信,单片机内部的全双工串行接口部分,包含有串行发送器和接收器,有两个物理上独立的缓冲器,即发送缓冲器和接收缓冲器SBUF。发送缓冲器只能写入发送的数据,但不能读出;接收缓冲器只能读出接收的数据,但不能写入。控制状态寄存器SCON,用于定义串行通信口的工作方式和反映串行口状态。简述单片机多机通信的原理。主机首先发送的一帧数据为地址,即某从机机号,其中第9位为1,所有的从机接收到数据后,将其中第9位装入RB8中。各个从机根据收到的第9位数据(RB8中)的值来决定从机可否再接收主机的信息。若(RB8)=0,说明是数据帧,则使接收中断标志位RI=0,信息丢失;若(RB8)=1,说明是地址帧,数据装入SBUF并置RI=1,中断所有从机,被寻址的目标从机清除SM2,以接收主机发来的一帧数据。其他从机仍然保持SM2=1。常见的开关器件有哪些?继电器,光电耦合器,光电耦合驱动晶闸管等。为什么要消除键盘的机械抖动?有哪些方法?键抖动会引起按键被误读多次。可用硬件、软件两种方式消除。单片机复位后,CPU使用哪组工作寄存器?它们的地址是什么?用户如何改变当前工作寄存器组?0组。地址是00H~07H。通过程序状态字psw中的RS1、RS0标志改变。阅读下面C语言函数,对各句做注释,并指出函数的功能。unsignedcharxdataarray[50];voidmove_xdata(){unsignedchari;unsignedcharcode*pp;pp=0x200;for(i=0;i50;i++)array[i]=*(pp+i);答:把程序存储器地址从0X200开始的50个字节数据传送到RAW数组array中已知无符号字符型变量operate定义在bdata区域中,将其第4位定义为位变量flag_calculate的方法为:sbitfalg_calculate=oprate~6已知无符号字符型变量operate定义在bdata区域中,将其第2位定义为位变量flag_music的方法为:sbitflag_music=operate~2在片外数据区0xdfff地址处定义一无符号字符型变量da_port,便于通过da_port输出实现D/A转换。其定义为:unsignedcharxdatada_port_at_0xdfff编写中断服务程序时应注意哪些问题?答:在编写中断服务程序时,一要注意对中断现场的保护与恢复。而是中断服务程序返回时必须用RETI返回指令。若晶振为11.0592MHz,串行口工作于方式1,波特率为4800b/s。写出用T1作为波特率发生器的方式字和计数初值。方式字TMOD:0X20计数初值:SMOD=0X=256-11.0592x10^6x(0+1)/(384x4800)=250所以TH1=Tl1=250MCS-51单片机片内RAM包含哪些可以位寻址的单元。位地址7CH和字节地址7CH如何区别?位地址7CH具体在片内RAM的什么位置?MCS-51单片机片内RAM包含位寻址区和SFR中字节地址能够被8整除的SFR。位地址和字节地址的区别在于使用不同的寻址方式,位地址使用位寻址,字节地址使用直接寻址或间接寻址。位地址7CH在片内RAM中字节地址为2FH的第4位。简述定时器/计数器T0以模式3工作时T1的原理结构及适用场合。常见的模/数转换电路有哪些?计数比较型、逐次逼近型、双积分型简述串行口四种工作方式的特点。方式0:同步移位寄存器,波特率为fosc/12;方式1:10位异步方式,波特率由定时器控制;方式2:11位异步方式,波特率为fosc/32或fosc/64;方式3:11位异步方式,波特率同方式1。简述单片机多机通信的原理。主机首先发送的一帧数据为地址,即某从机机号,其中第9位为1,所有的从机接收到数据后,将其中第9位装入RB8中。各个从机根据收到的第9位数据(RB8中)的值来决定从机可否再接收主机的信息。若(RB8)=0,说明是数据帧,则使接收中断标志位RI=0,信息丢失;若(RB8)=1,说明是地址帧,数据装入SBUF并置RI=1,中断所有从机,被寻址的目标从机清除SM2,以接收主机发来的一帧数据。其他从机仍然保持SM2=1。35+48=?,用BCD码计算其结果,保存在R2中。MOVA,#35HADDA,#48HDAAMOVR2,A在数字滤波中有一种叫做“中值滤波”的技术,就是对采集的数据按照从大到小或者从小到大的顺序进行排序,然后取其中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中从0x50开始的21个单元的采样数据用冒泡法排序进行中值滤波,并把得到的中值数据返回。unsignedcharmedian-_filter(){unsignedchardata*point,i,j,n,d;for(i=0;i20;i++){point=0x50;n=20﹣i;for(j=0;jn;j++){if(*point*(point+1)){d=*point;*point=*(point+1);*(point+1)=d;}point++;}}point=0x50+10;return*point;}当定时器/计数器T0以模式3工作时T1的特点主要是:();();();()。(1)可以定时,也可以计数;(2)可以模式0、模式1、模式2三种方式工作;(3)自动处于运行状态;(4)计数溢出标志TF1和中断资源被TH0占用,不会产生计数溢出标志,不具有中断功能。定时器/计数器T0以模式3工作时T1的原理结构可以分为()和()两个部分。(1)信号源,包括内部时钟信号和外部计数脉冲信号;(2)计数器,包括低8位TL1和高8位TH1两个部分。中断服务程序与普通子程序有什么根本的区别?中断服务程序是随机发生的,结束后返回断点。普通程序是安排好的没有断点。设计一个2×2的行列式键盘(同在P1口)电路并编写键扫描程序。#includereg52.hunsignedcharkey(){unsignedcharrow,col=0,k=-1;P1=0xfc;if((P1&0xfc)==0xfc)return(k);delay20ms();if((P1&0xfc)==0xfc)return(k);for(row=0;row2;row++){P1=~(1row);k=P1&0xfc;if(k!=0xfc){while(k&(1(col+2)))col++;k=row*2+col;P1=0xfc;while(P1&0xfc!=0xfc);break;}}returnk;}利用定时器/计数器T1的模式2对外部信号进行计数,编写初始化程序和中断函数,实现每计满100次,对P1.0端取反产生方波信号。假设没有使用T0。因100256故选模式2(3)C语言程序:#includereg52.hsbitP10=P1^0;主函数:main(){TMOD=0x61;TL1=156;TH1=156;EA=1;ET1=1;TR1=1;while(1);}T1中断服务函数:voidint_t1(void)interrupt3{P10=~P10;}编写一函数move_data,把程序存储器地址从0x30开始的20个字节数据,传送到片内RAM的数组array中。unsignedchardataarray[20];voidmove_data(){unsignedchari;unsignedcharcode*pp;pp=0x30;for(i=0;i20;i++)array[i]=*(pp+i);}}编写函数,查找code区域中从0x0030开始的100个单元中出现0x55的次数,并将查找的结果从函数中返回。unsignedcharfind(void){unsignedchari,dd=0;unsignedcharcode*p;I=100;p=0x0030;while(i--)if(*(p++)==0x55)dd++;returndd;}编写一函数,查找片外RAM区域中从0x0100开始的200个单