历史上的今天
返回首页

历史上的今天

今天是:2025年02月18日(星期二)

正在发生

2020年02月18日 | msp4306989单片机的寄存器 第五章

2020-02-18 来源:eefocus

1.5 单片机C语言入门


1.5.1 单片机的寄存器


在前面的示例程序中我们发现对单片机进行编程实际上就是改写寄存器的值。单片机各个外设的功能其实是预先固定的,而寄存器就像是这些功能的控制接口,通过改变寄存器的值就可以在这些功能中进行选择。还有一些寄存器直接对应引脚的状态,例如GPIO的输入/输出寄存器。像以下语句:


P1OUT = 0x01;


这句话其实就是赋值给P1OUT这个寄存器,这个寄存器是GPIO的输出寄存器,赋值之后对应引脚的输出状态就会发生改变。


P1OUT寄存器共有8位,分别是从P1.0-P1.7。要给这个寄存器赋值,其实就是写入一个8位的二进制数值,例如0000 0001。在C语言中,为了尽量精简代码,一般把这个8位二进制数换算成2位16进制数,前面加上“0x”表示这是一个16进制的值。这样二进制的0000 0001也可以表示为0x01,那么上面一句P1OUT = 0x01实际上是把P1.0赋值为1,P1.1-P1.7赋值为0。

每次上电之后,寄存器都会回到它们的初始值。


1.5.2 MSP430的位操作


上一节的例子中我们发现MSP430单片机的寄存器赋值都是直接给整个寄存器赋值,如


P1OUT = 0x01;


那如果只想给寄存器其中的一位赋值,能否直接对某位进行操作呢?答案是不可以。因为MSP430属于RISC精简指令集单片机,它有一个特点就是不能进行位操作。那么如果只想操作某一位,而不关心其它位,例如我只想把P1.0赋值为1,但我不知道也不想改变P1.1-P1.7的状态,该怎么办呢?下面就来介绍MSP430中进行位操作的办法。


1)写位操作


在对某字节使用“=”进行写操作时,所有位的值都将被改变。如果先将原字节读出来,再使用按位操作符对原字节进行赋值,则可“等效”实现对单个位的写操作。下面举例来说明MSP430中最重要的3个写位操作语句。


例: 将P1.0置1,P1.1置0,P1.2取反,不影响其他位。 

image.png?imageView2/2/w/550

在CCS新建工程时,都会包含“MSP430.h”,这个头文件其实相当于一个目录,会根据当前工程所选的芯片型号链接到对应的头文件,例如MSP430FR6989芯片就会链接到“MSP430FR6989.h”。这些头文件都在“C:ticcsv5ccs_basemsp430include”目录下,其中包含了许多宏定义,利用这个宏定义可以帮助我们用更直观的方式来写寄存器,不用每次都把要写的值换算成16进制了。


例如MSP430FR6989.h中有如下宏定义:

image.png?imageView2/2/w/550

有了BIT0-BITF的宏定义,上面例子中的语句就可以改写为

image.png?imageView2/2/w/550

另外,也可以用加号对多位同时操作。例如要将P1.0、P1.1、P1.2均置1,不影响其他位,可以写

image.png?imageView2/2/w/550

请注意,采用按位操作并不意味着MSP430具备了位操作能力,按位操作实际上对整个字节的8位都进行了操作,只不过对其中7位的值没影响而已。


2)读位操作


读位操作主要是通过if语句判断的方式得到的。同样,这种变通的方法不意味着MSP430单片机可以对位进行读取,这种方法同样需要对1个字节的8位都操作。


例: 将P2.0的输出设置成P1.1输入相反,读取P1.0输入状态到变量temp

image.png?imageView2/2/w/550

1.5.3 MSP430寄存器的宏定义配置方法


上一节提到了MSP430FR6989.h这个头文件,实际上里面除了BIT0-BITF的宏定义之外还有很多的宏定义。这是因为MSP430的片上外设极为丰富,因此也有大量的寄存器来配置功能。MSP430上有数百个寄存器和近千个控制位,如果靠记忆这些寄存器的每一位的定义是不现实的,因此头文件的宏定义能帮助我们以更直观的方式来写程序。


例如下图中给出了BCSCTL2寄存器中DIVMx控制位的位置,下方代码中给出了MSP430头文件中两种DIVMx的宏定义,即DIVM0/1和DIVM_0/1/2/3。图中rw-0表示该位可读可写,复位后初始值为0。


帮助我们以更直观的方式来写程序。


例如下图中给出了BCSCTL2寄存器中DIVMx控制位的位置,下方代码中给出了MSP430头文件中两种DIVMx的宏定义,即DIVM0/1和DIVM_0/1/2/3。图中rw-0表示该位可读可写,复位后初始值为0。

image.png?imageView2/2/w/550

这个8位寄存器中的DIVMx是用来控制MCLK的分频系数的,分频系数依次为1/2/4/8。例如我们要设置MCLK的时钟8分频,下列3条代码均可实现该功能:

image.png?imageView2/2/w/550

推荐阅读

史海拾趣

BEI Sensors公司的发展小趣事

Beckhoff Automation GmbH公司成立于1953年,总部设立在德国Verl市。公司自创立之初,便致力于工业自动化产品的研发与生产。在创始人的领导下,公司逐步建立起一套完整的工业自动化产品体系,包括工业PC、现场总线模块、驱动产品等。凭借卓越的产品质量和创新的技术理念,Beckhoff在行业内逐渐崭露头角,赢得了客户的广泛认可。

CYAN公司的发展小趣事

随着公司的发展,CYAN开始寻求与大型企业的合作。2009年,CYAN与沃尔沃汽车达成战略合作,为其提供了先进的网络解决方案,并成功将技术应用于沃尔沃的量产车型中。这次合作不仅提升了CYAN的品牌知名度,也为其带来了更多的商业机会。

德欣(COV)公司的发展小趣事

为了进一步提升市场竞争力,德欣公司开始在全球范围内进行布局。公司先后在亚洲、欧洲、美洲等地设立了生产基地和研发中心,加强了与国际市场的联系。同时,德欣公司还积极寻求与国际知名企业的合作,共同开发新产品、新技术和新市场。这些举措不仅提升了德欣公司的品牌影响力和市场竞争力,也为其未来的发展提供了更广阔的空间。

Elma Electronic Inc公司的发展小趣事

Elma Electronic Inc公司在电子封装市场拥有显著的领导地位。从VME/VME64x到Rugged COTS封装,该公司凭借其创新的设计和制造技术,成功地在多个细分市场取得了领先地位。这种领导地位不仅体现在产品的多样性上,更在于其为客户提供的高质量、可靠性和性能优异的产品。

DECON公司的发展小趣事

随着公司规模的扩大和市场份额的增加,DECON公司开始积极拓展国际市场。公司成立了专门的海外市场部,积极参加国际电子展会和论坛,与全球各地的客户建立了紧密的合作关系。同时,DECON还与国际知名电子企业展开合作,共同开发新产品,推动了公司的国际化进程。

Glenair公司的发展小趣事
电压比较器、继电器、可控硅等元件可能因老化、过流、过热等原因损坏,导致电路无法正常工作。

问答坊 | AI 解惑

某一个放大电路在输入端加入的信号电压值不变

某一个放大电路在输入端加入的信号电压值不变…

查看全部问答>

能推荐个好的gps模块吗

最近要用gps模块做同步授时,哪位用过给推荐下。天线越小越好…

查看全部问答>

PCI封装 规范

各位高手好。 最近在做PCI卡,小弟请教一下您PCI卡的尺寸/规范,以及电路封装。 谢谢您的帮助。 我的邮箱:wangwei4611@163.com …

查看全部问答>

evc开发基于对话框的小程序,如何改变菜单的背景颜色?

evc开发基于对话框的小程序,如何改变菜单的背景颜色? 在WinCe5.0模拟器下跑。 …

查看全部问答>

s7-200 如何实现正弦曲线的输出

PLC  西门子 S7-200 PLC经过PID调节,输出变频器的频率控制容器压力。 现在想在升压的过程中,让压力值按照正弦曲线上升,如何编程?请给个思路。…

查看全部问答>

directshow问题

各位大侠帮忙看看这个问题 http://topic.eeworld.net/u/20090210/18/09cb0f9d-cf2c-49c9-a84e-29d981e9a4e9.html …

查看全部问答>

請問哪有Tornado 2.2 for pcPentium的下載?

請問哪有Tornado 2.2 for pcPentium的下載?…

查看全部问答>

大家好,我是菜鸟想学习WinCE编程,今天一看Lable怎么没有Click事件啊,请帮帮我。

没看过这个,今天一看是这种情况。如果我想得到上述lable的Text,怎么做呢,谢谢了…

查看全部问答>

使用spi1端口怎么使mosi端口保持高低电平

                                 如题…

查看全部问答>

TI永磁同步BLDC电机控制FOC控制方案演示

$(\'swf_a8M\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjk4NTk3Mjcy/v.sw ...…

查看全部问答>