完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//#include "keypad.h"
#include "1602(zhp)LT.h" //#include"舵机.h" #include"BoardConfig.h" /******************************************** 软件延时 ********************************************/ //typedef unsigned int uint; //typedef unsigned char uchar; #define CPU_F ((double)8000000) #define DELAY_US(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define DELAY_MS(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define num 20 unsigned char wan,qian,bai,shi,ge; unsigned int results[num]={0}; unsigned char t=0; unsigned int ave=0; unsigned int filter[2]; void transform(unsigned int dat) { wan=dat/10000+0x30; qian=dat%10000/1000+0x30; bai=dat%1000/100+0x30; shi=dat%100/10+0x30; ge=dat%10+0x30; } void main() { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗 BCSCTL1 &= ~XT2OFF; while(IFG1&OFIFG) { IFG1&= ~OFIFG; DELAY_US(50); } BCSCTL2 |= SELM_2+SELS+DIVS_3; //MCLK 8M,SMCLK 1M lcd_init1602 (); //keypad_init(); //write1char1602(0,0,i/10+0x30); //BoardConfig(0xb8);//11111000 //_EINT(); WDTCTL=WDTPW+WDTHOLD; P6SEL|=BIT1; ADC12CTL0=ADC12ON+SHT0_8+SHT1_8+MSC; ADC12CTL1=SHP+CONSEQ_2+CSTARTADD_1; ADC12MCTL1=INCH_1; ADC12IE=BIT1; ADC12CTL0|=ENC; _EINT(); ADC12CTL0|=ADC12SC; while(2); } #pragma vector=ADC_VECTOR __interrupt void ADC12ISR() { ADC12IFG=0X00; t++; filter[0]=ADC12MEM0; if(filter[0]-filter[1]>5) ave=ave+filter[1]; else ave=ave+filter[0]; if(t==11) { t=0; ave=(unsigned int)(ave/11); transform(ave); write1char1602(0,0,wan); write1char1602(1,0,qian); write1char1602(2,0,bai); write1char1602(3,0,shi); write1char1602(4,0,ge); ave=0; } filter[1]=filter[0]; } 我明明读了ADC12MEM啊,为什么还是不能清除ADC12IFG呢? |
|
相关推荐
8个回答
|
|
楼主的在中断执行的程序太多了。
|
|
|
|
中断太多,这次完成了,下一次又接着来到了。所以总是执行中断的。
|
|
|
|
如果CPU的运行速度比较慢的话,在还没有运行完这些代码,ADC下一次的中断又到来了
|
|
|
|
你在刚进行中断的时候清除了ADC的中断标志位,但是还没有跳出中断,ADC的中断标志位又置位,所以会误以为没有跳出中断
|
|
|
|
建议把不必要的操作都放到主程序里
|
|
|
|
可以把清除中断标志位的语句放在中断服务子程序的最后面
|
|
|
|
建议把不必要的操作都放到主程序里,让中断服务程序尽量简短
|
|
|
|
ADC的中断标志位又置位
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
316 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
834 浏览 2 评论
1996 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1099 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1525 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 14:41 , Processed in 0.838482 second(s), Total 87, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号