假設系統時鐘為12MHz,設計電路并編寫程序實現從P1.0引腳上輸出一個周期為2ms的方波。
要在P1.0上產生周期為2ms的方波,定時器應產生1ms的定時中斷,定時時間到則在中斷服務程序中對P1.0求反。使用定時器T0,方式1定時中斷,GATE不起作用。
其中在P1.0引腳接有虛擬示波器,用來觀察產生的周期2ms的方波。
下面來計算T0初值X :
設T0的初值為X,有
(216−X )×1×10−6=1×10−3
即 65 536−X=1 000
得X=64 536,化為16進制數就是0xfc18。將高8位0xfc裝入TH0,低8位0x18裝入TL0。
仿真
代碼
參考單片機程序如下:- #include <reg51.h> //頭文件reg51.h
- sbit P1_0=P1^0; //定義特殊功能寄存器P1的位變量P1_0
- void main(void) //主程序
- {
- TMOD=0x01; //設置T0為方式1
- TR0=1; //接通T0
- while(1) //無限循環
- {
- TH0=0xfc; //置T0高8位初值
- TL0=0x18; //置T0低8位初值
- do{}while(!TF0); //TF0為0原地循環,為1則T0溢出,往下執行
- P1_0=!P1_0; // P1.0狀態求反
- TF0=0; //TF0標志清零
- }
- }
復制代碼
Keil代碼與Proteus8.13仿真下載(注意只能用Proteus8.13打開):
P1.0產生周期2ms方波.zip
(49.17 KB, 下載次數: 14)
2022-10-4 20:14 上傳
點擊文件名下載附件
|