PIC16F C语言测频率程序,PIC单片机C语言程序—实例5

PIC单片机C语言程序—实例5

来源:华强电子网

作者:华仔

浏览:3630

时间:2016-08-10 14:18

标签:

摘要:

前面已介绍了学习pic单片机c语言程序的一些最基本内容,并以具有一定功能的c语言程序,说明其基本单位是函数,即一个c程序是由一个或多个函数组成的,中只有一个主函数main()。主数main()在程序中的位置可任意放置,但程序运行时一定是从主函数开始,再由主函数调用其他函数,其他函数也是互相调用的,如图5所不。 读者可以从程序实例的注释中,体会c语言程序的算法(即语法规则)与汇编语言指令的相似点和不

前面已介绍了学习pic单片机c语言程序的一些最基本内容,并以具有一定功能的c语言程序,说明其基本单位是函数,即一个c程序是由一个或多个函数组成的,中只有一个主函数main()。主数main()在程序中的位置可任意放置,但程序运行时一定是从主函数开始,再由主函数调用其他函数,其他函数也是互相调用的,如图5所不。 读者可以从程序实例的注释中,体会c语言程序的算法(即语法规则)与汇编语言指令的相似点和不同点。笔者介绍的pic单片c语言程序,使用的时钟频率(指实验板上的晶振)都为4bihz o 8、有参数函数 在《pic单片机c语言程序—实例1》中(见《电子报》今年第27期第巧版)已介绍:从函数的形式观察,c语言函数可分为两种:无参数函数和有参数函数。这里再补充一点,无参数函数是指函数定义中没有形式参数,当然也没有形式参数的说明。在调用无参数函数时,主调函数没有数据传送给被调函数,其功能仅用来执行指定的一组操作,正如c程序实例中,主调的延时dalay( )"a数一样。无参数函数通常不返回函数值〔少数可以返回)。 有参数函数的定义如下: 函数类型说明符函数名(形式参数)[形式参数说明变最说明]语句 其中,函数类型说明符、形式参数、形式参数说明和变量说明等都是可选项,所以在使用时应按设计功能自主选择。如果不需选用形式参数和形式参数说明,则该函数自然简化成无参数函数。 从以上的定义看出:在调用有参数函数时,在主调函数与被调函数间,存在着参数的传递,即主调函数要将给定的实际参数传给被调函数的形式参数,供给被调函数使用(这一点将在程序实例5中得以说明),被调函数执行后的结果,也可以带回供主函数使用。 请注意:用户为实现特定功能而编写子函数时,需按两个原则。 1.子函数与主调函数之间的界面应清晰,编写子函数的功能应鲜明,函数之间的数据传递越少越好。 2.编写的子函数大小适中。若规模太大,即功能太复杂,常导致结构庞杂,影响阅读、分析和调试。一般情况下,即使要求的功能很多,函数的规模也应控制在几十行内,若不能达到要求,宁可增加新的子函数。九、pic单片机c语言程序实例5 这里用pic16f84a(其他型号的pic单片机同样等效)单片机,编写一c语言源程序,其硬件电路见图60电路功能如下:用rao位作程序启动信号,程序一旦启动,5111 b口的rbo位外接led点亮一秒钟,接着rb2位、rb4位、rb6位外接的led分别点亮10秒、1分钟、2分钟,循环工作。11137外接蜂鸣器,其用途是rb口的rbo,rb2,rb4,rb6位外接的led完成给定时间的一个循环,蜂鸣器发出声响(一分钟),以便验证。 这里编写多个延时的c语言程序,仅用了一个带形式参数的延时子函数(delaycunsignad long int m),就完成了上述电路的功能,可见c语言的优点。该c源程序命名为pic05.c,程序清单如下: #include//包含头文件pic.h #define portbit (add,bit) ((unsigned)(&add)*5+(bit)) static bit port-0 @portbit(portb,o);//b口位定义 static bit port_2 @portbit(portb,2); static bit port -4 @portbit(poiitb,4); static bit port-6 @portbit(portb,6); static bit port -7 @portbit(portb,7); #define portait (add,bit) ((unsigned)(&add)* 1+(bit)) static bit port-0 @portait (porta,0);//a口位定义 void delay(unsigned long int m)//定义有参数的延时子函数{// dalay(延时)函数开始。unsigned long int i; //无符号长整形变量i。for(i=o;i<=m;i++) //带m参数的for循环。 continue://转移下次循环。//延时dalay子函数结束。main //定义函数名为main()//主函数。 //主函数开始trisb=0x00; //初始化pic16f84a、b口//a口 intcon=0x00;portb=0x00;trisa=ox 1 f; while(rao)//判rao=1.空操作循环。 // rao =0执行以下语句。 while(1)//循环语句,这是无限循环。//循环语句开始。 rb0=1;//给rbo赋值1(高电平)。 delay (42000);// rbo外接led点亮1 t钟。 rbo=0;// rbo外接led灭。 rb2=1;//给rb2赋值1(高电平)。 delay(490000);// rb2外接led点亮10秒钟。 rb2=0;// rb2外接led灭。 rb4=1;//给rb4赋值1(高电平)。 delay(2940000);// rb4外接led点亮1分牛中。 rb4=0:// rb4外接led灭。 rb6=1;才给rb6赋值1(高电平)。 delay(5890000);// rb6外接led点亮2分钟。 rb6=0;// rb6外接led灭 rb7=1://给rb7

分享到:

上一篇:已经是第一篇

eb16ac850798d72e084e2c3ed33ff707.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值