搜索
bottom↓
回复: 11

UART6接收中断问题

[复制链接]

出0入0汤圆

发表于 2009-7-28 16:52:04 | 显示全部楼层 |阅读模式
UART6 接收中断后,用IAR观察器检测接受中断标志没有置1,并且在中断函数里给全局变量复制,出中断函数后全局变量变为0,为什么?

出0入0汤圆

发表于 2009-7-29 15:33:54 | 显示全部楼层
你是在中断函数里看的吧?进中断函数后可能IF位已经清零了.

全局变量是不是被优化掉了?

出0入0汤圆

发表于 2009-7-29 15:53:23 | 显示全部楼层
应该是没有配置选项字节,没有设置看门狗或“喂狗”,程序被看门狗复位了

出0入0汤圆

 楼主| 发表于 2009-7-30 14:37:30 | 显示全部楼层
是没有设置看门狗,但是同样的情况在AD中断函数中不存在。我把代码给大家贴上,大家帮我看看。谢谢!
#include "io78f0453.h"
#include "nec78f0xb.h"
#include <intrinsics.h>
#include "UART6_intal.h"

void UART6_inital(void);
void Clock_inital(void);
__interrupt void INTSR6_jieshou( void );

unsigned char jieshou_tem;
unsigned char jieshou_flag=0; //----------------接受完毕标志

unsigned char reciv_tem[3];//-------------------接受缓冲全局变量数组
float k=5;//------------------------------接受缓冲计数全局变量
// unsigned char a=0;


void main( void )
{
// unsigned char i;
  unsigned int j;
  Clock_inital();//---------------时钟模块初始话
  UART6_inital();//---------------UART6初始化,波特率19200
  __enable_interrupt();//---------中断使能
  
  while(1)
  {
  
    if( jieshou_flag==1)//--------判断数据是否接受完毕
    {
   
       TXB6=jieshou_tem; //--------发送数据
       for(j=0;j<600;j++);
       jieshou_flag=0;//-------------发送完毕,接受标志清零
     }
  }
}

void UART6_inital(void)
{
/*    |------|------|------|------|------|------|------|------|*
       |  7   |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
ASIM6 |------|------|------|------|------|------|------|------|
       |POWER6|TXE6  |RXE6  |PS61  |PS60  | CL6  |SL6   |ISRM6 |
       |------|------|------|------|------|------|------|------|*/
  POWER6=1;//-----------POWER6=0:禁止内部操作时钟操作POWER6=1:允许内部操作时钟操作
  TXE6=1;  //-----------TXE6=0:禁止发送,TXE6=1:允许发送
  RXE6=1;  //-----------RXE6=0:禁止接受,REX6=1:允许接受
  PS61=0;  //-----------| PS61 | PS60 |
  PS60=1;  //-----------|  0   |  0   |:发送不输出校验位,接收无校验接受
           //-----------|  0   |  1   |:发送输出零校验,接收按零校验接受
           //-----------|  1   |  0   |:发送输出奇校验,接收按奇校验判断
           //-----------|  1   |  1   |:发送输出偶校验,接收按偶校验判断
  CL6=1;   //-----------CL6=0传输数据的字符宽度为7位,CL6=1传输数据的字符宽度为8位
  SL6=0;   //-----------SL6=0发送数据停止位个数为1位,SL6=1:发送数据停止位个数为2位
  ISRM6=1; //-----------ISRM6=0:出错时产生INTSRE6,ISRM6=1:出错时产生INTSR6
  
  SBRF6=1;
  SBRT6=0;
/*     |------|------|------|------|------|------|------|------|*
       |  7   |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
ISC   |------|------|------|------|------|------|------|------|
       |   0  |  0   |ISC5  |ISC4 |ISC3  | ISC2 |ISC1  |ISC0  |
       |------|------|------|------|------|------|------|------|*/
  
  ISC5=1;//-------------|ISC5|ISC4|
  ISC4=0;//-------------| 0  | 0  |:输入源选择TXD6-P112,RXD6-P113
         //-------------| 1  | 0  |:输入源选择TXD6-P13,RXD6-P12
  ISC3=0;//-------------ISC3=0:RXD6/113输入禁止,ISC3=1:RXD6/P113输入允许
  ISC2=0;//-------------ISC2=0:不允许控制TI52输入(P34)ISC2=1:允许控制TI52输入(P34)  
  ISC1=0;//-------------TI000=0输入源选择P33,TI000=1输入源选择RXD6(P12或P113)
  ISC0=0;//-------------ISC0=0:INTP0输入源选择为INTP0(P120),ISC0=1:INTP0输入源选择为RXD6(P12或P113)
  
  PF13=1;//-------------USRT6的输出选择P13
  PM13=0;//-------------选择P13为TXD6
  PM12=1;//-------------选择P12为RXD6
  P13=1;   //-----------预置P13为1
  CKSR6=0X03;//---------选择串口基本时钟fxclk6为fPRS/8
  BRGC6=0x1a;//---------设置分频系数k为52,波特率为9600
  SRMK6=0;//------------SRMK6=0,打开UART6接收中断,SRMK6=1,屏蔽UART6接收中断
  STMK6=1;//------------STMK6=0;打开UART6发送中断, STMK6=1,屏蔽UART6发送中断
}

