新手上路
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2013-4-28
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-10-4 09:52:37
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
很感谢你的回复,加了延时100ms后,每次接收都有两个数据。但是这不是我要的效果啊。。。
我想利用中断方式发送一组数据,但不是用循环发送,是在中断里面发送数据(利用第一次中断发送触发中断,再利用中断中的发送再次触发中断):
uint16_t a[]={0,1,2,3,4,5,6,7,8,9};
int main()
{
p=a;
num=10;
usart_init();
delay_init();
GPIO_SetBits(GPIOB,GPIO_Pin_5);
while(1)
{
if(( r & (uint16_t)0x01FF)==0xaa)
{
USART_SendData(USART1,*p);
delay_ms(100);
r=0;
}
}
}
void USART1_IRQHandler() //串口1中断服务程序
{
if(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==SET)//发送中断
{
if(num>0) USART_SendData(USART1,*p);
num--;
p++;
delay_ms(100);
USART_ClearFlag(USART1,USART_FLAG_TXE);
}
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET)//接收中断
{
r=USART_ReceiveData(USART1);
}
}
我以前用51写过这种中断循环发数据的方式,效率很高(利用一个if即可发送8个数据,if完了就走,中断会自动发送8个数据):
if(sf==1) //发送8个数据
{
p=≀
num=8;
SBUF=*p;
sf=0;
}
void uart() interrupt 4 //uart
{
static uchar i;
if(RI)
{
RI=0;
}
else
{
TI=0;
num--;
p++;
if(num>0) SBUF=*p;
}
} |
|