实验三 定时器中断实验

合集下载

单片机中断实验报告

单片机中断实验报告

实验三定时器中断实验一、实验目的1、掌握51单片机定时器基本知识;2、掌握定时器的基本编程方法;3、学会使用定时器中断。

二、实验内容1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。

三、实验设备PC 机一台、单片机实验箱主要器件:AT89C52、7SEG-BCD、四、实验步骤1、使用Proteus设计仿真原理图;2、使用Keil设计程序;3、联合调试仿真。

五、实验流程图六、实验程序与结果#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer1_init(){TMOD=0x10;//将定时器1设置为工作方式1TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500//(1/500)s/(1/3000000)s=6000TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1;ET1=1;TR1=1;}void main(){timer1_init();while(1);}void timer1() interrupt 3{TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256;F=~F;//每次进入中断P1.1口取反}#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit F=P2^1;void timer0_init(){TMOD=0x01;//将定时器0设置为工作方式1TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us//500us/6us=83.3333TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83EA=1;ET0=1;TR0=1;}void main(){timer0_init();while(1);}void timer0() interrupt 1{TH0=(65536-83)/256;//每次进入中断,重装初值TL0=(65536-83)%256;F=~F;//每次进入中断P1.1口取反,表示定时时间到}#include<reg51.h> // 包含51单片机寄存器定义的头文件#define seg_data P1#define seg_data2 P3#define uint unsigned intsbit D1=P2^0; //将D1位定义为P2.0引脚uint counter=0;unsigned int unit=0,decade=0,avs=0;//time=0;/************************************************************** 函数功能:主函数**************************************************************/ void main(void){uint time,time1,temp1,temp2,temp3;seg_data=0;seg_data2=0;TMOD=0x11; //使用定时器T0的模式2TH0=0xFC; //定时器T0的高8位赋初值 1000-500TL0=0x18; //定时器T0的低8位赋初值TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1;TR0=1; //启动定时器T0TR1=1;while(1)//无限循环等待中断{temp1=(decade&0x0F)<<4;temp2=unit&0x0F;time=temp2|temp1;seg_data=time;temp3=avs&0x0F;time1=temp3;seg_data2=time1;}}{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反TH0=0xFF; //定时器T0的高8位赋初值 1000-500TL0=0x06; //定时器T0的低8位赋初值}void Time1(void) interrupt 3{counter++;if(counter>19){unit++;counter=0;}if(unit>9){decade++;unit=0;}if(decade>5){avs++;decade=0;}if(avs>9){avs=0;}TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值TF1=0;}七、实验心得通过本次课程设计使我感受到它是一门综合性、实践性较强的课程,使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。

单片机原理与应用 实验三 单片机定时器及中断实验

单片机原理与应用 实验三 单片机定时器及中断实验

实验三单片机定时器及中断实验(1)实验要求1)由于实验学时很少,请提前预习和思考实验内容,将流程图及程序准备好,到实验室进行调试和验证。

2)由于实验室计算机C盘和D盘被保护,所以开始实验前在计算机E盘建立自己的文件夹,文件夹最好为英文名称。

实验中及时保存自己的源文件。

(2)实验内容1)使用单片机定时器资源,在P1.0口上输出一个周期为1s的方波,占空比为50%。

采用查询和中断的方式分别实现。

思考并回答以下问题:定时器工作在什么模式?定时器工作方式?定时器初值如何确定?使用T0还是T1?如何用定时器得到较长的延时时间?中断还是查询方式?两种方法在设计时有何区别?给出设计思路并画出程序流程图。

2)单片机P1口接8个LED,有一个LED点亮;P2.0接一个按键,首先采用查询的方式实现:每按一次按键,LED向左或向右移位一次。

如初始时L0亮,按一次按键,则L0熄灭,L1点亮;再按一次按键,L1熄灭,L2点亮,……给出设计思路并画出程序流程图。

3)采用单片机外部中断实现同样的功能。

思考并回答以下问题:电路应该如何连接?如何设置中断控制寄存器?中断方式选择?采用INT0还是INT1?如何中断使能?中断入口地址在哪里?中断服务程序要做哪些工作?如何中断返回?主程序结构如何?给出设计思路并画出程序流程图。

思考查询方式和中断方式实现同样功能在程序设计上有和不同?(3)实验目的1)学习单片机的定时器的使用方法;2)学习中断的使用及中断服务程序的编写;3)学习查询方式和中断方式进行信息传递的不同;(4)(5)1)仔细阅读定时器及中断控制寄存器设置部分内容,理解每一位的意义,再根据程序设计确定相关控制字。

2)中断服务程序的设计要注意现场保护以保证退出中断后程序的状态不发生变化。

3)按键连接单脉冲电路单脉冲电路由按键(PULSE)和去抖动处理组成,每按一次(PULSE)键产生一个单脉冲。

板上有单脉冲的输出信号插孔,图为“”和“”,分别为正脉冲和负脉冲。

定时器中断实验报告

定时器中断实验报告

实验三运用定时中断方法控制P1口亮灯实验报告一、实验目的1学习内部定时/计数器的使用2学习定时中断处理程序的编程方法二、实验预备知识1.P1口是准双向口,可以定义为输入,也可以定义为输出2.本实验中延时子程序采用指令循环来实现。

3.延时时间的计算:延时时间=机器周期×指令所需机器周期数×循环次数其中循环次数可以采用多重循环来实现三、实验内容程序如下:一、外部中断选择边沿触发方式控制灯的状态ORG 00HLJMP MAINORG 03HLJMP INTERRUPTORG 30HMAIN: SETB EX0SETB IT0SETB EAMOV A,#00HMOV P1,ASJMP $INTERRUPT: INC AMOV P1,ARETI二、用定时器定时方式控制灯的状态 ORG 0000HLJMP MAINORG 000BHLJMP DISPLAYORG 0030HMAIN:MOV IE,#82HMOV TMOD,#01HMOV P1,#01HMOV TH0,#9EHMOV TL0,#58HMOV R7,#10SETB TR0SJMP$DISPLAY:MOV TH0,#9EHMOV TL0,#58HDJNZ R7,LOOPMOV A,P1RL AMOV P1,AMOV R7,#10LOOP:RETI三、实验心得及体会对于中断的设置用到P3口的第二功能,第一个实验中,我所设置的触发方式为边沿触发,中断输入的管脚应该为P3.2即外部中断0输入,因此给外加脉冲时应该给到P3.2。

