完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我ECT的通道0接8赫兹的TTL电平,通道1接768赫兹的TTL电平,中断设为上升沿触发,可是通道1的sum_ut和sum_ua在interrupt 8里串口发送时变成0了,而且不给TTL电平,还是一直在发送数据,这是为什么?当我给TTL电平的时候,它不进interrupt 9的中断,这是为什么啊?
做了好长时间都不行,请各位帮帮忙,万分感谢! #include #include "derivative.h" /* derivative-specific definitions */ #define BUS_CLOCK 32000000 //总线频率 #define OSC_CLOCK 16000000 //晶振频率 #define BAUD 9600 #define U PTT_PTT0 #define V PTT_PTT1 #define W PTT_PTT2 #define Z PTT_PTT3 unsigned int sum_ut,sum_ua,sum_zt=0,sum_za=0; unsigned int ut[9],ua[9],angle[3]; unsigned int a=0,b=0,c=0,d=0,e=0,f=0,g=0,i,j; unsigned char *send,data_receive; /*************************************************************/ /* 初始化锁相环 */ /*************************************************************/ void INIT_PLL(void) { CRGINT = 0; //关中断 CLKSEL_PLLSEL = 0; //在未初始化PLL前不使用PLL的输出作为CPU时钟 #if(BUS_CLOCK == 40000000) SYNR = 4; #elif(BUS_CLOCK == 32000000) SYNR = 3; #elif(BUS_CLOCK == 24000000) SYNR = 2; #endif REFDV = 1; //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M PLLCTL_PLLON = 1; //开PLL while (CRGFLG_LOCK == 0); //等待PLL锁定频率 CLKSEL_PLLSEL = 1; //选择系统时钟由PLL产生 } /************************************************************/ /* 初始化ECT模块 */ /************************************************************/ void initialize_ect(void) { TSCR1 = 0x80; // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器) TIOS = 0x00; //指定通道0为输入捕捉方式 TCTL3 = 0x00; TCTL4 = 0x95; // 设置通道0为捕捉上升沿方式 PACTL = 0x00; // PAC2和PAC3级联,1代表级联 TIE = 0xff; // 允许通道0定时中断 TSCR2 = 0x07; // 预分频系数pr2-pr0:111,时钟周期为4us, TFLG1 = 0xff; // 清除各IC/OC中断标志位 TFLG2 = 0xff; // 清除自由定时器中断标志位 } /*************************************************************/ /* 初始化SCI */ /*************************************************************/ void INIT_SCI(void) { SCI0BD = BUS_CLOCK/16/BAUD; //设置SCI0波特率为9600 SCI0CR1 = 0x00; //设置SCI0为正常模式,八位数据位,无奇偶校验 SCI0CR2 = 0x2c; //允许发送数据,允许发送中断功能 } /*************************************************************/ /* 串口发送函数 */ /*************************************************************/ void SCI_send(unsigned int data) { while(!SCI0SR1_TDRE); //等待发送数据寄存器(缓冲器)为空 SCI0DRL = data; } /*************************************************************/ /* 串口接收函数 */ /*************************************************************/ unsigned char SCI_receive(void) { while(!SCI0SR1_RDRF); //等待发送数据寄存器满 return(SCI0DRL); } /*************************************************************/ /* 串口中断发送字符串函数 */ /*************************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt 8 capture0(void) { TFLG1_C0F = 1; if(a<9) { ut[a++]=sum_ut; ua[b++]=sum_ua; sum_ut=0; sum_ua=0; } if(a==9) { for(i=1;i<9;i++) { SCI_send(ut[i]); SCI_send(ua[i]); } a=0; } } void interrupt 9 capture1(void) { TFLG1_C4F = 1; //速度信号 if(U==1) sum_ut++; if(U==0) sum_ua++; } #pragma CODE_SEG DEFAULT /*************************************************************/ /* 主函数 */ /*************************************************************/ void main(void) { DisableInterrupts; INIT_PLL(); INIT_SCI(); initialize_ect(); EnableInterrupts; for(;;) { } } |
|
相关推荐
1个回答
|
|
你的问题解决了吗?我也遇到同样的问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
489 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
498 浏览 0 评论
655 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1329 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
558 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11752 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 15:16 , Processed in 0.515139 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号