部分8051资源的C编程课件

上传人:阳*** 文档编号:108100448 上传时间:2022-06-15 格式:PPT 页数:21 大小:144KB
收藏 版权申诉 举报 下载
部分8051资源的C编程课件_第1页
第1页 / 共21页
部分8051资源的C编程课件_第2页
第2页 / 共21页
部分8051资源的C编程课件_第3页
第3页 / 共21页
资源描述:

《部分8051资源的C编程课件》由会员分享,可在线阅读,更多相关《部分8051资源的C编程课件(21页珍藏版)》请在装配图网上搜索。

1、课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计教学基本要求:教学基本要求:(1 1)、掌握中断应用的)、掌握中断应用的C C编程方法;编程方法;(2 2)、掌握定时器)、掌握定时器/ /计数器应用的计数器应用的C C编程方法;编程方法;(3 3)、熟悉串行口应用的)、熟悉串行口应用的C C编程编程方法;方法;教学重点:教学重点:(1 1)、中断应用的)、中断应用的C C编程;编程;(2 2)、定时器)、定时器/ /计数器应用的计数器应用的C C编程;编程;教学难点:教学难点:(1 1)、在)、在KeilKeil中如何调试各中断程序;中如何调试各

2、中断程序;第二部分第二部分 80518051内部资源的内部资源的C C编程编程课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计一、一、中断应用的中断应用的C C语言编程语言编程 C51 C51编译器支持在编译器支持在C C源程序中直接开发中断程序。中断服务源程序中直接开发中断程序。中断服务程序是通过按规定语法格式定义的一个函数。程序是通过按规定语法格式定义的一个函数。 中断服务程序的函数定义的语法格式如下:中断服务程序的函数定义的语法格式如下: 返回值返回值 函数名函数名(参数参数) ) 模式模式重入重入 interrupt m using n

3、interrupt m using n nterrupt m nterrupt m 其中其中m m是中断号是中断号(0(0到到31)31),中断号告诉编译器中,中断号告诉编译器中断程序的入口地址,中断号对应着断程序的入口地址,中断号对应着IEIE寄存器中的使能位。寄存器中的使能位。课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计下表给出了对应关系下表给出了对应关系 IE 寄存器中的使能位和寄存器中的使能位和C 中的中断号中的中断号中断源中断源入口地址入口地址0 外部中断外部中断00003H1 定时器定时器0 溢出溢出000BH2 外部中断外部中断

4、10013H 3 定时器定时器1 溢出溢出001BH4 串行口中断串行口中断0023H5 定时器定时器2 溢出溢出002BH课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 在进入中断服务程序前的程序中使用一组工作寄存器,进在进入中断服务程序前的程序中使用一组工作寄存器,进入中断服务程序后,由入中断服务程序后,由“using n”切换到另一组寄存器,中断返切换到另一组寄存器,中断返回后又恢复到原寄存器组。这样互相切换的两组寄存器中的内回后又恢复到原寄存器组。这样互相切换的两组寄存器中的内容彼此都没有被破坏。容彼此都没有被破坏。 为中断程序指定工作

5、寄存器组的缺点是为中断程序指定工作寄存器组的缺点是:所有被中断调用的所有被中断调用的过程都必须使用同一个寄存器组过程都必须使用同一个寄存器组,否则参数传递会发生错误。否则参数传递会发生错误。 中断不允许用于外部函数,它对函数目标代码影响如下:中断不允许用于外部函数,它对函数目标代码影响如下: 当调用函数时,当调用函数时,SFR中的中的ACC,B,DPH,DPL和和PSW入入栈。如果不使用寄存器组切换,则甚至中断函数所需要的所有栈。如果不使用寄存器组切换,则甚至中断函数所需要的所有工作寄存器都入栈。工作寄存器都入栈。 函数退出前,所有的寄存器内容出栈;函数退出前,所有的寄存器内容出栈; 函数由函

6、数由8051的指令的指令RETI终止。终止。课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 例:如图所示是利用优先权解码芯片,在单片机例:如图所示是利用优先权解码芯片,在单片机80318031的一的一个外部中断个外部中断INT1INT1上扩展多个中断源的原理电路图。图中是以开上扩展多个中断源的原理电路图。图中是以开关闭合来模拟中断请求信号。当有任一中断源产生中断请求,关闭合来模拟中断请求信号。当有任一中断源产生中断请求,能给能给80318031的的INT1INT1引脚送一个有效中断信号,由引脚送一个有效中断信号,由P1P1的低的低3 3位可得对

