各位大大们,求个问题。
用的是PIC18F4520,串口设置和初始化如下程序。目的是从PC串口发一个字节到单片机接收,单片机回复所接收的数据。但发现用ICD3仿真调试,数据字节可以回来。比如:发个0x55,回来也是0X55。但我把程序烧到单片机里面运行的时候,发个数据。第一个回来是正确的,再发一个,回来后就都变成0XFF啦。重新上电,再发,也是第一次对着。后来就都成了0XFF啦。百思不得其解,望哪位PIC高手给指点一下。谢谢!!!
#include"Ask_I_O.H"
#include"AskFun.H"
#include"ODU_DEF.H"
__CONFIG(1,HS&FCMDIS&IESODIS); //外部高频晶振
__CONFIG(2,WDTDIS&PWRTEN & BOREN & BORV42&WDTPS256); //上电延时,欠压复位,4.2V复位
__CONFIG(3,MCLRDIS & LPT1DIS & PBADDIS); //MCLR使能,定时器1晶振关闭,PORTB<4:0>作IO口
__CONFIG(4,DEBUGDIS & LVPDIS & STVREN & XINSTDIS); //堆栈溢出复位,禁止低压编程,禁止调试
__CONFIG(5,CPD); //保护EEPROM
main()
{
UINT8 rssivalue=0;
UINT16 kk=0;
asm("NOP");
McuInitial();
while(kk<50000)
{
asm("NOP");
kk++;
}
Set_Tx(1625);//发送频率设置211.137.130.19-3
Set_Rx(1415);//接收频率设置
Set_LO(3140);//中频设置
Set_LO(3140);
T_R=0;TXEN=1;
while(1);
}
void UartInitial(void)
{
TXSTA=0X00; //八位数据发送,异步低速主控模式
RCSTA=0X90; //八位数据接收,连续接收
BAUDCON=0X40; //8位波特率产生器
SPBRG=17; //波特率9600;spbrg=Fosc/(64*baudrate)-1
}
void McuInitial(void)
{
di();
SPEN=0; //使能串口
TRISA=0X2F; //RA0,RA1,RA2,RA3输入
TRISB=0X00; //RB2,RB3,RB4,RB5输出
TRISC=0X98; //RC7,RC3,RC4输入,RC6输出
TRISD=0X00; //输出
TRISE=0X03; //RE0,RE1,RE2输入
INTCON=0X40; //允许第二梯队中断
POR=1;
BOR=1;
IPEN=0; //禁止中断优先级
PIE1=0X00;
PIE2=0X00;
TXIE=1; //允许发送中断
RCIE=1; //允许接收中断
TMR1IE=1; //允许TMR1中断
PIR1=0X00; //清中断标志
PIR2=0X00; //清中断标志
UartInitial();
ei();
}
UINT8 Bufdata;
void interrupt SerialAndTimer1(void)
{
if(TXIF==1)
{
TXEN=0;
return ;
}
if(RCIF==1)
{
Bufdata=RCREG;
TXEN=1;
TXREG=Bufdata;
return ;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
"TXIF的值和TXEN是一致的"这是你自己的理解吧?一般来说清中断有读和些两种方式,就是读或者写指定的状态寄存器,跟使能位没关系吧
一周热门 更多>