MSP430系列单片机-读RAM数据烧写到Flash中

本文介绍了如何使用MSP430微控制器从RAM地址0x0200读取数据并将其烧录到Flash地址0x1800的过程。包括读取long类型数据和字符数组的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目一

从RAM地址0x0200中读取一个long数据,并烧写至地址为0x1800的Flash中。

代码:

#include"io430.h"
void main(void)
{

    //初始化RAM信息段的指针
    unsigned long * RAM_ptr = (unsigned long *) 0x0200;

    //初始化Flash信息段的指针
    unsigned long * Flash_ptr = (unsigned long *) 0x1800;

    //存放数据的变量
    unsigned long value;
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    P4DIR |= BIT2;                  //设置P4.2为输出端口,连接LED作为指示

    while(FCTL3 & BUSY);            //判断是否处于忙碌状态
    FCTL3 = FWKEY;                  //清除LOCK标志
    FCTL1 = FWKEY + ERASE;          //选择段擦除,置位ERASE
    *Flash_ptr = 0;                //将指针所指向的地址写0,启动擦除
    FCTL1 = FWKEY + BLKWRT;         //写允许,长字

    //读RAM信息到value变量
    value = *RAM_ptr;
    *Flash_ptr = value;            //写Flash
    while(FCTL3 & BUSY);            //判断是否处于忙碌状态
    FCTL1 = FWKEY;                  //清楚WRT位
    FCTL3 = FWKEY + LOCK;           //置位LOCK标志


    while(1)
    {
        P4OUT ^= BIT2;              //烧写完成,点亮绿指示灯
        __delay_cycles(1000000);
    }
}

题目二

从RAM地址0x0200开始读取一个长度为8的字符数组,并烧写至地址为0x1800的Flash中。

#include"io430.h"
# define NumToWrite 8
void main(void)
{

    //初始化RAM信息段的指针
    unsigned char * RAM_ptr = (uint8_t *) 0x0200;

    //初始化Flash信息段的指针
    unsigned char * Flash_ptr = (uint8_t *) 0x1800;

    //存放数据的变量
    unsigned char value[NumToWrite];

    int i;
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    P4DIR |= BIT2;                  //设置P4.2为输出端口,连接LED作为指示

    while(FCTL3 & BUSY);            //判断是否处于忙碌状态
    FCTL3 = FWKEY;                  //清除LOCK标志
    FCTL1 = FWKEY + ERASE;          //选择段擦除,置位ERASE
    *Flash_ptr = 0;                //将指针所指向的地址写0,启动擦除
    FCTL1 = FWKEY + BLKWRT;         //写允许,长字

    //读RAM信息到value变量
    for (i=0;i<NumToWrite;i++)
        value[i] = *RAM_ptr++;
    //将数组写入Flash
    for (i=0;i<NumToWrite;i++)
        *Flash_ptr++ = value[i];

    while(FCTL3 & BUSY);            //判断是否处于忙碌状态
    FCTL1 = FWKEY;                  //清楚WRT位
    FCTL3 = FWKEY + LOCK;           //置位LOCK标志


    while(1)
    {
        P4OUT ^= BIT2;              //烧写完成,点亮绿指示灯
        __delay_cycles(1000000);
    }
}

仿真图:
仿真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值