完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
路过的大神,已经设置了标志位,为什么每一次进中断都会执行中断里边的while循环呢,求解
#include "config.h" #include ***it charge=P3^3; ***it stimulate=P3^0; u8 x; u8 count=0; #define CMPEN 0x80 //CMPCR1.7:比较器模块使能位 #define CMPIF 0x40 //CMPCR1.6:比较器中断标志位 #define PIE 0x20 //CMPCR1.5:比较器上升沿中断使能位 #define NIE 0x10 //CMPCR1.4:比较器下降沿中断使能位 #define PIS 0x08 //CMPCR1.3:比较器正极选择位 #define NIS 0x04 //CMPCR1.2:比较器负极选择位 #define CMPOE 0x02 //CMPCR1.1:比较器结果输出控制位 #define CMPRES 0x01 //CMPCR1.0:比较器比较结果标志位 #define INVCMPO 0x80 //CMPCR2.7:比较结果反向输出控制位 #define DISFLT 0x40 //CMPCR2.6:比较器输出端0.1us滤波控制位 #define LCDTY 0x3F //CMPCR2.[5:0]:比较器输出的区抖时间控制 /*初始化IO口*/ void GPIO_config(void) { P5M1=0x30; //设置P55高阻态 P5M0=0x00; P3M1=0x00; //设置P33推挽输出 P3M0=0x09; //设置P30推挽输出 } . . . . /******************** 主函数 **************************/ void main(void) { GPIO_config(); CMPCR1=0xB0; //配置比较器控制寄存器 CMPCR2=0; EA=1; while(1) { stimulate=1; Delay3ms(); stimulate=0; Delay3ms(); } } /*比较器中断*/ void CMP_Isr() interrupt 21 using 1 { u8 y=0; count=count+1; CMPCR1=0xBF; //清完成标志 while(count==2) { if(y<150) { for(x=0;x<200;x++) { charge=1; Delay3ms(); charge=0; Delay5ms(); } if(x==200) { x=0; } y++; } if(y==150) {count=0;} } } |
|
相关推荐
5个回答
|
|
自己先占一楼啊。
|
|
|
|
只要count不为0,当然会进入while循环,改if(count==2)试试
|
|
|
|
顶一个~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
首先第一点,你这个中断一旦进入基本上就跳不出来,你这个当第一次count==2时,进入了while,就跳不出来了,你确实可以改成if,
第二点,我不清楚你这个中断是多长时间进入一次的,你这一个中断程序里面大概要执行8ms*200+,时间是不是有点长 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
651 浏览 0 评论
840 浏览 0 评论
为什么用FatFS在SD卡创建文件,在单片机上读写正常,用读卡器插到电脑上就什么都没有
2237 浏览 0 评论
1861 浏览 2 评论
《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验
689 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11406 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-6 14:15 , Processed in 0.748145 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号