单片机中断函数C语言的问题?

单片机中断函数C语言的问题?,第1张

void Timer1() interrupt 3

{    TH1=xx    TL1=xx  //建议还是取定时值为1ms,或者是 0.5ms

  cnt++

 if (s<50)

 {

     if(cnt>500)   { cnt=0beep=~beep}

 }

 else if (s>=50 &&s<100)

 {

     if(cnt>1000)   { cnt=0beep=~beep}

 }

 .........

}

如果定时中断为20ms,对应的频率计数50Hz,这个频率已经很低了,那么再通过cnt计数500次,输出信号频率就远远超出音频范围,你根本就听不到声音;

另外,蜂鸣器的proteus仿真可能不太准确,可以通过仿真示波器看波形及频率就好了;

#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

}

}

}

程序大致这样:

uchar a=0//计中断次数

EX0=1;EX1=1;EA=1;//开相应中断

IT0=1;IT1=1;//下降沿触发

P0=0;//全灭

//中断程序

void zhongduan1(void) interrupt 0

{

a++

if(a==9) a=0

P0=~(0XFF<<a)

}

void zhongduan2(void) interrupt 2

{

if(a!=0) a--

P0=~(0XFF<<a)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11716580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存