自我介紹下:60后從業模電,自封工程師,動手能力強。學單片機歷程30年,學級仍是未入門的學前班。所以各位看官都是我的老師,各位的每句話都能使我進步!期望大家都出一份正能量!廢話不說入正題: PIC12F683單片機,編程平臺MPLAB IDE -V8.84 編譯器HI-TECH-PICC_9.83 無單片機開發板,有RF809H編程器,有GA1202CAL示波器 實驗要求單片機GP0和GP1輸出20KHz占空比為50%的互補方波
C程序: #include <pic.h>
void IO_init(void) /*端口初始化*/ { TRISIO=0x00; GPIO=0X00; } void timer0_init(void) //定時器0初始化使用系統默認時鐘4M fosc/4 所以計數周期為1us { T0CS=0; //timer0工作于定時器方式 PSA=1; //timer0不分頻 T0IF=0; //清timer0中斷標志 TMR0=0xE0; /*置初值 20KHz的半個周期為25us*/ T0IE=1; //timer0中斷允許 GIE=1; //開全局中斷 }
void interrupt isr(void) //中斷子程序 { TMR0=0xE0; //定時器0置初值25us T0IF=0; //清中斷標志 GP0=~GP0; //GP0位取反 GP1=!GP0; //使GP1引腳取反GP0 /*在這里廢寢忘食3總天,一度引起孫子的奶奶發飆 也沒有折騰出正確的結果*/ } void main(void) //主程序 { IO_init(); //引腳初始化函數 timer0_init(); //定時器0初始化函數 while(1) //死循環 { } }
寫入單片機;手工搭建最小系統上示波器看波形結果頻率是26.3KHz,GP0引腳正占空比只有12.6%,負占空比87.3%;GP1引腳正占空比86.3%,負占空比13.6%幅值5.04V 刪除中斷子程序里的GP1=!GP0語句結果GP0引腳示波器上只有一條5.17V的直線沒有波形了,頻率顯示為小于10Hz. 大家說怪不怪。”緫揋P0輸出信號不受影響的怎么就沒有了呢???? 接下來就是折騰了反復換TMR0的初值,最后試到0xE0時頻率是19.96KHz正占空比9.6%負占空比是90.4%,也就是說正脈沖的寬度是4.8us這個值基本是恒定的試了下,從10KHz到30KHz這個值不變.然后大發現這個4.8us竟然是執行GP1=!GP0 這條語句所耗費的時間,所以上述刪除這條語句示波器上只顯示一直線。
|