第一次因未分清触发所给管脚导致脉冲加入时无反应。

编写中断及初始化程序时,中断地址的开辟要提前在主程序之前给出,以实现执行中断时指针的转移。

做有关定时程序之前要首先弄清楚晶振的大小,以确定一个机器周期的时间,在这次试验中,试验箱所用晶振为6MHZ,一个机器周期的时间为2us,总计数时间可以达到131ms,但是无法满足0.5s的时间要求,所以用R7预置循环次数,显得尤为重要。

实验三 定时与中断实验

实验三  定时与中断实验

实验三定时与中断实验一、实验目的1.通过实验掌握51单片机的定时/计数器的应用。

2.掌握51单片机的中断原理及应用。

3. 进一步学习系统应用程序的设计和调试方法二、实验设备PC机一台、实验教学板一块。

图2-1三、实验内容实验线路如图2-1, 通过定时器的定时,产生一定频率的波形信号,经P2.5输出,驱动蜂鸣器,便可发出某一频率的音调,若按乐曲的音调连续发出,并使其按节拍变化,便可演奏一首乐曲。

实验要求:编程实现演奏一首乐曲C调常用音频及其对应频率如下表:定时器初值计算方法:由于软件是通过定时器溢出后对P2.5取反产生方波,故定时器溢出时间为1//2f,则计数器计数初值为:X = 65536 —n = 65536—(1/2f)/12/fosc = 65536—fosc/24f电路板上的晶振频率为11.0593MHZ,根据不同音调的频率值,就可以计算出上表的初值。

用乐曲最短的1/4拍为一个基本节拍时间,定为0.5秒,基本节拍时间由另一个定时器产生,设此定时器定时时间为50ms,定时时间常数(计数器初值)= 65536 —(50000*12/11.0593)=02C13H,可以分别通过该定时中断10、20、40、80次满足1/4拍、1/2拍、1拍、2拍的定时要求。

软件编程时,要先将乐谱转换成包含有音符和音长信息的代码,然后,以查表方式通过乐谱代码控制喇叭演奏出乐曲。

具体方法如下:(1)乐谱代码用字节结构,字节高4位代表音符,从SI到RE分别用0到9表示;字节低4位代表该音符的节拍,用1、2、3、、、8分别表示1/4拍、1/2拍、1拍、、、4拍,按照这样的规则,将整段音乐变换成相应的代码数据表,最后一个字节内容为00H,代表数据表的结束。

(2)在程序执行时按顺序查表,从字节数据中取出音符代码和节拍代码,查频率表得该音符对应频率的定时初值,再根据节拍代码控制音长,启动两个定时器后,即可发出要求的音,这样就控制演奏出完整的乐曲。

实验三 中断与定时器实验

实验三 中断与定时器实验

ab cd e fg h(dp) 实验三 中断、定时器实验一、实验目的1. 学习外部中断和定时器的工作原理及使用方法。

2. 学习外部中断和定时器的初始化程序、应用程序的编写和调试。

二、实验说明本实验1通过开关向单片机提出中断请求,单片机响应中断进行计数,并通过LED 数码管指示出计数值,从而观察中断的请求、响应的过程。

实验2通过单片机的定时器产生延时,模拟交通灯控制的方法。

通过本实验学生可以掌握单片机中断和定时器的工作原理及使用方法以及中断和定时器的初始化程序、应用程序的编写和调试。

要求预先编写好程序并通过伟福仿真软件调试。

三、实验内容1、开关S0—S1连接P3口做输入,P0输出接LED 数码管,通过S2产生外部中断请求(/INT0)信号,在中断服务程序中完成十进制递增计数,并将计数值显示在LED 数码管上,要求分别采用电平触发和边沿触发。

按上述要求完成S3产生外部中断请求。

编写初始化程序和中断服务程序。

(注意开关抖动处理)2、P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,要求发光二极管(LED )按亮0.5秒、暗0.5秒闪烁,LED 亮的同时,从P2.0送出1kHz 的音频信号到音频驱动电路发声(持续0.5秒),将开关编号(0—7)显示在LED 数码管上。

要求延时采用内部定时器T0,音频的产生采用内部定时器T1。

编写初始化程序和中断服务程序。

四、实验电路连线P0.0 ---- LED0 P3.2(/INT0)----- S2P0.1 ---- LED1 P3.3(/INT1)----- S3P0.2 ---- LED2P0.3 ---- LED3P0.4 ---- LED4P0.5 ---- LED5P0.6 ---- LED6P0.7 ---- LED7LED 连接 外部中断请求输入a b c d e f g h(dp) P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7LED 数码管各段与I/O 的连接五、实验仪器和设备PC机、WA VE软件、仿真器+仿真头、实验板、电源等。

实验三定时器及外部中断实验

实验三定时器及外部中断实验

实验三定时器及外部中断实验一、实验目的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 窗口中。

定时器中断实验报告

定时器中断实验报告

定时器中断实验报告一、实验目的通过定时器中断实验,掌握定时器的基本原理和应用,了解中断的概念和实现,学习如何使用汇编和C语言编写中断服务程序。

二、实验原理1. 定时器的基本原理定时器是一种能够精确控制时间的功能模块,其主要功能是在一定的时间间隔内产生一次中断信号。

定时器一般由计数器和控制逻辑电路组成。

计数器向控制逻辑电路传递计数值,控制逻辑电路对计数器进行控制,当计数值达到设定值时,控制逻辑电路会产生中断信号。

