#include<msp430x41x.h>
#include<math.h>
//
// MSP430F413
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | CCI0B/RX/P1.1|<--------
// | | 9600 8N1
// | CCI0A/TX/P1.0|-------->
#define RXD 0x02 // RXD on P1.1
#define TXD 0x01 // TXD on P1.0
// Conditions for 9600 Baud SW UART, SMCLK = 1048576
#define Bitime_5 0x06 // ~ 0.5 bit length + small adjustment
#define Bitime 0x0E // 427us bit length ~ 2341 baud
unsigned int RXTXData;
unsigned char BitCnt;
void TX_Byte (void);
void RX_Ready (void);
unsigned char tongxun_bit=0;
unsigned char tongxun_l=0;
unsigned char tongxun_cs=0;
unsigned char control=0;
unsigned char rdata[10];
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
SCFQCTL=SCFQ_2M;
FLL_CTL0 |= XCAP14PF;
error=0;
CCTL0 = OUT;
TACTL = TASSEL0 + MC1;
P1SEL = TXD + RXD;
P1DIR = TXD;
RX_Ready();
control=0;
_EINT(); //开中断
while(1)
{
// RXTXData=i;
// TX_Byte();
// while ( CCTL0 & CCIE );
//_NOP();
//i++;
if(tongxun_c)
{
// RX_Ready();
tongxun_c=0;
}
_NOP();
}
}
// Function Transmits Character from RXTXData Buffer
void TX_Byte (void)
{
RXTXData=rdata[tongxun_bit];
BitCnt = 0xA;
CCR0 = TAR;
CCR0 += Bitime;
RXTXData |= 0x100;
RXTXData = RXTXData << 1;
CCTL0 = OUTMOD0+CCIE;
}
void RX_Ready (void)
{
BitCnt = 0x8; // 位数
CCTL0 = SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE;
}
interrupt[TIMERA0_VECTOR] void Timer_A (void)
{
CCR0 += Bitime;
// RX
if (CCTL0 & CCIS0)
{
if( CCTL0 & CAP )
{
CCTL0 &= ~ CAP; // 开始接受
CCR0 += Bitime_5;
}
else
{
RXTXData = RXTXData >> 1;
if (CCTL0 & SCCI) // 判断接受的位
RXTXData |= 0x80;
BitCnt --; // 位数-1
if ( BitCnt == 0)
{
CCTL0 &= ~ CCIE; //接受完一个字节
tongxun_cs+=RXTXData;
if((RXTXData==0x68)&&(tongxun_bit==0))//1
{
tongxun_bit++;
tongxun_cs=0x68;
}
else if(tongxun_bit==1) //2
{
control=RXTXData;
tongxun_bit++;
}
else if(tongxun_bit==2) //3
{
tongxun_bit++;
tongxun_l=3+RXTXData;
}
else if((tongxun_bit>2)&&(tongxun_bit<tongxun_l)) //数据
{
rdata[tongxun_bit-3]=RXTXData;
tongxun_bit++;
}
else if(tongxun_bit==tongxun_l) //cs
{
if((RXTXData+RXTXData)==tongxun_cs)
{
tongxun_bit++;
}
else tongxun_bit=0;
}
else if(tongxun_bit==(tongxun_l+1)) //16
{
if(RXTXData==0x16)
{
chuli();
}
tongxun_bit=0;
}
else
{
tongxun_bit=0xff;
}
RX_Ready();
}
}
}
// TX
else
{
if ( BitCnt == 0)
{
CCTL0 &= ~ CCIE; // 所有的位发送完成
if(tongxun_bit==0)
{
tongxun_bit=0;
RX_Ready(); //发送完,改接受
}
else {
TX_Byte(); //继续接受
tongxun_bit--;
}
}
else
{
CCTL0 |= OUTMOD2; // TX Space
if (RXTXData & 0x01)
CCTL0 &= ~ OUTMOD2; // TX Mark
RXTXData = RXTXData >> 1;
BitCnt --;
}
}
}
com(p1.0-p1.1).rar_msp430
版权申诉
67 浏览量
2022-09-19
13:10:52
上传
评论
收藏 2KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/dabc422b995e4f93b0df429caef6266e_weixin_42656416.jpg!1)
四散
- 粉丝: 54
- 资源: 1万+
最新资源
- java-leetcode题解之第173题二叉搜索树迭代器.zip
- java-leetcode题解之第100题相同的树.zip
- java-leetcode题解之第101题对称二叉树.zip
- java-leetcode题解之第128题最长连续序列.zip
- java-leetcode题解之第94题二叉树的中序遍历.zip
- java-leetcode题解之第98题验证二叉搜索树.zip
- java-leetcode题解之第200题岛屿数量.zip
- java-leetcode题解之第130题被围绕的区域.zip
- java-leetcode题解之第41题缺失的第一个正数.zip
- 英语词汇学习用软件-保存单词含义例句等
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)