完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我现在在使用adcu7061串口通讯。能发送,但是不能接受,我需要中断接收。有没有这个方便的资料给我
if((COMSTA0 & 0X01)==0X01) {ucRxChar = COMRX; sprintf ( (char*)szTemp1, "%d,rn",ucRxChar);GupSend(szTemp1); } 以上不是中断的接收数据,只能接受单字节.我实际需要中断来接收. 同时还有一个问题,按照上面的程序,我使用串口工具,例如发送01,接收到了30 2C 0D 0A;发送02,接收到了31 2C 0D 0A; ......发送09。接收到了39 2C 0D 0A; 如果发送0a ,接收到了31 30 2C 0D 0A ; 如果发送10,接收到了31 36 2C 0D 0A; 很有规列:在发送01-09的时候,只是接收到的数据30-39的3后面的数据对应1-9; 不管怎么样。这些数据都不是我需要的。我的意思是发送01的时候,接收的正确的应该是01 0D 0A; 实际应用中,如发送01 02 03 04.我应该是中断接收依次是01 0D 0A , 02 0D 0A ;03 0D 0A; 04 0D 0A |
|
相关推荐
9个回答
|
|
我上午更新了下程序
if((COMSTA0 & 0X01)==0X01) { readdat[readmun++]=COMRX; send=1; } else if(send) { send=0; for(dismun=0;dismun while(!(0x020==(COMSTA0 & 0X020))){} COMTX = readdat[dismun]; } } 但是我发送一串数据,总是只能接收到最后一个字节的数据.其他的不能接收到 例如我发送010203,只能接收到03 |
|
|
|
下午我根据资料.搞了下中断发送
void uart_9600(void) { COMCON0 = BIT7; // settings UART speed COMDIV0 = 0x21; // : 9600bps COMDIV1 = 0x00; COMCON0 = BIT0 + BIT1 + BIT2; // 8 bit data transfer GP1CON = BIT0 + BIT4; // enable UART rx and tx COMIEN0 = BIT0 + BIT1; IRQEN |= BIT11; // set interrupt from UART } while(1) { if(send) { send=0; for(dismun=0;dismun while(!(0x020==(COMSTA0 & 0X020))){} COMTX = readdat[dismun]; } readmun=0; } } void IRQ_Handler(void) __irq { unsigned long IRQSTATUS = 0; unsigned char ucCOMIID0 = 0; IRQSTATUS = IRQSTA; // Read off IRQSTA register if ((IRQSTATUS & BIT11) == BIT11) //UART interrupt source { IRQCLRE = BIT11; ucCOMIID0 = COMIID0; // Read the UART IRQ ID register if ((ucCOMIID0 & 0x2) == 0x2) // Transmit buffer empty { ; } if ((ucCOMIID0 & 0x4) == 0x4) // Receive buffer Full { readdat[readmun++]=COMRX; if(readmun>=5) send=1; } IRQEN |= BIT11; } } 按照这样。我发送01 02 03 04 05 06 . 正确应该接收到01 02 03 04 05 06; 但是我连续发送6次后,接收到了06 06 06 06 06 06; 说明每次只接收了最后一个字节。 通过串口软件,我还发现,从发送到接收完成,大概需要800-900ms。 是不是这个器件不能快速连续接收。而是需要在间隔800ms以上才能接收下一个数据? |
|
|
|
|
|
|
|
qinghong325 发表于 2018-8-22 09:03 你好 你所提供的信息中没有发现有关我所关心的问题. 这个问题提出到现在即将一个月了,还是没有得到满意的答复. |
|
|
|
串口通信的速率是由UART的波特率决定的,波特率由相关寄存器配置。
请访问下面的ftp地址: ftp://ftp.analog.com/pub/MicroConverter/ADuC7XXXV0.2/ 下载并安装ADuC7xxxV02.exe,在安装后的如下路径 ADUC70xxADuC706xcodeRealView , 有ADuC7060/1的参考代码。 其中UART的是一个自收自发的代码,使用中断方式实现的UART收发数据。 |
|
|
|
考虑波特率是否匹配
|
|
|
|
|
|
|
|
匹配的,能中断接收.问题在于连续发送一串数据只能接收到最后一位数据.如果发送一个接收一个再发送一个再接收一个是可以的.
|
|
|
|
关于问题:在发送01-09的时候,只是接收到的数据30-39的3后面的数据对应1-9。
因为hex与数字的对应正好是,hex30-39对应数字0-9,所以建议你可以看看是不是串口调试助手哪里设置的问题,点到hex发送了。 关于问题:每次只能接受一个字节。 因为在串口中断一般都是有个缓冲寄存器,每当串口中断的时候,接收到的字符都会刷新,所以我都先设置一个全局变量, 为一个数组,数组长度大于一次性接收到的数据,在串口中断程序里,然后将缓冲寄存器中的内容依次读到这个数组中。 一般会设定一个结束符,当读到这个结束符的时候,就证明这一次接受数据结束。 |
|
|
|
只有小组成员才能发言,加入小组>>
213 浏览 0 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1299 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1896 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4237 浏览 2 评论
8995 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1421浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1645浏览 2评论
1615浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1299浏览 2评论
213浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 11:28 , Processed in 0.987313 second(s), Total 65, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号