2. 中断的概念和实现中断是指CPU在执行某个程序的过程中,由于某些特定事件的发生,需要立即停止正在执行的程序,转而去执行与特定事件相关的处理程序的过程。

中断信号通常是由外部设备产生的,例如定时器中断、串口中断等,也可以由软件产生。

中断的实现需要安装中断服务程序,中断服务程序是指与中断处理相关的程序段。

中断发生时,CPU会暂停当前的执行,转而执行中断服务程序。

中断服务程序完成处理后,CPU会返回到原来的执行状态。

中断服务程序通常由汇编或C语言编写,需要遵循一定的规则和约定。

三、实验材料1. STC89C52单片机板;2. 电脑、Keil μVision5软件;3. 串口调试助手软件。

四、实验过程1. 硬件连接将STC89C52单片机板上的P3口与LED灯连接,通过拨码开关设定定时器的时钟频率。

2. 编写程序在Keil μVision5软件中编写程序,在程序中设置定时器的时钟频率和中断周期。

在中断服务程序中控制LED灯的闪烁。

3. 烧录程序将编写好的程序烧录到STC89C52单片机板中。

4. 测试启动单片机板,观察LED灯是否按照预定的周期闪烁。

通过串口调试助手软件,可以实时观察定时器中断的触发情况。

五、实验结果经过测试,程序能够正常运行,LED灯按照预定的周期闪烁,定时器中断触发正常,符合预期要求。

六、实验总结通过本次实验,我掌握了定时器的基本原理和应用,了解了中断的概念和实现,学习了如何使用汇编和C语言编写中断服务程序。

实验三使用中断的定时器

实验三使用中断的定时器

实验三使用中断的定时器一、实验目的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、总结实验内容及步骤写出实验报告。

定时器中断实验报告

定时器中断实验报告

定时器中断实验报告
《定时器中断实验报告》
实验目的:通过定时器中断实验,掌握定时器中断的原理和应用,加深对嵌入式系统中断处理的理解。

实验原理:定时器中断是一种常见的嵌入式系统中断方式,通过设置定时器的计数值和中断触发条件,可以实现定时中断功能。

在实验中,我们通过配置定时器的工作模式、计数值和中断触发条件,来实现定时中断功能。

实验过程:首先,我们在实验板上搭建了一个简单的嵌入式系统,包括主控芯片、定时器模块和LED灯。

然后,我们编写了一段简单的程序,配置定时器的工作模式为定时模式,设置定时器的计数值为1000ms,并配置定时器中断触发条件为计数器溢出。

接着,我们将LED灯的亮灭控制放在定时器中断服务函数中,当定时器中断触发时,LED灯状态发生改变。

最后,我们下载程序到实验板上,观察LED灯的亮灭情况。

实验结果:经过实验,我们成功实现了定时器中断功能,当定时器计数器溢出时,定时器中断触发,LED灯状态发生改变。

通过调整定时器的计数值,我们还可以实现不同的定时中断周期,满足不同的应用需求。

实验结论:定时器中断是一种常见的嵌入式系统中断方式,可以实现定时中断功能,用于实现定时任务、定时采样等应用场景。

通过本次实验,我们深入理解了定时器中断的原理和应用,为进一步深入学习嵌入式系统中断处理打下了坚实的基础。

通过本次实验,我们不仅掌握了定时器中断的原理和应用,还提高了对嵌入式系统中断处理的理解,为今后的嵌入式系统开发工作奠定了基础。

希望通过更
多的实验和学习,我们能够进一步提升自己的嵌入式系统开发能力,为未来的科研和工程实践做出更大的贡献。

单片机实验三 中断中断、定时器

单片机实验三  中断中断、定时器

实验三中断、定时器实验目的:掌握汇编语言综合编程方法,掌握并行I/O口、定时器、中断等功能部件的使用规则和应用方法,熟悉中断处理程序的安排。

实验环境:CodeWarrior IDE仿真调试软件+XDT512开发板套件;编程语言选择:汇编语言(Assembly);调试连接选择:Full Chip Simulation +P&E Multilink;工程目标选择:硬件连接调试(P&E Multilink);实验内容:1、外部中断IRQ触发的LED跑马灯。

核心板上4个LED已接B口高4位,B口位输出低电平时点亮,IRQ引脚下降沿引发中断。

使用导线连接核心板MCU的IRQ引脚(插口J1=J5=J6=J7的2号脚)和目标板上的按键PB1(USER I/O插口的PB1),按动PB1即能给IRQ引脚施加带有下降沿的低电平。

调试时,可在中断服务程序中设置断点,以方便观察是否进入中断。

在此程序正常运行的基础上再加入对核心板按键SW1(P口最低位,按下时接地)的检测,当其按下时取消跑马灯显示,IRQ再次按下时继续显示跑马灯。

LDS #__SEG_END_SSTACK ; initialize the stack pointerLDAA #$FFSTAA DDRBLDAA #$C0STAA IRQCRCLILDAA #$FFSTAA PORTBLDAA #$00STAA FLAGWAIT: CMPA FLAGBEQ WAITSECLDAA #$FESHIFT: STAA PORTBBSR DELAYROLABRCLR PTP,#$01,CANCELBRA SHIFTCANCEL: LDAA #$00STAA FLAGBRA WAITIRQ_ISR: LDAA #$FFSTAA FLAGRTIDELAY: PSHXPSHYLDX #200DL1: LDY #200DL2: NOPNOPDBNE Y,DL2DBNE X,DL1PULXPUL YRTS2、利用MCU的TIM定时器、中断功能部件,实现3s精确定时(2MHz总线频率),每定时时间到,使核心板上接B口高4位的最高位的LED亮灭一下,观察是否进入中断。

单片机 实验三中断及定时器实验

单片机  实验三中断及定时器实验

实验三:中断及定时器实验一、实验目的: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、按下列要求修改程序或回答问题。

实验3:M51定时器、中断实验

实验3:M51定时器、中断实验

