/************************************************ 跳线设置:J7拔掉,J5的23端插上选中喇叭,双排针除PSEN外全部插上双排针除PSEN外全部插上 显示效果:按一下INT0键,喇叭就响再按一此不响依此类推 这个程序我把很多中断设置了进去,给大家留了很多自己修改的空间 ************************************************/ #include <reg52.h> //--------------------------------------------------- //重定义I/0引脚名称 sbit led1=P1^0; sbit led2=P1^1; sbit led3=P1^2; sbit led4=P1^3; sbit laba=P2^2; sbit P13=P1^3; //--------------------------------------------------- //全局变量及位标志定义 bit FINT0; bit FINT1; bit FT0; bit FT1; bit FT2; unsigned char T0_10ms; unsigned char T0_50ms; unsigned char T0_100ms; //--------------------------------------------------- //固定函数声明 void int_0(); //外部中断0 void int_1(); //外部中断1 void timer_0(); //定时器中断1 void timer_1(); //定时器中断2 void serial_1(); //串行中断1 void serial_2(); //串行中断2 //--------------------------------------------------- //用户函数声明 void initial(); //初始化 //--------------------------------------------------- void main(){ initial(); while(1){ P13=0; //为了使按'取消'、'确定'键能够产生INT0及INT1中断 //led4=0; //上一句等价于此句 if(FINT0){ //中断0来到要做什么事情 FINT0=0; laba=~laba; led1=0; //INT0中断时点亮 led2=0; led3=0; led3=0; //可以在此设一个断点 } if(FINT1){ //中断1来到要做什么事情 FINT1=0; led1=1; //INT1中断时熄灭 led2=1; led3=1; } if(FT0){ FT0=0; if(++T0_10ms>30){ T0_10ms=0; //定时多少做什么事,未初始化里定时器尚未设置 } } } } //------------------------------------------------------------------- void initial(){ EA=1; // CPU所有中断开(IE最高位MSB) EX0=1; // INT0中断开 IT0=1; // INT0低电平触发(为1则为下降沿触发) EX1=1; // INT1中断开 IT1=0; // INT1低电平触发(为1则为下降沿触发) return; } //------------------------------------------------------------------- //INT0中断 由P3.2引脚产生 void int_0() interrupt 0 using 0 { FINT0=1; } //------------------------------------------------------------------- //INT1中断 由P3.3引脚产生 void int_1() interrupt 2 using 1 { FINT1=1; } //------------------------------------------------------------------- //定时器0中断 void timer_0() interrupt 1 using 2 { FT0=1; } //------------------------------------------------------------------- //定时器1中断 void timer_1() interrupt 3 using 3 { FT1=1; } //------------------------------------------------------------------- //串行中断1 void serial_1() interrupt 4 { } //------------------------------------------------------------------- //定时器2中断 void timer_2() interrupt 5 { FT2=1; } //-------------------------------------------------------------------
虽然有注释,但还是不太明白。我把程序烧进板子,喇叭直接就间断地响了,按int0不放,声音就变成连续。但我看程序看不出有这个效果。连哪里是令喇叭响也找不着。望指导。 怎么这个论坛不是即见即所得的啊?不会编辑了。。。
你肯定不是用的ie发的帖子吧,这个论坛发代码最好用ie的,如果说你烧入程序喇叭直接就响了,这说明程序已经进入的int0的中断了,很可能是你的无线模块没有拔掉,因为无线模块也是用的p3.2口的
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |