MSP430入门:延时函数与校准常数检查
需积分: 0 186 浏览量
更新于2024-09-11
收藏 109KB DOCX 举报
本文档主要介绍了初学者在探索 MSP430 微控制器编程入门时遇到的一些代码理解和问题。首先,作者分享了一个简单的延时函数`void _delay_cycles(unsigned int x)`,它通过循环计数实现延时,常用于主函数中控制硬件操作的节奏。
在`void main()`函数中,作者展示了如何初始化和配置MSP430的硬件资源。首先,他们关闭了看门狗定时器(`WDTCTL=WDTPW+WDTHOLD`),接着配置了P1端口作为输出(`P1DIR=0x40`),并关闭了LED(`P1OUT=0`)。为了设置系统时钟,代码设置了低频晶振源(`BCSCTL3|=LFXT1S_2`)并清除了OSCFault标志(`IFG1&=~OFIFG`)。接下来,程序进入一个无限循环,在这个循环中,LED被切换打开和关闭,并使用自定义的延时函数来调整LED亮灭的时间间隔,分别是100个周期和5000个周期。
重点部分在于对`if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)`条件语句的理解。这两个宏`CALBC1_1MHZ`和`CALDCO_1MHZ`实际上是存储在Flash中的校准常量,用于设置系统的直流振荡器(DCO)频率。当Flash擦除后,这些位默认会恢复为1。因此,如果`CALBC1_1MHZ`和`CALDCO_1MHZ`的值都为0xFF,意味着这些校准数据已被擦除,此时程序进入了无限循环(`while(1);`),防止加载新的校准值,因为无法确定正确的时钟频率设置。
技术支持的解释进一步确认了这一点,指出当这两个校准常数被擦除时,程序会陷入死循环,防止由于不准确的DCO设置导致的错误行为。解决方案是在擦除前先确保保存或重新加载这些校准值,然后通过`BCSCTL1=CALBC1_1MHZ`和`DCOCTL=CALDCO_1MHZ`语句设置DCO频率。
本文档为初学者提供了一个关于MSP430编程的基础示例,包括延时函数的使用、硬件配置以及关键校准值的管理。理解这些概念对于在MSP430平台上进行有效的编程至关重要,特别是当涉及到系统时钟设置和初始化时。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2015-07-04 上传
2021-10-03 上传
2009-10-25 上传
2013-06-04 上传
2011-05-11 上传
oRicky12
- 粉丝: 0
- 资源: 5
最新资源
- cljs-node:cljs 的节点编译器
- 中国一汽大采购体系降本工作计划汇报v7.rar
- lettergenerator:用StackBlitz创建:high_voltage:
- 毕业设计&课设--该版本微信小程序可以为学员提供学车报名、线上模拟考试、预约练车服务及驾校管理及教练管理。该小程序仅.zip
- rival:RiVal推荐系统评估工具包
- node-patch-manager:序列化 MIDI 配置的合成器音色并响应 MIDI 程序更改
- suhrmann.github.io
- Excel模板00多栏式明细账.zip
- EnergyForGood
- pytorch-CycleGAN-and-pix2pix-master
- KDM_ICP4
- 毕业设计&课设--大二J2EE课程设计 毕业设计选题系统(架构:spring+struts+hibernate) .zip
- Excel模板软件测试用例.zip
- google-map-react:uk
- Flight-Booking-System-JavaServlets_App::airplane:基于使用Java Servlet,Java服务器页面(JSP)制成的Model View Controller(MVC)架构的土耳其航空公司的企业级航班预订系统(Web应用程序)。 此外,还实现了对用户的身份验证和授权。 该Web应用程序还可以防止SQL注入和跨站点脚本攻击
- Algorithm:算法分析与设计作业