#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機器周期是數十微秒。
|