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附件是电路图。
f附件是电路图。
举报
2019-3-1 14:17:16
P1.3脚和p1.4脚通过割线,交换
P1.3脚和p1.4脚通过割线,交换
举报
更多回帖