已知8051单片机的fosc=12MHz,用T1 定时,试编程由P1.2 和P1.3 引脚分别输出周期为2ms 和500μs 的方波 10
代码如下:
第一个代码程序:
ORG 0000H
LJMP MAIN
ORG 001BH
JMP T1_INT
ORG 0030H
MAIN:
MOV TMOD, #20H
MOV TH1, #6
MOV TL1, #6
MOV IE, #88H
SETB TR1
MOV R7, #4
SJMP $
T1_INT:
CPL P1.3
DJNZ R7, T1_END
CPL P1.2
MOV R7, #4
T1_END:
RETI
END
第二个500us程序:
#include <reg51.h>
sbit P1_0=P1^0;
void main()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x18;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1
{
TH0=0xFC;
TL0=0x18;
P1_0=!P1_0;
}
扩展资料:
程序存储器特定入口:
0000H: 复位或开机后的程序入口
0003H: 外部中断0 服务程序入口
000BH: 定时/计数器0 中断服务程序入口
0013H: 外部中断1 服务程序入口
001BH: 定时/计数器1 中断服务程序入口
0023H: 串行I/O 中断服务程序入口
定时/计数器
8031 片内有两个16位定时/计数器(增量式计数)
工作方式(方式0、方式1、方式2、方式3)
以定时/计数器1为例
⑴方式0(13位定时/计数)
方波是一种非正弦曲线的波形,通常会于电子和讯号处理时出现。理想方波只有“高”和“低”这两个值。电流的波形为矩形的电流即为方波电流。不论时间轴上下是不是对称的,只要是矩形就可叫方波,必要时,可加“对称”,“不对称”加以说明
通过单片机内部的计数器/定时器,采用软件编程来产生方波,这种方法的硬件线路较简单,系统的功能一般与软件设计相关。
选择MCS-51系列中的8031单片机,由于是用指示灯显示输出方波信号,一个LED显示灯即可满足设计要求。
方波是一种非正弦曲线的波形,通常会与电子和讯号处理时出现。理想方波只有“高”和“低”这两个值。电流或电压的波形为矩形的信号即为矩形波信号,高电平在一个波形周期内占有的时间比值称为占空比,也可理解为电路释放能量的有效释放时间与总释放时间的比值。
占空比为50%的矩形波称之为方波,方波有低电平为零与为负之分。必要时,可加以说明“低电平为零”、“低电平为负”。
定时器T1定时250μs,工作方式设置为方式2,用TL1作为8位定时器,产生250μs的定时,定时初值X为:X=2^8-(12* 10^6* 250 * 10^(-6))/12=6
TH1=TL1=6H,TMOD=20H
源代码如下:
MOV TMOD,#20H
MOV TH1,#06H
MOV TL1,#06H
SETB TR1
DS1_RPTA:
MOV R2,#04H
DS1_RPTB:
JNB TF1,$
CLR TF1
CPL P1.3
DJNZ R2,DS1_RPTB
CPL P1.2
LJMP DS1_RPTA
51单片机中有两个定时器T0和T1,分别是由两个8位的专用寄存器组成,即定时/计数器T0由TH0和TL0组成,T1由TH1和TL1组成。单片机中的定时器溢出时申请的中断,达到计时或计数的目的。并使用定时控制寄存器控制它。其中的:
TF1:定时器1溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除。或用软件清除。
TF0:定时器0溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除,或用软件清除。
扩展资料
定时器工作的流程:
以51为例用定时器0方式一产生50毫秒的定时:
1、确定使用哪个定时器,使用哪种方式,通过TMOD设置,TMOD的低四位是设置定时器0的,高四位是用来设置定时器1的,其中的M0,M1是用来设置定时器工作在哪种方式,GATE一般用不要设置,C/T是选择计数模式还是定时模式的,如:TMOD = 0X01,就说明定时器0工作在方式1。
2、设置定时的时间,用定时器定时,如:50毫秒,可以用这种方式TH0 = (65535 - 50000) / 256,TL0 = (65535 - 50000) % 256;可以这样理解:因为这是定时器的初值,也就是说计数脉冲就是在这个数的基础上向上递增,到达65535后就溢出产生中断。
3、打开中断,使用IE寄存器,首先打开总中断EA = 1,这一步是所有中断所必须的,然后打开定时器0中断,ET0 =1。
4、这时准备工作结束,启动定时器,使用TCON寄存器,TR0 = 1,实现了一个50毫秒的定时。
参考资料来源:《单片机原理及应用》 曹巧媛 编著 电子工业出版社 第四章 单片机定时功能及应用 第一节 定时器/计数器的结构与工作原理 第二节 定时计数器的操作模式及应用 第三节 定时器综合应用举例
参考资料来源:百度百科--定时器中断
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1_INT
ORG 0030H
MAIN:
MOV TMOD, #20H
MOV TH1, #6
MOV TL1, #6
MOV IE, #88H
SETB TR1
MOV R7, #4
SJMP $
T1_INT:
CPL P1.3
DJNZ R7, T1_END
CPL P1.2
MOV R7, #4
T1_END:
RETI
END
typedef unsigned char u8;
#define _500US 500
#define N 4
sbit _500USOUT = P1^3;
sbit _2MSOUT = P1^2;
u8 Cnt;
void InitTim1(void); //初始化timer1
//============================================timer1初始化
void InitTim1(void)
{
TMOD = 0x20;
TL1 = 256 - (_500US / 2);
TH1 = 256 - (_500US / 2);
Cnt = 0;
TR1 = 1;
ET1 = 1;
EA = 1;
}
//============================================timer1中断
void Tim1Isr(void)interrupt 3
{
_500USOUT = !_500USOUT;
if(++Cnt == N)
{
_2MSOUT = !_2MSOUT;
Cnt = 0;
}
}
//============================================main函数
void main(void)
{
_500USOUT = 1;
_2MSOUT = 1;
InitTim1();
while(1)
;
}