《内部资源的C编程》PPT课件

《内部资源的C编程》PPT课件

ID:38672806

大小:393.82 KB

页数:21页

时间:2019-06-17

《内部资源的C编程》PPT课件_第1页
《内部资源的C编程》PPT课件_第2页
《内部资源的C编程》PPT课件_第3页
《内部资源的C编程》PPT课件_第4页
《内部资源的C编程》PPT课件_第5页
资源描述:

《《内部资源的C编程》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、教学基本要求:(1)、掌握中断应用的C编程方法;(2)、掌握定时器/计数器应用的C编程方法;(3)、熟悉串行口应用的C编程方法;教学重点:(1)、中断应用的C编程;(2)、定时器/计数器应用的C编程;教学难点:(1)、在Keil中如何调试各中断程序;第二部分8051内部资源的C编程一、中断应用的C语言编程C51编译器支持在C源程序中直接开发中断程序。中断服务程序是通过按规定语法格式定义的一个函数。中断服务程序的函数定义的语法格式如下:返回值函数名([参数])[模式][重入]interruptm[usin

2、gn]{…}nterruptm其中m是中断号(0到31),中断号告诉编译器中断程序的入口地址,中断号对应着IE寄存器中的使能位。下表给出了对应关系IE寄存器中的使能位和C中的中断号中断源入口地址0外部中断00003H1定时器0溢出000BH2外部中断10013H3定时器1溢出001BH4串行口中断0023H5定时器2溢出002BH在进入中断服务程序前的程序中使用一组工作寄存器,进入中断服务程序后,由“usingn”切换到另一组寄存器,中断返回后又恢复到原寄存器组。这样互相切换的两组寄存器中的内容彼此都没

3、有被破坏。为中断程序指定工作寄存器组的缺点是:所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误。中断不允许用于外部函数,它对函数目标代码影响如下:当调用函数时,SFR中的ACC,B,DPH,DPL和PSW入栈。如果不使用寄存器组切换,则甚至中断函数所需要的所有工作寄存器都入栈。函数退出前,所有的寄存器内容出栈;函数由8051的指令RETI终止。例:如图所示是利用优先权解码芯片,在单片机8031的一个外部中断INT1上扩展多个中断源的原理电路图。图中是以开关闭合来模拟中断请求信号。当有

4、任一中断源产生中断请求,能给8031的INT1引脚送一个有效中断信号,由P1的低3位可得对应中断源的中断号。多个中断源的处理。在中断服务程序中仅设置标志,并保存I/O口输入状态。C51编译器提供定义特定80C51系列成员的寄存器头文件。80C51头文件为reg51.h。C51程序如下:主程序初始化INT1清标志处理标志设置?YN返回设置标志存状态外中断1#includeunsignedcharstatus;bitflag;voidservice_int1()interrupt2usin

5、g2/*INT1中断服务程序,用第2组工作寄存器*/{flag=1;/*设置标志*/status=p1;/*存输入口状态*/}voidmain(void){IP=0x04;/*置INT1为高优先级中断*/IE=0x84;/*INT1开中断,CPU开中断*/for(;;){if(flag)/*有中断*/{switch(status)/*根据中断源分支*/{case0:break;/*处理IN0*/case1:break;/*处理IN1*/case2:break;/*处理IN2*/case3:break;/

6、*处理IN3*/default:;}flag=0;/*处理完成清标志*/}}}例1:在XTAL频率是12MHZ的标准8051器件上,用TIME1(定时器/计数器1)产生10KHz定时器滴答中断。分析:采用TIME1的工作模式2,则:TMOD=20H,机器周期=12/fosc=,T=1/10KHZ=100μs(256-次数)*1μs=100μsTH1=TL1=256-100采用中断方式:EA=1,ET1=1二、定时器/计数器应用的C语言编程#includestaticunsignedlo

7、ngoverflowcount=0;voidtime1(void)interrupt3{overflowcount++;//溢出计数器加1}voidmain(void){TMOD=(TMOD&0x0F)

8、0x20;TH1=256-100;TL1=TH1;ET1=1;EA=1;TR1=1;while(1);}例2:设单片机的fosc=12MHz晶振,要求在P1.0脚上输出周期为2ms的方波。分析:周期为2ms的方波要求定时时间隔1ms,每次时间到P1.0取反。机器周期=12/fosc=1μs需计数次数=1

9、000/(12/fosc)=1000/1=1000由于计数器是加1计数,为得到1000个计数之后的定时器溢出,必须给定时器置初值为65536(216)-1000。(1)用定时器0的方式1编程,采用查询方式,程序如下:#includesbitP1_0=P1^0;voidmain(void){TMOD=0x01;/*设置定时器1为控制方式1*/TR0=1;/*启动T/C0*/for(;;){TH0=(65536-1000)/2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。