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

51单片机定时器T1的使用2-查询法

发布时间:2024-06-14 发布时间:
|

注意:要知道,查询法是占用CPU时间的,帮不是一种好方法。


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

方法1:延时法

硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1

波特率:9600

描述:T1用于定时,方式1,定时时间50ms,查询方式,定时时间到,TF1=1,利用模拟串口发送字符0x68

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

#include "reg52.h"

#define uchar unsigned char

sbit P1_0 = 0x90;

sbit P1_1 = 0x91;

sbit P1_2 = 0x92;

#define RXD P1_0

#define TXD P1_1

#define WRDYN 44 //写延时

#define RDDYN 43 //读延时

void Delay2cp(unsigned char i);

//往串口写一个字节

void WByte(uchar input)

{

uchar i=8;

TXD=(bit)0; //发送启始位

Delay2cp(39);

//发送8位数据位

while(i--)

{

TXD=(bit)(input&0x01); //先传低位

Delay2cp(36);

input=input>>1;

}

//发送校验位(无)

TXD=(bit)1; //发送结束位

Delay2cp(46);

}

//从串口读一个字节

uchar RByte(void)

{

uchar Output=0;

uchar i=8;

uchar temp=RDDYN;

//发送8位数据位

Delay2cp(RDDYN*1.5); //此处注意,等过起始位

while(i--)

{

Output >>=1;

if(RXD) Output |=0x80; //先收低位

Delay2cp(35); //(96-26)/2,循环共占用26个指令周

}

while(--temp) //在指定的时间内搜寻结束位。

{

Delay2cp(1);

if(RXD)break; //收到结束位便退

}

return Output;

}

//延时程序*

void Delay2cp(unsigned char i)

{

while(--i); //刚好两个指令周期。

}

void main()

{

TMOD=0x10; //T1 方式1

TH1=0x9E; //50ms初始值

TL1=0x58; //50ms初始值

TR1=1; //启用定时器T1

while(1)

{

while(!TF1){;}

TH1=0x9E;

TL1=0x58;

WByte(0x68);

TF1=0;

}

}


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

热门文章 更多
AVR单片机中RC电容触摸的感应原理解析