实验三:M51定时器、中断实验实验目的:1. 学习51单片机汇编语言程序设计与上机调试方法2. 掌握51单片机定时器/计数器的使用方法3. 掌握51单片机中断系统及其应用实验内容:1. 方波发生器(必做)2. 外部中断及应用(选做)3. 频率测量(选做)4. 脉宽测量(选做)实验方法:编制程序上机调试实验要求:绘制实验电路原理图、程序流程图并解释说明 实验步骤:编制程序、上机运行调试实验分析:运行程序;观察并记录运行状况1 方波发生器实验要求:由P1.0口输出1Hz 方波(fo=12MHz) 实验电路原理图:参考程序:;实验三:方波发生器JSQL EQU30H ;辅助计数器L :200分频=50ms JSQH EQU31H ;辅助计数器H :10分频=500ms ORG0000H LJMPMAIN ORG000BH ;T0中断入口 DJNZJSQL,T0E ;第1次分频 MOVJSQL,#200 ;50ms DJNZJSQH,T0E ;第2次分频 MOVJSQH,#10 ;500ms CPLP1.0 ;P1.0取反 T0E: RETI;中断返回 MAIN: MOVTMOD,#02H ;T0: 自动重载定时器 MOV TH0,#6 ;初值=0.25msOUTMOV TL0,TH0MOV JSQL,#200 ;50ms MOV JSQH,#10 ;500ms SETB TR0 ;开T0 SETB ET0 ;开T0中断SETB EA ;开总中断SJMP $ ;等待2. 外部中断实验参考程序ORG 0000H ;上电、复位入口LJMP MAINORG 0003H ;外部中断0入口LJMP SUBX0ORG 0013H ;外部中断1入口LJMP SUBX1;主程序MAIN: MOV TCON,#1 ;INT0: 负跳变触发,INT1: 低电平触发SETB EX0 ;开外部中断0SETB EX1 ;开外部中断1MOV P1,#0FEH ;P1.0=0SETB EA ;开总中断SJMP $ ;等待;外部中断0SUBX0: PUSH PSW ;保护现场PUSH ACCMOV A,P1 ;P1口左移1位RL AMOV P1,APOP ACC ;恢复现场POP PSWRETI ;返回;外部中断1SUBX1: PUSH PSWPUSH ACCMOV A,P1 ;P1口右移1位RR AMOV P1,ALCALL YS ;延时POP ACCPOP PSWRETI ;返回;延时YS: PUSH ACCPUSH BMOV A,#0YS1: MOV B,#0DJNZ B,$DJNZ ACC,YS1POP BPOP ACCRET3. 计数法测量频率(晶振fo=12MHz);被测信号由P3.5输入,P3.3启动测量JSQL EQU 30H ;计时器LJSQH EQU 31H ;计时器H;主程序MAIN: MOV TMOD,#52H ;T0: 自动重载,T1: 16位计数器MOV TCON,#04H ;外部中断1:负跳变启动测量MOV IE,#86H ;开T0、INT1及总中断SJMP $ ;等待;T0中断入口ORG 000BHLJMP T0ZD;INT1中断入口ORG 0013H ;启动测量MOV TH0,#6 ;初值=0.25msMOV TL0,TH0MOV JSQL,#200 ;50msMOV JSQH,#20*4 ;4sMOV TH1,#0 ;频率计数器MOV TL1,#0ORL TCON,#50H ;同时开启T0、T1cpl p1.0RETIT0ZD: DJNZ JSQL,T0E ;1s时间到,结束测量DJNZ JSQH,T0EANL TCON,#0FH ;关闭T0,T1MOV DPL,TL1 ;保存测量结果MOV DPH,TH1cpl p1.0T0E: RETI4. 脉宽测量(晶振fo=12MHz);被测信号由P3.2输入(低电平有效)LJMP MAINORG 0003HLJMP X0ZD ;外部中断0ORG 000BH ;T0中断(0.1ms)INC DPTR ;脉宽计数器+1RETI;主程序MAIN: MOV TCON,#1 ;INT0负跳变触发中断MOV TMOD,#0AH;T0:自动重载,有门控GATE=1MOV TH0,#156;初值=0.1msMOV IE,#83H ;开INT0、T0及总中断SJMP $;INT0中断X0ZD: MOV R2,DPL ;存放测量结果MOV R3,DPHMOV DPTR,#0 ;脉宽计数器=0MOV TL0,TH0SETB TR0 ;开T0RETI;MAIN1: MOV TMOD,#2 ;T0:自动重载MOV TH0,#156;0.1msSETB ET0 ;开T0中断SETB EA ;开总中断MAIN2: MOV TL0,TH0 ;初值=0.1msJB P3.2,$ ;等待P3.2负跳变MOV DPTR,#0 ;脉宽计数器清零SETB TR0 ;启动T0JNB P3.2,$ ;等待P3.2正跳变CLR TR0 ;关闭T0SJMP MAIN2。

实验三 定时器及中断实验

实验三 定时器及中断实验

实验三定时器及中断实验一、实验目的1)熟悉VC5402的定时器工作原理。

2)掌握VC5402定时器的编程控制方法。

3)学会使用定时器的中断方式来控制程序执行方法。

4)掌握外部中断的控制方法,理解DSP对于中断的响应的过程。

5)学习并掌握混合编程的方法。

二、实验设备1)微机一台、DSP硬件仿真器一台、DSP实验箱一台。

2)程序及链接命令文件见:D:\ EXPER\EXP3目录下的.asm 、.cmd、.C 和.lib文件。

三、开关设置将开关K9拨到右边,即仿真器选择连接右边的CPU2。

然后将实验箱上的SW2(不是CPU板上的)设置为ON ON OFF ON ,即单脉冲按钮产生的中断给CPU2的中断INT2。

1)创建新的项目,添加源程序和链接命令文件,编译链接后载入执行程序。

2)连续运行程序,观察由发光管LED5~8所指示的变化,读懂程序理解为何每秒变化1次。

