完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
需要硬件:USB转TTL
TTL插电脑 ,再杜邦线连接430 现象:串口助手显示01 02 03 04 05 06 07 08 直接上代码 /************************* 发送数据帧的程序 利用发送中断,发送过程不阻塞CPU继续执行后续代码 Author:七禾页8 site:创客基地 缺点:必须整帧地发送数据。 需要将一次发送的数据都先整理完毕才能启动发送, 且必须等待上一帧发完才能启动下一帧的发送, 不能在程序中随时地按字节发送数据 **************************/ #include "msp430x14x.h" #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define TXBUF_SIZE 32 //一帧最多能发送的数据字节数 unsigned char TX_BUFF[TXBUF_SIZE]; //发送缓冲区 unsigned char TX_NUM; //发送字节总数变量 unsigned char TX_CNT; //发送字节计数变量 /******************************* *名称:UART0_PutFrame() *功能:从串口发送1帧数据 *入口参数:Ptr:待发送数组的首地址(数组名) Lenth:数据帧长度 *出口参数:返回1表示成功 返回0表示失败 *说明:发送过程中,不阻塞CPU运行 ********************************/ char UART0_PutFrame(unsigned char*Ptr,unsigned int Lenth) { int i; if(IE1 & UTXIE0) return (0); //如果上一帧没发送完,返回0 if(Lenth>TXBUF_SIZE) return(0); //长度超过最大缓冲区,返回0 for(i=0;i TX_BUFF=Ptr; //待发送数据装填进入发送缓冲区 } TX_CNT = 0; //发送字节数清0 TX_NUM = Lenth; //发送字节总数 IFG1 |= UTXIFG0; //人为制造第一次发生中断 IE1 |= UTXIE0; //允许UART0的发送中断 return(1); //返回发送成功 } /************************* 发送中断 **************************/ #pragma vector = UART0TX_VECTOR __interrupt void UART0_TX(void) //串口发送中断 { U0TXBUF = TX_BUFF[TX_CNT]; //将本次应该发送的数据送入TXBUF TX_CNT++; //下一次 依次发送后续字节 if(TX_CNT >= TX_NUM) //发送字节计数到达发送总数 { IE1 &= ~UTXIE0; //禁止UART0的发送中断,停止发送 } } /******************** 时钟初始化 ***********************/ void BCS_Init() { uchar j; WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 //使用外部高频晶体振荡器 BCSCTL1&=~XT2OFF; //使用外部XT2晶振8M do{ IFG1&=~OFIFG; for(j=0XFF;j>0;j--); }while((IFG1&OFIFG)); //等待晶振震荡平稳 BCSCTL2|=SELM_2; //MCLK选择XT2 } /******************** IO初始化 ***********************/ void IO_Init() { P3DIR|=BIT4; //P3.4 UTXD0设置为输出 P3DIR&=~BIT5; //P3.5 URXD0设置为输入 P3SEL|=BIT4+BIT5; //开启第二功能 (通信功能) } /******************** 通信初始化 ***********************/ void communication_Init() { ME1 |= UTXE0 + URXE0; // 使能USART0收发 UCTL0 |= CHAR + SWRST; // 8-bit 数据,一位停止位 SWRST=1 设置串行口 UTCTL0 |= SSEL0; // 选择时钟,UCLK = ACLK,32768 UBR00 = 0x03; // 32k/9600选择ACLK UBR10 = 0x00; // UMCTL0 = 0x4a; // Modulation UCTL0 &= ~SWRST; // 初始化UART0状态机,一般要设置好串口之后才复位 P2DIR |= BIT0; /*************在初始化代码中增加下面两句*************/ IE1 |= URXIE0 + UTXIE0; // URXIE0允许接收中断 + UTXIE0允许发送中断 _EINT(); //总中断允许 } void main( void ) { uchar TxTestBuff[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; BCS_Init(); //时钟初始化 IO_Init(); //IO初始化 communication_Init(); //通信初始化 while(1) { UART0_PutFrame(TxTestBuff,8); //发送一个长度约为8B的数据帧 __delay_cycles(10000000); //约一秒发送一次 } } |
|
|
|
只有小组成员才能发言,加入小组>>
3269 浏览 9 评论
2947 浏览 16 评论
3446 浏览 1 评论
8967 浏览 16 评论
4041 浏览 18 评论
1084浏览 3评论
562浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
556浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2294浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1850浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 10:07 , Processed in 1.165218 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号