MSP430G2系列学习笔记

Wesley13
• 阅读 472

  今天晚上开始学习MSP430G2系列的单片机,这是一个低功耗的16位单片机,还是比较有意思的。先看了一下手册,基本的架构,感觉挺无聊的,就直接上手老师介绍的那本书开始学习了。

第一天

第一章主要讲的是口袋实验版的硬件结构,学到了一些有趣的知识。比如说,之前以为在对运放供电的时候,双电源供电方式中的负电源很好实现。其实不然,这里面还是有很大的学问的。下面就是产生负电源的一种方式,电荷泵原理:

MSP430G2系列学习笔记

原理比较易懂,现在就来介绍下,当$Q_1$和$Q_3$ MOS管打开的时候,电源$V_1$给电容$C$充电,1 3与2 4开关的状态必定是相反的,因此当$Q_2,Q_4$打开的时候电容$C$给电容$C_F$充电,导致电容的极板是下正上负,所以输出的电源就是负电源了。(负电源的资料明天看老师给的资料)

我们用的这个型号的板子封装是20引脚的,感觉和51的没啥优势啊~还好,在拓展板上提供了I2C芯片拓展了IO口的数量,整体来说,采用的是TAC6416A芯片,一共有16个引脚(芯片手册还没看。。)。板子用了四个输入(键盘),和个作为输出口用于控制 8个LED,4个作为输出口用于控制LCD驱动器。

ADC和DAC以及滤波器功放以后学的时候再详说吧。

  然后就开始了CCS编程,这个CCS。。。怎么说呢,速度确实很慢,毕竟是基于eclipse开发的,但是界面还是十分满意的。(不喜欢的可以使用IAR for MSP 430,很不错)工程怎么建的就不多说了,玩过51的都会。。。然后,就开始很坑的找错阶段,我按照书上的代码写了下面一段程序:

#include <MSP430G2553.h>

/*
 * main.c
 */
void Blink_LED();
int main(void) {
    WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer
    P1DIR = BIT6;
    while(1)
    {
        Blink_LED();
    }
}
void Blink_LED()
{
    _delay_cycles(1000000);
    P1OUT^ = BIT6;
}

  乍一看,没有啥错误,但是一Debug,出现下面的结果:

MSP430G2系列学习笔记

  找了半天,没发现错误,换一种方式照样可以是LED灯闪烁,但是这究竟是错在哪了呢?原因是我写代码的习惯,在赋值的时候不自觉的喜欢多打一个空格使代码看上去更整洁,错误就在这,取反符号“^”后面不能有空格,删了之后就没有错误了。=-=

  最后,看一下这个代码的含义,其实很简单,看下declaration就知道了。很简单P1OUT就是个1通道的IO口,8位的特殊功能寄存器。

SFR_8BIT(P1OUT);                              /* Port 1 Output */

  怎么确定各个通道的状态呢?看下宏定义,很简单,十六位嘛,一次定义各个管脚为1就行了。(和微机外接8053类似)

#define BIT0                   (0x0001)
#define BIT1                   (0x0002)
#define BIT2                   (0x0004)
#define BIT3                   (0x0008)
#define BIT4                   (0x0010)
#define BIT5                   (0x0020)
#define BIT6                   (0x0040)
#define BIT7                   (0x0080)
#define BIT8                   (0x0100)
#define BIT9                   (0x0200)
#define BITA                   (0x0400)
#define BITB                   (0x0800)
#define BITC                   (0x1000)
#define BITD                   (0x2000)
#define BITE                   (0x4000)
#define BITF                   (0x8000)
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
Java日期时间API系列23
  有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59。下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第一天开始时间,当前月最后一天结束时间,上个月第一天开始时间,上个月最后一天结束时间,某个指定月的起始结束时间等等。其中月份最后一天往往因为月份不同和
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这