![]() |
發(fā)布時間: 2019-1-24 12:14
正文摘要:想做一個轉換器,就是信號上升沿和下降沿都可以觸發(fā)的情況,假如開關控制給STC15F104w單片機的3腳上升沿觸發(fā)信號,然后STC15F104w mcu的8腳輸出一個高電平持續(xù)1S,就變低電平。隨后STC15F104w的1腳檢測電位是高電平 ... |
xbox007 發(fā)表于 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的中斷類型下降沿觸發(fā) EX0 = 1; //使能INT0中斷 } else if(IN | INT0==0) { IT0 = 0; //設置INT0的中斷類型上升沿觸發(fā) 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 發(fā)表于 2019-1-24 20:35 如果上面方法不行,那么改成這個應該可以實現吧,就是信號上升沿和下降沿都可以觸發(fā)的情況,假如開關控制給STC15F104w單片機的7腳上升沿觸發(fā)信號,然后STC15F104w mcu的8腳輸出一個高電平持續(xù)1S,就變低電平。隨后STC15F104w的1腳檢測電位是高電平還是低電平,如果是高電平則3腳為下降沿觸發(fā),開關控制給STC15F104w的3腳下降沿觸發(fā)信號,然后STC15F104w的8腳輸出一個高電平持續(xù)1S,就變低電平。1腳高電平下降沿觸發(fā),1腳低電平上升沿觸發(fā),代碼該怎樣寫哪位朋友可以幫個忙謝謝了! |
STC15F104W的外部中斷0(INT0)和外部中斷1(INT1)觸發(fā)有兩種觸發(fā)方式,外部中斷2(INT2)和外部中斷3(INT3)只能下降沿觸發(fā)。STC15F104W的3腳是INT3,所以樓主的要求做不到。 |