xbox007 发表于 2019-1-25 08:41 给你写个程序,未经验证,你试试。 #include <STC15F2K60S2.H> //#include "reg51.h" #include "intrins.h" //----------------------------------------------- sbit INT0= P3^2;//中断入口 sbit OUT = P3^3;//输出端口 sbit IN = P3^4;//控制端口 void Init() //50毫秒@11.0592MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器16位自动重载模式 TL0 = 0x00; //设置定时初值 TH0 = 0x4C; //设置定时初值 TF0 = 0; //清除TF0标志 // TR0 = 1; //定时器0开始计时 // EX0 = 1; //使能INT0中断 EA = 1; //使能总中断 INT0 = 1; //初始化中断入口 OUT = 0; //初始化输出 P3M0 = 0x10; //P3.4推挽输出 P3M1 = 0x00; //P3.4推挽输出 } void main() { unsigned char count=0;//计数变量 Init(); while (1) { if(IN & INT0==1) { IT0 = 1; //设置INT0的中断类型下降沿触发 EX0 = 1; //使能INT0中断 } else if(IN | INT0==0) { IT0 = 0; //设置INT0的中断类型上升沿触发 EX0 = 1; //使能INT0中断 } else EX0 = 0; //关闭INT0中断 } if(TF0==1) { TF0=0; count++; if(count==20) //1秒 { count=0; TR0 = 0; //定时器0停止计时 OUT = 0; //停止计时输出 } } } //外部中断0服务程序 void exint0() interrupt 0 //INT0中断入口 { TR0 = 1; //定时器0开始计时 OUT = 1; //驱动输出(高电平) } |
wulin 发表于 2019-1-24 20:35 如果上面方法不行,那么改成这个应该可以实现吧,就是信号上升沿和下降沿都可以触发的情况,假如开关控制给STC15F104w单片机的7脚上升沿触发信号,然后STC15F104w mcu的8脚输出一个高电平持续1S,就变低电平。随后STC15F104w的1脚检测电位是高电平还是低电平,如果是高电平则3脚为下降沿触发,开关控制给STC15F104w的3脚下降沿触发信号,然后STC15F104w的8脚输出一个高电平持续1S,就变低电平。1脚高电平下降沿触发,1脚低电平上升沿触发,代码该怎样写哪位朋友可以帮个忙谢谢了! |
STC15F104W的外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,外部中断2(INT2)和外部中断3(INT3)只能下降沿触发。STC15F104W的3脚是INT3,所以楼主的要求做不到。 |