一个
单片机串口同时接收、发送数据,为什么不能实现?程序如下:
#include<reg51.h>
#include"type.h"
uint8 SigNum[100];
int i;
void USART_Init(void)
{
TMOD = 0x20;//将定时器1设置为方式2,8位自动重装模式
SCON = 0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能
PCON = 0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速
TH1 = 0xfd; //11.0592M晶振,波特率9600
TL1 = 0xfd;
TR1 = 1;//开启定时器1
ES = 1;//开启串口中断
EA = 1;//开启总中断
}
void Send_Dat(uint8 dat)
{
SBUF = dat;
while(
ti==0);
TI=0;
}
void main()
{
uint8 a=0;
USART_Init();
while(1)
{
for (i=0;i<100;i++)
{
SBUF= SigNum[i];
while(TI==0);
TI=0;
}
i=0;
}
}
void USART_INTR() interrupt 4 //串口中断
{
if(RI)
{
RI = 0;
for(i=0;i<100;i++)
{
SigNum[i]=SBUF;
}
i=0;
}
}
本人新手,请大神们指教
不好意思,不知道怎么就发了半段,void main(){
uint8 a=0;
USART_Init();
while(1)
{
for (i=0;i<100;i++)
{
SBUF= SigNum;
while(TI==0);
TI=0;
}
i=0;
}
}
void USART_INTR() interrupt 4 //串口中断
{
if(RI)
{
RI = 0;
for(i=0;i<100;i++)
{
SigNum=SBUF; SBUF= SigNum; while(TI==0);
TI=0;
}
i=0;
}
}
你就犯了我说的错误了,串口没有对发送中断处理。你可以在发送函数Send_Dat中把中断关了,或者在中断函数里面加
- if(TI )
- {
- TI = 0;
- }
复制代码否则TI=1的时候不断触发中断。
谢谢,明白了,我再试试
一周热门 更多>