历史上的今天
今天是:2024年09月26日(星期四)
2019年09月26日 | 实现位变量反转功能
2019-09-26 来源:eefocus
////////////////////////////////////////////////////////
在51单片机中有个特殊的变量 sbit (位变量)
用它做一个变量反转是很简单的, nuber=!nuber就实现了。
为什么需要这个功能呢?
下面看一个程序
假设 LED是一个灯,LED=1为亮,LED=0为灭。
那么我想要他200毫秒闪烁,
while(1)
{
LED=!LED;
delay_ms(200);
}
这是51单片机的写法。
在c语言中这样是不可取的,因为我们不能去映射某一位,(其实是我不会把寄存器映射某一位出来操作)
所以通常我用的都是函数LED_ON(),LED_OFF()
这样的话程序就该这样
while(1)
{
LED_ON()
delay_ms(100);
LED_OFF();
delay_ms(100);
}
那么我的while(1)中还有其它很多事情,我必须每10ms跑一次,那么51实现200ms的闪烁应该这样
while(1)
{
n++;
if(n==20){
n=0;
LED=!LED;
}
delay_ms(10);
}
也很简单,但是放在没有位变量的stm32呢?程序是不是该想一想了?
我下面提供一下小方法
(1)
flag=1; //需要应该标志变量
while(1)
{
n++;
if(n==20){
n=0;
if(flag==1)
LED_ON();
else LED_OFF();
flag*=-1 //这里每次乘以-1,其实就是从1变-1,又到1
}
delay_ms(10);
}
(2)
flag=1; //需要应该标志变量
while(1)
{
n++;
if(n==20){
n=0;
if((flag&0x1)==1)
LED_ON();
else LED_OFF();
flag=!flag; //这个也一样
}
delay_ms(10);
}
当然还有很多实现的方式,就不一样列举了。
上一篇:51单片机学习笔记(二)
下一篇:51单片机串口波特率计算
史海拾趣
|
s3c2410大多移植2.4内核或是uclinux, 2440以后基本都是2.6内核,请问内核版本选择跟芯片有关吗? 网上看到有人在2410板子上移植成功2.6内核, 请问这样的配合合理吗? 会不会有在奔3机子上装winXP这种感觉呢?… 查看全部问答> |
|
四、硅谷模式不适全中国环境 很多从硅谷回国的海归在创业失败后,都会说,在中国运营公司比在硅谷要难。笔者在2005年和2006年认识了很多的回国创业的海归人士,当年都是雄心勃勃,结果,几年下来,现在大都已经宣布公司倒闭,有的回到美国去了,有 ...… 查看全部问答> |
|
ADC10_B只有一个ADC10MEM0,也就是每次只能转化一个通道数据,如果我想同时转化多个通道的数据该怎么办呢? 我原本的想法有两个: 第一,采用Single-channel, single-conversion,每次转换好一个通道后,写指令改通道,再转换, ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:12 编辑 TI的收发集成方案请参考下面连接.AFE7225,TRF3720,TRF3711 ti./solution/femto_base_station … 查看全部问答> |
|
想做一个对共阴数码管和独立按键的操控,没想到输出的共阴数码管的信号最后是乱码……也不动,按键按了也不变,这个程序也没做完,我看把基本的加法实现了减法应该也能实现(从0+到99),但是没想到遇到了这样的问题,请大神帮忙看看代码有什么问题 ...… 查看全部问答> |
|
哪个跑过TI DEMO2540 。。就是那个最简单的测试程序 我现在USB DONGLE 端口 写00X0028 和1 或者 2 的时候蜂蜜器叫的方式不一样,,这个 00X0028 和1 或者 2 为什么是这个数字… 查看全部问答> |




