51单片机 为什么不能直接将串口的 SBUF值赋给并口?
例如:前面定义ch为unsignedcharch;中断中将SBUF的值通过ch赋给P1voidserial()interrupt4{if(RI){RI=0;ch=SBUF...
例如: 前面定义ch 为 unsigned char ch; 中断中将 SBUF 的值通过ch 赋给 P1
void serial() interrupt 4
{
if(RI)
{ RI=0;
ch=SBUF;
P1=ch;
flag=!flag
}
}
这样行不行? 我用proteus 仿真为什么P1 没有变化呢?
如果不行应该怎么写才能实现这个功能? 展开
void serial() interrupt 4
{
if(RI)
{ RI=0;
ch=SBUF;
P1=ch;
flag=!flag
}
}
这样行不行? 我用proteus 仿真为什么P1 没有变化呢?
如果不行应该怎么写才能实现这个功能? 展开
2个回答
展开全部
这样完全可以,因为P1口是8位的,串口接收一个字节也是8位的,可以通过P1口来测试下数据.
就是不知道你的串口初始化程序有没有配置好,你可以不用中断先用扫描接收试试.
我把我的发送接收函数给你参考.
typedef unsigned char BYTE;
typedef unsigned int WORD;
/************************************
发送一个字节
************************************/
void Send(BYTE dat)
{
SBUF = dat;
while(!TI);
TI=0;
}
/************************************
接收一个字节
************************************/
BYTE Receive(void)
{
BYTE dat;
while(!RI);
RI = 0;
dat = SBUF;
return dat;
}
你可以在主程序中测试下
void main( void )
{
P1 = Receive();
while(1);
}
就是不知道你的串口初始化程序有没有配置好,你可以不用中断先用扫描接收试试.
我把我的发送接收函数给你参考.
typedef unsigned char BYTE;
typedef unsigned int WORD;
/************************************
发送一个字节
************************************/
void Send(BYTE dat)
{
SBUF = dat;
while(!TI);
TI=0;
}
/************************************
接收一个字节
************************************/
BYTE Receive(void)
{
BYTE dat;
while(!RI);
RI = 0;
dat = SBUF;
return dat;
}
你可以在主程序中测试下
void main( void )
{
P1 = Receive();
while(1);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询