闪电借款登陆微信注册账号申请登陆

led=!//发光二极管状态取反TH0=;程序说明:;(1)按键会在下节中详细介绍;(2)我们在试验的时候发现,按键大约在5-10次;(3)定时器可以对外来脉冲计数,但并不是说对任意;#include&reg51.h&;#defineucharunsignedchar;#defineuintunsignedint;sbitled=P0^0
//发光二极管状态取反 TH0=0 TL0=0xf4; //重新赋初值
程序说明:
(1)按键会在下节中详细介绍。这里只是做一下说明:按键内部是一个机械开关,按下,机械开关内部连通,松开,内部开关断开,图中的按键一端接单片机的P3.4引脚,两外一端接地。由于单片机的P3引脚已经内接上拉,所以,按键没有被按下的时候,P3.4引脚被置成高点平,按键按下的时候,P3.4引脚被置成低电平,这样按键每按一下次,相当于给P3.4引脚送了一个脉冲。
(2)我们在试验的时候发现,按键大约在5-10次内就可以使发光二极管的状态取反一次,这是由于按键按下时会产生抖动,有可能一次按键产生多个脉冲的缘故,若想稳定地观察试验现象,大家可以把P3.4口接到稳定的信号源上。
(3)定时器可以对外来脉冲计数,但并不是说对任意频率脉冲计数。脉冲应满足一定条件。当输入信号产生由1到0的负跳变时,计数器加1。单片机对外部输入引脚进行采样,如在第一个机器周期内采样值为0,下一个机器周期采样值为1,则紧跟着下一个机器周期,计数器加1。从这个过程我们可以看出,单片机确认一次负跳变,需要2个机器周期,所以外部输入脉冲的最高频率不应该超过振荡器频率的1/12。例如,12MHZ频率的晶振,允许外部输入脉冲的频率为500KHZ。对于外部脉冲的占空比(脉冲的高低电平宽度之比)也有一定限制,为了确保某一给定的电平在变化之前能被采样一次,则这一电平持续的时间,至少要保持一个机器周期以上。
(b)中断方式
#include&reg51.h&
#define uchar unsigned char
#define uint
unsigned int
sbit led=P0^0;
void main(void)
TMOD=0x05;
//GATE=0,C/T=1,M1M0=01; TH0=0 TL0=0xf4;
//设置初值(6=0xff,(6=0xf4; TR0=1;
//开启定时器
} while(1);;
void timer0_intr(void) interrupt 1
应用2:定时的应用
实例1:在单片机系统中,单片机经常需要给外围的器件提供脉冲信号,例如,在超声波测距模块中,需要提供40Khz的脉冲信号;在红外通信中,需要提供38Khz的脉冲信号;模数转换器件ADC0809无内接时钟源,需提供几十K到几百K的脉冲信号。在本例中,用定时器实现单片机I/O口输出10KHz的方波,I/O口为P0.0,定时器1,方式0。
#include&reg51.h&
#define uchar unsigned char
#define uint
unsigned int
sbit signal=P1^0;
void main(void)
void timer0_intr(void) interrupt 3
//中断每产生一次,发光二极管的状态取反一次
实例2:PWM(Pulse Width Modulation)是脉冲宽度调制的英文单词的缩写,利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换TMOD=0x20;
//GATE=0,C/T=0,M1M0=10; TH1=206; TL1=206;
//设置初值, TR1=1;
//开启定时器 ET1=1;
EA=1; while(1);
//开定时器中断和总中断 TL0=0xf4;
//溢出后重新赋初值 led=!
//中断每产生一次,发光二极管的状态取反一次
的许多领域中,例如调光灯、电机调速和开关电源等等场合。上面的专业术语看起来比较晦涩,简单来讲,PWM就是通过在一个固定周期里调节占空比(高电平与低电平的比例),来调节输出的平均电压、电流或者功率等被控制量。我们可以用一个水龙头来类比,把1S时间分成50等份,即每一个等份20MS。在这20MS时间里如果我们把水龙头水阀一直打开,那么在这20MS里流过的水肯定是最多的,如果我们把水阀打开15MS,剩下的5MS关闭水阀,那么流出的水相比刚才20MS全开肯定要小的多。同样的道理,我们可以通过控制20MS时间里水阀开启的时间的长短来控制流过的水的多少。那么在1S内平均流出的水流量也就可以被控制了。下面是利用定时器完成的PWM控制程序。PWM的周期为10ms,P1.0输出PWM,占空比可以设定。 程序:
#include&reg51.h&
#define uchar unsigned char
#define uint
unsigned int
#define pwm_limit 20
sbit pwm=P1^0;
uchar pwm_
void main(void)
void timer0_intr(void) interrupt 3
程序说明:
设计PWM,首先要确定PWM的周期,本程序中PWM的周期为10ms,在这10ms里分成100if(++pwm_counter&=100)
pwm_counter=0; if(pwm_counter&=pwm_limit) pwm=1; else pwm=0; TMOD=0x20;
//GATE=0,C/T=0,M1M0=10; TH1=156; TL1=156;
//设置初值, TR1=1;
//开启定时器 ET1=1;
EA=1; while(1);
//开定时器中断和总中断
等份,那么每一份为100us,定时器每100us中断一次,pwm_counter加1,从0一直往上累加,直到100后清0。每一次中断, pwm_counter都要和定值pwm_limit(pwm_limint取值在0-100之间)比较,如果pwm_counter小于pwm_limit,PWM对应的I/O输出高电平,否则输出低电平。只要我们改变pwm_limit的值,就可以得到不通过占空比的波形。
实例3:SPWM是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛的用于支流交流逆变器等,比如高级一些的UPS就是一个例子。三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
首先按照下面的公式建立一个正弦波的样本,样本表将一个正弦波周期分为16个点,每点按5位量化(1对应最低幅度,32对应最高幅度:f(x)=16+16*sin(2pix/16) i[0,15];由此公式求出样本的值分别为:{16,22,27,30,31,27,22,16,9,4,1,0,1,4,9}。
#include&reg51.h&
#define uchar unsigned char
#define uint
unsigned int
sbit pwm=P1^0;
uchar pwm_
uchar pwm_
uchar code table[]={16,22,27,30,31,30,27,22,16,9,4,1,0,1,4,9};
void main(void)
void timer0_intr(void) interrupt 3
if(++pwm_counter&=32)
{ TMOD=0x20;
//GATE=0,C/T=0,M1M0=10; TH1=217; TL1=217;
//设置初值, TR1=1;
//开启定时器 ET1=1;
EA=1; while(1);
//开定时器中断和总中断
} pwm_counter=0; if(++i&=16) i=0; pwm_limit=table[i];
if(pwm_counter&=table[i]) pwm=1; else pwm=0;
在程序中,最小时基单位为50us,每32个时基信号的到来改变一次PWM的占空比,这让I/O的脉冲输出经过滤波后就形成正弦波,在本设计中,正弦波的频率为:20k/32/16=39hz。
实例4:测脉冲高电平宽度
红外线遥控器广泛用于家电以及工业设备中,由发射和接收两大部分组成。如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
遥控发射器专用芯片很多,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降
包含各类专业文献、幼儿教育、小学教育、应用写作文书、文学作品欣赏、生活休闲娱乐、外语学习资料、定时器93等内容。 
 1、定时器功能介绍 2、脚本中定时器介绍 3、使用脚本实现更多定时器功能 3.1 整点归档 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本 1 定时器功能介绍 ...  (4) 了解 30 秒定时器的组成及工作原理。 (5) 熟悉 30 秒定时器的设计与制作。 2 设计思路本次设计电路需要设计一个具有 30 秒倒计时功能的电路,计数时间...  () interrupt 1 using 2 //定时器 0 中断函数 { TL0=0xb0; TH0=0x3c; i++; if(i==20) { miao++; i=0; } if(miao==60) { fen++; miao=...  数图和数图定时器_电子/电路_工程科技_专业资料。语音通话中数图详解 H248 数图: (在软交换上设置)数图可以是一个字符串,我们不妨称之为数图字符串,它遵循...  C# 各种定时器比较 zz 1.单线程的定时器存在很多问题,定时器只是定时把消息 WM_TIMER 访到线程的消息队列里, 但并不保证消息会立即被响应, 如果碰巧系统比较忙...  一、TimerA 的 4 种工作模式 1.停止模式 用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂 停后重新计数时,计数器将从...  定时器说明书_信息与通信_工程科技_专业资料。nn 微电脑时控开关说明书( ZYT16G 微电脑时控开关说明书(市场称 KG316T) 说起时控开关,很多人觉得专业深奥,不...  TD-SCDMA定时器详解与设置_交通运输_工程科技_专业资料。TD-SCDMA定时器详解与设置;TD,TD-SCDMA,计时器,计数器,设置一、UE 相关的空闲模式下定时器参数 A、 T30...  #include&reg51.h& #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; uchar T_Count=0; void main() { TMOD=0x00; //定时器 0...LPC1114_Timer16_0中断程序_MDK编译环境
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
LPC1114_Timer16_0中断程序_MDK编译环境
关于Timer16_0代码:
LPC_SYSCON-&SYSAHBCLKCTRL |= (1&&7);
//开启定时器时钟
LPC_TMR16B0-&PR=1000;//1000-1;
//预分频计数器
LPC_TMR16B0-&MR0=12000;
//匹配寄存器
LPC_TMR16B0-&TCR=0x1;
//开启定时器计数器
LPC_TMR16B0-&MCR=3;//(1&&0)&(1&&1);
//匹配控制--匹配则引发中断并复位定时器
NVIC_EnableIRQ(TIMER_16_0_IRQn);
//中断使能
Timer16_0中断程序:
void TIMER16_0_IRQHandler(void)
if ( LPC_TMR16B0-&IR & 0x1 )
LPC_TMR16B0-&IR = 1;
/* clear interrupt flag */
//timer16_0_counter++;
GPIOSetValue( 0, 3, 0 );
//给P0.3位写0
Delay_Ms(100);
GPIOSetValue( 0, 3, 1 );
//给P0.3位写0
Delay_Ms(100);
if ( LPC_TMR16B0-&IR & (0x1&&4) )
LPC_TMR16B0-&IR = 0x1&&4;
/* clear interrupt flag */
timer16_0_capture++;
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved用中断做电子时钟-博泰典藏网
典藏文档 篇篇精品
用中断做电子时钟
导读:2、进一步掌握8259中断控制器的编程方法,利用8253定时器、8259中断控制器和实验箱上提供的数码显示电路,设计一个电子时钟,定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,movdx,CS8259Amoval,20h;中断服务程序结束指令outdx,a,4*ICW2;中断号movax,codeshlax,,addax,offsetIE中断入口地址(段地址为0)
开课学院及实验室:
1、进一步掌握8253定时器的使用和编程方法。 2、进一步掌握8259中断控制器的编程方法。 3、进一步掌握数码显示电路的驱动方法。
二、实验器材
计算机,汇编相关程序,WAVE6000实验仿真器
三、实验原理
利用8253定时器、8259中断控制器和实验箱上提供的数码显示电路,设计一个电子时钟。格式如下:XX XX XX
由左向右分别为:时、分、秒
定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。
四、实验步骤
(1) 在实验箱断电的情况下连好线。
(2) 输入自编程序并检查,保存程序。 (3) 调试程序。
(4) 记录实验结果及分析。
CS8259B equ 0d001h data
segment CNT
6 dup(?) 显示缓冲
1 dup(?) 显示的数据
1 dup(?) Hour
0 Minute db
0 Second db
LEDMAP: 八段管显示码
3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data
assume cs:code, ds: data Delay
延时子程序
endp DisplayLED proc near
bx, offset LEDBuf
cl, 6 共6个八段管
从左边开始显示 DLoop:
dx, OUTBIT
dx, 关所有八段管
dx, OUTSEG
dx, OUTBIT
dx, 显示一位八段管
dx, OUTBIT
dx, 关所有八段管
ret DisplayLED endp IEnter proc
al, Second
al, Minute
Hour, 0 Exit:
dx, CS8259A
al, 20 中断服务程序结束指令
iret IEnter endp IInit
dx, CS8259A
dx, CS8259B
endp start
B 计数器1,16位,方式3,二进制
dx, CONTROL
dx, COUNT1
计数器低字节
计数器高字节
al, MD8255
dx, CTL8255
4*ICW2 中断号
ax, offset IE 中断入口地址(段地址为0)
代码段地址为0
0 计数值初始为0
dx, PA8255
等待中断,并计数。
bx, offset
LEDBuf, al
bx, offset LEDMAP
LEDBuf+1, al
al, Minute
bx, offset LEDMAP
LEDBuf+2, al
bx, offset LEDMAP
LEDBuf+3, al
al, Second
bx, offset LEDMAP
LEDBuf+4, al
bx, offset LEDMAP
LEDBuf+5, al
DisplayLED
六、实验结果分析
1. 写出实验现象及原因。
实验现象:显示屏亮,刚开始可以看到八段管的第六个管开始显示数字,计时开始,每秒加1,实现了时钟效果。
现象的原因分析:程序写入控制字与计数初值后,定时器启动工作,当计数器减到1时,输出端输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端输出1s,向CPU申请中断,其中一个数码管显示,当计数到60s时,输出端向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h,CPU处理,使数码管的显示发生变化。电子时钟的显示格式HH:MM:SS由左到右分别为时、分、秒,依次对秒、分、小时寄存器的内容加一时,六个数码管动态显示时、分、秒的当前值。最大记时59:59:59超过这个时间时分秒位都清零从00:00:00重新开始。 2. 如何调整输出周期,使其2秒输出一次?
修改start段的mov ax,62500为mov ax,125000,修改后理论上是可以实现2秒输出一次,但是实际上并不可以。因为ax储存的十六进制数只是由16个二进制数组成的,62500(10)=0100(2),而12500(10)=00(2)超过了其储存范围,所以是不可以实现的。 此程序最多可以每隔1111(2)=65535(10),即1.04856秒输出。
包含总结汇报、外语学习、经管营销、工程科技、行业论文、旅游景点、教学研究、资格考试、计划方案以及用中断做电子时钟等内容。
相关内容搜索LPC812简单逻辑分析仪
逻辑分析仪曾经是很高端的仪器设备。随着MCU/FPGA的普及,出现了大量中低端入门级的逻辑分析仪。如上图的CY7C68013开发板构成的逻辑分析仪,还可以配合Saleae的客户端使用。
上图为采用逻辑分析仪捕获FRDM SWD调试器通讯的截图。
内置16KB RAM
内置增强型8051,4个时钟内核,运行于12/24/48MHz,即最高运行速率为12Mips(MIPS概念类似,但是8051实际MIPS没有那么高,所以采用Mips以示区别)
GPIF/FIFO使得它与外界互联的速率非常高。
当然,我们可以利用LPC812这种新型MCU来构建简单的“爱好者”级别的逻辑分析仪。LPC812一般运行于24MHz,最高运行到30MHz,CPU要比CY7C68013强。但是内部4KB要少许多。LPC812支持单周期IO访问,GPIO支持中断和模式匹配。后者对于逻辑分析仪来说很重要。
参考NXP UM10601 Chapter 8。我们发现以下描述:
可从所有GPIO 引脚中选择最多8个引脚作为边沿或电平触发中断请求。每个请求会在NVIC中创建一个单独的中断。
边沿触发中断引脚可在上升沿和/ 或下降沿上发生中断。
电平触发中断引脚可以是高电平或低电平有效。
匹配模式引擎
可以从GPIO中选取多达8个IO构成布尔表达式。该表达式由特定电平、跳变和多个排列组合构成。
组成特定布尔表达式的每个位片最小项(乘积项)都可生成其专有的中断请求。
出现的任何模式匹配在经过编程后都可产生ARM CPU 的RXEV 通知(内核事件)。RXEV可连接至引脚。
模式匹配与软件搭配使用可创建基于引脚输入的复杂状态机。
套用到逻辑分析仪上可以这样理解:逻辑分析仪往往需要在多路信号中确定某一路作为触发信号(如时钟),而且必须确定使用上跳沿、下跳沿、高电平及低电平作为触发信号。
这使用端口中断就可以了。如果需要布尔表达式,使用匹配模式引擎就简单了。当然,需要考虑如何将用户指令通过USB转化为底层布尔表达式。很有挑战性。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 微信注册账号申请登陆 的文章

 

随机推荐