×
单片机 > 单片机程序设计 > 详情

单片机在IO端口产生38KHZ的方波

发布时间:2025-06-20 发布时间:
|

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

  该函数会在单片机的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

*/


关键字:单片机  IO端口  方波 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
第一课:8051单片机开发的初步认识