完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我将3485芯片与149单片机的相连,用modbus协议进行通讯,用异步通信串口0来接受数据,程序里头用定时器中断来定时收完8个字节,之后进行数据处理(CRC之类的)
max3485初始化程序为: bool Init_Max3485(void) { ME1 |= (UTXE0 + URXE0); // Enable USART0 TXD/RXD UCTL0 = CHAR + SPB + SWRST; // 8位数据 两位停止位 无校验 UTCTL0 |= SSEL0;// UCLK = ACLK URCTL0 |= 0x08; // sleep mode UBR00 = 0x41; UBR10 = 0x03; // 波特率设置为9600 // UMCTL0 = 0x00; // no modulation UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0 + UTXIE0; // 使能接受和发送中断 IFG1&=~UTXIFG0;//使UTXIFG0复位 return true; } 然后处理的程序为:串口中断为: #pragma vector = UART0RX_VECTOR //串口0接收中断函数 __interrupt void Uart0Rx_Isr(void) { // CCR1 =TARA+5000; //CCR1中断允许 TACTL|=TACLR; //ACLK,清TAR CCTL1 &=(~CCIFG); CCTL1|=CCIE; receBuf[receCount]= RXBUF0; receCount++; //接收地址偏移寄存器加1 } 定时器A1中断处理 #pragma vector = TIMERA1_VECTOR //定时器A1中断函数 __interrupt void Timer_A1_Isr(void) { TACTL|=TACLR; CCR1 =TAR+1000; //CCR1中断允许 if(receCount==8) { receTimeOut++; if(receTimeOut>=1) { receTimeOut=1; MAX3485_TRNS_ENA(); //将485置为发射状态 } } CCTL1 &=(~CCIE); CCTL1 &=(~CCIFG); // UART_ENTER_SLEEPA(); } 其他的程序太多感觉跟我遇到的问题关系不大,现在的问题就是,我用串口调试器通讯的时候总通讯不成功,总提示超时,波特率之类的设置应该也没问题,我从串口调试器读数据的时候 发送的是01 03 00 01 00 01 D5 CA , 这是8个字节,按道理说,我的单片机串口应该会进入8次中断,但是就是只进去一次中断,并且进去的这一次中断收到的数跟发送的数也对不上, 都困扰死我了,还望高手给予指教,谢谢了!
|
|
相关推荐
1个回答
|
|
这是串口调试精灵的图,读数据的时候总是提示超时,就是连不通,写数据也是这样
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11976 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 07:55 , Processed in 0.427765 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号