51单片机串口接收多字节的中断程序如何写 请大虾赐教 小弟先行谢过了

51单片机串口接收多字节的中断程序如何写 请大虾赐教 小弟先行谢过了,第1张

void sys_init(void)//UART TIMER0初始化

{

TH0 = 0xB8; TL0 = 0x00; //20ms的时钟基准

//串口中断

TI=0;

RI=0;

SCON=0x50; //选用方式1

TMOD=0x20;

TMOD = (TMOD & 0xf0) | 1;//MODE 1

TH1=0xfd; //波特率为9600

TL1=0xfd;

PCON=0x00; //倍频0x80

IE = 0x90; // EA ELVD EADC ES ET1 EX1 ET0 EX0

// IE = 0xb0; // EA XX ET2 ES ET0 EX0 ET1 EX1

TR1=1; //enable TIMER1

ES=1; //开串口开断

TR0=1; //串口接收中断

ET0=0; //T0 中断

ET1=0; // T1 中断

IT0=1;EX0=1;

EA=1;

timer_1S_cnt=0;

IGT=1;

}

void receive(void) interrupt 4 using 1

{

if(RI)

{

// if(Rx<RxIn)

{pBuf=SBUF;pBuf++;

// (SystemBuf+Rx)=SBUF;

// SystemBuf[Rx]=SBUF;

Rx++;

}

RI=0;

}

}

有开定时器和AD的,你自己去掉吧

你可以先用串口调试助手,向单片机发送一个数据,如果有j-link,用j-link在中断函数里设置断点,进入中断后程序会停在usart中断那里,还有,通常情况下不使用发送中断,而是接收中断,对于多数据发送,可以等待发送完成标志 while(!(USART1->SR

void USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理

程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!

这个要看定时器和串口的优先级。如果串口优先级高,则马上执行串口中断程序,如果定时器高,则需要将定时器串口函数执行完才执行串口中断。

>

以上就是关于51单片机串口接收多字节的中断程序如何写 请大虾赐教 小弟先行谢过了全部的内容,包括:51单片机串口接收多字节的中断程序如何写 请大虾赐教 小弟先行谢过了、stm32串口发送数据,用中断怎么发送能举个例子吗、STM32 USART接收中断程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10169206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存