/**********************************************
方法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; //软件清中断标志位
}
关键字:51单片机 定时器 中断法
引用地址:
51单片机定时器T0的使用1-中断法
推荐阅读最新更新时间:2024-11-07 13:11
C51单片机学习笔记之数码管
简介 数码管分为共阴数码管和共阳数码管。简单说就是所有阴极共用一个引脚或所有阳极共用一个引脚。 用共阴数码管举例:A,B,C,D,E,F,G对应数码管的段。1,2,3,4对应数码管的位。共阴数码管高电平时段有效,低电平时位有效。共阳数码管反之,低电平段有效,高电平位有效。 数码管对应的字符 共阴 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C,
[单片机]
DIY制作LED数码管定时器
由于只有一个数码管,只能显示0到15,所以这个定时器可以定时0到15分,0到15个小时,0到15天,0到15个星期,本来想在程序中加上定时0到15个月,但想想在实际情况中定时15个月都有一年多了,估计好少用到,就不写了。这个定时器我加上了继电器,所以可以控制220V交流电,且定时误差在几个毫秒内,还算精确吧。。。 先来几张初期的原理图: 下面是单片机的源程序: #include reg52.h #define uint unsigned int #define uchar unsigned char sbit ledg=P1^0;//秒闪烁(一秒钟亮一秒钟灭) sbit ledb=P1^1;//分闪烁(一分钟
[单片机]
单片机定时器0工作模式1
51单片机的定时器0工作模式1(16位模式),外中断INT0(P3_2引脚)控制T0(P3_4引脚)的按键信号,按键(P3_4引脚)作为T0时钟信号输入定时器0。若是INT0为1,则按键的状态(不断的按下然后抬起按键),使定时/计数器0计数,溢出中断引起P2.0引脚相连的LED灯闪烁。 //本程序出自:51hei单片机网 #include "reg_c51.h" unsigned char hex ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x88,0x83,0xC6,0xA1,0x86,0x8E}; //数码管十六进制译码表 void main(void) { TMO
[单片机]
STM32 定时器正交编码器模式 寄存器配置程序
void Encoder_Init(void) { RCC- APB1ENR|=1 1; //TIM3时钟使能 RCC- APB2ENR|=1 2; //使能PORTA时钟 GPIOA- CRL&=0XF0FFFFFF;//PA6 GPIOA- CRL|=0X04000000;//浮空输入 GPIOA- CRL&=0X0FFFFFFF;//PA7 GPIOA- CRL|=0X40000000;//浮空输入 TIM3- DIER|=1 0; //允许更新中断 TIM3- DIER|=1 6; //允许触发中断 MY_NVIC_Init(1,3,TIM3_IRQChannel,2); TIM3- PSC = 0x0;/
[单片机]
STM8 TIM2 定时器的问题
所用的芯片为STM8S103F3P6,编译器为IAR ,程序代码如下: // #include iostm8s105c6.h #include iostm8s103F3.h // Very importtant void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0;i 250;i++) { } for(i=0;i 75;i++) { } ms--; } } ////GPIO口初始化 void GPIO_init(void) { PA_DDR = 0x08; // 配置PD端口的方
[单片机]
Cortex-M0系统滴答定时器Systick详解
上图是LPC1114系统滴答定时器(SysTick)的结构图。系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器。其存在的主要目的是为嵌入式操作系统提供100Hz(即10ms)的定时节拍。当然,也可以做为其它的普通定时等其他用途。下面是LPC1114用户手册上列举出的一些用途,你可以了解了解。 可编程设置频率的RTOS 定时器(例如100 Hz),调用一个SysTick 服务程序。 用于核时钟的高速报警定时器。 简单计数器。软件可使用它测量时间 (如:完成任务所需时间、已使用时间)。 基于丢失 / 命中期限控制的内部时钟源。控制和状态寄存
[单片机]
8051单片机的寻址方式
寻址方式:寻址就是寻找操作数的地址。绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。所谓寻址方式就是通过什么途径获取操作数的方式。根据指令操作的需要,计算机总是提供多种寻址方式。一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。 8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。 寄存器寻址 寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。例如:MOV A R1 这条指
[单片机]
51单片机低功耗工作模式
低功耗操作方式 在以电池供电的系统中有时为了降低电池的功耗在程序不运行时就要采用低功耗方式低功耗方式有两种—待机方式和掉电方式 低功耗方式是由电源控制寄存器PCON上一课我们提到过的来控制的电源控制寄存器是一个逐位定义的8位寄存器其格式如下 PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下: PCON电源管理寄存器结构 PCON D7 D6 D5 D4 D3 D2 D1 D0 位符号 SMOD - - - GF1 GF0 PD IDL PCON标志位说明: 在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当
[单片机]