找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 4
打印 上一主题 下一主题
收起左侧

帮忙看一下怎么进入不了中断程序了啊

[复制链接]
跳转到指定楼层
楼主
ID:394056 发表于 2018-9-11 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stc12c5a60s2.h"
#include "init.h"
#include "uart.h"
#include "delay.h"
#include "ad.h"
#include "flash.h"
#include "iic.h"
//串口数据的格式
#define  HEAD  0XF1 //帧头
#define VERSION 0X15   //发送版本
#define YUAN 0XB1   //源
#define FH_VERSION 0XB1   //接收版本
#define FH_YUAN 0XBF   //接收版本
#define  ZI  0XD1   //  控制字
#define  LEN1  0X28    //24   =4+20+1
extern uchar i;
uchar uart1_flag=0;
//数组定义
uchar  xdata fs_buf[46];
uchar  xdata rbuf[]={
0x7E,0x80, 0x00, 0x01,
0x00, 0x00, 0x80, 0xAA,
0x00, 0x01, 0x001, 0x00,
0xDE, 0x62, 0x7E};
void receive_deal();
void uart_js();
void uart_js();
sbit jdq1=P0^0;
sbit jdq2=P0^1;
void main()
{
Time_init();  //定时器初始化
PCA_init();    //pca端口初始化
InitUart();
jdq1=jdq2=0;
EA=1;
ES=1;
uart1_flag=0;
while(1)
{
  mDelay(100000);
  jdq1=~jdq1;
}
}
void uart_js() interrupt 4    //RI==1时执行串口中断
{
static unsigned char count;
uchar xdata  receive1_xorg=0;

if(RI==1)
  {
  RI=0;
  rbuf[count]=SBUF; //保存数据  
  if(uart1_flag!=0)
   {
   count=0;
   return;
   }
  count++;
  if((count==1)&&(rbuf[0]!=0x7E))//0  0xf1   
         
   {
   count=0;
   
   }            
  else if((count==2)&&(rbuf[1]!=0x80)) //1 0xb1
   {
    count=0;
   
   }
  else if((count==3)&&(rbuf[2]!=0x00)) //1 0xbf
   {
    count=0;
   
   }
  else if((count==4)&&(rbuf[3]!=0x01))    //rbuf[3]     
   {  
   
     count=0;
     
   }
  else if((count==5)&&(rbuf[4]!=0x00))   //rbuf[4]     
   {  
     count=0;
     
   }
  else if(count==6&&rbuf[5]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]))     //count=6  实际接收6个字节 0-5  rbuf[5]
    {
    count=0 ;
    uart1_flag=rbuf[3];
   
     ES=0;   
    }
  else if(count==7&&(rbuf[6]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5])))  //count=7  实际接收7个字节 0-6
    {
    count=0  ;
    uart1_flag=rbuf[3];
   
    ES=0;
    }
  else if(count==8&&(rbuf[7]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5]^rbuf[6])))  
    {
    count=0  ;
    uart1_flag=1;
    uart1_flag=rbuf[3];
    ES=0;
    }
  else if(count>8)
   {
   count=0;
   }
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2018-9-11 20:51 | 只看该作者
没有完整程序文件无法判断问题所在,单从串口中断函数看,写得有点啰嗦。可以先简化一下程序调试串口,成功后再增加其他功能。
回复

使用道具 举报

板凳
ID:347721 发表于 2018-9-11 20:53 | 只看该作者
定时器初始化的时候打开定时器中断了吗?
回复

使用道具 举报

地板
ID:394056 发表于 2018-9-11 22:24 | 只看该作者
乔陆腾 发表于 2018-9-11 20:53
定时器初始化的时候打开定时器中断了吗?

定时器已经开了啊
回复

使用道具 举报

5#
ID:397384 发表于 2018-9-13 11:39 | 只看该作者
有可能上电的时候收到乱码刚好和你要的数据对应,然后关中断了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表