用PIC写高效的位移操作

发布者:创意小巨人最新更新时间:2015-01-20 来源: laogu关键字:PIC  位移操作 手机看文章 扫描二维码
随时随地手机看文章

用PIC写高效的位移操作  
  
  在许多模拟串行通信中需要用位移操作。

以1-W总线的读字节为例,原厂的代码是:

unsigned char read_byte(void)
{
 unsigned char i;
 unsigned char value = 0;
 for (i = 0; i < 8; i++)
 {
  if(read_bit()) value = 0 x 01<   // reads byte in, one byte at a time and then
  // shifts it left
  delay(10); // wait for rest of timeslot
 }
 return(value);
}

虽然可以用,但编译后执行效率并不高效,这也是很多朋友认为C一定不能和汇编相比的认识提供了说法。

其实完全可以深入了解C和汇编之间的关系,写出非常高效的C代码,既有C的便利,又有汇编的效率。

首先对 for (i = 0; i < 8; i++)做手术,改成递减的形式:

for(i=8;i!=0;i--),因为CPU判断一个数是否是0(只需要一个指令),比判断一个数是多大来的快(需要3个指令)。

再对value = 0 x 01<

value = 0 x 01<

仔细研究C语言的位移操作,可以发现C总是先把标志位清0,然后再把此位移入字节中,也就是说,当前移动进字节的位一定是0。

那么,既然已经是0了,我们就只剩下一个步骤:判断总线状态是否是高来决定是否改写此位,而不需要判断总线是低的情况。

于是改写如下代码:

for(i=8;i!=0;i--){
  value>>=1;                       //先右移一位,value最高位一定是0
  if(read_bit())   value =0x80;                       //判断总线状态,如果是高,就把value的最高位置1
 }

这样一来,整个代码变得极其高效,编译后根本就是汇编级的代码。

 

再举一个例子:

在采集信号方面,经常是连续采集N次,最后求其平均值。

一般的,无论是用汇编或C,在采集次数上都推荐用8,16,32、64、128、256等次数,因为这些数都比较特殊,对于MCU计算有很大好处。

我们以128次采样为例:注:sampling()为外部采样函数。

unsigned int total;

unsigned char i,val;

for(i=0;i<128;i++){

total+=sampling();

}

val=total/128;

以上代码是很多场合都可以看见的,但是效率并不怎么样,狂浪费资源。

结合C和汇编的关系,再加上一些技巧,就可以写出天壤之别的汇编级的C代码出来

首先分析128这个数是0B10000000,发现其第7位是1,其他低位全是0,那么就可以判断第7位的状态来判断是否到了128次采样次数。

在分析除以128的运算,上面的代码用了除法运算,浪费了N多资源,完全可以用右移的方法来代替之,

val=total/128等同于val=(unsigned char)(total>>7);

再观察下去:total>>7还可以变通成(total<<1)>>8,先左移动一位,再右移动8位,不就成了右移7位了么?

可知道位移1,4,8的操作只需要一个指令哦。

有上面的概验了,就可以写出如下的代码:

unsigned int total;

unsigned char i=0

unsigned char val;

while(!(i&0x80)){                 //判断i第7位,只需要一个指令。

total+=sampling();

i++;

}

val=(unsigned char)((total<<1)>>8);                    //几个指令就代替了几十个指令的除法运算

 

哈哈,发现什么?代码量竟然可以减少一大半,运算速度可以提高几倍。

再回头,就可以理解为什么采样次数要用推荐的一些特殊值了。

关键字:PIC  位移操作 引用地址:用PIC写高效的位移操作

上一篇:基于单片机的高精度温湿度监控系统
下一篇:初浅研究PIC之延时函数和循环体优化

推荐阅读最新更新时间:2024-03-16 13:51

PIC单片机C语言延时程序和循环子程序实现方法
很多朋友说C中不能精确控制延时时间,不能象汇编那样直观。 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来。 一般的我们都用 for(x=100;--x;){;}此句等同与x=100;while(--x){;}; 或for(x=0;x 100;x++){;} 来写一个延时函数。 在这里要特别注意:X=100,并不表示只运行100个指令时间就跳出循环。 可以看看编译后的汇编: x=100;while(--x){;} 汇编后: movlw 100 bcf 3,5 bcf 3,6 movwf_delay l2 decfsz _delay goto l2 return
[单片机]
基于PIC单片机的倾角传感器的设计
0 前 言 设计中的倾角传感器是新型变质面积电容式倾角传感器,该倾角传感器技术是为数不多的、能够兼有结构简单、可靠性高、有通用传感器集成电路等优点的倾角传感器技术之一。在测绘仪器仪表、建筑机械、天线定位、机器人技术、坦克和舰船火炮平台控制、飞机姿态、汽车电子控制、石油勘探、海上平台监控等方面有广泛应用。 图1 倾角传感器原理图 1 倾角传感器的工作原理 倾角传感器的电路原理如图1所示。 检测电路由比较器A1、A2、双稳态触发器及电容充放电回路组成。C1、C2为可变介质面积电容式倾角传感器,其容量大小与倾角变化成比例。双稳态触发器的两个输出端A、B作为差动脉冲宽度调制电路的输出。设电源接通时,触发器的A端为
[单片机]
基于<font color='red'>PIC</font>单片机的倾角传感器的设计
基于PIC16F877单片机的超声波测距系统设计
  引言   在自主行走机器人系统中,机器人要实现在未知和不确定环境下行走,必须实时采集环境信息,以实现避障和导航,这必须依靠能实现感知环境信息的传感器系统来实现。视觉、红外、激光、超声波等传感器都在行走机器人中得到广泛应用。由于超声波测距方法设备简单、价格便宜、体积小、设计简单、易于做到实时控制,并且在测量距离、测量精度等方面能达到工业实用的要求,因此得到了广泛的应用。本文所介绍的机器人采用三方超声波测距系统,该系统可为机器人识别其运动的前方、左方和右方环境而提供关于运动距离的信息。   1 超声波测距原理   超声波发生器内部由两个压电片和一个共振板组成。当它的两极外加脉冲信号,且其频率等于压电晶片的固有振荡频率时,压电
