掌STM单片机触角—IO口应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
掌STM单片机触角—IO口应用

STM8单片机的触角——I/O口的应用 玩转 I/O口必备的“五器” STM8S208RB单片机的I/O口分布情况如图41 图41图41表41表41表41中看出,当Px_DDRn为“1”,Pxn… /*设置输出高电平*/ PB_ODR = (1 3) | (1 2) | (1 1) | (1 0); /*设置端口方向*/ PB_DDR = (1 3) | (1 2) | (1 1) | (1 0); /*设置推挽输出和定义上拉电阻*/ PB_CR1 = 0xff; /*设置端口最大速度和关闭中断*/ PB_CR2 = (1 3) | (1 2) | (1 1) | (1 0); /*读取端口输入数据*/ i = PB_IDR 0xf0; … 悬浮与上拉 悬浮输入与上拉输入是两种输入方式,不同之处在于上拉输入时,引脚内部有个上拉电阻。当引脚悬空时,上拉输入的引脚电平是确定的,即高电平;而悬浮输入则不同,它的电平时不确定的,即使外部的一个很小的信号都会使其发生改变。 上拉输入最典型的应用就是外部按键,当按键未按下时,我们要保证它是高电平,当按键按下时才被拉低;而悬浮输入的典型应用就是模数转换,外部的任何一个小信号都要经过A/D采样转换为数字信号。 开漏与推挽 开漏输出 说开漏输出之前,我们先来看看什么是集电极开路输出。 图42图42图42图43 图43图43中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出低电平。而当开关断开时,则输出端悬空,即引脚为高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。 图44图44中的10K电阻即是上拉电阻。当开关闭合,输出管脚直接接地,输出为低电平,当开关断开,电流经过10K电阻流入负载,相当于管脚输出高电平。利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经上拉电阻到负载,IC内部仅需很小的栅极驱动电流。 因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。) 开漏结构提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。 可以将多个开漏输出的引脚连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。图45 图45图46 图46LED孤独的闪着LED的一些基础知识,图47是普通发光二极管的外形图及电路符号,长脚为阳极。我们其实也可以看二极管里面大片的一侧是阴极,但是也有些黄色LED是相反的。 图47 图48图48是闪烁LED的电路原理图,PB0口通过一个330电阻连接发光二极管的阴极,即低电平LED亮,高电平灭。#include stm8s208r.h /***************函数声明***************/ void delay(unsigned int time); /***************主函数*****************/ int main(void) { PB_DDR |= 0x01; //选择输出模式 PB_CR1 |= 0x01; //推挽输出模式 PB_CR2 |= 0x00; //低速输出模式 while (1) { PB_ODR = 0xfe; // 小灯亮 delay(50000); PB_ODR |= 0x01; //小灯灭 delay(50000); } } /************延时子程序************************/ void delay(unsigned int time) { while(time--); } 问: 老大,这个程序不算难,原理我都懂.就是先把IO口的工作方式等都设置好,然后给小灯一个低电平,小灯就亮,然后延时一会,再给小灯一个高电平,小灯就灭,再延时.如此反复,就会有闪烁的效果.但是问题是为什么给管脚赋值的时候要用”与等于”和”或等于”呢?我就是理解不了这个. : 放心,作为老大.我一定不

文档评论(0)

phltaotao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档