void Clock_inital(void)
{  
// AMPH=0;//---------------------------AMPH
         //---------------------------| 0 |主系统时钟小于10MHz
         //---------------------------| 1 |主系统时钟大于10MHz小于20MHz
  EXCLK=0;//----------- |EXCLK|OSCSEL|
  OSCSEL=0;  //---------|  0  |   0  |:X1振荡器停止
             //---------|  0  |   1  |:X1振荡器运行,引脚接晶振
             //---------|  1  |   0  |:X1振荡器停止,引脚为IO
             //---------|  1  |   1  |:外部时钟输入模式,引脚P121为IO,P122为外部时钟输入
// XTSTART=0;//----------|XTSTART|EXCLKS|OSCSELS|
// EXCLKS=0;//-----------|  0  |  0  |  0  |:XT1副系统时钟关闭,连接引脚为IO
// OSCSELS=0;//----------|  0  |  0  |  1  |:XT1副系统时钟振荡,引脚连接32768Hz晶振
            //----------|  0  |  1  |  0  |:XT1副系统时钟关闭,引脚为IO
                        //----------|  0  |  1  |  1  |:XT1副系统时钟为外部时钟输入模式P123为IO ,P124为外部时钟输入引脚
                        //----------|  1  |  *  |  *  |:XT1副系统时钟振荡,引脚连接32768晶振
  CLS=0;//--------------CLS=0:选择CPU时钟为主系统时钟,CSL=1:选择CPU时钟为副系统时钟
  CSS=1;//--------------| CSS | PCC2 | PCC1 | PCC0 |
  PCC2=0;//-------------|  0  |   0  |  0   |  0   |:CPU时钟选择为fxp
  PCC1=0;//-------------|  0  |   0  |  0   |  1   |:CPU时钟选择为fxp/2
  PCC0=0;//-------------|  0  |   0  |  1   |  0   |:CPU时钟选择为fxp/4
         //-------------|  0  |   0  |  1   |  1   |:CPU时钟选择为fxp/8
         //-------------|  0  |   1  |  0   |  0   |:CPU时钟选择为fxp/16
         //-------------|  1  |   0  |  0   |  0   |:CPU时钟选择为fsub/2
  RSTS=0;//-------------RSTS=0:内部高速振荡器为精确稳定,RSTS=1:内部高速振荡器为稳定工作
  LSRSTOP=1;//----------LSRSTOP=0:内部低速振荡器运行,LSRSTOP=1:内部低速振荡器停止运行
  RSTOP=0;//------------RSTOP=0内部高速振荡器振荡,RSTOP=1:内部高速振荡器停止
  MSTOP=1;//------------MSTOP=0:外部高速振荡器X1振荡,MSTOP=1:外部高速振荡器X1停止
  MCS=0; //-------------MCS=0:主系统时钟选择为内部高速振荡器,MCS=1主系统时钟使用外部高速振荡时钟
  XSEL=0;//-------------|XSEL|MCM0|
  MCM0=0;//-------------| 0  |  0 |:主系统时钟fxp和外部硬件时钟fprs选择为内部高速振荡时钟frh
         //-------------| 0  |  1 |:主系统时钟fxp和外部硬件时钟fprs选择为内部高速振荡时钟frh
         //-------------| 1  |  0 |:主系统时钟fxp和选择为内部高速振荡时钟frh,外部硬件时钟fprs选择为fxh
         //-------------| 1  |  1 |:主系统时钟fxp和外部硬件时钟fprs选择为高速系统时钟fxh
         //---------------------------时钟fPRS选择为内部高速振荡
         //---------------------------时钟fRH
  
}

#pragma vector = INTSR6_vect
__interrupt void INTSR6_jieshou( void )
{
  
  k=65;
  SRIF6=0;
  jieshou_flag=1;
  jieshou_tem=RXB6;
  
}

出0入0汤圆

 楼主| 发表于 2009-7-30 14:39:15 | 显示全部楼层
