51单片机定时中断C语言的写法步骤,可追加分数

Python012

51单片机定时中断C语言的写法步骤,可追加分数,第1张

程序说明:51单片机定时器0工作于方式一,定时50ms中断一次

晶振为12M

#include

void

main

{

TOMD

=

0X01;

//配置定时器0工作于方式一

TH1

=

(65536-50000)/256

//高八位装入初值

TL1

=

(65536-50000)%256

//低八位装入初值

ET0

=

1

//开定时器0中断

EA

=

1

//开总中断

TR0

=

1

//启动定时器0

while(1)

{

}

}

void

Timer0_int()

interrupt

1

{

//重新装初值

TH1

=

(65536-50000)/256

//高八位装入初值

TL1

=

(65536-50000)%256

//低八位装入初值

}

/***************************************************************************************************************/

上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样

#include

void

main

{

TOMD

=

0X01;

//配置定时器0工作于方式一

TH1

=

0x3c

//高八位装入初值

TL1

=

0xb0

//低八位装入初值

IE

=

0x82//开总中断并开定时器0中断

TR0

=

1

//启动定时器0

while(1)

{

}

}

void

Timer0_int()

interrupt

1

{

//重新装初值

TH1

=

0x3c

//高八位装入初值

TL1

=

0xb0

//低八位装入初值}

#include<stc.h>

sbit

d1=P2^0

sbit

p1=P2^1

void

main()

{

方式一;

}

void

main()

{

EA=1

EX0=1

IT0=1

方式二;

}

void

main()

{

EA=1

EX1=1

IT0=1

方式三;

}

void

zd0()

interrupt

0

{

d1=0

}

void

zd1()

interrupt

1

{

p1=0

}

用的是外部中断0和1,程序很简单,注释就不写了。如果有错误的话,还请指正。

#include<reg51.h>

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}//0-9

uchar scanled

uchar flag=0 

uchar disdat[6]

void delay(unsigned int x)

{

unsigned int i,j

for(i=0i<xi++)

for(j=0j<120j++)

}

void dischg()

{

uchar i

for(i=0i<6i++)

disdat[i]=10

}

void ext0() interrupt 0

{

flag=1

}

void ext1() interrupt 2

{

flag=2

}

void t1isr() interrupt 3 //显示

{

TH1=0xec

TL1=0x78

switch(scanled)

{

case 0:

P2=0x01

P0=~ledtab[disdat[5]]

break

case 1:

P2=0x02

P0=~ledtab[disdat[4]]

break

case 2:

P2=0x04

P0=~ledtab[disdat[3]]

break

case 3:

P2=0x08

P0=~ledtab[disdat[2]]

break

case 4:

P2=0x10

P0=~ledtab[disdat[1]]

break

case 5:

P2=0x20

P0=~ledtab[disdat[0]]

break

default:break

}

scanled++

scanled%=6

}

main()

{

uchar i,j

TMOD=0x10

TH1=0xec

TL1=0x78

TR1=1

ET1=1

IT0=1

IT1=1

EX0=1

EX1=1

EA=1

scanled=0

dischg()

while(1)

{

i=0

switch(flag)

{

case 1:

for(j=0j<3j++)

for(i=0i<10i++)

{

disdat[5]=disdat[4]

disdat[4]=disdat[3]

disdat[3]=disdat[2]

disdat[2]=disdat[1]

disdat[1]=disdat[0]

disdat[0]=i

delay(200)

}

dischg()

flag=0

break

case 2:

for(j=0j<3j++)

for(i=0i<10i++)

{

disdat[0]=disdat[1]

disdat[1]=disdat[2]

disdat[2]=disdat[3]

disdat[3]=disdat[4]

disdat[4]=disdat[5]

disdat[5]=i

delay(200)

}

dischg()

flag=0

break

default:break

}

}

}