[P]还有一个问题,为什么在串口上看到的接收数据有个别是错误的呢?[/P][P]就是下面这样:44 44 44 44 44 44 44 44 44 44 FF 44 44 44................................就是这样的显示。[CODE]/********************************************************************
//DM430-L型定时器中断程序
//记时一秒让LED灯亮一次,选择辅助系统时钟32.768Khz,bo
//调试环境:EW430 V5.30
//第九单片机开发网
//www.9mcu.com
********************************************************************/
#include <msp430x14x.h>
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/*当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数*/
#define baud 9600 //设置波特率的大小
#define baud_setting (uint)((ulong)CPU_F/((ulong)baud)) //波特率计算公式
#define baud_h (uchar)(baud_setting>>8) //提取高位
#define baud_l (uchar)(baud_setting) //低位
#define KeyPort P1IN //独立键盘接在P10~P13
#define LED P2OUT //LED灯接在P20、P21上
uchar int_f=0x00;
//uchar count_f=0;
//*************************************************************************
// 系统时钟初始化
//*************************************************************************
void Clock_Init()
{ uchar i; BCSCTL1&=~(XT2OFF+XTS); //打开XT振荡器 BCSCTL2 |=SELM1; //选择MCLK物理时钟源为XT2,不分频为8MHZ BCSCTL2 |=SELS; //选择SMCLK为外部8M时钟源(理解) do{ IFG1&=~OFIFG; //清除震荡标志 for(i=0;i<100;i++) _NOP(); //延时等待 } while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待 IFG1&=~OFIFG;
}
//*************************************************************************
// MSP430内部看门狗初始化
//*************************************************************************
void WDT_Init()
{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
}
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{ P1SEL = 0x00; //P1普通IO功能 P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻 P1IES = 0x0F; P1IFG = 0; P1IE = 0x0F; P2SEL = 0x00; //P2口普通IO功能 P2DIR = 0x01; //P2口输出模式
}
//*************************************************************************
// MSP430串口初始化
//*************************************************************************
void UART_Init()
{ U1CTL|=SWRST; //复位SWRST U1CTL|=CHAR; //8位数据模式 U1TCTL|=SSEL1; //SMCLK为串口时钟 U1BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N U1BR0=baud_l; //N=UBR+(UxMCTL)/8 U1MCTL=0x00; //微调寄存器为0,波特率9600bps ME2|=UTXE1; //UART1发送使能 ME2|=URXE1; //UART1接收使能 U1CTL&=~SWRST; IE2|=URXIE1; //接收中断使能位 P3SEL|= BIT6; //设置IO口为特殊功能模块 P3DIR|= BIT6; //设置P3.4为输入,P3.5为输出口 P3SEL|= BIT7; //设置IO口为外围功能模块
}
//*************************************************************************
// 串口0发送数据函数
//************************************************************************* void Send_Byte(uchar data) {
U1TXBUF=data;
while ((IFG2 & UTXIFG1)==0); }
//*************************************************************************
// 处理来自串口 0 的发送中断,预留
//*************************************************************************
#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
}
//*************************************************************************
// 定时器中断服务程序
//*************************************************************************
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void) {
P2OUT ^= 0x01;
Send_Byte(0x44); }
//*************************************************************************
// 主程序
//*************************************************************************
void main(void)
{ WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置 Port_init(); //系统初始化,设置IO口属性 UART_Init(); CCTL0=CCIE; CCR0=32768; //计数到32768,定时1s TACTL=TASSEL_1+MC_1 ; //计数器设置为增计数模式,采用辅助系统统时钟 _EINT(); //开中断 while(1) { }
}
[/CODE][/P] |