当前位置:首页 > 单片机 > 单片机
[导读]/**********************************************该函数会在单片机的P3^0口持续产生38KHZ的方波**********************************************/#include //包含特殊功能寄存器库sbit P3_0=P3^0;void main(){TMOD

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

该函数会在单片机的P3^0口持续产生38KHZ的方波

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

#include //包含特殊功能寄存器库

sbit P3_0=P3^0;

void main()

{

TMOD = 0x02;//TMOD是定时器方式控制寄存器,这里选用定时器0,工作在模式2

TL0 = 0xF3;//定时器初值

TH0 = 0xF3;//定时器初值

EA = 1;//开总中断

ET0 = 1;//开CPU中断和T0中断

TR0 = 1;//启动定时器

while(1);

}

void time0_int(void) interrupt 1//定时器0中断服务程序,除函数名自己取名外,其他部分要按照这样的格式写。

{

P3_0 = ~P3_0;

}

/*

******定时器初值的计算***********

如果采用的是定时器0,工作在模式1下:

(2^8 - X)*振荡周期*12 = 定时时间

这里我采用的晶振为12MHZ,即振荡周期为1/12MHZ = 1微秒.

要产生38KHZ的方波,即在1/38KHZ =26微秒,所以定时器的定时时间应该为13微秒,以保证能在P3^0口产生周期为26微秒的方波。计算可得计数初值X = 253(0xF3)

*/

/*

***************定时器模式选择*******************

定时器有四种工作模式,原则上工作在任何模式下都可以,可是工作在模式2下,更加准确,误差较小,这是因为模式2下定时器有自动重装初值的特点。

*/

/*

********中断服务程序的编写***********

void 函数名() interrupt 中断号

{

}

中断号

0 外中断0

1 定时器0

2 外中断1

3 定时器1

4 串行中断

这里我们用的是定时器0,所以中断函数写为

void void time0_int(void) interrupt 1

{}

*/

/*

********定时器的启动与停止**********

只要设置TR0 = 1,即启动定时器0,TR0 = 0,即停止定时器0

*/


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