专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
单片机串口通讯存储
2019-03-24 09:51
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
2404
4
1658
本帖最后由 qiushenghua 于 2015-8-24 23:38 编辑
目的是:将串口的数据存储下来,主程序再将数据调用。
问题是:当我把程序下载到430里面,连接好串口通讯,用串口发送数据给430后,能存下来,也能调用,可为什么当我复位后就不行了。
附程序:写数据到flash A
void write_SegA (uchar *value, int n)
{
uchar *Flash_ptr; // Flash pointer
uint i;
Flash_ptr = (uchar *)(0x1080 + n); // Initialize Flash pointer
FCTL1 = FWKEY + ERASE; // Set Erase bit
FCTL3 = FWKEY; // Clear Lock bit
*Flash_ptr = 0; // Dummy write to erase Flash segment
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
for (i=0; i<RX_len; i++)
{
*Flash_ptr++ = value; // Write value to flash
}
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + LOCK; // Set LOCK bit
}
串口接收中断
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
static char RX_len_temp;
Recptr[RX_len_temp]=RXBUF0;
RX_len_temp++;
if(Recptr[RX_len_temp-1]==0x0d)
{
RX_len=RX_len_temp;
RX_flag=1;
RX_len_temp=0;
write_SegA(Recptr,0);
}
}
string转int函数
unsigned long int string_to_int(unsigned char *ptr)
{
unsigned long int Data = 0;
int i = 0;
for(i = 0; ptr != ''; i++)
{
Data = Data*10 + ptr-48;
}
return Data;
}
将flash A中数据读出来
void ProcessCMD()
{int i;
data=(unsigned char *)0x1080;
for(i=0;i<RX_len;i++)
{
WorkTimeptr=*data++;
}
WorkTime=string_to_int(WorkTimeptr);
}
定时器A中断
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)
{
n--;
if(n<=WorkTime)
P2OUT=0x00;
if(n==0)
{P2OUT=0xff;
n=120;}
}
主程序:
void main()
{P2DIR=0xFF;
P2OUT=0xFF;
WDTCTL=WDTPW+WDTHOLD;
int_clk();
int_usart();
CCTL0 = CCIE;
CCR0 = 4096;
TACTL = TASSEL_1+ID_3 + MC_1;
_EINT();
char i;
ProcessCMD();
for(;;)
{
if(RX_flag==1)
{
RX_flag=0;
for(i=0;i<RX_len;i++)
{
tmpptr=Recptr;
}
UART_TX_BUF[0]='o';
UART_TX_BUF[1]='k';
for(i=0;i<2;i++)
{
while (!(IFG1 & UTXIFG0));
TXBUF0=UART_TX_BUF;//;
}
}
}
}
复制代码
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
qiushenghua
2019-03-24 19:35
有个小问题,第76-78行,main函数初始化部分,建议将关狗的语句提到最前面去。
我不清楚你上一个帖子
http://bbs.eeworld.com.cn/thread-472042-1-1.html
是否解决,由于你的代码结构相对混乱,所以很难耐下心来帮你分析代码的运行流程。建议你自己一定要清楚代码是怎么运行的,在什么时候进行了什么操作。先搞清楚这个,就知道该在什么时候停下程序来观察运行结果是否符合预期。
你这个描述其实挺不清晰的,别人没法知晓你究竟遇到了什么问题,正常情况下复位后的程序和烧录后的程序是一致的,如果程序调试正常(下载后全速运行),复位后却得到不一样的结果,那就应该检查是不是MCU没有正常复位,亦应检查MCU的复位电路硬件结构是否正常、正确。
加载中...
查看其它4个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
我不清楚你上一个帖子 http://bbs.eeworld.com.cn/thread-472042-1-1.html 是否解决,由于你的代码结构相对混乱,所以很难耐下心来帮你分析代码的运行流程。建议你自己一定要清楚代码是怎么运行的,在什么时候进行了什么操作。先搞清楚这个,就知道该在什么时候停下程序来观察运行结果是否符合预期。
你这个描述其实挺不清晰的,别人没法知晓你究竟遇到了什么问题,正常情况下复位后的程序和烧录后的程序是一致的,如果程序调试正常(下载后全速运行),复位后却得到不一样的结果,那就应该检查是不是MCU没有正常复位,亦应检查MCU的复位电路硬件结构是否正常、正确。
一周热门 更多>