7、位可得对应中断源的中断号。多个中断源的处理。应中断源的中断号。多个中断源的处理。 在中断服务程序中仅设置标志,并保存在中断服务程序中仅设置标志,并保存I/OI/O口输入状态。口输入状态。 C51C51编译器提供定义特定编译器提供定义特定80C5180C51系列成员的寄存器头文件。系列成员的寄存器头文件。 80C5180C51头文件为头文件为reg51.hreg51.h。 C51C51程序如下:程序如下:课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计主

8、程序主程序初始化INT1清标志清标志处理处理标志设置?标志设置?YN返返回回设置标志设置标志存状态存状态外中断外中断1课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 # include unsigned char status; bit flag; void service_int1( ) interrupt 2 using 2 /* INT1中断服务程序,用第中断服务程序,用第2组工作寄存器组工作寄存器 */ flag=1; /* 设置标志设置标志 */ status=p1; /* 存输入口状态存输入口状态 */ 课程:单片机技术课程:单片机

9、技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 void main(void) IP=0 x04 ; /* 置置INT1为高优先级中断为高优先级中断 */ IE=0 x84 ; /* INT1开中断,开中断,CPU开中断开中断 */ for(; ;) if(flag) /* 有中断有中断 */ switch(status) /* 根据中断源分支根据中断源分支 */ case 0 : break ; /* 处理处理IN0 */ case 1 : break ; /* 处理处理IN1 */ case 2 : break; /* 处理处理IN2 */ case 3 : brea

10、k; /* 处理处理IN3 */ default : ; flag=0 ; /* 处理完成清标志处理完成清标志 */ 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 例例1 1:在:在XTALXTAL频率是频率是12MHZ12MHZ的标准的标准80518051器件上,用器件上,用TIME1TIME1(定(定时器时器/ /计数器计数器1 1)产生)产生10KHz10KHz定时器滴答中断。定时器滴答中断。 分析:采用分析:采用TIME1TIME1的工作模式的工作模式2 2,则:,则: TMOD=20HTMOD=20H, 机器周期机器周期=12/fo

11、sc=12/fosc=,T=1/10KHZ= 100 s T=1/10KHZ= 100 s (256 -256 -次数)次数)* *1 s=100 s 1 s=100 s TH1=TL1=256-100 TH1=TL1=256-100 采用中断方式:采用中断方式:EA=1EA=1,ET1=1ET1=1二、二、定时器定时器/ /计数器应用的计数器应用的C C语言编程语言编程课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计#include #include static unsigned long overflowcount=0;static uns

12、igned long overflowcount=0;void time1(void) interrupt 3 void time1(void) interrupt 3 overflowcount+; / overflowcount+; /溢出计数器加溢出计数器加1 1 void main(void) void main(void) TMOD=(TMOD&0 x0F)|0 x20; TMOD=(TMOD&0 x0F)|0 x20; TH1=256-100; TH1=256-100; TL1=TH1; TL1=TH1; ET1=1; ET1=1; EA=1;TR1=1; EA=1;TR1=1;

13、while(1); while(1); 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计(1) (1) 用定时器用定时器0 0的方式的方式1 1编程,采用查询方式,程序如下:编程,采用查询方式,程序如下: #include #include sbit P1_0=P10 sbit P1_0=P10 ; void main(void)void main(void) TMOD=0 x01 TMOD=0 x01 ; / /* * 设置定时器设置定时器1 1为控

14、制方式为控制方式1 1* */ / TR0=1 TR0=1 ; / /* * 启动启动 T/C0 T/C0 * */ / for( for( ; ;) ) TH0= ( TH0= ( -1000 ) /256 -1000 ) /256 ; / /* * 装载计数器初值装载计数器初值 * */ / TL0= ( TL0= ( -1000 ) %256 -1000 ) %256 ; do while (!TF0) do while (!TF0) ; / /* * 查询等待查询等待TF0TF0置位置位 * */ / P1_0=!P1_0 P1_0=!P1_0; / /* * 定时时间到定时时间到P1

15、.0P1.0反相反相 * */ / TF0=0 TF0=0; / /* * 软件清软件清 TF0 TF0 * */ / 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计(2) (2) 用定时器用定时器0 0的方式的方式1 1编程,采用中断方式。程序如下:编程,采用中断方式。程序如下: #include #include sbit P1_0=P10 sbit P1_0=P10 ; void time (void) interrupt 1 using 1 void time (void) interrupt 1 using 1 P1_0=!P1_0

