#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num,num1;t;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
num=0;
t=0;
TMOD=0X01;//设置定时器工作方式为1TH0=(65536-5000)/256;//高八位 定时器装初值TL0=(65536-5000)%256;//低八位 定时器装初值、、50毫秒ET0=1;//开定时器0中断TR0=1;//启动定时器0EA=1;//总中断打开EX0=1;//外部中断打开
//EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
TR1=1;
P2=0xfe;
while(1)
{
if(t==100)
{
t=0;
num++;
P0=table[num];//此处有问题。num自增到10后会出现乱码。数组越界了
}
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
}
次数X机器周期Tcy=时间T,50*(1/12)*12=50(ms)、一次中断为50毫秒。中断二十次就是一秒了。
机器周期=1/12 即12分之1的震荡周期。振荡周期取决于你用的是多少M的晶振,我用的是12M,越来越觉的STC的51单片机很水,性能很水,稳定性也很水、工业用不合适,业余玩玩可以,便宜!难怪很多人做产品时宁愿用Atmel的单片机了。
利用中断20次来实现1秒钟的精确延时,比用delay函数当然更精确地的啦,最多就相差1微秒。一个机器周期的样子,在这鄙视下PLC的速度,呵呵,单片机的机器周期是1微秒级的,PLC机器周期是数十微秒。
|