历史上的今天
返回首页

历史上的今天

今天是:2024年09月14日(星期六)

正在发生

2021年09月14日 | STM8 点亮第一个发光二极管

2021-09-14 来源:eefocus

当 I/O 输出低电平时,LED 导通,LED被点亮;当 I/O 输出高点平时,LED 截止,LED 熄灭;当 I/O 周期性的交替输出高电平、低电平,LED就会闪烁


void InitLED(void)

{

PC_DDR|=0x08;//设置 PC3 为输出模式

PC_CR1|=0x08;//设置 PC3 为推挽输出

PC_CR2|=0x00;//设置 PC3 为 10MHz 快速输出

PE_DDR|=0x01;//设置 PE0 为输出模式

PE_CR1|=0x01;//设置 PE0 为推挽输出

PE_CR2|=0x00;//设置 PE0 为 10MHz 快速输出

PD_DDR|=0x08;//设置 PD3 为输出模式

PD_CR1|=0x08;//设置 PD3 为推挽输出

PD_CR2|=0x00;//设置 PD3 为 10MHz 快速输出

}


void main( void )

{

InitLED(); //初始化 LED 端口

while(1)

{

PC_ODR&=0xF7;//PC_ODR 第 3 位清零,输出低电平

PE_ODR&=0xFE; //PE_ODR 第 0 位清零,输出低电平

PD_ODR&=0xF7; //PD_ODR 第 3 位清零,输出低电平

Delay(5000); //延时

PC_ODR|=0x08;//PC_ODR 第 3 位置位,输出高电平

PE_ODR|=0x01; //PE_ODR 第 0 位置位,输出高电平

PD_ODR|=0x08; //PD_ODR 第 3 位置位,输出高电平

Delay(5000); //延时

}

}


在代码中出现的|=是在嵌入式 C 语言开发中比较常用的位操作方式,PC_DDR|=0x08;这句代码用来将PC_DDR寄存器的[3]位置位,而不影响寄存器的其他位。这句代码实质上是将 PC_DDR寄存器的值与0x08进行或操作,然后再赋值给 PC_DDR 寄存器。


在程序中出现的&=也是嵌入式 C 语言中比较常用的位操作方式,它用来将某位清零,而不影响寄存器的其他位。它实质上是将寄存器的值与等号后面的值进行与操作,然后再赋值给寄存器。


位操作

#include "iostm8s208mb.h"//主控芯片的头文件

/************************常用数据类型定义*************************/

#define u8  uint8_t

#define u16 uint16_t

#define u32 uint32_t 

typedef unsigned char    uint8_t;

typedef unsigned short   uint16_t;

typedef unsigned long    uint32_t;

/*************************端口/引脚定义区域***********************/

#define LED   PI_ODR_ODR0//连接至LED引脚PI0  

/**************************函数声明区域***************************/


/**************************主函数区域*****************************/

void main(void)

{

  PI_DDR_DDR0=1; //配置PI0端口为输出模式

  PI_CR1_C10=1;  //配置PI0端口为推挽输出模式

  PI_CR2_C20=0;  //配置PI0端口低斜率输出2MHz

  LED=0;         //让PI0引脚输出低电平

}

推荐阅读

史海拾趣

CYANLITE公司的发展小趣事

CYANLITE公司非常重视产品品质的管理和控制。他们建立了严格的质量检测体系,确保每一件产品都符合高标准的质量要求。此外,公司还注重客户反馈的收集和分析,不断改进产品和服务以满足客户的需求。这种对品质的执着追求使得CYANLITE公司赢得了客户的信任和忠诚。许多客户都表示愿意长期与CYANLITE公司合作,并推荐他们的产品给其他人。

General Instrument Corp公司的发展小趣事
通常为0至5V(单电源供电),支持比例量测量或可选的外部电压参考。
广州基安彼(GMB)公司的发展小趣事
如果使用外部参考电压,请确保参考电压稳定且准确。
Helicomm公司的发展小趣事
表示转换器输出与理想输出之间的最大偏差,如ML2288CCQ的最大线性误差为0.39%。
Gems Sensors & Controls公司的发展小趣事

