在IAR调试窗口里面一切正常,在发送缓冲区里的数据也正常,但是用串口调试助手显示出来的数据却都是00
这是怎么回事???
/******************************************************************************
*******************************************************************************/
#include<msp430x14x.h>
#include"24C08.h"
#include"RS232.h"
#include"ds1302.h"
#include"gdata.h"
typedef unsigned char uchar;
typedef unsigned int uint;
uchar time=0;
uchar ye=0,addr=0x00;
uchar Sdata[7];
main()
{
P1DIR=0xff;P1OUT=0xff;
P2DIR=0xff;P2OUT=0xff;
P3DIR=0xff;P3OUT=0xff;
P4DIR=0xff;P4OUT=0xff;
P5DIR=0xff;P5OUT=0xff;
P6DIR=0xff;P6OUT=0xff;
WDTCTL=WDTPW+WDTHOLD;
BCSCTL1&=~XT2OFF;//打开外部晶体振荡器XT2
do
{
for(uchar i=0;i<0xff;i++) _NOP();//等待至少50us,等外部晶体震荡器正常工作
IFG1 &= ~OFIFG;//清除晶体震荡器失效标志OFIFG标志
}while(IFG1 & OFIFG);//检测晶体震荡器失效标志OFIFG
BCSCTL2|=SELM_2+SELS;//Smclk=Mclk
CCR0=60000;//60ms
CCTL0=CCIE;
TACTL=TASSEL_2+ID_3+MC_1+TACLR+TAIE;//定时器A时钟为smclk,8分频,增计数模式,TAR清零,溢出中断允许
//向存储块内写入数据
//读一个数据
//发送一个数据
//清除一个数据
init_EEPROM();//初始化I2C端口
Uart_Init();//串口初始化
Reset_DS1302();//时钟复位
_EINT();//
LPM0;//
while(1)
{
;
}
}
void execution()
{
BurstRead1302(rdata);
for(uchar i=0;i<7;i++)
{
write_add(ye,addr,rdata[i]);
addr++;
if(addr==0xff)//存储块分4页,当前页写满之后,写入下一页
{
ye++;
if(ye>=3)//共4页:0,1,2,3
ye=0;
}
}
if(ye==0)
{
ye=0;addr=0x00;
for(uchar i=0;i<7;i++)
{
Sdata[i]=read_add(ye,addr);//读出指定地址的数据
write_add(ye,addr,0x00);//发送完之后立即清除
addr++;
}
PutData(Sdata);
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void timerA_ISR()
{
time++;
if(time>=10)
{
// LPM0_EXIT;
execution();
time=0;
}
}
下边是RS232.c
/***************************************
向PC机发送字符串
****************************************/
void PutString (uchar *str)
{
while(*str != '\0')
{
while(!(IFG1 & UTXIFG0));//检测缓冲区是否空闲
TXBUF0 = *str++;//将要发送的字符存入缓冲区发送数据
}while(!(IFG1 & UTXIFG0));
TXBUF0='\n';//回车换行
}
/***************************************
向PC机必送数据
****************************************/
void PutData(uchar *data)
{
for(uchar i=0;i<7;i++)
{
while(!(IFG1&UTXIFG0));
TXBUF0=data[i];
}
}
/***************************************
串口初始化
****************************************/
void Uart_Init()
{
P3SEL |= 0x30;//P3.4 P3.5为Uart的TXD RXD
ME1 |= URXE0 + UTXE0;//使能UART的TXD RXD
UCTL0 |= CHAR;//数据传输8位
UTCTL0 = SSEL1;//
UBR00 = 0x00;
UBR10 = 0x6D;//波特率9600,串口时钟为32K,误差为3.41
UMCTL0 = 0x03;
UCTL0 &= ~SWRST;
}
中断这块我确实是看着书练的,可能是自己比较笨吧,只要一用到自己的程序里就会出错,就比如这个贴子上的程序不用中断它的传输就没有问题
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
【换取手持数字示波器】AHT10温度检测分享被打赏40分 | |
【换取手持数字示波器】ACM32F070开发板点亮LCD屏和触控按键,串口,ADC被打赏40分 | |
【换取手持数字示波器】ACM32F070LCD屏和触控按键功驱动蜂鸣器分享被打赏40分 | |
【换取手持数字示波器】国民技术PWM功能知识分享被打赏40分 | |
【换取手持数字示波器】放大器运放知识分享被打赏40分 | |
【分享评测,赢取加热台】+开关电源AC输入知识分享被打赏30分 | |
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 | |
【换取手持数字示波器】+线性调整器理论知识分享被打赏40分 |