#include "nec78f0xb.h" 头文件是原头文件里没定义的选项
/*----------------------------------------------
* SFR bits (default names)
*--------------------------------------------*/

#ifndef __78K_BIT_STRUCTURE__
  #define __78K_BIT_STRUCTURE__
  typedef struct
  {
    unsigned char no0:1;
    unsigned char no1:1;
    unsigned char no2:1;
    unsigned char no3:1;
    unsigned char no4:1;
    unsigned char no5:1;
    unsigned char no6:1;
    unsigned char no7:1;
  } __BITS8;
#endif


#define P00              P0_bit.no0
#define P01              P0_bit.no1
#define P02              P0_bit.no2
#define P03              P0_bit.no3
#define P04              P0_bit.no4
#define P06              P0_bit.no6
#define P07              P0_bit.no7



#define PM00              PM0_bit.no0
#define PM01              PM0_bit.no1
#define PM02              PM0_bit.no2
#define PM03              PM0_bit.no3
#define PM04              PM0_bit.no4
#define PM05              PM0_bit.no5
#define PM06              PM0_bit.no6
#define PM07              PM0_bit.no7


#define P10              P1_bit.no0
#define P11              P1_bit.no1
#define P12              P1_bit.no2
#define P13              P1_bit.no3
#define P14              P1_bit.no4
#define P16              P1_bit.no6
#define P17              P1_bit.no7

#define PM10              PM1_bit.no0
#define PM11              PM1_bit.no1
#define PM12              PM1_bit.no2
#define PM13              PM1_bit.no3
#define PM14              PM1_bit.no4
#define PM15              PM1_bit.no5
#define PM16              PM1_bit.no6
#define PM17              PM1_bit.no7

#define P20              P2_bit.no0
#define P21              P2_bit.no1
#define P22              P2_bit.no2
#define P23              P2_bit.no3
#define P24              P2_bit.no4
#define P26              P2_bit.no6
#define P27              P2_bit.no7

#define PM20              PM2_bit.no0
#define PM21              PM2_bit.no1
#define PM22              PM2_bit.no2
#define PM23              PM2_bit.no3
#define PM24              PM2_bit.no4
#define PM25              PM2_bit.no5
#define PM26              PM2_bit.no6
#define PM27              PM2_bit.no7

#define P30              P3_bit.no0
#define P31              P3_bit.no1
#define P32              P3_bit.no2
#define P33              P3_bit.no3
#define P34              P3_bit.no4
#define P36              P3_bit.no6
#define P37              P3_bit.no7

#define PM30              PM3_bit.no0
#define PM31              PM3_bit.no1
#define PM32              PM3_bit.no2
#define PM33              PM3_bit.no3
#define PM34              PM3_bit.no4
#define PM35              PM3_bit.no5
#define PM36              PM3_bit.no6
#define PM37              PM3_bit.no7

#define P40              P4_bit.no0
#define P41              P4_bit.no1
#define P42              P4_bit.no2
#define P43              P4_bit.no3
#define P44              P4_bit.no4
#define P46              P4_bit.no6
#define P47              P4_bit.no7

#define PM40              PM4_bit.no0
#define PM41              PM4_bit.no1
#define PM42              PM4_bit.no2
#define PM43              PM4_bit.no3
#define PM44              PM4_bit.no4
#define PM45              PM4_bit.no5
#define PM46              PM4_bit.no6
#define PM47              PM4_bit.no7

#define P60              P6_bit.no0
#define P61              P6_bit.no1
#define P62              P6_bit.no2
#define P63              P6_bit.no3
#define P64              P6_bit.no4
#define P66              P6_bit.no6
#define P67              P6_bit.no7



#define PM60              PM6_bit.no0
#define PM61              PM6_bit.no1
#define PM62              PM6_bit.no2
#define PM63              PM6_bit.no3
#define PM64              PM6_bit.no4
#define PM65              PM6_bit.no5
#define PM66              PM6_bit.no6
#define PM67              PM6_bit.no7

#define P70              P7_bit.no0
#define P71              P7_bit.no1
#define P72              P7_bit.no2
#define P73              P7_bit.no3
#define P74              P7_bit.no4
#define P76              P7_bit.no6
#define P77              P7_bit.no7



#define PM70              PM7_bit.no0
#define PM71              PM7_bit.no1
#define PM72              PM7_bit.no2
#define PM73              PM7_bit.no3
#define PM74              PM7_bit.no4
#define PM75              PM7_bit.no5
#define PM76              PM7_bit.no6
#define PM77              PM7_bit.no7

#define P80              P8_bit.no0
#define P81              P8_bit.no1
#define P82              P8_bit.no2
#define P83              P8_bit.no3
#define P84              P8_bit.no4
#define P86              P8_bit.no6
#define P87              P8_bit.no7



