亲,关于单片机编程语言的问题

interrupt [USART_RXC] void usart_rx_isr(void) //USART串行接收中断
{
Re_buf[counter]=SBUF;//Re_buf[counter]=UDR;
if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头

counter++;

if(counter==11) //接收到11个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}

}

这段程序应该是对STM32的编程语句,我看到您的回答,知道[USART_RXC]是中断向量,那么我想问下,如果我要把这段程序改成C51的,除了将SBUF加进去,这个中断向量该如何修改?? 能不能加QQ向您学习下?? 我QQ:512419912
void main()
{
USART_INIT();
// #asm("sei")
while(1)
{
if(sign)
{
sign=0;
if(Re_buf[0]==0x55) //检查帧头
{
switch(Re_buf [1])
{

case 0x53:
angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180;
angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180;
angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
break;

解释下,main函数中,a[0]、w[0]、angle[0]分别代表x轴的加速度、角速度和角度,我把那个模块发送的数据给你上图,你可以看下~~

再51中好像没有中断向量吧,51中总共就5个中断,这里你是用串口中断,你只需要去判断是接收中断还是发送中断就可以了,就是去读接收标志位和发送标志位,看哪个是1,就是哪个类型的中断了追问

但是改成了
void usart_rx_isr(void) inttrupt 4 using1

之后,主函数中的Re_buf均有语法错误...很无奈啊T_T 不知道哪里出了问题

追答

在51中,进去串口中断程序后一般先要将串口中断关闭,再去执行中断处理,之后清除中断标志位,最后再次打开串口中断,以上这些都需要在中断函数里有

还不理解的话可以参考书本上的串口中断的例子

还有,我不知道你的主函数是什么,也没办法帮你分析,你上主函数吧,虽然我也是新手,但是愿意帮你分析,共同进步

追问

谢谢你啦~   之后我把分给你把,我们能加个QQ好友吗?O(∩_∩)O~

是这样的,我问题说清楚吧,我有一个模块通过串口输出数据,一个数据包包含11位(含有包头、包尾),我想用单片机接收这个数据,所以这里的中断函数,要检测包头,所有中断之类比较麻烦,所有的程序我放在问题补充离吧~~


追答

加好友当然没问题,不过我也算新手哦1025195650

你都会stm32了,怎么不会51?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-05
需要帮你完成吗
相似回答