DHT11是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。
上传时间: 2013-10-20
上传用户:18602424091
本资料是面向CAN 总线初学者的CAN 入门书。对CAN 是什么、CAN 的特征、标准规格下的位置分布等、CAN 的概要及CAN 的协议进行了说明。2. 使用注意事项本资料对博世(BOSCH)公司所提出的CAN 概要及协议进行了归纳,可作为实际应用中的参考资料。对于具有CAN 功能的产品不承担任何责任。 1. 概要....................................................................... 12. 使用注意事项.................................................................... 13. CAN 是什么?................................................. 23.1 CAN 的应用示例......................................................... 33.2 总线拓扑图................................................ 44. CAN 的特点................................................................... 55. 错误................................................................................... 65.1 错误状态的种类...................................................... 65.2 错误计数值.............................................................................. 86. CAN 协议的基本概念........................................... 97. CAN 协议及标准规格.................................. 127.1 ISO 标准化的CAN 协议................................................. 127.2 ISO11898 和ISO11519-2 的不同点...................................... 137.3 CAN 和标准规格....................................................................... 178. CAN 协议.................................................................................. 188.1 帧的种类.................................................................. 188.2 数据帧....................................................... 218.3 遥控帧.......................................................................................... 288.4 错误帧........................................................................ 308.5 过载帧......................................................................... 318.6 帧间隔................................................................ 328.7 优先级的决定..................................................... 338.8 位填充................................................................................. 368.9 错误的种类.............................................................. 378.10 错误帧的输出.................................................. 398.11 位时序........................................................................ 408.12 取得同步的方法................................................. 428.13 硬件同步.................................................................... 438.14 再同步.................................................................... 448.15 调整同步的规则....................................................... 45
上传时间: 2013-10-14
上传用户:清山绿水
摘要:TsK5l是ALTIuM公司一款基于AsM5l指令集井且兼容805l的8位微处理器内核,TsK51提供了硬件中断、串行通讯及定时器等辅助端口,并且开发了SFR特殊功能寄存器的用户自定义功能。
上传时间: 2014-06-02
上传用户:leawon947
了解全球首个采用下一代ARM Cortex M0+ 内核的MCU产品“Kinetis L系列”。这些新器件可兼容基于ARM Cortex-M4的Kinetis K系列产品,能够给传统的8位及16位入门级应用提供出众的低功耗性能、易用性和重要价值。本会议将简要介绍全新ARM Cortex-M0+ 内核及Kinetis L系列产品特性、配套支持和产品计划。
上传时间: 2014-12-30
上传用户:离殇
概要2 个对称的600MHz 高性能Blackfin 内核328K Bytes 片内存储器每个 Blackfin 内核包括:2 个16 位MAC,2 个40 位ALU,4 个8 位视频ALU,以及1 个40 位移位器RISC 式寄存器和指令模型,编程简单,编译环境友好先进的调试、跟踪和性能监视内核电压 0.8V-1.2V,片内调压器可调兼容 3.3V 及2.5V I/O256 引脚Mini-BGA 和297 引脚PBGA 两种封装外设两个并行输入/输出外围接口单元,支持ITU-R 656 视频数据格式,可与ADI 的模拟前端ADC 无缝连接2 个双通道全双工同步串行接口,支持8 个立体声I2S 通道2 个16 通道DMA 控制器和1 个内部存储器DMA 控制器SPI 兼容端口12 个通用32-bit 定时/计数器,支持PWMSPI 兼容端口支持 IrDA 的UART2 个“看门狗”定时器48 个可编程标志引脚1x-63x 倍频的片内PLL
上传时间: 2013-11-06
上传用户:YUANQINHUI
第一部分:编程器简介 该系列高性能三星单片机编程器是本人在长期的三星单片机系统开发实践中结合生产应用自行研制而成,已被本站应用于产品烧写达百万片之多,尚无发现任何副作用,请放心使用. StarPlusV2.0可全功能烧写所有三星4位/8位系列MCU和ROM不大于512KBYTES的CalmRisc/ARM系列MCU,包括OTP(可编程一次)和MTP(FLASH可多次编程)芯片,支持最大ROM空间达512Kbytes.
上传时间: 2014-12-30
上传用户:wang5829
第1 章 体系结构 ARM经典300问与答第1 问:Q:请问在初始化CPU 堆栈的时候一开始在执行mov r0, LR 这句指令时处理器是什么模式A:复位后的模式,即管理模式.第2 问:Q:请教:MOV 中的8 位图立即数,是怎么一回事 0xF0000001 是怎么来的A:是循环右移,就是一个0—255 之间的数左移或右移偶数位的来的,也就是这个数除以4一直除, 直到在0-255 的范围内它是整数就说明是可以的!A:8 位数(0-255)循环左移或循环右移偶数位得到的,F0000001 既是0x1F 循环右移4 位,符合规范,所以是正确的.这样做是因为指令长度的限制,不可能把32 位立即数放在32 位的指令中.移位偶数也是这个原因.可以看一看ARM 体系结构(ADS 自带的英文文档)的相关部分.第3 问:Q:请教:《ARM 微控制器基础与实战》2.2.1 节关于第2 个操作数的描述中有这么一段:#inmed_8r 常数表达式.该常数必须对应8 位位图,即常熟是由一个8 位的常数循环移位偶数位得到.合法常量:0x3FC,0,0xF0000000,200,0xF0000001.非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.常数表达式应用举例:......LDR R0,[R1],#-4 ;读取 R1 地址上的存储器单元内容,且 R1 = R1-4针对这一段,我的疑问:1. 即常数是由一个8 位的常数循环移位偶数位得到,这句话如何理解2. 该常数必须对应8 位位图,既然是8 位位图,那么取值为0-255,怎么0x3FC 这种超出255 的数是合法常量呢3. 所举例子中,合法常量和非法常量是怎么区分的 如0x3FC 合法,而0x1FE 却非法0xF0000000,0xF0000001 都合法,而0xF0000010 又变成了非法4. 对于汇编语句 LDR R0,[R1],#-4,是先将R1 的值减4 结果存入R1,然后读取R1 所指单元的 值到R0,还是先读取R1 到R0,然后再将R1 减4 结果存入R1A:提示,任何常数都可用底数*2 的n 次幂 来表示.1. ARM 结构中,只有8bits 用来表示底数,因此底数必须是8 位位图.2. 8 位位图循环之后得到常数,并非只能是8 位.3. 0xF0000010 底数是9 位,不能表示.4. LDR R0, [R1], #-4 是后索引,即先读,再减.可以看一看ARM 体系结构对相关寻址方式的说明.
上传时间: 2013-11-22
上传用户:1109003457
电子发烧友讯: 飞思卡尔是全球嵌入式处理解决方案、高级汽车电子、消费电子、工业控制和网络市场的领导者。从微处理器和微控制器到传感器、模拟集成电路(IC)和连接,我们的技术为创新奠定基础,构建更加环保、安全、健康和互连的世界 MC9S12XHY系列是飞思卡尔公司的经过优化的,汽车16位微控制器产品系列,具有低成本,高性能的特点。该系列是联接低端16位微控制器(如:MC9S12HY系列),和高性能32位解决方案的桥梁。MC9S12XHY系列定位于低端汽车仪器群集应用,它包括支持CAN和LIN/J2602通信,并传送典型的群集请求,如步进失速检测(SSD)和LCD驱动器的步进电机控制。 MC9S12XHY系列具有16位微控制器的所有优点和效率,同时又保持了飞思卡尔公司现有的8位和16位MCU系列的优势,即低成本、低功耗、EMC和代码尺寸效率等优点。与MC9S12HY系列相同,MC9S12XHY系列可以运行16位宽的访问,而不会出现外设和存储器的等待状态。MC9S12XHY系列为100引脚LQFP和112引脚LQFP封装,旨在最大限度地与100LQFP,MC9S12HY系列兼容。除了每个模块具有I/O端口外,还可提供更多的,具有中断功能的I/O端口,具有从停止或等待模式唤醒功能。 图1 MC9S12XHY系列方框图截图
上传时间: 2014-12-31
上传用户:66666
10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1、限副滤波 /* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A ) return value; return new_value; }
上传时间: 2013-11-11
上传用户:gxf2016
注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言. 2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\ 所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。
上传时间: 2013-10-08
上传用户:dingdingcandy