有人使用捕获比较功能实现异步串行通信的吗?我现在串口不够用,想捕获比较功能实现一个串口,但怎么都发不出来数据。使用的单片机是MSP430F5438A。
void SimulationSerInit(void)
{
P8DIR |= BIT5;//p8.5设置为输出-TXD
P8SEL |= BIT5;//设置为外围模块
P8DIR &= ~BIT6;//8.6设置为输入RXD
P8SEL |= BIT6;//设置为外围模块
TA0CTL = TASSEL_1 + MC_2;//; + TACLR + TAIE;
TA0CCTL0 |= OUT;//CCR0的OUT设置为1(0x0004)
}
//发送一个字节
void txd(unsigned char byte)
{
T_DATA=byte;
TA0CCR0=TA0R; //将TAR时间存入CCR0中,确定第一位的长度
TA0CCR0=TA0CCR0+TBIT1;//将一位的时间加入到CCR0中
T_DATA=T_DATA<<1;//将字节向左移一位,构成最低位起始位
T_DATA=T_DATA|0x0200;//最高位(10位)位停止位
TR_COUNT=10;//发送计数器
TA0CCTL0= OUTMOD0+CCIE;//重新设置CCTL0,CCIS=00
while(CCIE&TA0CCTL0);//
}
//CCR0 p8.5
#pragma vector=TIMER0_A0_VECTOR
__interrupt void send_ISR(void)
{
TA0CCR0=TA0CCR0+TBIT1;//重装一位的时间
//开始发送
if(TR_COUNT==0)
TA0CCTL0&= ~CCIE;
else
{
TA0CCTL0|= OUTMOD2;
if(T_DATA&0x0001)
TA0CCTL0&= ~OUTMOD2;
//TA0CCTL0|= OUT;
//else
//TA0CCTL0&= ~OUTMOD2;
//TA0CCTL0&= ~OUT;
T_DATA=T_DATA>>1;
–TR_COUNT;
}
}
我每隔100ms发送一次,但是在示波器上看不到数据?不知道哪里没有做好?
Young Hu:
给您发一个文档。
anger0925:
回复 Young Hu:
谢谢,我先看看