1. 51单片机定时程序怎么写
给你个提示吧,在主程序里面设置好中断,然后开中断,定时够6秒,这个定时不能直接顶出来的,你可以间接得到,你可以定时0.1秒,然后用一个变量装起来,没定时一次,在中断服务程序里面对这个变量加一,然后在主程序里面不断判断这个变量是否够6000,够的话就对你要的那个变量加一,然后对这个6000的变量清零,就可以了。这个单片机的程序一定要自己多写才行的,这样才可以学到东西。
2. C51单片机定时器1以方式1定时1秒如何设置
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。
3. 51单片机汇编语言定时器的使用(中断方式)
(1)
COUNT_INTEQU30H
LEDVALUEEQU31H
ORG0000H
LJMPSTART
ORG001BH
LJMPTimer1Interrupt
START:
MOVSP,#60H
MOVCOUNT_INT,#0
MOVLEDVALUE,#01H
LCALLInitTimer1
LOOP:
MOVA,LEDVALUE
MOVP2,A
LJMPLOOP
InitTimer1:
MOVTMOD,#10H;定时器T1为工作方式1,产生50ms定时
MOVTH1,#3CH
MOVTL1,#0B0H
SETBEA
SETBET1
SETBTR1
RET
Timer1Interrupt:
PUSHDPH
PUSHDPL
PUSHACC
MOVTH1,#3CH
MOVTL1,#0B0H
;========================
INCCOUNT_INT
MOVA,COUNT_INT;每50ms加1,
CJNEA,#2,Timer1Interrupt_EXIT;100ms
MOVCOUNT_INT,#0
MOVA,LEDVALUE
RLA
MOVLEDVALUE,A
;========================
Timer1Interrupt_EXIT:
POPACC
POPDPL
POPDPH
RETI
END
(2)
COUNT_INT_LEQU30H
COUNT_INT_HEQU31H
LEDVALUEEQU32H
ORG0000H
LJMPSTART
ORG001BH
LJMPTimer1Interrupt
START:
MOVSP,#60H
MOVCOUNT_INT_L,#0
MOVCOUNT_INT_H,#0
MOVLEDVALUE,#01H
LCALLInitTimer1
LOOP:
MOVA,LEDVALUE
MOVP2,A
LJMPLOOP
InitTimer1:
MOVTMOD,#20H;定时器T1为工作方式2,产生250us定时
MOVTH1,#00H
MOVTL1,#06H
SETBEA
SETBET1
SETBTR1
RET
Timer1Interrupt:
PUSHDPH
PUSHDPL
PUSHACC
MOVTH1,#00H
MOVTL1,#06H
;========================
INCCOUNT_INT_L
MOVA,COUNT_INT_L;每250us加1,
CJNEA,#40,Timer1Interrupt_EXIT;250US*40=10ms
MOVCOUNT_INT_L,#0
INCCOUNT_INT_H
MOVA,COUNT_INT_H;每10Ms加1,
CJNEA,#10,Timer1Interrupt_EXIT;10ms*10=100MS
MOVCOUNT_INT_H,#0
MOVA,LEDVALUE
RLA
MOVLEDVALUE,A
;========================
Timer1Interrupt_EXIT:
POPACC
POPDPL
POPDPH
RETI
END
4. 51单片机 编一个定时输出1的程序
#include‘’reg51.h‘’
#define uint unsigned int
uint time;
void main()
{
TMOD=0x01;
TH0=(65536-10000)/256;//定时10ms
TL0=(65536-10000)%256;
ET0=1;EA=1;
while(1);
}
void in() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(time==0) //开始P1输出0
{P1=0x00}
time++;
if(time==200)//接着输出1 持续(500-200)*10ms=3s
{P1=0xFF;}
if(time==500) //接着使time=0,执行之前的程序
{time=0;}
}
5. 51单片机中用定时器定时1毫秒,怎么编写
假设晶振为12MHz,不用中断时程序语句如下:
TMOD=0x01;//定时器0工作方式1
TH0=(65536-1000)/256;//装入初值
TL0=(65536-1000)%256;
TF0=0;//清溢出标志;
TR0=1;//启动定时器0
while(TF0==0);//等待定时时间到
TR0=0;
TF0=0;
6. 怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的
简单啊。
大致说来就是
你先开启个定时器,根据你选用的晶振,计算出你要用定时器定时的基准时间,
就假设是10毫秒吧。
然后给定时器的THx,TLx写入初值,开启中断,进行定时。
然后就等待中断。
在你响应中断的程序中,再次给单片机送入初值,
由于是10毫秒中断一次,因此我们设置几个“软件计数器”
比如每此中断,软甲计数器+1,
例如“软件计数器1”在中断程序中计数100次,则是10ms*100=1s
而“软件计数器2”在1的基础上继续计数100次,则是1S*100=100S
而“软件计数器3”在2的基础上继续计数36次,则是100S*36=3600S=1小时。
7. 51单片机定时器的汇编语言程序编程,
LED BIT P1.0 ;定义LED的引脚
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H ;定时器0工作模式1
MOV TH0,#HIGH(65536-50000) ;初值,50毫秒中断一次
MOV TL0,#LOW(65536-50000)
SETB TR0 ;启动定时器
SETB ET0 ;启动定时器中断
SETB EA ;开总中断
MOV R2,#40 ;中断计数初始值
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E ;R2减到0重新赋值,否则退出
MOV R2,#40
CPL LED ;LED亮灭转换
T0E:
RETI
END
8. 51单片机定时器初始化程序的基本步骤
1.设置工作方式即TMOD的值
2.计算初值写TH TL的值
3.开启定时器中断和总中断
4.启动定时器。
9. 51单片机中断/定时器/计数器
89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
IE寄存器:
中断允许控制寄存器分为两层结构,第一级结构为中断允许总控制EA,只有当EA处于中断允许状态,中断源中断请求才能够得到允许;当EA处于不允许状态时,无论IE寄存器中其他位处于什么状态,中断源中断请求都不会得到允许。第二级结构为5个中断允许控制位,分别对应5个中断源的中断请求,当对应中断允许控制位为1时,中断源中断请求得到允许。
EX0:外部中断0允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。当EX0=1( SETB EX0 )时,同时单片机P3.2引脚上出现中断信号时,单片机中断主程序的执行而“飞”往中断服务子程序,执行完后通过中断返回指令RET 动返回主程序。当EX0=0( CLR EX0)时,即使单片机P3.2引脚上出现中断信程序也不会从主程序“飞” 出去执行,因为此时单片机的CPU相当于被“堵上了耳朵”,根本接收不到P3.2引脚上的中断信号,但是这并不表示这个信号不存在。如果单片机的CPU有空查一下TCON中的IE0位,若为1就说明有中断信号出现过。
ET0:T0溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断。
EX1:外部中断1允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。当EX1=1( SETB EX1)时,并且外部P3.3引脚上出现中断信号时,单片机CPU会中断主程序而去执行相应的中断服务子程序;当EX1=0( CLR EX1)时使外部P3.3引脚上即使出现中断信号,单片机的CPU也不能中断主程序转而去行中断服务子程序。 [3] 因此,可以这样认为,EX0和EX1是决定CPU能否感觉到外部引脚P3.2P3.3上的中断信号的控制位。
ET1:T1溢出中断允许位。ET1=1,允许T1中断;ET1=0,禁止T1中断。
ES:串行中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
EA:中断总允许位。EA=1,CPU开放中断;EA=0,CPU禁止所有的中断请求。总允许EA好比一个总开关。EA就相当于每家水管的总闸,如果总闸不开,各个龙头即使开了也不会有水;反过来,如果总闸开了而各个分闸没开也不会有水,所当我们想让P3.2和P3.3引脚上的信号能够中断主程序则必须将EA位设置为0(CLR EA)。
TCON寄存器:
各位的标识如下:
TF1:定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR1:定时器运行控制位,TR1置1是开启定时器1,TR1置0时关闭定时器1.
TF0:定时器0溢出标志位。当定时器0计满溢出时,由硬件使TF0置1,并且申请中断,进入中断服务程序,有硬件自动清0 ,在查询方式下用软件清0.
TR0:定时器运行控制位,TR0置1是开启定时器0,TR0置0时关闭定时器0.
IE1:外部中断1请求标志位。
IT1:外部中断1触发方式选择位。当IT1置0时,为低电平触发;当IT1置1时,为下降沿触发。
IE0:外部中断0请求标志位。
IT0:外部中断0触发方式选择位。当IT0置0时,为低电平触发;当IT0置1时,为下降沿触发。
51单片机外部中断响应条件:
1、中断源有中断请求;
2、中断源的中断允许位为1(设置IE寄存器相关位);
3、CPU开中断(设置IE寄存器开中断,即EA=1)
CPU时序的有关知识:
振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
状态周期:2个振荡周期为1个状态周期,用S表示。
机器周期:1个机器周期含6个状态周期,12个振荡周期。
指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。
定时器的其他知识点:
1、51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。
2、定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
3、51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。
4、有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。
与定时器/计数器有关的寄存器:
1、TMOD寄存器
2、TCON寄存器
3、IE寄存器
4、THx/TL寄存器
工作方式寄存器TMOD:
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
M1M0:工作方式设置位。定时/计数器有四种工作方式。一般我们厅方式1和方式2:
控制寄存器TCON:
TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
IE中断开关寄存器:
用于开启cpu中断和对应的中断位。
THx和TL定时/计数存储寄存器:
THx存储高8位数据,TLx存储低8位数据。
定时器/计算器初值计数公式:
计数个数与计数初值的关系为:X=2^n-N
N是需要计数的值;n与设置定时器/计数器的工作方式有关(可能为8、13、16);X是需要设置在THx和TLx的初值。
使用定时器/计算器的初始化流程:
1、对TMOD赋值,以确定T0和T1的工作方式。
2、计算初值,并将其写入TH0、TL0或TH1、TL1。
3、中断方式选择,则对EA赋值,开放定时器中断。
4、使TR0或TR1置位,启动定时/计数器定时或计数。
10. 51单片机定时器
用2个定时器也可以。
T0和T1的初始化一起放在前面
MOV TMOD,#11H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TH1,#3CH
MOV TL1,#0B0H
SETB EA
SETB ET0
SETB TR0
SETB ET1
SETB TR1
定时子程序2 个单独分开。