在中断向量表中定时器中断向量入口地址处设置断点,然后连续执行程序,从断点处再单步执行程序,理解中断向量程序的挂接方法,同时学会中断向量地址的计算方法。

3)按几下单脉冲按钮,观察发光管LED1~4所发生的相应变化。

与定时中断类似设置断点进行程序跟踪调试。

4)分别在中断向量表中定时器和外中断2的向量入口地址处设置断点,然后连续执行程序,从断点处再单步执行程序,理解中断向量程序的设置方法。

同时还要根据实验书后附录3(中断向量表)理解并掌握中断向量的入口地址的计算方法。

五、实验报告1)发光管LED5~8每秒钟闪烁一次是如何算得的?2)查实验书后中断屏蔽寄存器,说明中断初始化的方法。

3)若将定时周期改为2秒,应如何修改程序?都有哪些方法?给出程序段4)若将外部中断2(INT2)改为外部中断0时(INT0), 要求执行按下单脉冲按键时led1~4发生变化,应如何修改程序?注意:电路方面要调节SW2为 ON ON OFF OFF 。

5) 思考题:如何用c语言调用汇编子程序?如何实现不同汇编程序之间相互调用?怎样在c程序中嵌入汇编语句?五、源程序及链接命令文件1、主程序EXP03.C/************************************************* FileName: EXP03.C ** Description: 定时器中断实验** Write by: lanrunze ** Date: 2004-2-10 ** Update: 2006-3-10 **************************************************///因为使用了混合编程,所以必须添加 rts.lib 到项目文件中//观察程序时使用DEBUG--GO MAIN来使程序跳转到程序的执行入口//使用外中断2时 SW2= on on off on//使用外中断0时 SW2= on on off off//本实验使用单按钮产生外部中断#include <stdio.h>interrupt void timer(); //定义定时器中断服务子程序interrupt void int2c(); //定义外部中断服务子程序extern void initial(); //定义外部初始化子程序extern void porta(); //定义外部端口操作子程序extern void portb();extern void portc();extern void portd();int flag1=0; //端口输出标志,用于端口输出控制int flag2=0; //端口输出标志,用于端口输出控制unsigned int Out_flag = 0;interrupt void timer() //定时器中断子程序,数存单元作计数器例子{*(int *)0x300=*(int *)0x300+1; //时钟中断计数,使用绝对寻址方式if(*(int *)0x300 >= 1000) //计数超过 1000次{*(int *)0x300=0;if(flag1==0){flag1=1;porta(); //调用PORTC汇编子程序}else{flag1=0;portb(); //调用PORTB汇编子程序}//asm(" intr 18");//用于软件仿真时,产生软件中断,中断序号18,中断入口为外中断2 }return;}interrupt void int2c() //外部中断服务子程序,变量作计数器例子{static int INT2_INT_NUM = 0; //定义整形计数器INT2_INT_NUM++; //每次中断则计数器加1if(INT2_INT_NUM % 2 == 0 ) //每两次按键XF闪烁一次Out_flag = 0;elseOut_flag = 1;if( INT2_INT_NUM >= 1000 )INT2_INT_NUM = 0;if(flag2==0){flag2=1;portc(); //调用PORTC汇编子程序}else {flag2=0;portd(); //调用PORTD汇编子程序}}main(){initial();//C调用汇编子程序while(1){ //等待定时器和外部中断,转去执行中断服务子程序asm(" nop");//C中嵌入汇编指令例子if(Out_flag == 0 )//通过中断中标志位来控制端口asm(" ssbx XF"); //点亮XF灯elseasm(" rsbx XF"); //熄灭XF灯}}2、初始化子程序 initial.asm.title "initia.asm ".mmregs.global _initial ;定义可以外部调用的子程序.text;查看DSP的CLKMD寄存器内容,并查看实验书附录中clkmd寄存器初值 ;以及晶振频率来获得时钟运行频率_initial: ;初始化子程序入口ssbx INTM ; INTM=1,禁止所有可屏蔽中断ld #0, DP ; 设置数据页指针DP=0stm #0x3FF2,PMSTstm #0x0000,SWWSR;ldm PMST,A ;修改IPTRand #0x3f,A ;去掉IPTRor #0x3f80,A ;IPTR位等于3F80stlm a,PMSTstm #0, CLKMD ; 切换CPU内部PLL到分频模式Statu: ldm CLKMD, Aand #01b, Abc Statu, ANEQ ;检查是否已经切换到分频模式stm #0x17ff,CLKMD ;设置DSP 时钟为PLL*2模式nopst #0,*(0x300) ;将存储单元清零;以下为定时器的中断方式和外中断2的初始化ssbx intm ;关闭所有可屏蔽中断stm #0ffffh,ifr ;清除历史中断标志stm #00h,imr ;清除欲设的中断允许位stm #410h,tcr ;停止定时器stm #19999,prd ;设置定时器初值 prd=4e1fh 定时20 000次stm #420h,tcr ;启动定时器;定时20 000/20 000 000 =1mSstm #08h+04h,imr ;开放定时器和外部中断2,查附录IMR位rsbx intm ;开放所有可屏蔽中断ret ;子程序返回.end3、中断向量表子程序vectors.asm ;.title "vectors.asm ".sect ".vectors" ;定义中断向量段来存储中断向量表.ref _c_int00 ; 引用外部定义的程序入口地址.ref _int2c ; 引用在外部定义的符号.ref _timer ; 引用在外部定义的符号.align 0x80 ; 必须放置到数据页的边界; 或者低7位地址全零开始单元RESET: ; 复位中断向量入口地址BD _c_int00 ; 延迟分支到C主程序默认入口地址STM #3100H,SPnmi: ; nmi 中断向量入口地址RETE ; 中断程序返回NOPNOPNOP; 软件中断向量未设置,仅是保留出sint17 .space 4*16 ; 这些地址空间sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: ;外部中断0向量入口地址RETENOPNOPNOPint1: ;外部中断1向量入口地址RETENOPNOPNOPint2: ;外部中断2向量入口地址b _int2cNOPNOPtint0: ;定时器0向量入口地址b _timerNOPNOP brint0: ;串行口0接收中断RETENOPNOPNOPbxint0: ;串行口0发送中断RETENOPNOPNOPdmac0: ;串行口1接收中断RETENOPNOPNOPtint1: ;串行口1发送中断RETENOPNOPNOPint3: ;外部中断3RETENOPNOPNOPHPint: ;HPI中断RETENOPNOPNOP brint1: ;串行口1接收中断RETENOPNOPNOPbxint1: ;串行口1发送中断RETENOPNOPNOP.space 4*16*4 ;保留2个中断dmac4和dmac5.end4、端口输出子程序.title "port.asm".mmregs.bss Out_Dat,1 ;定义输出变量.global _porta ;定义可外部调用的子程序.global _portb ;.global _portc ;.global _portd ;_porta: ;porta子程序STM #Out_Dat,ar1;LD *ar1,aAND #0x000f,A ;清除高4位OR #0x00A0,A ;改变高4位为1010STL a,*ar1 ;保存数据PORTW *ar1,8001h;端口输出NOPRET_portb:STM #Out_Dat,AR1;LD *AR1,AAND #0x000f,AOR #0x0050,A ;改变高4位为0101STL A,*AR1PORTW *AR1,8001hnopRET_portc:STM #Out_Dat,ar1;LD *ar1,aAND #0x00F0,AOR #0x000a,A ;改变低4位为1010STL a,*ar1PORTW *ar1,8001hNOPRET_portd:STM #Out_Dat,AR1 ;LD *AR1,AAND #0x00F0,AOR #0x0005,A ;改变低4位为0101STL A,*AR1PORTW *AR1,8001hnopRET5、链接器命令文件TimeInt.cmdMEMORY{PAGE 0: PROG: origin = 0x1000, len = 0x1000VECT: origin = 0x3f80, len = 0x80PAGE 1: IDATA: origin = 0x80, len = 0x0f80 DARAM: origin = 0x3000, len = 0x0f80 }SECTIONS{.vectors: {} > VECT PAGE 0 /*汇编的中断向量表*/.text: {} > PROG PAGE 0 /*C与汇编的可执行代码段*/.cinit: {} > PROG PAGE 0 /*C 初始化变量和常数表*/.bss: {} > IDATA PAGE 1 /*C与汇编的全局和静态变量*/.const: {} > DARAM PAGE 1 /*C 定义常量段*/.stack: {} > DARAM PAGE 1 /*C 系统堆栈*/.switch: {} > IDATA PAGE 1 /*为常量语句建立的表格*/.data: {} > IDATA PAGE 1 /*汇编的定义的数据段 */}第4章附录附录1:TMS320C5402 CPU及外设存储器寄存器映射表附录2:C5402中的中断标志寄存器(IMR)和中断屏蔽寄存器(IFR)1) 中断标志寄存器IFRIFR中某位为1表明有相应中断,再次写1清除中断。

