20120801-51单片机的定时器T1的使用1-中断法

/**********************************************
方法1:延时法
硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1
波特率:9600
描述:T1用于定时,方式1,定时时间50ms,中断方式,定时时间到,TF1=1,利用模拟串口发送字符0x69

**********************************************/
#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
	
	ET1=1;							//开定时器T1中断
	EA=1;							//开总中断

	while(1){;}

}

void timer1(void) interrupt 3
{
	TH1=0x9E;					 	//重新设置定时初值
	TL1=0x58;	

	WByte(0x69);						//发送字符
	
	TF1=0;							//软件清中断标志位
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值