|
楼主 |
发表于 2016-12-7 21:57:34
|
显示全部楼层
本帖最后由 往事如烟 于 2016-12-7 21:59 编辑
和延时好像没关系,上图是增大延时的结果除了慢一点,还是错!我
正在尝试在中断中接收和发送!但是不知道为什么只能发送一个字节了!源码如下!
#include<p30f4011.h>
#include<uart.h>
_FOSC(CSW_FSCM_OFF&XT_PLL4);//4倍频晶振,Failsafe时钟关闭
_FWDT(WDT_OFF); // 关闭看门狗定时器
_FBORPOR(PBOR_OFF&MCLR_EN); //掉电复位禁止,MCLR复位时能
_FGS(CODE_PROT_OFF); //代码保护禁止
//#define FCY 7987200
#define FCY 7372800
unsigned char buf,buf1;
unsigned char flag_R=0;
unsigned char flag_T=0;
unsigned char len=0;
void __attribute__ ((__interrupt__)) _U1RXInterrupt(void);
void delay(unsigned int z)//延时函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void main(void)
{
U1BRG=51;
U1MODE=0x8420;//注意,改为U1MODE=0x8020不行,为什么?
U1STA=0x8400;
// IFS0bits.U1TXIF=0;
IEC0bits.U1TXIE=0;
IFS0bits.U1RXIF=0;
IEC0bits.U1RXIE=1;
TRISBbits.TRISB1=0;
while(1)
{
}
}
void __attribute__ ((__interrupt__)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF = 0;
LATBbits.LATB1=0;//控制max485状态,此时为接收发送状态
while(U1STAbits.URXDA)//读取接收到的所有数据
{
buf=U1RXREG;
LATBbits.LATB1=1;
U1TXREG=buf;//max485发送数据
delay(1000);
while(U1STAbits.TRMT==0);
LATBbits.LATB1=0;
}
flag_R=flag_R+1;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|