/***************************************************程序功能:IO口模拟串口 时钟是30K的,波特率9600工作起来有时候稳定,有时候全是乱码,麻烦各位高手了。---------------------------------------------------测试说明:在串口助手中看到输出的数组。***************************************************/#include <msp430x14x.h>//#include "BoardConfig.h"int byte;int TX_Data;/****************主函数****************/
void senddata(unsigned char);void send(unsigned char*);void delay(void);void main(void){ WDTCTL = WDTPW + WDTHOLD;
//
//
开启XT2振荡器
//
BCSCTL1 &= ~XT2OFF;
unsigned int i; do
{
IFG1 &=~OFIFG;
for(i=0xff;i>0;i--);
}
while(IFG1 & OFIFG == OFIFG);
//
//
MCLK,SMCLK选择XT2
//
BCSCTL2 |= SELM_2+SELS;
int j=2000; while(j--);
_EINT(); //使能全局中断 for(int i=0;i<10;i++) send("abcdef
"); LPM3; //CPU进入LPM3模式}
void delay(void){ for(int i=0;i<20;i++) { } }
void send(unsigned char *ptr){ unsigned char nChar=0; while(ptr[nChar]!=' ') { byte=9; senddata(ptr[nChar++]); delay(); } byte=9;}
void senddata(unsigned char send){ TX_Data=0x200; int TX_temp=0x00; TX_temp|=send; TX_temp<<=1; TX_Data|=TX_temp; TX_temp=TX_Data; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 P3DIR = 0x10; P3OUT = 0x10; // BoardConfig(0xf0); //关闭数码管和电平转换,打开流水灯 TBCCTL0 = CCIE; //使能CCR0中断 TBCCR0 = 2;
// TBCCR0 = 4094; //设定周期0.5S TBCTL = TBSSEL_1 + MC_1 + TBCLR; //定时器A的时钟源选择ACLK,增计数模式 //设置P2口方向为输出
}
/*******************************************函数名称:Timer_B 功 能:定时器B的中断服务函数参 数:无返回值 :无********************************************/#pragma vector = TIMERB0_VECTOR__interrupt void Timer_B (void){ int con=TX_Data&1; for(int i=0;i<=4;i++); if(con==0) P3OUT &= 0xEF; else P3OUT |= 0x10; TX_Data>>=1;
if(--byte==0) TBCTL &=~MC_3;}
不好意思了
此帖出自
小平头技术问答
一周热门 更多>