脈沖控制器
輸出4個(gè)脈沖,輸出方式:
先輸出P0 50ms,停止100ms后,輸出P1 50ms,停止100ms后。。。
P3輸出完成后,停止10秒,之后循環(huán)
由于時(shí)間比較規(guī)整,可以在中斷里判斷輸出:
第一個(gè)到時(shí),輸出P0, 第二個(gè)到時(shí),關(guān)閉P0 第三個(gè)到時(shí),無動作
第四個(gè)到時(shí),輸出P1, 第五個(gè)到時(shí),關(guān)閉P1 第六個(gè)到時(shí),無動作
第七個(gè)到時(shí),輸出P2, 第八個(gè)到時(shí),關(guān)閉P2 第九個(gè)到時(shí),無動作
第十個(gè)到時(shí),輸出P3, 第11個(gè)到時(shí),關(guān)閉P3
休息200個(gè)周期,第211個(gè)到時(shí),復(fù)位i
case i=1,4,7,10,輸出; 2,5,8,11,關(guān)閉所有輸出
50ms,晶振為11.0592,初值為0x4C00
#include "reg51.h"
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P0_3 = P0^3;
char i = 0;
void main()
{
TMOD = 0x11; //T0方式1
TL0 = 0x0; //TL0的初值
TH0 = 0x4C; //TH0的初值
ET0 = 1; //定時(shí)器1的中斷允許
EA = 1; //開中斷
TF0 = 0;
TR0 = 1;
while(1);
}
void Int_T0() interrupt 1 using 2
{
TL0 = 0x00; //重新裝入初值
TH0 = 0x4C;
i++;
switch (i)
{
case 1: P0_0 = 0; break;
case 2: P0_0 = 1; break;
case 4: P0_1 = 0; break;
case 5: P0_1 = 1; break;
case 7: P0_2 = 0; break;
case 8: P0_2 = 1; break;
case 10: P0_3 = 0; break;
case 11: P0_3 = 1; break;
case 211: i = 0; break;
}
}
評論