TI论坛
直播中

贾玲

7年用户 184经验值
私信 关注
[问答]

ADS8364Y没有EOC信号产生

1. 程序如下:
#include
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
uint tta1 = 0;
uint data1 = 0;
uint data2 = 0;
uint count = 0;
long float total = 0;
ulint output = 0;
uchar chuan1[] = [0XCC,0X33,0XC3,0X3C];
uchar chuan2[]=[0XAA,0XC0,0X00,0X00,0X63,0X05,0X00,0X0A,0X00,0X0A,0XF8,0X00,0X00,0X1F];
uchar chuan3[]=[0XCC,0X33,0XC3,0X3C,0XAA,0XC1,0X08,0X00,0X00,0X01,0XCC,0X33,0XC3,0X3C];
//串口0发送函数
void UART0_send_data(uchar data0)
  [
  while(!(IFG2&UCA0TXIFG));
  UCA0TXBUF = data0;
  ]
//时钟初始化
void sys_clock_init (void)                //万用表侧时钟正常
  [int i;
  WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1 &= ~XT2OFF;
  BCSCTL2 |= SELM_2 + SELS + DIVS_1;
  BCSCTL3 |= XT2S_2;
  while((IFG1&OFIFG))
    [
    IFG1 &= ~OFIFG;
    for(i=0;i<0xff;i++);
    ]
  P5DIR = 0X70;
  P5SEL = 0X70;
  P1SEL = 0X10;          //p1.4设置为外围模式,smclk
  P1DIR = 0X10;
  ]
//串口初始化
void sys_UART0_init(void)      //串口与液晶屏通讯正常
  [
  UCA0CTL1 |= UCSSEL_2;
  UCA0BR0=34;
  UCA0BR1=0;
  UCA0MCTL |= UCBRS2 + UCBRS1;
  UCA0CTL1 &= ~UCSWRST;
  UCA0MCTL &= ~UCOS16;
  P3DIR |= 0X10;
  P3SEL |= 0X10;
//  __bis_SR_register(GIE);
  _BIS_SR(GIE);
  ]
//采样IO口初始化
void sys_IO_init()
  [
  P1IE |= 0X08;               //p1.3中断允许开启
  P1IES |= 0X08;              //p1.3下降沿触发中断  
  P1IFG &= ~0X08;             //清除中断标志
  P1OUT &= ~0X20;
  P1OUT |= 0X20;            //ADC_RST,先8364复位,再置位
  
  P1DIR |= 0XF5;              //p1的012 456位设置为输出方向  
  P1OUT &= ~0X01;             //清零,cs片选信号  
  P1OUT |= 0X04;              //置1,8364读取信号停止
  P1OUT &= ~0X40;             //HOLDA B C=0
  
  P2DIR |= 0X87;              //p2的012和7位设置为输出
  P2OUT &= ~0X07;             //P2.0 1 2,设置读取模式为0,CHA0输出
  P2OUT |= 0X80;
  
  __bis_SR_register(GIE);
  ]
//定时器A初始化
void sys_timerA_init(void)
  [
  TACCR0 = 200;
  TACCTL0 |= CCIE;
  TACTL |= TASSEL_2 + MC_1;   //ta2,即p1.4产生5k方波  
  ]

//主函数
void main (void)
  [
  uint i,j,k;
  WDTCTL = WDTPW + WDTHOLD;
  sys_clock_init();
  sys_UART0_init();
  sys_TimerA_init();
  sys_IO_init();
  while(1)                    //液晶界面切换程序。
   [
    for(i=0;i<21;i++)
    [
    UART0_send_data(0XAA);
    UART0_send_data(0X70);
    UART0_send_data(i);
    for(j=0;j<4;j++)
      UART0_send_data(chuan1[j]);
    for(j=0xffff;j>0;j--)
      for(k=0;k<5;k++);
    ]
   ]
  ]
#pragma vector = PORT1_VECTOR
__interrupt void PORT_1 (void)  //进入中断,用指示灯闪烁表明EOC信号是否产生
  [
  count++;
  if(count == 600)
    [
    P2OUT ^= 0X80;
    count=0;
    ]
  P1IFG &= ~0X08;
/*
  uchar i;
  uint c ,d;
  P1IFG &= ~0X08;           //中断标志清零
  count++;
  P1OUT ^= 0X04;            //P1.2取反(变为低电平)
  for(i=0;i<10;i++);        //延时,等待读取数据
  data1 = P4IN;
  P1OUT ^= 0x04;            //p1.2取反(变为高电平)
  P1OUT ^= 0x04;            //p1.2取反(变为低电平)
  for(i=0;i<5;i++);         //延时,等待读取数据
  data2 = P4IN;           
  total += pow(data2*256+data1,2);
  if(count==5000)
    [
    P2OUT ^= 0X80;
    output = sqrt(total/2500);
    d = output % 255*4;
    c = output /255*4;
    for(i=0;i<14;i++)
      UART0_send_data(chuan2);
    UART0_send_data(0X00);
    UART0_send_data(0X00);
    UART0_send_data(c);
    UART0_send_data(d);
    for(i=0;i<14;i++)
      UART0_send_data(chuan3);
    count=0;
    ]
  P1OUT ^= 0X04;            //p1.2取反(高电平),停止读取数据
*/
]
#pragma vector = TIMERA0_VECTOR                    //万用表测HOLDX信号1khz正常
__interrupt void Timer_A(void)
  [
  tta1++;
  if(tta1 == 10)
    [
      P1OUT ^= 0X40;            //HOLDA HOLDB HOLDC 使用p1.6共同控制
      tta1 = 0;
    ]
  ]


2 测试EOC信号是否输出:将msp430f2619单片机的P1.3脚接EOC。如果产生中断,则p2.7即led闪烁。
3. 实验:一直没有看到led闪烁。
4. 中断是否相应:将clk接入p1.3,led闪烁正常。

回帖(2)

贾玲

2019-3-1 14:10:48
f附件是电路图。
举报

贾玲

2019-3-1 14:17:16
P1.3脚和p1.4脚通过割线,交换
举报

更多回帖

发帖
×
20
完善资料,
赚取积分