导航:首页 > 操作系统 > 单片机定时器中断实验

单片机定时器中断实验

发布时间:2023-03-25 16:30:56

单片机定时器实验.

你的注释有的有错误,现重新更正如下
ORG 0000H
AJMP START
ORG 001BH ;外中断1入口地址
AJMP INT_T1
ORG 0100H
START:
MOV SP,#60H;设置堆栈深度
MOV TMOD,#10H ;置T1为方式1
MOV TL1,#00H ;延时50mS的时间常数
MOV TH1,#4BH
MOV R0,#00H;表格计数器
MOV R1,#20;1s计数器即20*50ms=1000ms=1s,得到所需要定时时间1s
SETB TR1;打开定时器1
SETB ET1:允许定时器1中断
SETB EA ;开总中断
SJMP $:等待
INT_T1: ;T1中断服务子程序
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
CLR TR1 ;关定时器
MOV TL1,#00H ;重新载入计数初值
MOV TH1,#4BH
SETB TR1 ;再次打开定时器
DJNZ R1,EXIT;判断是否到达20个50ms,如果没有则继续循环
MOV R1,#20 ;重新载入1s计数值
MOV DPTR,#DATA ;置常数表首地址 MOV A,R0 ;置常数表偏移量
MOVC A,@A+DPTR ;读常数表
MOV P1,A ;这里中的A决定是什么花色,也就是显示什么
INC R0;指向下一个数
ANL 00,#07H;
EXIT:
POP DPH ;恢复现场
POP DPL
POP PSW
POP ACC
RETI
LED显示常数表
DATA: DB 0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH
END
总的来说显示什么样的花色是由你提前计算好,然后将对应的值放入表格中。比方说,你的led是共阴极接法,那么你要L1和L3亮就要给p1口送00000110B,这个值放到表格中等你用的时候从表格中取出来就行了

㈡ 单片机定时中断实验

跟你理清一下思路,你的问题就解决了。首先,你的程序很简单,就是让发光二极管1秒亮1秒灭。因此,你前提是要定时1秒,但51单片机无法定时1秒,因此,你的程序就要定时50毫秒,每到了50毫秒,你就让num自加1,当num加到20时,换句话说,已经定时50毫秒20次了,那就是1秒咯,所以此有led1=~led1;
//让发光管状态取反,达到程序目的。另外,定时50毫秒你要给th0和tl0赋给初值,因此
th0=(65536-45872)/256;
//重新装载初值tl0=(65536-45872)%256;才会有这两句,但定时50毫秒后,你的初值也会随之消失,因此才会在void
t0_time()这个函数中重新赋初值。的确像你所说的初值是装满了开始执行中断,其实从你tmod=0x01;
//设置定时器0位工作模式1(m1,m0位0,1)这句已经开始定时了,而赋初值是为了准确的定时50毫秒罢了。明白了没有?
(其实你可以这样理解,定时计数器就好比一个空的瓶子,当你给tmod=0x01时,水就开始一滴一滴的往瓶子你滴,当瓶子满了的时候,中断就发生了。假如从一个空的瓶子滴到满的瓶子定时是80毫秒的话,可你只需要定时50毫秒就够了,所以就要一开始往瓶子里倒水,使滴水的起点不是空瓶子,这就是赋初值的作用。当瓶子满了后,瓶子就会自动清空,重新从零开始。而第二次你再想定时50毫秒,你就必须从新再往瓶子里倒水,这就是第二次赋初值的作用)

㈢ 单片机中断实验交通灯的实验原理

根据图3.2电路,用单片机的IO口控制4组红绿黄共12个发光二极管,使发光二极管按照一定规则与次序发光与闪亮以实现模拟交通灯的功能。假设初始状态为:(南北通行状态)南北绿灯、东西红灯(25s);后转为过度状态:南北黄灯、东西红灯(5s);再转为东西通行状态:东西绿灯、南北红灯25(s)。再转为过渡状态:东西黄灯、南北红灯(5s),然后循环往复。

要求采用定时器实现所需要的定时时间。

2、键控交通灯。

按一下K1键

,保持南北通行状态;按一下K2键

,保持东西通行状态;按一下K3键

,保持正常交通灯。

要求在中断中进行按键处理。

3、具有闪烁的交通灯。

在2的基础上增加,绿灯最后5s闪烁,即亮0.5S灭0.5S闪烁。

四、实验原理图

图3.2交通灯实验电路原理图
图3.2共有4个按键K1、K2、K3、K4,分别连接到单片机P2.0、P2.1、P2.2、P2.3引脚,按键后对应引脚为低电平,通过4个二极管D17、D18、D19、D20连接到P3.2(外部中断0),这是二极管构成的相与电路,即任意按一个键能在P3.2上产生一个低电平或下降,作为中断触发信号。

五、软件设计思想

1、定时思想。

采用定时器T0或T1的方式1定时500ms,每500ms中断进行计数,计数10次即0.5s,计数20次即1s,对秒计数实现所需要的定时时间。

2、亮灯控制思想。

单片机控制灯引脚与灯对应如下,0点亮。