#define PM80              PM8_bit.no0
#define PM81              PM8_bit.no1
#define PM82              PM8_bit.no2
#define PM83              PM8_bit.no3
#define PM84              PM8_bit.no4
#define PM85              PM8_bit.no5
#define PM86              PM8_bit.no6
#define PM87              PM8_bit.no7

#define PM110              PM11_bit.no0
#define PM111              PM11_bit.no1
#define PM112              PM11_bit.no2
#define PM113              PM11_bit.no3


//////////16位定时器控制寄存器位定义//////////

/*********16位定时器模式控制寄存器TMC00位补充定义********/
#define    TMC001          TMC00_bit.no1
#define    TMC002          TMC00_bit.no2
#define    TMC003          TMC00_bit.no3

/*********16位定时器捕捉/比较控制寄存器CRC00位补充定义********/
/*     |-----|------|------|------|------|------|------|------|*
       |  7  |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
CRC00 |-----|------|------|------|------|------|------|------|
       |  0  |   0  |   0  |   0  |   0  |CRC002|CRC001|CRC000|
       |-----|------|------|------|------|------|------|------|*/

#define    CRC000          CRC00_bit.no0
#define    CRC001          CRC00_bit.no1
#define    CRC002          CRC00_bit.no2

/****************16位定时器输出控制寄存器00(TOC00)位补充定义*************/
     /*|-----|------|------|------|------|-----|------|------|*
       |  7  |  6   |  5   |  4   |  3   |  2  |  1   |  0   |
TOC00 |-----|------|------|------|------|-----|------|------|
       |  0  |OSPT00|OSPE00|TOC004|LVS00 |LVR00|TOC001|TOE00 |
       |-----|------|------|------|------|-----|------|------|*/


#define TOC001             TOC00_bit.no1
#define TOC004              TOC00_bit.no4


/*************************预分频器模式寄存器00(PRM00)位补充定义*************/
/*     |-----|-----|-----|-----|-----|-----|------|------|*
       |  7  |  6  |  5  |  4  |  3  |  2  |  1   |  0   |
PRM00 |-----|-----|-----|-----|-----|-----|------|------|
       |ES101|ES100|ES001|ES000|  0  |  0  |PRM001|PRM000|
       |-----|-----|-----|-----|-----|-----|------|------|*/

#define PRM000  PRM00_bit.no0
#define PRM001  PRM00_bit.no1
#define ES000   PRM00_bit.no4
#define ES001   PRM00_bit.no5
#define ES100   PRM00_bit.no6
#define ES101   PRM00_bit.no7

/*     |-----|------|------|------|------|------|------|------|*
       |  7  |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
TMC50 |-----|------|------|------|------|------|------|------|
       |TCE50|TMC506|   0  |   0  |LVS50 |LVR50 |TMC501|TOE50 |
       |-----|------|------|------|------|------|------|------|*/
#define TMC501            TMC50_bit.no1
#define TMC506            TMC50_bit.no6



/*     |-----|------|------|------|------|------|------|------|*
       |  7  |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
TMC51 |-----|------|------|------|------|------|------|------|
       |TCE51|TMC516|   0  |   0  |LVS51 |LVR51 |TMC511|TOE51 |
       |-----|------|------|------|------|------|------|------|*/
#define TMC511            TMC51_bit.no1
#define TMC516            TMC51_bit.no6

/*     |-----|------|------|------|------|------|------|------|*
       |  7  |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
TCL50 |-----|------|------|------|------|------|------|------|
       |0    |   0  |   0  |   0  |   0   TCL502|TCL501|TCL500|
       |-----|------|------|------|------|------|------|------|*/

#define TCL502               TCL50_bit.no2
#define TCL501               TCL50_bit.no1
#define TCL500               TCL50_bit.no0

/*     |-----|------|------|------|------|------|------|------|*
       |  7  |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
TCL51 |-----|------|------|------|------|------|------|------|
       |0    |   0  |   0  |   0  |   0   TCL512|TCL511|TCL510|
       |-----|------|------|------|------|------|------|------|*/

#define TCL512            TCL51_bit.no2
#define TCL511            TCL51_bit.no1
#define TCL510            TCL51_bit.no0

//UART6
/*     |------|------|------|------|------|------|------|------|*
       |  7   |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
ASIM6 |------|------|------|------|------|------|------|------|
       |POWER6|TXE6  |RXE6  |PS61  |PS60  | CL6  |SL6   |ISRM6 |
       |------|------|------|------|------|------|------|------|*/

