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

来源:互联网 发布:恐怖经历知乎 编辑:程序博客网 时间:2024/05/27 14:13

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

/**********************************************方法1:延时法硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1波特率:9600描述:T1用于定时,方式1,定时时间50ms,查询方式,定时时间到,TF1=1,利用模拟串口发送字符0x68**********************************************/#include "reg52.h"#define uchar unsigned charsbit 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 方式1TH1=0x9E;  //50ms初始值TL1=0x58;//50ms初始值TR1=1;//启用定时器T1while(1){while(!TF1){;}TH1=0x9E;TL1=0x58;WByte(0x68);TF1=0;}}


 

原创粉丝点击