一共有四种状态S0、S1、S2、S3,

a、南北通行S0状态:

南北绿灯、东西红灯,P0=11110111=0xf7,P1=10011110=0x9e;

南北通行S0
b、过渡状态S1:

南北黄灯、东西红灯,P0=11111011=0xfb,P1=10101110=0xae;​

过渡状态S1
c、东西通行状态S2:

东西绿灯、南北红灯,P0=11111100=0xfc,P1=11110011=0xf3;​

东西通行状态S2
d、过渡状态S3:

东西黄灯、南北红灯,P0=11111101=0xfd,P1=01110101=0x75;

过渡状态S3
设置一个秒计数单元SEC每秒+1,设置两个控制值变量a,b。

㈣ 51单片机定时器中断原理

原理很简单,说白了就是用一个计数器对内部时钟计数,计满溢出时触发定时器中断,此时,程序会中断执行当前代码跳转到一个固定地址(定时器中断服务程序入口)去执行中断服务程序,执行完毕再回到被中断的代码地址继续执行。

㈤ 单片机实验“定时/计数器及中断”的一些问题

1.1)主程序各行作用如下:
第一行:设置定时器模式
第二行:设置定时器高位寄存器初值
第三行:设置定时器低位寄存器初值

第四行:T0定时器中断使能
第五行:总中断使能

第六行:打开T0定时器

第七行:死循环(主程序停留在此行)
主程序整体实现的功能:初始化定时器T0
1.2)void Timer0_Int(void)是定时器0中断函数,每行作用如下:
第一行:重新设定定时器高位寄存器初值
第二行:重新设置定时器低位寄存器初值
第三行:如果P1_0 IO口是高电平则改为低电平,如是低电平改为高电平

整体实现的功能:P1_0 IO口高低电平1秒切换一次

妈呀,这么多问题,网上找找,应该有的

㈥ 单片机定时器实验的代码怎么写求详细注释。

如果是100ms中断一次,那么晶振需要用6MHz

#include<reg51.h>
#defineucharunsignedchar
uchart1,sec1,dscan=0,dis[3]={0,0,0};
uchartable={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t1++;
if(t1>=20)
{
t1=0;
sec1++;
dis[0]=sec1%10;
dis[1]=sec1%100/10;
dis[2]=sec1/100;
}
}
voidt1isr()interrupt3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1<<dscan;
P0=table[dis[dscan]];
}
main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
t1=0;
sec1=0;
while(1);
}

㈦ 51单片机中的定时器中断是怎么用的

代码如下:

//实现led灯一秒亮灭闪烁

void main()

{

TMOD=0x01;//设置定时器0为工作方式1(M1 M0为01)

TH0=(65536-45872)/256;//装初值11.0582晶振定时50ms数为45872

TL0=(65536-45872)%256;

EA=1;//开总中断

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

TR0=1;//启动定时器0

while(1);//程序停止在这里等待中断发生

}


void T0_time() interrupt 1

{

TMOD=0x01;//重装初值

TH0=(65536-45872)/256;

num++;//num每加一次判断一次是否到20次

if(num==20)//如果到了20次,说明1秒时间到

{

num=0;//num清0重新计数

led=~led1;

}

}

(7)单片机定时器中断实验扩展阅读

定时器有两种工作模式,分别为计数模式和定时模式。对Px,y的输入脉冲进行计数为计数模式。定时模式,则是对MCU的主时钟经过12分频后计数。因为主时钟是相对稳定的,所以可以通过计数值推算出计数所经过的时间。

51单片机计数器的脉冲输入脚。主要的脉冲输入脚有Px,y, 也指对应T0的P3.4和对应T1的P3.5,主要用来检测片外来的脉冲。而引脚18和19则对应着晶振的输入脉冲,脉冲的频率和周期为

F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us

51计数器的计数值存放于特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C),T1(TL1-0x8B, TH1-0x8D)

定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机。定时和计数的最终功能都是通过计数实现,若计数的事件源是周期固定的脉冲则可实现定时功能,否则只能实现计数功能。因此可以将定时和计数功能全由一个部件实现。

阅读全文

与单片机定时器中断实验相关的资料

热点内容
与服务器连接断开如何处理 浏览:831
服务器维修预计十分钟什么意思 浏览:168
黑马程序员主打教学是什么 浏览:39
python九乘法表怎么编写 浏览:972
思维方式pdf 浏览:654
tcc社区app怎么注册 浏览:937
央视网下载加密 浏览:452
命令行访问服务器 浏览:36
梁加密区箍筋是不是必须封闭箍筋 浏览:760
在百度地图如何定位服务器地址 浏览:570
单片机计数器中断 浏览:296
哈啰安装文件夹名称 浏览:294
解压视频声控用杯子玩泡沫 浏览:740
19年的普通安卓机怎么样了 浏览:604
如何在app上刷导游题目 浏览:861
子弹解压视频大全 浏览:323
鸿蒙加密等级 浏览:806
cocos2dluapdf 浏览:493
假的加密锁靠谱吗 浏览:176
经营圣手服务器怎么调 浏览:749