实验3、定时器实验
电气控制与PLC编程实验三 定时器实验
![电气控制与PLC编程实验三 定时器实验](https://img.taocdn.com/s3/m/5c683c0e783e0912a2162aae.png)
实验二定时器实验
一、实验目的
l. 掌握定时指令的使用。
2. 掌握由计数器构成的典型环节。
3. 熟悉软件的调试方法,监控模式的使用。
二、实验器材
1. DICE-PLC02-A/B型可编程序控制器实验台/箱l台
2. FX一l0P-E编程器(可选)l只
3. 编程电缆l根
4. 连接导线若干
三、实验内容与步骤
一)实验原理
FX2N系列PLC有定时器256个(T0~T199),定时器的时基脉冲为l00ms(T25~T199、T250~T255)、10ms(T200~T245)、1ms(T246~T249),其中1ms(T246~T249)和l00ms(T250~T255)为累计(积算)型定时器。
每个定时器的定时范围从1×T~32767×Ts,T为时基脉冲周期。
二)实验内容与步骤:
1、编程实现按键按下后1s后接通LED,然后2s后断开LED,记录梯形图和指令表,然后打开监控模式,观察各元件的动态表现。
监控模式下的现象记录:
2)改变定时器的编号(地址)观察累计型和非累计型定时器的区别,然后打开监控模式,观察各元件的动态表现。
监控模式下的现象记录,累计型与非累计型的区别:
3)编写由定时器构成的闪烁(震荡)程序
分析:振荡器的高低电平/频率分别由什么控制。
4)编写8 LED流水灯程序;
实验报告
一、记录实验步骤
二、记录对应程序(梯形图和指令表)
三、记录实验现象
四、实验现象分析。
定时器计数器实验报告
![定时器计数器实验报告](https://img.taocdn.com/s3/m/36a7afde6394dd88d0d233d4b14e852458fb39f8.png)
定时器计数器实验报告简介:定时器是一种用来产生、计数和处理时间信号的计时装置。
在数字电路中,定时器主要分为内部定时器和外部定时器两类,内部定时器是在单片机内部实现的,外部定时器则是通过外部电路实现的。
计数器则是一种用来计数的电子元件,根据不同的使用场合和要求,计数器可以分为多种类型。
在嵌入式系统中,定时器计数器应用广泛,例如在时钟、延时、计数等方面都有很大的作用。
实验目的:1. 学习定时器和计数器的基本原理及应用。
2. 熟悉定时器和计数器在单片机中的编程方法。
3. 掌握通过定时器和计数器实现延时和计数功能的方法。
实验器材:1. STM32F103C8T6开发板2. ST-LINK V2下载器3. 电脑实验内容:一、实验1:使用定时器和计数器实现延时功能1. 在Keil C中新建一个工程,并编写以下程序代码:```#include "stm32f10x.h"void TIM2_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler=psc;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode _Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM2, ENABLE);}void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {TIM_ClearFlag(TIM2, TIM_FLAG_Update);GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)));}}int main(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure);TIM2_Int_Init(9999,7199);while (1);}```2. 将STM32开发板连接到电脑,并下载程序到开发板中。
实验三流水灯实验(io口和定时器实验)
![实验三流水灯实验(io口和定时器实验)](https://img.taocdn.com/s3/m/09388fe17d1cfad6195f312b3169a4517723e5b6.png)
实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
最新PLC实验三:定时器实验报告
![最新PLC实验三:定时器实验报告](https://img.taocdn.com/s3/m/e181a92d0a1c59eef8c75fbfc77da26925c596aa.png)
最新PLC实验三:定时器实验报告实验目的:1. 理解PLC定时器的工作原理及其在自动化控制中的应用。
2. 学习如何编程和配置PLC中的定时器。
3. 掌握使用不同类型的定时器(如TON, TOF, RET)进行时间控制的技巧。
实验设备和材料:1. 西门子S7-1200 PLC2. TIA Portal编程软件3. HMI触摸屏(可选)4. 电源线和接线工具5. 定时器实验指导书实验步骤:1. 打开TIA Portal编程软件,创建一个新的项目。
2. 在项目中添加S7-1200 PLC,并进行硬件配置。
3. 根据实验指导书的要求,编写PLC程序,包括设置定时器的预设时间和动作。
4. 使用TON(接通延时)定时器,实现当输入信号激活后,输出信号在设定的时间后激活。
5. 使用TOF(断开延时)定时器,实现当输入信号断开后,输出信号保持激活一段时间然后断开。
6. 使用RET(循环重置)定时器,创建一个周期性的任务,如每隔一定时间激活一次输出信号。
7. 将编写的程序下载到PLC中。
8. 连接电源,启动PLC,并监控程序运行情况。
9. 观察HMI触摸屏(如果使用)上的定时器状态和输出信号的变化。
10. 记录实验数据和观察结果,验证定时器的工作效果。
实验结果分析:1. 描述定时器在实验中的具体应用和表现。
2. 分析定时器参数设置对实验结果的影响。
3. 讨论在实际工业控制中定时器的重要性和应用场景。
实验结论:总结本次实验中学习到的定时器编程知识,以及定时器在自动化控制中的作用和意义。
指出实验中遇到的问题和解决方案,以及可能的改进方向。
注意事项:1. 在进行接线和设备操作时,务必遵守安全规程。
2. 确保PLC程序正确无误后再下载到控制器中。
3. 在实验过程中,应仔细观察并记录定时器的行为,以便于后续分析。
以上是定时器实验报告的基本内容,具体细节和数据应根据实验过程中的实际情况进行填充和调整。
实验三 用定时器实现数字振荡器
![实验三 用定时器实现数字振荡器](https://img.taocdn.com/s3/m/5bcbfd5bbe23482fb4da4c11.png)
实验三 用定时器实现数字振荡器1 实验目的在数字信号处理中,会经常使用到正弦/余弦信号。
通常的方法是讲某个频率的正弦/余弦值余弦计算出来后制成一个表,DSP 工作时仅作查表运算即可。
在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。
本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。
另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。
2 实验要求本实验利用定时器产生了一个2kHz 的正弦信号,定时器被设置成每25uS 产生一次中断,(等效于采样速率未40k )利用该中断,在该中断服务程序中用叠代算法计算出一个SNT 值,病利用CCS 的图形显示功能查看波形。
3 实验原理(1)数字振荡器原理设一个传递函数为阵线序列sinkwT ,其z 变换为111BzAz 1Cz )z (H -----=其中,A =2coswT ,B =-1,C=sinwT 。
设初始条件为0,求出上式的反Z 变换得: y[k]=Ay[k-1]+By[k-2]+Cx[k-1]这是个二阶差分方程,其单位冲击响应即为sinkwT 。
利用单位冲击函数x[k-1]的性质,即仅当k=1时,x[k-1]=1,代入上式得:k=0 y[0]=Ay[-1]+By[-2]+0=0k=1 y[1]=Ay[0]+By[-2]+c=ck=2 y[2]=Ay[1]+By[0]+0=Ay[1]k=3 y[3]=Ay[2]+By[1]k=n y[n]=Ay[n-1]+By[n-2]在k ﹥2以后,y[k]能用y[k -1]和y[k-2]算出,这是一个递归得方法。
根据上面得说明,我们可以开始数字振荡器得设计。
设该振荡器得频率为2kHz,采样率为40kHz (通过定时器设置,每隔25us 中断一次,即产生一个y[n])则递归得差分方程系数为:A =2coswT=2cos(2×PI ×2000/40000)=2×0.95105652B=-1C=sinwT=sin(2×PI ×2000/40000)=0.3090169979BC 22A 15=⨯ C00022B 15=⨯ 13C722C 15=⨯ 为了便于定点DSP 处理,我们将所有系数除以2,然后用16为定点格式表示为: 这便是本实验中查生2kHz 阵线信号的三个系数。
单片机实验三-定时器实验
![单片机实验三-定时器实验](https://img.taocdn.com/s3/m/ff82ce2a6c85ec3a87c2c5de.png)
实验三 定时器实验 ——循环彩灯实验1、 实验目的1. 学习8051内部计数器的使用和编程方法。
2. 进一步掌握中断处理程序的编写方法。
2、 实验原理1. 定时常数的确定定时器/计数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。
比如实验中时钟频率为12MHZ,现要采用中断方法来实现0.5秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,CPU响应中断后将RO中计数值减一,令RO=0AH,即可实现0.5秒延时。
初值=65536-500002. 初始化程序包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应位进行正确的设置,并将时间常数送入定时器中。
3. 设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则用来控制发光二极管按要求顺序燃灭。
3、 实验要求由8051内部定时器1按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次。
P1口的P1.0~P1.7分别接发光二极管的L1~L8。
要求编写程序模拟一循环彩灯。
彩灯变化花样可自行设计。
建议变化花样为:L1、L2、…L8依次点亮;L1、L2、…L8依次熄灭;L1、L2、…L8全亮、全灭。
各时序间隔为0.5秒。
让发光二极管按以上规律循环显示下去。
4、 实验连线P1.0~P1.7分别接发光二极管L1~L8即可。
5、 程序org 0000hLjmp mainorg 000BhLjmp INTTorg 0100hmain:mov sp,#60h /*设置堆栈指针mov TMOD,#01h /*设置TMOD,仅由TRx控制中断,定时器模式,工作方式1mov TH0,#3CHMOV TL0,#0B0H /*设置初值x=65536-50000 (12M晶振)SETB EA /*开中断SETB ET0 /*开定时器中断T0SETB TR0 /*启动定时器MOV R1,#8 /*中断子程序工作方式1的工作次数MOV R2,#8 /*中断子程序工作方式2的工作次数MOV R3,#1 /*中断子程序工作方式3的工作次数MOV R0,#0AH /*延时次数(产生中断的次数)MOV A,#0FFHWAIT1:AJMP WAIT1INTT:MOV TH0,#3CHMOV TL0,#0B0H /*计数器赋初值DJNZ R0,RETT /*R0减1后判断延时的次数是否足够,足够顺序执行,不足够跳中断返回CJNE R1,#0,INTT1 /*判断彩灯工作方式1工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式CJNE R2,#0,INTT2 /*判断彩灯工作方式2工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式CJNE R3,#0,INTT3 /*判断彩灯工作方式3工作是否完毕,完毕顺序执行下一种方式,未完毕跳转继续执行此种方式 JMP INTT4 /*跳转执行第4种方式INTT1:MOV R0,#0AH /*重新向延时次数计数器赋初值CLR C /*C清零RLC A /*带进位左循环移位,低位移入0,即LED相继点亮(低电平亮)DEC R1 /*工作次数减1JMP RETT /*跳中断返回INTT2:MOV R0,#0AHSETB C /*C置1RRC A /*带进位右循环移位,高位移入1,即LED相继熄灭(低电平灭)DEC R2JMP RETTINTT3:MOV R0,#0AHMOV A,#0 /*8位LED灯全部点亮DEC R3JMP RETTINTT4:MOV R0,#0AHMOV P1,#0FFH /*8位LED灯全部熄灭MOV R1,#8MOV R2,#8MOV R3,#1MOV R0,#0AHMOV A,#0FFH /*重新装入相应初值,循环执行彩灯的四种工作方式JMP INTTRETT:MOV P1,A /*输出彩灯的各种状态RETIEND6、 结论通过本次试验掌握了8051内部计数器的使用和编程方法。
实验三 定时器实验
![实验三 定时器实验](https://img.taocdn.com/s3/m/3394da6ff5335a8102d220c0.png)
1 计数 0 定时
4种工作方式
设置定时器工作方式
TMOD
D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 1 1 T1 0 T0 0
定时器/计数器
THX(8位) TLX (8位)
方式0:213*1.085us=8.89ms M1M0 方式 计 数 器 配 工作方式 TMOD 置 16*1.085us=71.10ms 方式1: 2 01H T0定时 0 0 0 TLx低5位与THx的8位构成13位计数器 10H T1定时 方式2: 28*1.085us=0.2778ms 0 1 1 TLx与THx构成16位计数器 05H T0计数 1 0 2 自动重装初值(THx)的8位(TLx溢出时)计数器 方式3: 28*1.085us=0.2778ms 51H T1计数 1 1 3 仅用于T0,分成两个8位计数器,T1停止计数 在实验过程中,我们统一选择方式一定时/计数。
THX(8位) TLX (8位)
16位定时器/计数器
计数最大值为216
设置定时器工作方式
2种工作模式
定时 计数
4种工作方式
方式0
方式1
方式2
方式3
工作方式控制寄存器TMOD(8位,字节地址89H)
D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 T1 T0
实验接线
P1.0--0 1
0 1 1 0 1 0 1 0 1
0 1 1 1 0 1 0 0 1
0 1 1 0 1 0 1 0 1
0 1 0 1 1 1 0 0 1
0 0 1 1 1 0 1 0 1
PLC应用技术实验3 定时器和计数器器指令的应用
![PLC应用技术实验3 定时器和计数器器指令的应用](https://img.taocdn.com/s3/m/378dd9d6360cba1aa911da05.png)
PLC 应用技术实验指导书
1 实验3 定时器和计数器指令的应用
一、实验目的
1. 熟悉CPM2A 型PLC 的交流和直流电源的连接,熟悉输入开关板和I/O 端子的连接。
2. 通过实验程序熟悉定时器和计数器指令的基本应用方法。
二、实验内容
1. 认真阅读实验程序,理解并熟悉实验程序的功能。
2. 输入程序。
3. 调试并监控程序运行。
三、实验步骤
1. 正确连接PLC 所需的各种电源。
连接实验程序的需要的输入开关板和I/O 的接线端子。
2. 输入用定时器指令编写的延时10s 导通的定时程序(见图1)。
运行、监控并调试,观察结果。
3. 输入用计数器指令编写的计数10次的计数程序(见图2)。
运行、监控并调试,观察结果。
4. 用定时器和计数器器指令编写一个既有定时器,又有计数器的延时10s 导通的定时电路程序。
输入、修改、运行、监控并调试,观察结果。
●自编梯形图程序:
四、实验总结及思考
1. 总结本次实验中各个程序运行的结果。
2. 写出上述梯形图程序的指令语句表。
3. 若延时时间修改为50s ,应该修改定时器的什么值,如何修改?
4. 按现在的程序,计数电路中的1.02输入端子上应该接动合还是动断按钮?为什么?
00000 00002 00005
图1 延时10s 的定时电路的梯形图 00000 00004 00007 图2 计数10次的计数电路的梯形图。
实验三定时器及外部中断实验
![实验三定时器及外部中断实验](https://img.taocdn.com/s3/m/8c64cf8ea8114431b90dd8f8.png)
实验三定时器及外部中断实验一、实验目的1)熟悉VC5416的定时器工作原理。
2)掌握VC5416定时器的编程控制方法。
3)学会使用定时器的中断方式来控制程序执行方法。
4)掌握外部中断的编程控制方法,理解DSP对于中断的响应的过程。
5)了解并学习混合编程的实现方法。
二、实验设备1)计算机一套,DSP硬件仿真器一台,实验箱一台。
2)CCS4.1-CCS5.5软件版本。
3)源程序及链接命令文件见:D:\ EXPER\EXP3目录下的.asm 、.cmd、.C 和.lib文件。
三、实验步骤(一)、连接仿真器,将仿真器插接到C5416的JTAG接口上,另一头插接到电脑的USB接口上,因为仿真器是金属外壳,容易和箱子内部的电路触碰造成短路,从而对实验箱造成损坏,这个要特别注意,也不允许在机箱打开电源情况下插拔仿真器。
(二)、实验箱配置及连线:C5416DSP核心板上的SW1的1-6的开始设置为off off off off on on(上电后工做于1/2分频器方式,其它实验也按照此设置不变,我试验过改为PLL*2方式仿真器就连接不上了),SW2设置为on on on on。
将DSP核心板所在试验箱引脚连线区的BCANRX(C54的XF)引脚,与指示灯连线区LAMP的L1连接起来,这样就可以通过XF控制这个L1这个方光管的亮灭了。
将DSP核心板所在试验箱引脚连线区的INT0(C54的外部中断0输入)引脚与单脉冲按键PAULSE的P-(按下输出负脉冲)连接起来,这样按下按键时,就会给DSP的INT0中断引脚发送一个负脉冲。
连线照片见程序目录中的图片文件。
(二)、打开实验箱电源开关。
(三)、使用给定的文件,按照实验一的步骤建立实验项目,例如工作区目录为D:\ exp3 中建立一个exp3的实验项目,添加所有的给定的文件。
(四)、仿真调试方法1、通过菜单Project- Build All 对项目进行编译和链接,如下:如果有错误会出现在problem 窗口中。
单片机实验报告3
![单片机实验报告3](https://img.taocdn.com/s3/m/a61f82e458f5f61fb636661d.png)
实验报告二、实验地点:图书馆816-2三、实验目的:了解MCS-51单片机定时器的结构及使用方法。
四、实验内容1.内容及要求:(1)用定时器1的方式1定时,P1.0接发光二极管,使发光二极管每秒钟闪烁1次。
程序如下:ORG 0000HLJMP STARTORG 001BHLJMP TIME1ORG 0100HSTART:MOV TMOD,#10HMOV TH1,#3CHMOV TL1,#0B0HSETB TR1SETB ET1SETB EAMOV P1,#00HMOV R2,#0AHSJMP $TIME1:MOV TH1,#3CHMOV TL1,#0B0HDJNZ R2,LOOPCPL P1.0MOV R2,#0AHLOOP:RETIEND(2)用定时器1的方式2计数,T1引脚接单脉冲,用P1口接二极管显示计数。
程序如下:ORG 0000HLJMP STARTORG 001BHLJMP TIME1ORG 0100HSTART:MOV TMOD,#60HMOV P1,#00HMOV TR1,#00HMOV TL1,#00HSETB EASETB ET1SETB TR1LOOP:MOV P1,TL1LJMP LOOPTIME1:RETIEND2.流程图:(1)图1 实验(1)流程图(2)图2 实验(2)流程图3.实验步骤(1)连接P1.0和与之对应的发光二极管。
(2)编写定时器计时的程序,打开实验箱,进行编译。
运行程序并观测实验箱。
若实验箱中发光二极管随着程序的运算每一秒闪烁一次,则实验成功。
(3)按照P1.0至P1.7连对应的八个发光二极管,P3.5接单脉冲。
(4)若实验箱上的发光二极管,随着按下单脉冲的次数,进行累加,则表示实验成功。
五、实验中遇到的问题及解决方法问题:进行定时实验时,老师要求将一秒闪烁五次改为一秒闪烁一次。
解决:利用公式(2^16-X)*2*10^(-6)=0.1,重新计算数值,每间隔100ms中断一次,计数初值算得15536,之后进入中断,重新装载初值,做11次中断之后对输出信号进行翻转就能得到一秒闪烁一次的结果。
实验3外部中断实验报告
![实验3外部中断实验报告](https://img.taocdn.com/s3/m/8844019fba1aa8114531d920.png)
实验3外部中断实验报告以下是为大家整理的实验3外部中断实验报告的相关范文,本文关键词为实验,外部,中断,报告,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
实验三定时中断实验一、实验目的1.掌握51单片机外部中断的应用。
2.掌握中断函数的写法。
3.掌握定时器的定时方法。
4.掌握LeD数码管的显示。
二、实验内容1.用外部中断0测量负跳变信号的累计数,同时在LeD数码管上显示出来。
2.用外部中断改变流水灯的方式。
3.用定时器T1的方式2控制两个LeD以不同周期闪烁。
使用定时器T1的方式2来控制p0.0、p0.1引脚的两个LeD分别以1s和2s 的周期闪烁。
三、实验仿真硬件图在proteus软件中建立如下图所示仿真模型并保存。
1.用外部中断0测量负跳变信号的累计数,同时在LeD数码管上显示出来(用中断方式做计数器)。
2.用外部中断改变流水灯的方式。
中断前:开始时,p0.0~p0.7的8个灯依次点亮。
外部中断0:p0.0~p0.7的左右4个灯闪烁亮8次外部中断1:p0.0~p0.7的8个灯间隔闪烁8次改变中断优先级和保护现场,观察运行结果四、编程提示12345678p1.0p1.1p1.2p1.3p1.4p1.5p1.6p1.7AT89c51c122pfu1x112m18 xTAL219xTAL1p0.0/AD0p0.1/AD1p0.2/AD2p0.3/AD3p0.4/AD4p0.5/AD5p 0.6/AD6p0.7/AD7p2.0/A8p2.1/A9p2.2/A10p2.3/A11p2.4/A12p2.5/A13p2 .6/A14p2.7/A15p3.0/RxDp3.1/TxDp3.2/InT0p3.3/InT1p3.4/T0p3.5/T1p3. 6/wRp3.7/RD3938373635343332212223242526272810111213141516171234567812345678c222pfD1D2D3D4D5D6D7D8R110k9RsTc310uf2930 31psenALeeAR2220R3220R4220R5220R6220R7220R8220R9220外部中断0请求InT0,由p3.2管脚输入,通过IT0位来决定是低电平有效还是下降沿有效。
单片机实验实验三
![单片机实验实验三](https://img.taocdn.com/s3/m/af614227453610661ed9f448.png)
实验三:定时器实验一、实验要求由8031内部定时器具1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接8个发光二极管。
要求编写程序模拟一时序控制装置。
开机后第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒钟L4,L6亮,第四秒钟L5,L7亮,第7秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,一直循环下去。
二、实验目的1.学习8031内部部计数器的使用和编程方法。
2.进一步掌握中断程序的编程方法。
三、实验电路及连线P1.0-P1.7接L0-L7。
四、实验程序//---定时器实验---//-----头文件引用-----#include<reg51.h>#include<absacc.h>//-----宏声明-----#define uchar unsigned charuchar idata LED[8]={0xfa,0xf5,0xaf,0x5f,0xaa,0x55,0x00,0xff};//显示常数表uchar times=20; //延时一秒的常数uchar status=0;//-----定时器-----void int1() interrupt 3{TR1=0; //关中断TL1=0x00; //延时50mS常数TH1=0x4b;TR1=1; //开中断times=(times-1);if(times==0){times=20; //延时一秒的常数P1=LED[status]; //送P1口显示status=((status+1)&0x07);}}//-----主程序-----void main(){TMOD=0x10; //置T1为方式1TL1=0x00; //延时50mS的时间常数TH1=0x4b;TR1=1;ET1=1;EA=1; //开中断while(1);}ORG 0000HAJMP STARTORG 001BH ;T1中断入口地址AJMP INT_T1ORG 0100HSTART:MOV SP,#60HMOV TMOD,#10H ;置T1为方式1MOV TL1,#00H ;延时50mS的时间常数MOV TH1,#4BHMOV R0,#00HMOV R1,#20SETB TR1SETB ET1SETB EA;开中断SJMP $INT_T1: ;T1中断服务子程序PUSH ACC ;保护现场PUSH PSWPUSH DPLPUSH DPHCLR TR1 ;关中断MOV TL1,#00H ;延时50mS常数MOV TH1,#4BHSETB TR1 ;开中断DJNZ R1,EXITMOV R1,#20 ;延时一秒的常数MOV DPTR,#DA TA1 ;置常数表基址MOV A,R0 ;置常数表偏移量MOVC A,@A+DPTR ;读常数表MOV P1,A;送P1口显示INC R0ANL 00,#07HEXIT:POP DPH ;恢复现场POP DPLPOP PSWPOP ACCRETI;LED显示常数表DA TA1: DB 0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH END。
实验三使用中断的定时器
![实验三使用中断的定时器](https://img.taocdn.com/s3/m/0fe7359850e79b89680203d8ce2f0066f53364c3.png)
实验三使用中断的定时器一、实验目的1、理解C2000芯片的CPU定时器和中断系统的工作原理;2、学会使用TMS320F28027芯片的定时器实现定时;3、掌握CPU定时器和PIE外设中断控制器相关寄存器的配置与使用。
二、概述本实验的程序实现了定时器Timer0定时1秒,对应LED灯D10状态翻转,由亮到灭,在由灭到亮,一致循环下去;定时器Timer1定时2秒,对应LED灯D12状态翻转;定时器Timer2定时4秒,对应LED灯D13状态翻转。
表1 输出引脚硬件配置表3D13GPIO237Timer2对应LED图1 LED灯连接电路图三、实验内容1、按照新建工程项目的方法进行实验(参考实验二)。
2、主函数(程序流程框图见图2所示)#include"DSP28x_Project.h"// Device Headerfile and Examples Include File // Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void);interrupt void cpu_timer1_isr(void);interrupt void cpu_timer2_isr(void);void InitTimerGpio(void);void main(void){// Step 1.系统初始化Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the f2802x_SysCtrl.c file.InitSysCtrl();// Step 2.GPIO初始化 Initalize GPIO:// This example function is found in the f2802x_Gpio.c file and// illustrates how to set the GPIO to it's default state.// InitGpio(); // Skipped for this exampleInitTimerGpio();// Step 3. 清除(关闭)中断并初始化外设中断向量表 Clear all interrupts and initialize PIE vector table:// 关闭CPU中断 Disable CPU interruptsDINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the f2802x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in f2802x_DefaultIsr.c.// This function is found in f2802x_PieVect.c.InitPieVectTable();// Interrupts that are used in this example are re-mapped to// 设置中断向量表 ISR functions found within this file.EALLOW; // This is needed to write to EALLOW protected registers0 = &cpu_timer0_isr;1 = &cpu_timer1_isr;2 = &cpu_timer2_isr;EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. 初始化CPU定时器 Initialize the Device Peripheral. This function can be// found in f2802x_CpuTimers.cInitCpuTimers(); // For this example, only initialize the Cpu Timers#if (CPU_FRQ_60MHZ)//配置CPU定时器 Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 60MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 60, );ConfigCpuTimer(&CpuTimer1, 60, );ConfigCpuTimer(&CpuTimer2, 60, );#endif#if (CPU_FRQ_50MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 50MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 50, );ConfigCpuTimer(&CpuTimer1, 50, );ConfigCpuTimer(&CpuTimer2, 50, );#endif#if (CPU_FRQ_40MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second:// 40MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 40, );ConfigCpuTimer(&CpuTimer1, 40, );ConfigCpuTimer(&CpuTimer2, 40, );#endif// To ensure precise timing, use write-only instructions to write to the entire register. Therefore, if any// of the configuration bits are changed in ConfigCpuTimer and InitCpuTimers (in F2802x_CpuTimers.h), the// below settings must also be updated..all = 0x4001; //Use write-only instruction to set TSS bit = 0.all = 0x4001; // Use write-only instruction to set TSS bit = 0.all = 0x4001; // Use write-only instruction to set TSS bit = 0// Step 5.使能用到的中断 User specific code, enable interrupts:// Enable CPU int1 which is connected to CPU-Timer 0, CPU int13// which is connected to CPU-Timer 1, and CPU int 14, which is connected// to CPU-Timer 2:IER |= M_INT1;IER |= M_INT13;IER |= M_INT14;// Enable TINT0 in the PIE: Group 1 interrupt 7R1.7 = 1;// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. 设置空循环(程序进入运行状态) IDLE loop. Just sit and loop forever (optional):for(;;);}//下面是中断服务程序interrupt void cpu_timer0_isr(void){ EALLOW;ruptCount++;.GPIO0 = 1;.GPIO34 = 1;// Acknowledge this interrupt to receive more interrupts from group 1 K.all = PIEACK_GROUP1;}interrupt void cpu_timer1_isr(void){ EALLOW;ruptCount++;.GPIO1 = 1;// The CPU acknowledges the interrupt.EDIS;}interrupt void cpu_timer2_isr(void){ EALLOW;ruptCount++;.GPIO2 = 1;// The CPU acknowledges the interrupt.EDIS;}// 下面是配置GPIOvoid InitTimerGpio(void){EALLOW;X1.34 = 0;R.34 = 1;X1.0 = 0;R.0 = 1;X1.1 = 0;R.1 = 1;X1.2 = 0;R.2 = 1;EDIS;}四、课外学习任务1、进一步理解实验内容,在实验板上找到GPIO34连接的LED灯,试解读下面的程序代码:X1.34 = 0;R.34 = 1;2、总结实验内容及步骤写出实验报告。
单片机实验3 中断、定时器计数器实验
![单片机实验3 中断、定时器计数器实验](https://img.taocdn.com/s3/m/c9e971dd10661ed9ac51f3b6.png)
西南科技大学实验报告课程名称:单片机原理及应用A实验名称:中断、定时器/计数器实验姓名:学号:班级:生医1401指导教师:雷华军西南科技大学信息工程学院制实验题目数码管动态扫描显示驱动、键盘动态扫描驱动一、实验目的1、熟练巩固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操作,会使用HEX文件进行单片机的仿真。
2、了解定时器的原理和四种工作方式的使用方法,学习定时器的相关应用,包括产生信号和计数,利用定时器进行延时等。
3、进一步掌握熟练单个数码管以及多位数码管的显示原理,学会将0~1000的数字进行显示。
4、掌握利用单片机产生矩形方脉冲的相关原理。
二、实验原理1、定时器结构和原理图①上图①为定时器T0、T1的结构,其中振荡器经12分频后作为定时器的时钟脉冲,T为外部计数脉冲输入端,通过开关K1选择。
反相器,或门,与门共同构成启/停控制信号。
TH 和TL为加1计数器,TF为中断标志。
每接收到一个脉冲,加1计数器自动加1,当计数器中的数被加为0时产生溢出标志,TF将被置1。
计数器工作方式的选择和功能的实现需要配置相应的寄存器TMOD和TCON。
2、定时器工作方式定时器共有四种工作方式分别为方式0——方式3。
方式0:13位计数器,最大计数值为213个脉冲。
方式1:16位计数器,最大计数值为216个脉冲。
方式2:8位自动重装计数器。
该方式下,TL进行计数工作,TH用于存放计数初值,当产生溢出中断请求时会自动将TH中的初值重新装入TL,以使计数器继续工作。
方式3:仅限于T0计数器,在方式3下,T0计数器被分成两个独立的8为计数器TL0和TH0。
3、定时器间隔1ms产生一个脉冲利用单片机1 P3.0口进行脉冲的输出,通过定时器进行端口定时控制,实现每1ms高低电平变换。
就可以实现一个占空比为50%的矩形脉冲输出。
对于定时器的定时功能实现,需要进行定时器模式选择,定时器初值设定。
4、利用中断进行脉冲的计数将单片机1 P3.0口输出的脉冲连接到单片机2的中断INT0口P3.2,通过脉冲的高低电平变换触发中断0,进行脉冲个数的计数。
实验三_8253定时器计数器实器
![实验三_8253定时器计数器实器](https://img.taocdn.com/s3/m/e3ae8a59e518964bcf847c64.png)
实验三 8253定时器/计数器实验一、实验目的1. 学会8253 芯片与微机接口的原理和方法。
2. 掌握8253 定时器/计数器的工作原理和编程方法。
二、实验内容编写程序,将8253的计数器0设置为方式2 (频率发生器),计数器1设置为方式3 (方波频率发生器),计数器0的输出作为计数器1的输入,计数器1的输出接在一个LED上,运行后可观察到该LED在不停地闪烁。
1.编程时用程序框图中的二个计数初值,计算OUT1的输出频率,用表观察LED,进行核对。
2.修改程序中的二个计数初值,使OUT1的输出频率为1Hz,用手表观察LED,进行核对。
3.上面计数方式选用的是 16 进制,现若改用 BCD 码,试修改程序中的二个计数初值,使LED 的闪亮频率仍为1Hz。
三、电路图CS3→0040H;JX8→JX0;IOWR→IOWR;IORD→IORD;A0→A0;A1→A1;GATE0→+5V;GATE1→+5V;OUT0→CLK1;OUT1→L1;CLK0→0.5MHz;四、流程图及编程指南8253 是一种可编程定时/计数器,有三个十六位计数器,其计数频率范围为0-2MHz用+5V 单电源供电。
8253 的六种工作方式:⑴方式0:计数结束中断⑷方式3:方波频率发生器⑵方式l:可编程频率发生⑸方式4:软件触发的选通信号⑶方式2:频率发生器⑹方式5:硬件触发的选通信号8253 初始化编程1. 8253 初始化编程8253 的控制寄存器和 3 个计数器分别具有独立的编程地址,由控制字的内容确定使用的是哪个计数器以及执行什么操作。
因此8255 在初始化编程时,并没有严格的顺序规定,但在编程时,必须遵守两条原则:①在对某个计数器设置初值之前,必须先写入控制字;②在设置计数器初始值时,要符合控制字的规定,即只写低位字节,还是只写高位字节,还是高、低位字节都写(分两次写,先低字节后高字节)。
2. 8253 的编程命令8253 的编程命令有两类:一类是写入命令,包括设置控制字、设置计数器的初始值命令和锁存命令;另一类是读出命令,用来读取计数器的当前值。
实验三(一)(二)定时器与计数器功能认识与应用、扩展
![实验三(一)(二)定时器与计数器功能认识与应用、扩展](https://img.taocdn.com/s3/m/d2feed936bec0975f465e2c6.png)
实验三 定时器/计数器实验(一)一、实验目的通过实验了解定时器和计数器的不同应用。
进一步掌握定时器和计数器的编程和调试的方法。
二、实验内容要求学生自行设计并调试程序(教师可适当提示)1、自复位接通延时定时器电路(一个机器周期脉冲发生器电路)提示:先思考下面三个电路,根据定时器的刷新方式分析它们能否正常工作?不能工作的程序应如何修改?为了确保在每次定时器达到预置值时,自复位定时器的输出都能够接通一个程序扫描周期,用一个常闭触点来代替定时器位作为定时器的使能输入。
但一个程序扫描周期的脉冲过窄,在状态表中无法监视,为解决这种状况,可使用比较指令“LDW >= T33,+40”控制PLC 的某个输出点,再用状态图监视。
(思考:若想形成自复位计数器电路应如何编程?)知识回顾:定时器的刷新方式: 1ms 定时器每隔1ms 刷新一次与扫描周期和程序处理无关即采用中断刷新方式。
因此当扫描周期较长时,在一个周期内可能被多次刷新,其当前值在一个扫描周期内不一定保持一致。
10ms 定时器则由系统在每个扫描周期开始自动刷新。
由于每个扫描周期内只刷新一次,故而每次程序处理期间,其当前值为常数。
100ms 定时器则在该定时器指令执行时刷新。
下一条执行的指令,即可使用刷新后的结果,非常符合正常的思路,使用方便可靠。
但应当注意,如果该定时器的指令不是每个周期都执行,定时器就不能及时刷新,可能导致出错。
使用定时器本身的常闭触点作定时器的使能输入。
定时器的状态位置1时,依靠本身的常闭触点的断开使定时器复位,并重新开始定时,进行循环工作。
采用不同时基标准的定时器时,会有不同的运行结果,具体分析如下:(1)T32为1ms 时基定时器,每隔1ms 定时器刷新一次当前值,CPU 当前值若恰好在处理常闭触点和常开触点之间被刷新,Q0.0可以接通一个扫描周期,但这种情况出现的几率很小,一般情况下,不会正好在这时刷新。
若在执行其他指令时,定时时间到,1ms 的定时刷新,使定时器输出状态位置位,常闭触点打开,当前值复位,定时器输出状态位立即复位,所以输出线圈Q0.0一般不会通电。
实验三、定时器实验
![实验三、定时器实验](https://img.taocdn.com/s3/m/401602d2ba4cf7ec4afe04a1b0717fd5360cb26d.png)
实验报告本 指导老师: 班级: 姓名: 学号: 2011 ~2012 学年度第二学期广东石油化工学院计算机与电子信息学院 实验三、定时器实验 一、实验目的 1、熟悉DSP的定时器 2、掌握DSP定时器的控制方法 3、学会使用定时器中断方法控制程序流程 二、实验设备 计算机、ZYE1801C实验箱 三、实验原理 TMS320VC5402有两个16位的定时器,每个定时器带有一个4位预分频器PSC和16位定时计数器TIM。CLKOUT时钟先经 PSC预分频后,用分频的时钟再对TIM作减1计数,当TIM减为0时,将在定时器输出管脚TOUT上产生一个脉冲,同时产生定 时器中断请求,并将定时器周期寄存器PRD的值装入TIM。因此,定时器的工作受到三个寄存器的控制,即TIM、PRD、定时 器控制寄存器TCR。两个定时器分别有3个寄存器和相应的输出管脚TOUT。 TMS320VC5402的定时器可以被特定的状态位实现停止、重新启动、重新设置或禁止。可以使用该定时器产生周期性的CPU 中断。 1、TIMER REGIS算机与ZYE1801C 实验箱通过并口P1相连,运行CCS 软件。 2. 编写定时器中断程序,实现实验箱插板上红色指示灯的闪烁。
3. 调整定时延时系数TIMER ,观察指示灯闪烁延时的变化。 4. 调整寄存器PRD0,TCR0的值,观察指示灯的闪烁周期的变化。 五、思考题 1、本实验的定时时间是如何计算的? ()()11 ()(1)(1) c c c c TIN T RATE t u v t TD D R PRD = = ???+?+ 注:()c c t 是DSP 芯片时钟周期。 2、本实验系统采用的外部时钟输入,f=11.0592MHZ ,采用的是5倍频模式,请问该系统定时器的最大定时周期? 11.59ms 六、实验心得体会 通过本次实验,熟悉DSP 的定时器的原理和定时时间的计算,学会使用定时器中断方法控制程序流程,及DSP 开发板的使 用,以及要延时比较长时间的处理方法。
单片机 实验三中断及定时器实验
![单片机 实验三中断及定时器实验](https://img.taocdn.com/s3/m/1f47a472336c1eb91a375d61.png)
实验三:中断及定时器实验一、实验目的:1、弄清中断的概念、基本原理,掌握中断技术的应用2、了解中断初始化的方法,中断向量安装和中断服务子程序的设计方法。
3、了解定时/计数器的工作原理及MCS51单片机的定时器内部结构4、掌握时间常数计算方法5、掌握定时器初始化方法和定时中断程序设计方法二、实验内容:定时器实验1、这个是一个电子钟走时程序,利用定时器T0产生50ms中断,中断计数器中断20次为1秒,利用秒信号进行电子钟计时。
先读懂下面程序段,然后编辑、编译程序,并在伟福仿真器上模拟调试该程序。
程序清单如下:COUNT EQU 7FHCOUNT1 EQU 7EHS_MEM EQU 73HM_MEM EQU 72HH_MEM EQU 71HORG 0000HLJMP MAINORG 000BHLJMP INT_T0 ;“*1”MAIN: MOV SP,#2FHMOV TMOD,#BMOV TH0,#03CH ;50毫秒中断时间常数MOV TL0,#0BHMOV IE,#B ;开放T0MOV IP,#0MOV S_MEM,#0MOV M_MEM,#0MOV H_MEM,#0MOV COUNT,#20SETB TR0;______________________________________________________ W AIT:NOPSJMP W AITINT_T0: MOV TL0,#0BHMOV TH0,#3CHDJNZ COUNT,EXT_T0MOV COUNT,#20 ;恢复中断计数器INC S_MEM ;“*2”MOV A,S_MEMCJNE A,60,EXT_T0MOV S_MEM,#0INC M_MEMMOV A,M_MEMCJNE A,#60,EXT_T0MOV M_MEM,#0INC H_MEMMOV A,H_MEMCJNE A,#13,EXT_T0MOV H_MEM,#0EXT_T0: RETI2、按下列要求修改程序或回答问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3、定时器实验【实验目的】1.掌握LPC1768函数库的使用;2.掌握LPC1768定时器的编程;3.掌握LPC1768脉宽调制的编程;4.了解中断服务函数的编写方法。
【实验步骤】1.用定时器中断的实现1Hz的方波,在P2.0上的LED进行显示。
2.用定时器的匹配功能实现1路1Hz的PWM,在P2.0上的LED进行显示。
3.用硬件PWM实现6路1Hz的PWM,在P2.0--P2.6上的LED进行显示。
4.用定时器中断实现时分秒时钟,在LCD进行显示,并用按键对小时和分钟进行修改。
【实验程序】1、定时器中断程序******************************************************************************/ #include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 499;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);}void TIMER0_IRQHandler (void){static uint8_t m=0;if(TIM_GetIntStatus(LPC_TIM0,TIM_MR0_INT)==SET){if(m==0){GPIO_SetValue(2,1); m=1;}else{GPIO_ClearValue(2,1); m=0;}TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);}return;}int main (void){SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,0xff,1);GPIO_ClearValue(2,0xff);while(1);}2、软件PWM程序#include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 99;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);TMR_Match.MatchChannel = 1;TMR_Match.ResetOnMatch = FALSE;TMR_Match.IntOnMatch = ENABLE;TMR_Match.MatchValue = 10;TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);}void TIMER0_IRQHandler (void){if(TIM_GetIntStatus(LPC_TIM0,TIM_MR0_INT)==SET){GPIO_SetValue(2,1);TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);}if(TIM_GetIntStatus(LPC_TIM0,TIM_MR1_INT)==SET) {GPIO_ClearValue(2,1);TIM_ClearIntPending(LPC_TIM0,TIM_MR1_INT);}return;}int main (void){SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,0xff,1);GPIO_SetValue(2,1);while(1);}3、硬件PWM#include "lpc17xx_pwm.h"#include "lpc17xx_pinsel.h"#include "lpc_types.h"void PWM_Dual(void){uint8_t temp;PWM_TIMERCFG_Type PWMCfgDat;PWM_MATCHCFG_Type PWMMatchCfgDat;PINSEL_CFG_Type PinCfg;/* PWM block section -------------------------------------------- */ /* Initialize PWM peripheral, timer mode* PWM prescale value = 1 (absolute value - tick value)*/PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_TICKV AL; PWMCfgDat.PrescaleValue = 300000;PWM_Init(LPC_PWM1, PWM_MODE_TIMER, (void *) &PWMCfgDat);/** Initialize PWM pin connect*/PinCfg.Portnum = 2;PinCfg.Funcnum = 1;PinCfg.OpenDrain=0;PinCfg.Pinmode = 0;for (temp=0; temp<6; temp++){PinCfg.Pinnum=temp;PINSEL_ConfigPin(&PinCfg);}/* Set match value for PWM match channel 0 = 100, update immediately */ PWM_MatchUpdate(LPC_PWM1, 0, 100, PWM_MATCH_UPDATE_NOW); /* PWM Timer/Counter will be reset when channel 0 matching* no interrupt when match* no stop when match*/PWMMatchCfgDat.IntOnMatch = DISABLE;PWMMatchCfgDat.MatchChannel = 0;PWMMatchCfgDat.ResetOnMatch = ENABLE;PWMMatchCfgDat.StopOnMatch = DISABLE;PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);/* Match value setting ------------------------------------ */PWM_MatchUpdate(LPC_PWM1, 1, 10, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 2, 20, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 3, 30, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 4, 40, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 5, 50, PWM_MATCH_UPDATE_NOW); PWM_MatchUpdate(LPC_PWM1, 6, 60, PWM_MATCH_UPDATE_NOW);/* Match option setting ------------------------------------ */PWMMatchCfgDat.IntOnMatch = DISABLE;PWMMatchCfgDat.ResetOnMatch = DISABLE;PWMMatchCfgDat.StopOnMatch = DISABLE;for(temp = 0; temp < 6; temp++){PWMMatchCfgDat.MatchChannel = temp+1;PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat);}/* Enable PWM Channel Output ------------------------------------ */ PWM_ChannelCmd(LPC_PWM1, 1, ENABLE);PWM_ChannelCmd(LPC_PWM1, 2, ENABLE);PWM_ChannelCmd(LPC_PWM1, 3, ENABLE);PWM_ChannelCmd(LPC_PWM1, 4, ENABLE);PWM_ChannelCmd(LPC_PWM1, 5, ENABLE);PWM_ChannelCmd(LPC_PWM1, 6, ENABLE);/* Reset and Start counter */PWM_ResetCounter(LPC_PWM1);PWM_CounterCmd(LPC_PWM1, ENABLE);/* Start PWM now */PWM_Cmd(LPC_PWM1, ENABLE);}int main (void){int mm,ts;GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GPIO_SetDir(2,3<<6,1);GPIO_ClearValue(2,3<<6);SystemInit();PWM_Dual();while(1);}4、时钟LCD#include "LPC17xx.h"#include "lpc17xx_clkpwr.h"#include "lpc17xx_timer.h"#include "lpc17xx_nvic.h"#include "lpc17xx_gpio.h"#include "string.h"#include "GLCD.h"#define SELECT (1<<25)#define DOWN (1<<26)#define LEFT (1<<27)#define RIGHT (1<<28)#define UP (1<<29)char shi=23,fen=59,miao=0,ds=0;int ss=0,ms=0;void TIMER0_IRQHandler (void);void TIMER1_IRQHandler (void);void Timer_init(){TIM_TIMERCFG_Type TMR_Cfg;TIM_MATCHCFG_Type TMR_Match;/* definition for led *//* On reset, Timer0/1 are enabled (PCTIM0/1 = 1), and Timer2/3 are disabled (PCTIM2/3 = 0).*//* Initialize timer 0, prescale count time of 1000uS */TMR_Cfg.PrescaleOption = TIM_PRESCALE_USV AL;TMR_Cfg.PrescaleValue = 1000;TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TMR_Cfg);/* Use channel 0, MR0 */TMR_Match.MatchChannel = 0;/* Enable interrupt when MR0 matches the value in TC register */TMR_Match.IntOnMatch = ENABLE;/* Enable reset on MR0: TIMER will reset if MR0 matches it */TMR_Match.ResetOnMatch = TRUE;/* Don't stop on MR0 if MR0 matches it*/TMR_Match.StopOnMatch = FALSE;/* Do nothing for external output pin if match (see cmsis help, there are another options) */TMR_Match.ExtMatchOutputType = TIM_EXTMATCH_NOTHING;/* Set Match value, count value of 200 (200 * 1000uS = 200000us = 0.2s --> 5 Hz) */TMR_Match.MatchValue = 199;/* Set configuration for Tim_config and Tim_MatchConfig */TIM_ConfigMatch(LPC_TIM0, &TMR_Match);/* Preemption = 1, sub-priority = 1 */NVIC_SetPriority(TIMER0_IRQn, ((0x01<<3)|0x01));/* Enable interrupt for timer 0 */NVIC_EnableIRQ(TIMER0_IRQn);/* Start timer 0 */TIM_Cmd(LPC_TIM0, ENABLE);TIM_Cmd(LPC_TIM1, ENABLE);}void TIMER0_IRQHandler (void){/* Clear Interrupt */TIM_ClearIntPending(LPC_TIM0,TIM_MR0_INT);if(++ds>=5){ds=0;if(++miao>=60){miao=0;if(++fen>=60){fen=0;if(++shi>=24) shi=0;}}}return;}void GLCD_DispWord(int r,int l,int x,int m){int str[8],i;for(i=0;i<m;i++){str[i]=x%10+'0';x=x/10;}for(i=0;i<m;i++){GLCD_DisplayChar(r,l+i,str[m-1-i]);}}/*---------------------------------------------------------------------------- MAIN function*----------------------------------------------------------------------------*/ int main (void){int mm,ts;SystemInit();Timer_init();GPIO_SetDir(0,1<<21,1);GPIO_SetValue(0,1<<21);GLCD_Init();GLCD_Clear(Black);GLCD_SetBackColor(Black);GLCD_SetTextColor(Y ellow);GLCD_DisplayString(0,0,"LPC1768 TEST...");GLCD_DisplayString(1,0,"TIME0........");GLCD_DisplayString(2,0,"Time= : : ");GPIO_SetDir(1,SELECT|RIGHT|LEFT|UP|DOWN,0); while(1){if(mm!=ds){if((GPIO_ReadValue(1)&SELECT)==0) shi=10;if((GPIO_ReadValue(1)&DOWN)==0) if(fen>0) fen--;if((GPIO_ReadValue(1)&UP)==0) if(fen<59) fen++;if((GPIO_ReadValue(1)&RIGHT)==0) if(shi>0) shi--;if((GPIO_ReadValue(1)&LEFT)==0) if(shi<23) shi++;GLCD_DispWord(2,5,shi,2);GLCD_DispWord(2,8,fen,2);GLCD_DispWord(2,11,miao,2);mm=ds;}}}。