#define ISRM6;            ASIM6_bit.no0
#define SL6;              ASIM6_bit.no1
#define CL6;              ASIM6_bit.no2
#define PS60;             ASIM6_bit.no3
#define PS61;             ASIM6_bit.no4
#define RXE6              ASIM6_bit.no5

/*     |------|------|------|------|------|------|------|------|*
       |  7   |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
ISC   |------|------|------|------|------|------|------|------|
       |   0  |  0   |ISC5  |ISC4 |ISC3  | ISC2 |ISC1  |ISC0  |
       |------|------|------|------|------|------|------|------|*/

#define ISC0              ISC_bit.no0
#define ISC1              ISC_bit.no1
#define ISC2              ISC_bit.no2
#define ISC3              ISC_bit.no3
#define ISC4              ISC_bit.no4
#define ISC5              ISC_bit.no5



/*     |------|------|------|------|------|------|------|------|*
       |  7   |  6   |  5   |  4   |  3   |   2  |  1   |  0   |
PF1   |------|------|------|------|------|------|------|------|
       |   0  |  0   |0     |0     |PF13  | 0     |0    |0     |
       |------|------|------|------|------|------|------|------|   适用于0453以下芯片*/
#define PF13              PF1_bit.no3



//CLOCK
/*     |------|------|------|-------|------|------|------|------|*
       |  7   |  6   |  5   |  4    |  3   |   2  |  1   |  0   |
OSCCTL |------|------|------|-------|------|------|------|------|
       |EXCLK |OSCSEL|EXCLKS|OSCSELS| 0    |  0   |  0   |AMPH  |
       |------|------|------|-------|------|------|------|------|   适用于0453以不含EXCLKS和AMPH*/
#define AMPH              OSCCTL_bit.no0
#define EXCLKS            OSCCTL_bit.no5


/*     |------|-------|------|-------|------|------|------|------|*
       |  7   |  6    |  5   |  4    |  3   |   2  |  1   |  0   |
PCC    |------|-------|------|-------|------|------|------|------|
       |  0   |XTSTART|  CLS |  CSS  | 0    | PCC2 | PCC1 | PCC0 |
       |------|-------|------|-------|------|------|------|------|   适用于0453以不含XTSTART*/
#define PCC0              PCC_bit.no0
#define PCC1              PCC_bit.no1
#define PCC2              PCC_bit.no2
#define XTSTART           PCC_bit.no6

出0入0汤圆

 楼主| 发表于 2009-7-30 14:46:08 | 显示全部楼层
大家可以把上面的代码贴在自己的系统下试一下,编译器是IAR。

出0入0汤圆

发表于 2009-7-30 16:28:35 | 显示全部楼层
初步判断就有没有设置选项字节的原因,AD中断没有出问题原因有可能是由于AD一次的时间很短,虽然在复位但是又不停地在AD所以看不出来,对于上面的程序有仿真器的话可以看看复位标志。
    在主函数前添加这样两行语句
#pragma location = "OPTBYTE"
__root const unsigned char option_bytes[]={0x6E,0x01,0x00,0x00};
关闭看门狗,在试一下。

出0入0汤圆

 楼主| 发表于 2009-7-30 16:49:03 | 显示全部楼层
问题解决了,是狗没关的问题。谢谢!

出0入0汤圆

 楼主| 发表于 2009-7-30 16:52:01 | 显示全部楼层
请问zhouli3339926老兄,有没有IAR for NEC的中文资料,给我发一个?好多关于软件的操作都不清楚!我的邮箱是n_q1998@126.com
谢谢!

出0入0汤圆

发表于 2009-7-30 18:18:29 | 显示全部楼层
IAR    的安装目录里面自带有英文的实用说明手册,目前还没有中文的资料。

出0入0汤圆

发表于 2009-9-28 20:58:59 | 显示全部楼层
楼3兄弟:
  我是想设置9600bps用业UART6通信,也是和你的那样设置:

  CKSR6=0X03;//---------选择串口基本时钟fxclk6为fPRS/8
  BRGC6=0x1a;

为什么我的不能通信啊?但是我的1200bps,2400bps,4800bps,是可以能通信的。请你帮忙解决一下,谢谢啊!

出0入0汤圆

发表于 2010-12-2 10:36:21 | 显示全部楼层
我用楼主的程序,可以跑起来,但是出现一个奇怪的现象。。。。
昨天晚上测试的时候我输入hello,串口输出hello
今天我输入hello,输出只有一个h
即一次只能输出一个字符了,昨天可以一次输出一个字符段。
哪位可以解释一下呢。
谢谢。。。。。。。。。。。。。。。。。。。。。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 10:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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