[单片机]
基于<font color='red'>PIC</font>16F877单片机的超声波测距系统设计
Microchip扩展中档8位PIC®单片机系列
全球领先的整合单片机、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)宣布,推出其增强型中档内核8位PIC®单片机(MCU)系列的最新产品——外设丰富、低引脚数的PIC12F(LF)1840和PIC16F(LF)1847。全新器件分别配备7 KB和14 KB片上闪存,高达1 K的RAM,是8和18引脚封装产品中存储容量最高的PIC® MCU。“LF”型号采用超低功耗(XLP)技术,工作电流小于40 µA/MHz,休眠电流低至20 nA。凭借丰富的外设和功能——包括mTouch™容性触摸传感和多种通信外设,这些通用MCU非常适合于家电(如咖啡壶、搅拌机和洗碗机)、消费类
[单片机]
基于PIC18F8680单片机的墨斗操作台系统的设计
  引言   随着科技的发展,印刷行业开始从传统的模拟生产转向数字化生产,墨斗作为胶印机的核心着色装置,其控制精度对胶印机的生产质量和自动化水平起着非常重要的作用。传统的墨斗采用手动调整的方式,使得胶印机的生产质量较差,生产准备时间长,资源浪费严重。一种由墨斗操作台控制系统、电机控制系统和上位机系统组成的墨斗控制系统在国外印刷行业得到了广泛应用,这种新的墨斗控制系统能大大提高墨斗的控制精度,并缩短生产准备时间、降低生产成本。本文所描述的墨斗操作台控制系统就是在跟踪国际先进技术的基础上,设计符合国内行情的产品,对提高国产胶印机的印刷质量和自动化水平有着重要意义。   1 墨斗操作台控制系统介绍   一台胶印机的墨斗系统通常由
[单片机]
基于<font color='red'>PIC</font>18F8680单片机的墨斗<font color='red'>操作</font>台系统的设计
基于PIC单片机USB接口的数据采集系统设计
  我们把所设计的数据采集系统功能分解为三大部分:数据采集部分、数据通信部分、数据处理部分。   数据采集部分应包含:A/D转换器,时序、模式控制,数据缓冲功能。它应能接受来自主机的命令,按不同模式控制A/D转换器采集数据,暂存于数据缓冲区,再根据主机命令发给主机。这部分功能由一个单片机及接口来实现是最优方式。   数据通信部分应包含:简单、高效、通用的数据通信模式和软硬件支持。它应能在数据采集和数据处理两部分之间实现目前最好的连接和沟通。因为USB作为一种外部总线标准,用于规范电脑与外部设备的连接和通讯,并具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,所以这部分功能采用USB接口连接最好。   数据处理部分应
[单片机]
基于<font color='red'>PIC</font>单片机USB接口的数据采集系统设计
如何用PIC做红外线遥控接收?(二)
红外接收目前用的比较多的有三种方法. 1,查询法,既软件不停地查询是否为低(遥控信号)然后通过精确延时读头码.和 数据0或1码. 2,读到有信号输入时开打开定时计数器,然后通过读定时器的中断次数,来判定头码和0,1的. 3 RB0或RB4-RB7加定时器(或软件延时)利用输入中断的好处是可做实时控制. 如下: ;***发射为6221,把接收到的码值送到ICD的PORTC口显示****** ;**************** *************** org 0000h nop goto start org 0004h goto serv ;*************
[单片机]
Microchip高性能USB、LCD及通用8位PIC系列再添12位ADC
12款新型PIC18单片机迎合需高分辨率模数转换功能的先进传感器设计,为外部模数转换器节省成本并化繁为简 全球领先的单片机和模拟半导体供应商——Microchip Technology Inc.(美国微芯科技公司)宣布推出12款全新的高性能、8位闪存单片机,其中包括该公司首款集成片上高速12位模数转换器外设的USB及LCD单片机系列。三个新产品系列共备有16种集成高分辨率片上模数转换器的高性能PIC18 单片机,扩展了Microchip通用PIC18F4523系列产品线并极大地丰富了客户的选择。 在这三个新产品系列中,PIC18F8723大容量存储器通用系列提供丰富的外设集以及高达10 MIPS的卓越性能;PIC18F4553
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved