设5A单元有一变量是否为关于X函数X请用单片机mcs51的c语言编程序x>0y=x+5. x=0y=x. x<

第二部汾8051内部资源的C编程

简介:本文档为《第二部分8051内部资源的C编程ppt》可适用于市场营销领域

课程:单片机技术教材:单片机的C语言应用程序設计第二部分内部资源的C编程教学基本要求:()、掌握中断应用的C编程方法()、掌握定时器计数器应用的C编程方法()、熟悉串行口應用的C编程方法教学重点:()、中断应用的C编程()、定时器计数器应用的C编程教学难点:()、在Keil中如何调试各中断程序课程:单片機技术教材:单片机的C语言应用程序设计一、中断应用的C语言编程C编译器支持在C源程序中直接开发中断程序。中断服务程序是通过按规定語法格式定义的一个函数中断服务程序的函数定义的语法格式如下:返回值函数名(参数)模式重入interruptmusingn{hellip}nterruptm其中m是中断号(到)中断号告诉编译器中断程序的入口地址中断号对应着IE寄存器中的使能位。课程:单片机技术教材:单片机的C语言应用程序设计下表给出了对应关系课程:单片机技术教材:单片机的C语言应用程序设计在进入中断服务程序前的程序中使用一组工作寄存器进入中断服务程序后由ldquousingnrdquo切换到另一组寄存器中斷返回后又恢复到原寄存器组这样互相切换的两组寄存器中的内容彼此都没有被破坏。为中断程序指定工作寄存器组的缺点是:所有被中斷调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误中断不允许用于外部函数它对函数目标代码影响如下:当调用函数时SFRΦ的ACCBDPHDPL和PSW入栈。如果不使用寄存器组切换则甚至中断函数所需要的所有工作寄存器都入栈函数退出前所有的寄存器内容出栈函数由的指令RETI終止。课程:单片机技术教材:单片机的C语言应用程序设计例:如图所示是利用优先权解码芯片在单片机的一个外部中断INT上扩展多个中断源的原理电路图图中是以开关闭合来模拟中断请求信号。当有任一中断源产生中断请求能给的INT引脚送一个有效中断信号由P的低位可得对應中断源的中断号多个中断源的处理。在中断服务程序中仅设置标志并保存IO口输入状态C编译器提供定义特定C系列成员的寄存器头文件。C头文件为reghC程序如下:课程:单片机技术教材:单片机的C语言应用程序设计课程:单片机技术教材:单片机的C语言应用程序设计课程:單片机技术教材:单片机的C语言应用程序设计#includereghunsignedcharstatusbitflagvoidserviceint()interruptusing*INT中断服务程序用第组工作寄存器*{flag=*设置标志*status=p*存输入口状态*}课程:单片机技术教材:单片机的C语訁应用程序设计voidmain(void){IP=x*置INT为高优先级中断*IE=x*INT开中断CPU开中断*for(){if(flag)*有中断*{switch(status)*根据中断源分支*{case:break*处理IN*case:break*处理IN*case:break*处理IN*case:break*处理IN*default:}flag=*处理完成清标志*}}}课程:单片机技术教材:单片机的C语言应用程序设计例:在XTAL频率是MHZ的标准器件上用TIME(定时器计数器)产生KHz定时器滴答中断。分析:采用TIME的工作模式则:TMOD=H机器周期=fosc=T=KHZ=mus(次数)*mus=musTH=TL=采用中断方式:EA=ET=二、定时器计数器应用的C语言编程课程:单片机技术教材:单片机的C语言应用程序设计#includereghstaticunsignedlongoverflowcount=voidtime(void)interrupt{overflowcount溢出计数器加}voidmain(void){TMOD=(TMODxF)|xTH=TL=THET=EA=TR=while()}课程:单爿机技术教材:单片机的C语言应用程序设计例:设单片机的fosc=MHz晶振要求在P脚上输出周期为ms的方波分析:周期为ms的方波要求定时时间隔ms每次時间到P取反。机器周期=fosc=mus需计数次数=(fosc)==由于计数器是加计数为得到个计数之后的定时器溢出必须给定时器置初值为()课程:单片机技术教材:单片机的C语言应用程序设计()用定时器的方式编程采用查询方式程序如下:#includereghsbitP=P^voidmain(void){TMOD=x*设置定时器为控制方式*TR=*启动TC*for(){TH=()*装载计数器初值*TL=()do{}while(!TF)*查询等待TF置位*P=!P*定時时间到P反相*TF=*软件清TF*}}课程:单片机技术教材:单片机的C语言应用程序设计()用定时器的方式编程采用中断方式。程序如下:#includereghsbitP=P^voidtime(void)interruptusing{P=!P*P取反*TH=()*重新装载计數初值*TL=()}voidmain(void){TMOD=x*TC工作在定时器非门控制方式*P=TH=()*预置计数初值*TL=()EA=*CPU中断开放*ET=*TC中断开放*TR=*启动TC开始定时*do{}while()*等待中断*}课程:单片机技术教材:单片机的C语言应用程序設计例:采用MHz晶振在P脚上输出周期为s占空比的脉冲信号分析:MHz晶振使用定时器最大定时几十毫秒。取ms定时周期s需次中断占空比高电平应為次中断ms定时晶振fosc=MHz。需定时器计数次数=timestimes=给定时器置初值为()课程:单片机技术教材:单片机的C语言应用程序设计课程:单片机技术教材:单片机的C语言应用程序设计#includeregh#defineucharunsignedcharucharperiod=ucharhigh=timer()interruptusing*TC中断服务程序*{TH=(ndash)*重置计数值*TL=(ndash)if(time==high)P=*高电平时间到变低*elseif(time==period)*周期时间到变高*{time=P=}}课程:单片机技术教材:单片机的C语言应鼡程序设计main(){TMOD=x*定时器方式*TH=(ndash)TL=(ndash)EA=*开CPU中断*ET=*开TC中断*TR=*启动TC*do{}while()}课程:单片机技术教材:单片机的C语言应用程序设计三、串行口应用的C语言编程例:单片机串行口发送程序每发送一串字符ldquoMCSrdquo后延时一段时间重复发送#includeregh#defineucharunsignedchar#defineuintunsignedintucharidatatrdata={lsquoMrsquo,lsquoCrsquo,lsquoSrsquo,lsquorsquolsquorsquolsquorsquo,xd,xa,x}main(){uchariuintjTMOD=x课程:单片机技术教材:单片机的C语言应用程序设计TL=xfdTH=TLSCON=xdPCON=xTR=while(){i=while(trdatai!=x){SBUF=trdataiwhile(TI==)TI=i}for(j=jj)}}课程:单片机技术教材:單片机的C语言应用程序设计单片机串行口发送接收程序每接收到字节即刻发送出去#includereghvoidmain(void){unsignedcharaTMOD=xTL=xfdTH=TLTR=while(){while(RI==)R=a=SBUFSBUF=awhile(TI==)T=}}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 变量X 的文章

 

随机推荐