Gems Sensors & Controls公司始终致力于技术创新和产品研发。数十年来,公司不断推出新型号的液位、流量和压力传感器、微型电磁阀及预装射流系统等产品,以满足客户日益多样化的需求。这些产品凭借其卓越的性能和稳定的质量,在行业内赢得了广泛的赞誉和认可,也推动了整个传感器行业的进步和发展。

台湾岱恩(DAIN)公司的发展小趣事

Gems Sensors & Controls公司始终致力于技术创新和产品研发。数十年来,公司不断推出新型号的液位、流量和压力传感器、微型电磁阀及预装射流系统等产品,以满足客户日益多样化的需求。这些产品凭借其卓越的性能和稳定的质量,在行业内赢得了广泛的赞誉和认可,也推动了整个传感器行业的进步和发展。

问答坊 | AI 解惑

(转)dsp学习 要点

年初到现在,接触DSP已经半年了,由于公司没有人指导,做了这么久都没出什么大的成果,也走了不少的弯路。以前做单片机用C编过一些程序,个人觉得还可以。现在看来也只是在吃以前在学校里面一些C语言皮毛的老本,加上一些网上说的所谓的技巧什么的结合以 ...…

查看全部问答>

用什么也别用害人的红外一体机!(转)

转自:http://www.1000bbs.com/dispbbs.asp?boardid=51&Id=261604 首先声明一下身份:辽宁锦州安防器材经销商、工程商。 我开始选择红外一体机,是因为甲方点着名要这玩意。 选了哪些厂家的哪些型号的红外机,恕我不一一列举了。总之,深圳的、 ...…

查看全部问答>

航模电机

用51怎样驱动航模直升机的电机,需要电流太大2-3A,一般驱动板太大了,而且电流达不到,请问有什么好办法,能否用MOS管或晶闸管,做开关管?先谢谢了…

查看全部问答>

准备开NO.3方案

准备开第三种方案,做一个便携式的温度湿度检测计 大家可以看看我的方案,我主要想做一个便携式的,袖珍型的,可以挂在钥匙圈上的,所以尽量的简单,C8051F系列中选一款单片机,特点就是简单方便性能强大,再加上湿度传感器芯片和LCD液晶即可 &nb ...…

查看全部问答>

如何确认PPP链接已经建立成功?请高手指点!谢谢!

各位大虾,我采用了sim300d gprs模块,北京的神州行wap gprs 卡,通过ppp协议来连接cmwap,现在通过了pap验证,可以拿到ISP server的ip address和分配的本地ip address。有几个问题:   1,如何自动获取dns。如果在ipcp请求中请求分配dn ...…

查看全部问答>

verilog中的task 可以在定义的模块之外调用么?

例如 taskA 在moduleA中定义, 而moduleB与moduleA有可能是嵌套关系,也可能是并列的被高层模块调用,那么moduleB能调用taskA么?…

查看全部问答>

救急。。。。救急。。。 谢谢大家。。。。急急。。。

我是新手  刚开始做 windows CE 的程序。再部署的时候报了个 这样的错误 。。请教各位 errmessage : 指定的文件不是有效的 CE 引导映像 。。。 内部签名丢失 或者 节长度或校验和 不正确。。。 请教各位  这是怎么回事& ...…

查看全部问答>

msp430f149栈溢出的问题

大家好,我在编译一个代码出现了栈溢出警告, 理论上讲我的数据段为: map文件 6 152 bytes of CODE  memory 1 268 bytes of DATA  memory (+ 56 absolute )   463 bytes of CONST memory   而栈的使用情况 ...…

查看全部问答>

MSP430PWM脉冲占空比调节LED光亮

/*实验板 MSP430 LaunchPad * 利用定时器编写PWM电路,驱动LED,并可以通过按键调节亮度 * MCLK=SMCLK=DCOCLK=32×ACLK=1.048576MHz, */ #include void main(void) { P1DIR |= BIT6+BIT0; P1DIR &=~BIT3;     &nb ...…

查看全部问答>