单片机
返回首页

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

2020-07-06 来源:eefocus

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

方法1:延时法

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

波特率:9600

描述:T0用于定时,方式1,定时时间50ms,中断方式,定时时间到,TF1=1,利用模拟串口发送字符0x67

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

#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=0x01; //T0 方式1

 

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

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

 

TR0=1; //启用定时器T0

ET0=1; //开定时器T1中断

EA=1; //开总中断

 

while(1){;}

}

 

void timer0(void) interrupt 1

{

TH0=0x9E; //重新设置定时初值

TL0=0x58;

 

WByte(0x67); //发送字符

TF0=0; //软件清中断标志位

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章