实验三 定时器与中断的应用

实验三   定时器与中断的应用

2.3.4实验三定时器与中断的应用一、实验类型验证性实验。

二、实验目的1、掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序设计方法;2、掌握使用定时器中断作为外部中断的方法。

三、实验内容及步骤1、应用定时器T0产生1ms的定时,并使P1.0输出周期为2ms的方波,定时器T0工作于方式1,晶体振荡频率为12MHZ。

运行程序后,用示波器观察P1.0脚的波形;2、把T0(P3.4脚)作为外部中断请求输入线,将T0定义为方式2计数,计数初值为FFH,即计数输入端T0(P3.4脚)发生一次负跳变时,计数器加1即产生溢出标志,向CPU请求中断。

T1作为定时器处于方式1,产生1ms的定时时间。

当T0(P3.4脚)发生一次负跳变后,T1开始工作,在P1.0脚产生周期为2ms的方波。

3、把INT0(P3.3脚)作为外部中断请求输入线,当INT0(P3.3脚)发生一次负跳变时,产生中断标志,向CPU请求中断,在外部中断0的中断服务程序中启动T1定时器。

T1作为定时器处于方式1,产生2ms的定时时间。

当INT0(P3.3脚)发生一次负跳变后,T1开始工作,在P1.0脚产生周期为4ms的方波。

注意:在做此实验时,程序运行后,将T0(P3.4脚)串接一个1K的电阻后触一下地线,即T0(P3.4脚)产生一次负跳变,定时器T1开始工作,用示波器可在P1.0脚观察到2ms的方波。

四、参考程序(这两个程序定时初值都是以6MHZ晶振计算的,请同学们自己根据实际晶振频率修正初值)1、P1.0脚产生2ms的方波汇编程序1 ORG 0000H2 AJMP MAIN3 ORG 000BH4 AJMP ITP5 MAIN: MOV SP,#60H6 ACALL PTM7 HERE: AJMP HERE8 PTM: MOV TL0,#0CH9 MOV TH0,#0F0H 10 SETB TR011 SETB ET012 SETB EA13 RET14 ITP: MOV TL0,#0CH15 MOV TH0,#0F0H16 CPL P1.017 RETI1.2 P1.0脚产生方波C程序#include <reg51.h>data int pk,p;void servi_t0(void) interrupt 1 /*T0中断服务程序*/ {TL0 = 0xFC ; //初值TH0 = 0x01;P1 = !P1;pk=pk++;}main()/*主程序*/{TMOD =0;TL0 = 0xFC ; //初值TH0 = 0x01;TR0 = 1; //启动定时器0ET0 = 1; //T0中断允许位,即IE的第1位EA = 1; //允许总中断pk=0;loop:if(pk==10){pk=0;}p=0;goto loop;}2、利用T0的中断作为计数中断输入,T1产生1ms的定时,在P1.0脚产生2ms方波的汇编程序。

单片机定时器中断实验

单片机定时器中断实验

