㈠ 单片机实现按键功能函数
#include<reg51.h>
#defineucharunsignedchar
uchardat;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
main()
{
bitflag=0;
while(1)
{
if(key1==0)
{
while(key1==0);
flag=~flag;
}
if(key2==0)
{
while(key2==0);
if(flag)dat++;
}
if(key3==0)
{
while(key3==0);
if(flag(dat--);
}
P0=dat;
}
}
㈡ 单片机 C语言 函数定义
#define uint16 unsigned int -> typedef unsigned int uint16;
#define uchar8 unsigned char -> typedef unsigned char uchar8;
㈢ 单片机函数
void sw()
{
while(ax>5);
}
void main()
{
if(ax>0){
sw();
}
ax--;
}
-
main在C语言里为主函数,如果我记没错的话,只有中断程序才能退出主函数,
而中断程序结束后还是会自动回到main主程序里!
有点不明白你说的问题!能不能说明白点,是退出还是推出啊?
判断程序是哪个?循环是什么?假设也有个例子啊--
-
对于你问题的理解,可以吧sw()这个程序设置成中断程序-
然后再sw()中断程序里判断是否中断完成---
-
你还是把问题说清楚吧!不然我们回答得都牛头了!
㈣ 单片机中断函数和主函数
单片机主函数可以有序的执行一系列包括调用子函数在内的所有程序,但中断的发生往往是随机的,这就会暂时打断主函数的顺序,先去执行中断函数,之后返回主函数从被打断的位置继续执行程序。因此,中断一旦开放,中断函数与主函数之间便无顺序可言。
㈤ 单片机中什么是函数
大部分都是函数来实现功能的,有库函数和自定义函数,不过在单片机中,大部分是使用的自定义函数。
比如:void
delay()函数,void
main()主函数等,这些都是函数的。
㈥ 单片机 左移函数是怎么用的
左循环本征函数:
函数原型:unsigned char _crol_(unsigned char a,unsigned char n);
单片机左移函数用法:
例如,P2=0xff; P2=_crol_(P2,1);//语法是对的,但这是没意义的,因为执行程序后P2还是原值0xff
P2=0xfe; P2=_crol_(P2,1);//执行程序后P2=0xfd
(6)单片机函数扩展阅读:
单片机相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。单片机也被称为单片微控器,属于一种集成式电路芯片。
在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
㈦ 单片机中函数的参数分为什么和什么
单片机中函数的参数分为形参和实参。
C51和标准C语言没啥区别,C51主要是引入了一些新的关键词,比如bit sbit类型关键字,还有 interrupt中断函数标志关键字。这些都是C51加的,其实很多其他单片机基本是使用标准C语言的,其他的东西都可以用预编译宏或者汇编和C混合的方式解决。C51也仅仅是51系列单片机用而已,除了51系列就没用了。。。
㈧ 单片机中bit函数如何使用 在什么情况下使用 举个例子 如何使用 谢谢
1、可以作为参数传递:比如
uchar test(bit flag)
{
if(flag)
{//传递来的是1则返回3,否则返回2
return 3;
}
else
{
return 2;
}
}
main()
{
uchar x;
bit flag = 1;
x = test(falg);
}
2、可以作为函数的返回值
bit test1(uchar a,uchar b)
{
if(a>b)
{//如果a>b则返回真,否则返回假
return 1;
}
else
{
return 0;
}
}
main()
{
bit flag;
flag = test1(2,3);
}
C51中没有位变量指针一说,比如 bit *flag1;的定义就是非法的。除此之外使用中和其它类型没什么区别。
应用最多的情况:执行一个函数,只是想知道操作是否成功,这时就可以用bit变量作为返回值,这样占用资源少,判断起来也快。
当然,如果返回值是char型,判断速度上和bit型差不多,但如果是int型,由于是双字节,就要多花些时间了。
追问:
你做过595的程序吗 那里用一位数据线输出8位数据 就用到bit
bit a;
bit testbit(unsigned char a,char n)
{
if(((0x01<<n)&a)==0)
{
return 0;
}else
return 1;
}
㈨ 51单片机 c语言里 _nop_ 函数怎么用 具体一点 求高手指教
一个nop为1个指令周期,主要用于精确定时或者延时
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲!
3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;
4)清除由上一个算术逻辑指令设置的flag位;
5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;
6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/erazy0/archive/2010/12/12/6071281.aspx
㈩ 怎么实现单片机多个函数功能同时执行
设计主要思想:
单片机不可能同时执行多个函数,但是可以先后执行程序给他安排的每一件事,假如每个事件间隔时间非常短,ms、us级别,或者间隔时间更短,那么连续一段时间内执行的事件,看起来就是同时执行的。每一个事件可以看做一个或多个函数,也就意味着只要程序安排的合理,很多函数看起来是同时运行的;
模型举例:假如要做几件事,烧开水,洗衣服,打游戏;
A:烧开水,等好了之后,洗衣服,洗完之后,打游戏;
B:烧开水,洗衣服时监听水壶的声音,两件事执行完,打游戏;
C:选择一个烧水开了会停止工作的电水壶,不要等了,用洗衣机洗衣服,打游戏;
耗时:A最长,其次B,C最短。
不同的工具占用人时间精力也是不同的,同理单片机周围外设选择不同,也会影响CPU占用时间;
实例:
要求:假如单片机要“同时”执行,数码管显示、蜂鸣器、流水灯移动;
具体实施A:设置一个定时器,假如每隔1ms进入中断,设置几个全局变量x、y、z,定时器中断里自加,在程序主循环里查询全局变量的数值,当x大于500后,清零x,让流水灯移位,当y大于,1000时清零y,数码管加1,当z大于2时,清零z,反转控制蜂鸣器的IO电平,以此类推其他事情也是如此。
具体实施B:设置单片机本身PWM驱动蜂鸣器,设置一个定时器,假如每隔1ms进入中断,设置几个全局变量x、y、z,定时器中断里自加,在程序主循环里查询全局变量的数值,当x大于500后,清零x,让流水灯移位,当y大于,1000时清零y,数码管加1,以此类推其他事情也是如此。
使用内部PWM资源可以更省CPU时间!
总结:
如果外设资源不足只能算法来补充;
以上方法适合资源较少的单片机,若是单片机资源够多(RAM>4K,Flas>8K),很多实时操作系统可以选择:ucos,FreeRTOS等,这些实时操作系统可以方便管理事件的切换。