16、P1_0=!P1_0 ; / /* * P1.0 P1.0取反取反 * */ / TH0= ( TH0= ( -1000 ) /256 -1000 ) /256 ; * * 重新装载计数初值重新装载计数初值 * */ / TL0= ( TL0= ( -1000 ) %256 -1000 ) %256 void main( void ) void main( void ) TMOD=0 x01 TMOD=0 x01 ; / /* * T/C0 T/C0工作在定时器非门控制方式工作在定时器非门控制方式1 1 * */ / P1_0=0 P1_0=0; TH0= (TH0= ( -1000 ) /2

17、56 -1000 ) /256 ; / /* * 预置计数初值预置计数初值 * */ / TL0= ( TL0= ( -1000 ) %256 -1000 ) %256 ; EA=1 EA=1 ; / /* * CPU CPU中断开放中断开放 * */ / ET0= 1 ET0= 1 ; / /* * T/C0 T/C0中断开放中断开放 * */ / TR0=1 TR0=1 ; / /* * 启动启动T/C0T/C0开始定时开始定时 * */ / do while(1) do while(1) ; / /* * 等待中断等待中断 * */ / 课程:单片机技术课程:单片机技术 教材:单片机的教

18、材:单片机的C语言应用程序设计语言应用程序设计 例例3:采用:采用10 MHz晶振,在晶振,在P1.0脚上输出周期为脚上输出周期为2.5 s,占空,占空比比20%的脉冲信号。的脉冲信号。 分析:分析: 10 MHz晶振,使用定时器最大定时几十毫秒。取晶振,使用定时器最大定时几十毫秒。取10 ms定时,定时,周期周期2.5 s需需250次中断,占空比次中断,占空比20%,高电平应为,高电平应为50次中断。次中断。 10 ms定时,晶振定时,晶振fosc=10 MHz。 需定时器计数次数需定时器计数次数=1010310/12=8333课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C

19、语言应用程序设计语言应用程序设计课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计# include # include # define uchar unsigned char# define uchar unsigned charuchar period=250uchar period=250;uchar high=50uchar high=50;timer0( )interrupt 1 using 1 /timer0( )interrupt 1 using 1 /* * T/C0 T/C0中断服务程序中断服务程序 * */ / TH0= (

20、TH0= ( 8333 8333)/256 /256 ; / /* * 重置计数值重置计数值 * */ / TL0= ( TL0= ( 8333 8333)%256 %256 ; if(+time=high)P1=0; /* 高电平时间到变低高电平时间到变低 */ else if (time=period) /* 周期时间到变高周期时间到变高 */ time=0 ; P1=1 ; 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计main( )main( ) TMOD=0 x01 TMOD=0 x01 ; / /* * 定时器定时器0 0方式方式1

21、 1 * */ / TH0= ( TH0= ( 8333 8333) /256 /256 ; TL0= (TL0= ( 8333 8333) %256 %256 ; EA=1EA=1; / /* * 开开CPUCPU中断中断 * */ / ET0=1 ET0=1 ; / /* * 开开T/C0T/C0中断中断 * */ / TR0=1 TR0=1 ; / /* * 启动启动T/C0 T/C0 * */ / do while(1) do while(1) ; 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计三、串行口应用的三、串行口应用的C C语言

22、编程语言编程 例:单片机例:单片机串行口发送程序,每发送一串字符串行口发送程序,每发送一串字符“MCS-51”MCS-51”后,延时一段时间重复发送。后,延时一段时间重复发送。#include#include#define uchar unsigned char #define uchar unsigned char #define uint unsigned int#define uint unsigned intuchar idata trdata10=M,C,S,-uchar idata trdata10=M,C,S,-, 55,1,0 x0d,0 x0a,0 x00;1,0 x0d,0

23、 x0a,0 x00;main()main() uchar i; uint j; uchar i; uint j; TMOD=0 x20; TMOD=0 x20;课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 TL1=0 xfd; TH1=TL1; TL1=0 xfd; TH1=TL1; SCON=0 xd8;PCON=0 x00; SCON=0 xd8;PCON=0 x00; TR1=1; TR1=1; while(1) while(1) i=0; i=0; while(trdatai!=0 x00) while(trdatai!=0 x00

24、) SBUF= trdatai; SBUF= trdatai; while(TI=0); while(TI=0); TI=0; TI=0; i+; i+; for(j=0;j12500;j+); for(j=0;j12500;j+); 课程:单片机技术课程:单片机技术 教材:单片机的教材:单片机的C语言应用程序设计语言应用程序设计 单片机单片机串行口发送串行口发送/ /接收程序,每接收到字节即刻发送出去;接收程序,每接收到字节即刻发送出去;#include#includevoid main(void)void main(void) unsigned char a; unsigned char a; TMOD=0 x20; TMOD=0 x20; TL1=0 xfd; TL1=0 xfd; TH1=TL1; TH1=TL1; TR1=1; TR1=1; while(1) while(1) while(RI=0); while(RI=0); R1=0; R1=0; a=SBUF; a=SBUF; SBUF=a; SBUF=a; while(TI=0); while(TI=0); T1=0; T1=0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!