实验3 定时器中断实验一、 实验目的掌握MCS-51定时器的使用方法二、 实验设备AT89c51基本实验单元、计算机设备系统三、 实验原理(一) 实验说明(1) 利用定时器中断方式,做一个显示0~9的秒钟。

(2) 利用定时器中断方式,做一个显示00~99的秒钟,每一秒增加1.(二) 程序流程图(i )(ii )(三) 参考程序内容(1):只需要将内容2的代码中十位显示那一部分删除,并令D24=0即可。

内容(2):#include<reg51.h>unsigned char sum1=0,sum2=0;sbit D24=P2^4;sbit D25=P2^5;static unsigned char t;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay(unsigned int);void main(){TMOD=0x10;TL1=0xf0;TH1=0xd8;EA=1;ET1=1;TR1=1;while(1){P0=0xff;D24=1;D25=0;P0=table[sum2]; //十位delay(50);P0=0xff;D24=0;D25=1;P0=table[sum1]; //个位delay(50);}}void delay(unsigned int m){unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<110;j++){;}}void timer0() interrupt 3{TL1=0xf0;TH1=0xd8;t++;if(t==100){t=0;sum1++;if(sum1>9){sum1=0;sum2++;if(sum2>9)sum2=0;}}}四、实验步骤:1.根据实验原理图编写程序,用“Keil uVision4”编译软件进行编译,如未通过,修改程序,直至通过。

实验锁相环定时器与中断实验

实验锁相环定时器与中断实验

