这个是在前面那个定时器的基础上改过来的。
脉冲控制器
输出4个脉冲,输出方式:
先输出P0 50ms,停止100ms后,输出P1 50ms,停止100ms后。。。
P3输出完成后,停止10秒,之后循环
由于时间比较规整,可以在中断里判断输出:
第一个到时,输出P0, 第二个到时,关闭P0 第三个到时,无动作
第四个到时,输出P1, 第五个到时,关闭P1 第六个到时,无动作
第七个到时,输出P2, 第八个到时,关闭P2 第九个到时,无动作
第十个到时,输出P3, 第11个到时,关闭P3
休息200个周期,第211个到时,复位i
case i=1,4,7,10,输出; 2,5,8,11,关闭所有输出
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; //定时器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;
}
}
|