实验3:锁相环、定时器与中断实验一.实验目的1.深刻理解C55x芯片支持库CSL的作用,掌握CSL的安装和基本使用方法;2. 掌握TMS320VC5509A数字锁相环PLL的配置方法;3.掌握TMS320VC5509A的定时器的使用方法;4. 熟悉TMS320VC5509A中断程序设计方法;二.实验设备PC兼容机一台,操作系统为Windows2000,安装Code Composer Studio ,SDUST-CEE- C55X DSP实验系统箱,示波器;三.实验原理1. 片上支持库CSL的安装和使用片上支持库CSL提供配置及控制片上外设的函数、宏等工具,可以通过程序实现这些函数和宏的调用,使外设更易于使用;(1)CSL的安装CCS4没有集成CSL库,当DSP程序涉及CSL使用时,在程序编译前请检查CSL库的安装情况;CSL安装过程如下:运行,根据提示设定相应的目录即可;本实验CSL的安装路径为:D:\Program Files\C55xxCSL;(2)在CCS4中添加CSL库选中工程,右键->properties,弹出对话框选择C/C++ build;●C5500 Compiler:在Predefined Symbols中添加“CHIP_5509”和“_CSL5509_LIB_”两项,Include Options中添加CSL库中include文件夹的路径D:\Program Files\C55xxCSL \include;●C5500 linker:在File Search Path,Include library file …栏中添加“”和“”两项,Add <dir> to library…栏中添加上面两个库文件所在路径"D:\Program Files\Texas Instruments\ccsv4\tools\compiler\c5500\lib"和"D:\Program Files\C55xx CSL\lib";2.数字锁相环DPLL的使用DPLL的功能是将CLKIN引脚接收输入时钟信号本实验中为晶体振荡器提供的12MHz 方波信号变换为CPU及其外设所需的工作时钟称为CPU时钟,本实验中设置为144MHz;使用DPLL的CSL需要包含;CSL提供了多种方法可实现对DPLL的配置,本实验采取的方法如下:1在main函数前,创建PLL配置结构:PLL_Config myPLLConfig = {0, 由于晶振时钟频率为12MHz,因此CPU时钟频率=144MHz /};2在main函数中,运行函数PLL_config完成PLL参数配置:PLL_config&myPLLConfig;3.中断的使用在CSL使用中断需要包含;可通过函数IRQ_setV ecsUint32 &VECSTART设置中断向量入口地址,本实验中,VECSTART和中断向量表的定义在汇编模块中完成,在C语言main函数中要将其声明为外部函数:extern void VECSTARTvoid;全局中断的禁止或使能分别通过函数IRQ_globalDisable 或IRQ_globalEnable 实现;涉及各具体中断源如定时器的相应操作见下;4.通用定时器的使用C55x 芯片提供了两个通用定时器,可为CPU 提供周期性中断信号或向DSP 芯片外的器件提供周期信号;每个定时器有两个计数寄存器PSC,TIM 和两个周期寄存器TDDR,PRD,在定时器初始化或定时值重新装入过程中,周期寄存器的内容将复制到计数寄存器中;定时器发送中断信号或同步事件信号的频率可用下式计算:()()1PRD 1TDDR TINT +⨯+=输入时钟频率频率 使用通用定时器的CSL 需要包含,在CSL 使用定时器的基本方法如下:1在main 函数前通过TIMER_TCR_RMK 定义定时器控制器的各控制位,本实验中:define TIMER_CTRL TIMER_TCR_RMK\TIMER_TCR_IDLEEN_DEFAULT, / IDLEEN == 0 / \ TIMER_TCR_FUNC_OF0, / FUNC == 0 / \ TIMER_TCR_TLB_RESET, / TLB == 1 / \ TIMER_TCR_SOFT_BRKPTNOW, / SOFT == 0 / \ TIMER_TCR_FREE_WITHSOFT, / FREE == 0 / \ TIMER_TCR_PWID_OF0, / PWID == 0 / \ TIMER_TCR_ARB_RESET, / ARB == 1 / \ TIMER_TCR_TSS_START, / TSS == 0 / \ TIMER_TCR_CP_PULSE, / CP == 0 / \ TIMER_TCR_POLAR_LOW, / POLAR == 0 / \ TIMER_TCR_DATOUT_0 / DATOUT == 0 / \2在main 函数前,利用TIMER_Config 创建定时器配置结构;本实验中:TIMER_Config myTimerCfg = {TIMER_CTRL, / 定义TCR 的有关控制位 /0x464fu, / 设定PRD 的值,本实验取为0x464fu,即17999 / 0x0000 / 设定PRSC 的值,本实验取为 0 //定时器定时时间=PRD+1PRSC+1CPU 时钟周期,因此本实验定时器定时时间=180001/144us=125us /};3在main 函数或其它功能函数中,运行函数mhTimer0 = TIMER_openTIMER_DEV0,TIMER_OPEN_RESET 打开定时器这里为定时器0,获得相应的句柄mhTimer0;通过函数TIMER_configmhTimer0,&myTimerCfg 完成定时器的参数配置;当使用定时器中断时,需要编写相应的中断服务程序,本实验中:interrupt void timer0Isr void{t imer0_cnt++;实验准备1启动Code Composer Studio 4;2连接实验设备:计算机通过USB 电缆与仿真器连接;实验箱+5V 电源插座与SDUST-EEC-5509A 主板连接;3.建立工程lab3,加入以下源文件:,,4. 建立配置文件选择VC5509A Emulater模式,仿真器选择XDS100V2;5.编译、链接、下载程序;6. 运行程序,观察实验现象,记录实验数据;7. 通过修改DPLL参数,使XF引脚输出周期为2s,占空比为50%的周期性矩形波;8. 通过修改定时器配置参数,使XF引脚输出周期为2s,占空比为50%的周期性矩形波;9.退出CCS;五.实验结果六、思考题1、如何使XF引脚输出周期为2s,占空比为25%的周期性矩形波2、采用PLL_setFreq 函数可直接设置DPLL,请查阅TMS320C55x Chip Support Library API Reference Guide SPRU 433A .pdf,了解使用方法;3、汇编语言模块中的伪指令“.ivec”和处理器指令“nop_16”是何含义请查找相应资料给出解释;七、附:主程序清单include <> / 使用csl库必须包含的头文件/include <> / 使用中断必须包含的头文件/include <> / 使用pll必须包含的头文件/include <> / 使用timer必须含的头文件// 声明外部定义在中的函数/extern void VECSTART void;/ 在这里定义定时器控制器的各控制位,各位意义请参考赵洪亮编C55x DSP应用系统设计第二版第8章, 需要改变有关控制位的数值时请查阅 /define TIMER_CTRL TIMER_TCR_RMK\TIMER_TCR_IDLEEN_DEFAULT, / IDLEEN == 0 / \TIMER_TCR_FUNC_OF0, / FUNC == 0 / \TIMER_TCR_TLB_RESET, / TLB == 1 / \TIMER_TCR_SOFT_BRKPTNOW, / SOFT == 0 / \TIMER_TCR_FREE_WITHSOFT, / FREE == 0 / \TIMER_TCR_PWID_OF0, / PWID == 0 / \TIMER_TCR_ARB_RESET, / ARB == 1 / \TIMER_TCR_TSS_START, / TSS == 0 / \TIMER_TCR_CP_PULSE, / CP == 0 / \TIMER_TCR_POLAR_LOW, / POLAR == 0 / \TIMER_TCR_DATOUT_0 / DATOUT == 0 / \/ 创建1个定时器配置结构,使得可采用相关定时器函数模块来初始化定时器控制寄存器 /TIMER_Config myTimerCfg = {TIMER_CTRL, / 在本结构体中定义TCR的有关控制位 /0x464fu, / 设定PRD的值,这里PRD=0x464fu,即17999 /0x0000 / 设定PRD的值,这里PRSC=0 //定时器定时时间=PRD+1PRSC+1CPU时钟周期这里,定时器定时时间=180001/144us=125us /};/ 创建PLL配置结构,使得可采用相关函数模块来初始化PLL控制寄存器关于IAI、IOB的意义,请参考赵洪亮编C55x DSP应用系统设计第二版第8章 /PLL_Config myPLLConfig = {0, 每次发生定时器中断,在ISR中使全局变量timer0_cnt加1interrupt void timer0Isr void{timer0_cnt++;}//八、参考资料关于DPLL、定时器、输出口XF的介绍详见赵洪亮等TMS320C55x DSP应用系统设计第2版第8章第或TMS320C55x DSP Peripherals Reference GuideSPRU317B.pdf;关于基于CSL操作DPLL、定时器、中断的方法详见TMS320C55x Chip Support Library API Reference Guide SPRU 433A .pdf;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三单片机定时器中断实验
一、实验目的
1、熟悉keil软件;
2、掌握单片机C51的中断系统、定时/计数系统;
3、熟悉定时器中断程序的编写;
二、实验要求
1、编写定时器中断初始化程序,包括定时的寄存器TCON、IE、IP、TMOD、TH0及TL0
的初始值;
2、编写定时器中断服务程序,实现定时器控制交通指示灯的控制;
3、利用keil软件调试程序,并产生.hex文件;
4、编写程序,控制P口的8个LED灯,将8个LED等自定义成交通灯的模式,东西向绿
灯亮5s后,绿灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s后南北向绿灯闪烁,闪烁5次后亮红灯,东西向绿灯亮,如此往复。

5、将.hex文件利用STC单片机下载工具下载到单片机最小系统中,并观察LED灯的显示
状态;
6、提交实验报告,报告定时器初始化步骤、交通灯的程序和LED的显示结果。

三、实验内容
1、打开keil软件,熟悉软件的菜单、工作界面及工具。

然后按照keil的编程步骤编写程序
(创建工程----选择单片机AT89C51----新建源文件----保存为C程序----编写完整的C51程序----将文件添加到工程----编译并修改错误----连接产生.hex文件)。

2、打开STC下载软件,将keil生成的.hex文件打开,下载到最小系统板,测试程序并观察
实验结果。

3、修改程序,以获得LED显示效果。

4、调整寄存器TH0,TL0的值,观察指示灯的闪烁周期的变化,增加软件延时功能等。

四、实验说明
1、程序中使用的IO端口要与自己的单片机最小系统板对应;
2、定时时间太短时,增加软件延时功能,修改延时参数再测试程序。

3、思考定时/计数器中的计数功能的实现程序。

相关文档
最新文档