实验二定时器和中断应用程序设计与调试

实验二定时器和中断应用程序设计与调试
实验二定时器和中断应用程序设计与调试

实验二定时器和中断应用程序设计与调试

一.实验目的:

掌握单片机的定时器,中断功能系统的应用

二.实验内容和要求:

编写程序,用AT89C51的内部定时器/计数器T0的方式1产生周期为0.2秒的TTL脉冲(TCH 和TCL溢出的时候,产生一个中断),从P05输出。计算如下:

振荡器的频率f=6M=6000000,方式1计数器的长度为L=16.2的16次方即65536

定时时间(溢出时间)t=0.1s

定时常数TC=65536-6000000x0.1/12=65536-50000=15536,将15536转换成16进制为3CB0,TCH=3CH(高八位),TCL=B0H(低八位)。

三.实验主要仪器设备和材料:

1 AMC51单片机综合开发系统一台 2.微机一台

四.实验方法,步骤及结果测试

1.开启ANC51实验装置,检查跳线,一般无需改动。

2.运行Keil调试程序,具体操作步骤参考实验一。

3.参考以下电路图和流程图编写程序。

4.编译程序,把生成的.HEX目标文件下载到AT89S51运行。

5.观察AMC51实验装置的LED在运行程序时闪烁的情况。

参考程序代码:

ORG 0000H ;下一条指令的地址为0000H

START: AJMP MAIN ;跳入主程序

ORG 000BH ;下一条指令的地址为000BH

AJMP INT_T0 ;定时器0中断程序

ORG 0030H ;下一条指令的地址为0030H

MAIN: MOV TMOD,#01H ;设定时器T0为16位定时器

MOV TH0,#3CH ;设定T0的定时值(0.1s)

MOV TL0,#0B0H ;设定T0的定时值(0.1s)

SETB TR0 ;启动定时器T0

SETB ET0 ;开定时/计数器0允许

SETB EA ;CPU开放中断

MAIN_1: SJMP MAIN_1

INT_T0:PUSH ACC ;保护现场

PUSH PSW

MOV TH0,#3CH ;设定T0的定时值(0.1s)

MOV TL0,#0B0H ;设定T0的定时值(0.1s)

CPL P0.5 ;取反,流水灯闪烁

POP PSW ;恢复现场

POP ACC

RET1 ;中断返回

END

五.实验报告要求

1.实验原理分析,实验现象。

通过启动T0中断,设定定时值为0.1S,当定时器溢出后,重新置位,并将P05取反,其中P05口对应的发光二极管将造成闪烁的结果。

2.按思考题修改程序,修改程序后的调试结果;程序流程图;源程序及注释。

思考题

1.如果要输出一个周期为1秒的方波,应怎么样修改程序?

答:周期为1S,就是每次延时0.5S,源程序0.1S 延时5次循环后,再开中断。

ORG 0000H

START: AJMP MAIN

ORG 000BH

AJMP INT_T0

ORG 0030H

MAIN: MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV R2,#05H

SETB TR0

SETB ET0

SETB EA

MAIN_1: SJMP MAIN_1

INT_T0: DJNZ R2,INT ;当R2=5每次减1到为0才继续执行,开启中断,也MOV R2,#05H 就是延时5次,一共0.5S,周期就是1S,频率1HZ

CPL P0.5

INT: PUSH ACC

PUSH PSW

MOV TH0,#3CH

MOV TL0,#0B0H

POP PSW

POP ACC

RETI

END

程序流程图

主程序:开始中断程序:↓

↓P0.5取反

初始化↓

分别延时循环5次,2次

等待中断←

↓_____↑

2.如果要同时输出多个频率不同的方波(f1=1HZ f2=2HZ),应怎么样修改程序?(改为2.5HZ) 答:频率1HZ,周期为1S,就是每次延时0.5S,源程序0.1S 延时5次循环后,再开中断。频率为2HZ,周期为0.5S,就是每次延时0.25S,源程序0.1S 大概延时2次循环后,再开中断。

程序如下

ORG 0000H

START: AJMP MAIN

ORG 000BH

AJMP INT_T0

ORG 0030H

MAIN: MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV R2,#05H

MOV R3,#02H

SETB TR0

SETB ET0

SETB EA

MAIN_1: SJMP MAIN_1

INT_T0: DJNZ R2,INT ;[当R2=5每次减1到为0才继续执行,开启中断,也MOV R2,#05H 就是延时5次,一共0.5S,周期就是1S,频率1HZ]

CPL P0.5

DJNZ R3,INT ; [当R3=2每次减1到为0才继续执行,开启中断,

MOV R3,#02H 就是延时2次,一共0.2S,周期就是0.4S,频率2.5HZ]

CPL P0.2

INT: PUSH ACC

PUSH PSW

MOV TH0,#3CH

MOV TL0,#0B0H

POP PSW

POP ACC

RETI

END

程序流程图:

主程序:开始中断程序:↓

↓P0.5取反

初始化↓

延时循环5次

等待中断←

↓_____↑

C程序设计实验三实验报告

实验报告 工学院土木工程专业09级2011至2012学年度第1学期学号:xxxxxx姓名:xxxxxx 2011 年10月08日第3~4节综合楼325教室 实验目的:

a的字节数为sizeof (a)或sizeof (int ),用printf 函数语句输出各类型变 量的长度(字节数)。 ①输入程序如下 in clude int mai n() {int a,b,i,j,k,r,s,t,u,v,w,x,y,z; float d,e; char c1,c2; double f,g; long m, n; un sig ned int p,q; a=61;b=62; c1='a';c2='b'; d=3.56;e=-6.78; m=50000;n=-60000; p=32768;q=40000; i=sizeof(a);j=sizeof(b); k=sizeof(d);r=sizeof(e); s=sizeof(c1);t=sizeof(c2); u=sizeof(f);v=sizeof(g); w=sizeof(m);x=sizeof( n); y=sizeof(p);z=sizeof(q); prin tf("a=%d,b=%d\nd=%d,e=%d\nc 1= %d,c2=%d\n",i,j,k,r,s,t); prin tf("f=%d,g=%d\nm=%d, n=%d\nmp=%d,q=%d\n",u,v,w,x,y,z); } 结 果如 下: (2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体 积。编程序,用scanf输入数据,输出计算结果。输出时要有文字说明,去小数点后两位数字。 ①编写程序如下: #i nclude int mai n() {float h,r,l,s,sq,vq,vz; float pi=3.141526; prin tf("Please in put r,h:"); sca nf("%f,%f",&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; prin tf("The circumfere nce:l=%6.2f\n",l); prin tf("The area of thee circle:s=%6.2f\n ",s); prin tf("The superficial area of the ball:sq=%6.2f\n ",sq); prin tf("The volume of the ball:v=%6.2f\n",vq); prin tf("The volume of the cyli nder:vz=%6.2f\n ",vz); return 0; L

实验4,定时器实验

定时器实验 一、实验目的 1、熟悉使用Keil软件的使用和单片机程序的编写。 2、了解掌握51单片机定时器的结构与工作原理。 3、了解LCD1602的工作原理及程序编写。 4、掌握定时器程序的书写格式及使用方法。 二、实验仪器 1、C51单片机开发板(含LCD1602显示屏) 2、PC机(安装Keil软件及C51烧录软件) 三、实验原理 1、LCD1602显示屏 lcd1602可以显示2行16个字符,有8为数据总线D0-D7,和RS、R/W、EN 三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。其引脚功能 2、定时器工作原理 8051单片机有两个16位定时器T0,T1,有四种工作方式,由TMOD寄存器 TMODE寄存器的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。

C/ T置位时,T0/T1工作在计数器方式,清零时,工作在定时器方式。 GATE位置位时,由外部引脚中断来启动定时器,清零时,仅由TR0,TR1分别启动定时器T0,T1。 定时器若工作于中断方式,则在初始化时应该开放定时器的中断及总中断。注意定时器方式的选择,确定是否要在中断服务程序中置入定时器初值,最后启动定时器(TR0/TR1 = 1)。 四、实验内容 1、用定时器实现流水灯。 用89C51的定时器资源,在定时器中断服务程序中实现流水灯的运行。在中断服务程序中可以使用查表方式依次点亮LED,若采用移位操作,需注意移位逻辑。 2、用定时器和LCD1602制作电子时钟。 1602液晶显示模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的,通过D7~D0的8位数据端传输数据和指令。可以在定时器中断服务程序中进行计时,并将时间显示在LCD1602模块上。 五、预习要求 1、掌握实验原理,了解实验目的,熟悉实验内容。 2、了解LCD1602的工作原理,掌握其显示程序的编写。 3、掌握51单片机定时器的工作原理及过程。 六、思考题 1、用定时器实现延时与用软件延时相比,有什么优点? 2、定时器置入的初值如何计算?

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

定时器实验报告

电子信息工程学系实验报告 课程名称:单片机原理及接口应用Array实验项目名称:51定时器实验实验时间: 班级:姓名:学号: 一、实验目的: 熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 二、实验环境: 软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件 三、实验原理: 1、51单片机定时计数器的基本情况 8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS-51系列单片机的定时/计数器有几个相关的特殊功能寄存器: 方式控制寄存器TMOD; 加法计数寄存器TH0、TH1 (高八位);TL0、TL1 (低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON) 定时/计数器启停控制位TR0、TR1(TCON) 定时/计数器中断允许位ET0、ET1(中断允许寄存IE) 定时/计数器中断优先级控制位PT0、PT1(中断优IP) 2、51单片机的相关寄存器设置 方式控制寄存器TMOD: TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。TMOD各位的含义如下: 1. 工作方式选择位M1、M0 3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。

T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。 4、51单片机的编程 使用MCS-51单片机的定时/计数器的步骤是: .设定TMOD,确定: 工作状态(用作定时器/计数器); 工作方式; 控制方式。 如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:0001 0110,即0x16。 .设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213 = 8192、216 = 65536和28 = 256,定时间隔为T,计数初值为a,则有 T = 12×(T_all – a)/fosc a = T_all – T×fosc/12 a = – T×fosc/12 (注意单位) THx = a / 256;TLx = a % 256; .确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1;EA = 1; 还需要编写中断服务函数: void T0_srv(void)interrupt 1 using 1 { TL0 = a % 256; TH0 = a / 256; 中断服务程序段} .启动定时器:TR0(TR1)= 1。 四、实验内容过程及结果分析: 利用protues仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。刚开始led数码管显示9,每过一秒数码管显示值减一,当显示到0时返回9,依此反复。然后设计00-59的两位秒表显示程序。 (1)实现个位秒表,9-0

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(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 #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=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 // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

单片机中断实验报告

实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer1_init() 开始 设置显示初值启动定时器 判断是否到59 继续 是 否

{ TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(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 #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=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 // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int

4实验四 单片机定时器的使用

姓名:学号:日期: 实验四单片机定时器的使用 一、实验名称:单片机定时器的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG H ;定时器T0的入口地址 LJMP TIMER0 MAIN: MOV TMOD,#01H

MOV R0,#05H MOV TH0,# H ;定时器的初值 MOV TL0,# H SETB ;开定时器T0的中断 SETB ;开CPU的中断 SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ;重装初值 MOV TL0,# H ;重装初值 RETI END 将以上程序补充完整,流水时间间隔为250ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:实现流水灯,时间间隔250ms,由定时器实现定时250ms。 六、回答思考题 1.定时器由几种工作模式,各种模式的最大定时时间是多少? 2.各种模式下初值怎么计算?

定时器中断实验

实验四定时器中断实验 一、实验目的 (1)深刻理解对MCS-51单片机定时/计数器内部结构、工作原理和工作方式。(2)掌握定时/计数器工作在定时和计数两种状态下的编程方法。 (3)掌握中断服务程序设计方法。 二、实验设备 计算机 操作系统:Windows 98/2000/XP 应用软件:WAVE 6000或其他。 三、实验内容 设单片机的时钟频率为12MHz,要求在P1.0脚上输出周期为2ms的方波。四、实验原理 周期为2ms的方波要求定时间隔为1ms,每次时间到将P1.0取反。定时计数器频率为f osc/12,T cy=12/f osc=1us。每个机器周期定时计数器加1,1ms=1000us,需技术次数为1000/(12/f osc)=1000。由于加1计数器向上计数,为得到1000个计数之后的定时器溢出,必须给加1计数器赋初值65536-1000。 五、实验源程序 ORG 0000H AJMP START ORG 001BH AJMP T1INT ORG 0030H START: SETB TR1 SETB ET1 SETB EA MOV SP,#60H MOV TMOD,#10H MOV TH1,#0FCH MOV TL1,#18H MAIN: AJMP MAIN T1INT: CPL P1.0 MOV TH1,#0FCH MOV TL1,#18H RETI END

六、实验结果 七、实验心得 通过这次实验,我对MCS-51单片机定时/计数器内部结构、工作原理和工作方式有了更加深刻的理解,同时也掌握了定时/计数器工作在定时和计数两种状态下的编程方法以及中断服务程序设计方法。在今后的学习中,要更加注重实践,通过动手来增强自己解决问题的能力。

实验3简单的程序设计

实验3简单的程序设计 实验目的: 1.掌握表达式、赋值语句的正确书写规则。 2.掌握VB变量的定义和使用,表达式和常用函数的使用。 3.掌握InputBox与MsgBox的使用。 实验3.1函数考察 实验任务: 考察下列函数的值。 Round(-3.5) Round(3.5) Chr(66) Asc ("c") Asc(Chr(99)) Chr(Asc("K")) Ucase$("abcdefg") Lcase(“ABC”) Str(123.45) Val(“123AB”) Len(“123程序设计ABC”) LenB(“123程序设计ABC”) Ltrim(“ ABC”) String(3, “ABC”) Instr(“EFABCDEFG”, “ef”) Instr(2,“EFABCDEFG”, “ef”,1) Date() Now() Time() 实验步骤: 先自己分析以上函数的功能和可能的结果,然后在立即窗口用Print方法求出相应函数的值,对照比较自己的判断。 22

实验3.2表达式考察 实验任务: 考察下列表达式的值。 Dateadd(“m”,1,#1/30/2000#) Datediff(“y”,#12/03/1999#,#1/03/2000#) ‘计算时间间隔多少日 123 + Mid(“123456”,3,2) 123 & Mid(“123456”,3,2) Ucase(Mid(“abcdefgh”,3,4)) 16 / 4 – 2 ^ 5 * 8 / 4 MOD 5 \ 2 实验步骤: 先自己分析表达式的功能和可能的结果,然后在立即窗口用Print方法求出相应表达式的值,对照比较自己的判断。 实验3.3简单打印图形 实验任务: 使用Print方法、Tab函数和String函数设计一个过程,显示如图3-1所示的图形,并将结果保存到文件中。 图3-1 实验3.2运行界面 参考代码如下: Private Sub Form_Load() Print Tab(15); String(1, "1") Print Tab(14); String(3, "2") Print Tab(13); String(5, "3") Print Tab(12); String(7, "4") End Sub 操作提示: 应先将Form窗体的AutoRedraw属性值设为True。

嵌入式定时器基本功能(定时器中断)c语言代码

定时器基本功能实验(定时器中断) 1.实验内容 使用定时器0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。 备注:EasyARM2131实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200 ; 2.实验步骤 ①启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程 TimeOut_C。 ②在user 组中的main.c 中编写主程序代码。 ③主程序中使用IRQEnable( )使能IRQ 中断。 ④选用DebugInExram 生成目标,然后编译连接工程。 ⑤将LPC2131实验板上的Beep跳线短接到P0.7。 ⑥选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。 ⑦全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。 3.实验参考程序 程序清单错误!文档中没有指定样式的文字。-1 定时器实验参考程序 #include "config.h" #define BEEP 1 << 7 /* P0.7控制BEEP,低电平蜂鸣 */ /***************************************************************************************** ** 函数名称:IRQ_Timer0() ** 函数功能:定时器0中断服务程序,取反LED9控制口。 ** 入口参数:无 ** 出口参数:无 ****************************************************************************************** */ void __irq IRQ_Timer0 (void) { if ((IO0SET & BEEP) == 0) IO0SET = BEEP; /* 关闭BEEP */ else IO0CLR = BEEP; T0IR = 0x01; /* 清除中断标志*/ VICVectAddr = 0x00; /* 通知VIC中断处理结束*/ } /* ***************************************************************************************** ** 函数名称:main()

实验四 定时器中断实验

实验四 定时器中断实验 一:实验目的 1.熟悉定时器初始化的步骤; 2.熟悉定时器控制寄存器(TCR )的含义和使用; 3.熟悉定时器的原理和应用。 二:实验内容 本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF 引脚相连的LCD 指示灯。当定时器中断产生时可以观察到LCD 周期性闪烁。 三:实验原理 1.定时器 .C54xx 系列的DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。应用中可以用定时器来产生周期性的CPU 中断或脉冲输出。定时器的功能方框图如图9.1所示,其中有一个主计数器(TIM )和一个预定标计数器(PSC )。TIM 用于重装载周期寄存器PRD 的值,PSC 用于重装载周期寄存器TDDR 的值。 图5.1信号,是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。

定时器实际上是有20bit 的周期寄存器。它对CLKOUT 信号计数,先将PSC (TCR 中的D6~D9位)减1,直至PSC 为0,然后把TDDR (TCR 中的低4位)重新装载入PSC ,同时将TIM 减1,直到TIM 减为0。这时CPU 发出TINT 中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度与CLKOUT 一致,然后将PRD 重新装入TIM ,重复下去直到系统或定时器复位。 定时器产生中断的计算公式如下: TINT t c 为 CLKOUT 的周期) 定时器由三个寄存器组成:TIM 、PRD 、TCR 。 TIM :定时器寄存器,用于装载周期寄存器值并自减1。 PRD :周期寄存器,用于装载定时器寄存器。 TCR :定时器控制寄存器,包含定时器的控制状态位。 定时器是一个片内减计数器,用于周期地产生发,后者每个CPU 时钟周期减1,当计数器减至0周期计数器被定时周期值重新装载。 在正常操作模式下,当TIM 自减至0时,TIM 将被PRD 内的数值重装载。在硬件复位或定时器单独复位(TCR 中TRB 位置1)的情况下,主定时器模块输出的是定时器中断(TINT )信号。该中断被发送至CPU ,同时由TOUT 引脚输出。TOUT 脉冲的宽度等于CLKOUT 的时钟宽度。 预定标模块由两个类似TIM 和PRD 的单元构成。它们是预定标计数器(PSC )和定时器分频寄存器(TDDR )。PSC 、TDDR 是RCR 寄存器的字段。在正常操作时PSC 自减为0,TDDR 值装入PSC ,同样在硬件复位或定时器单独复位的情况下,TDDR 也被装入PSC 。PSC 被CPU 时钟定时,即每个CPU 时钟使PSC 自减1。PSC 可被TCR 读取,但不能直接写入。 当TSS 置位时,定时器停止工作。若不需要定时器,终止定时操作,可使芯片工作在低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM 和PRD )作为通用的存储器单元,可以在任意周期对它们进行读或写操作。 TIM 的当前值可被读取,PSC 也可以通过TCR 读取。因为读取这两个存储器需要两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC 两次读的结果可能有差别,不够准确。若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS 置1和清0后,可重新开始定时。 通过TOUT 信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。对于有多个定时器的DSP ,由寄存器GPIOCR 中的第15位控制使用某一个定时器产生的TOUT 信号。 2.定时器初始化 (1)定时器初始化步骤 ●TCR 的TSS 位写1,定时器停止工作; ●装载TRD ;

单片机定时器实验报告

XXXX大学信息工程与自动化学院学生实验报告 (2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

单片机实验 中断、定时器

大连理工大学实验报告(模板) 实验时间:年月日星期时间::~ : 实验室(房间号):实验台号码:班级:姓名: 指导教师签字:成绩: 实验三外部中断/INT0实验 一、实验目的和要求 学习、掌握单片机的中断原理。正确理解中断矢量入口、中断调用和中断返回的概念及物理过程。学习编写“软件防抖”程序,了解“软件防抖”原理。 对/int0、/int1两个外部中断进行编程,其中: ●主程序的功能:LDE灯“全亮”、“全灭”交替进行 --------(状态2); ●Int0中断服务程序功能:2个相邻的LED灯被点亮且循环左移(状态0); ●Int1中断服务程序功能:1个LED灯被点亮且循环右移 ---(状态1);【注意】:实验仪上的LED灯物理位置最左侧为d0;最右侧为d7。 二、实验算法 1 在主程序中利用CPL P3.3的指令驱动其电平不断地转换(由逻辑笔电路做程序状态监视)。 2 在中断服务程序中将P3.3置位(P3.3=1),实现对计数器“加1”并(通过P1口)显示的功能。 3 中断结束后回到主程序,程序继续对P3.3的电平不断取反。 三、实验电路图

四、实验流程图 主程序入口INT0入口 设置中断允许P3.2置1 设置中断优先级调用延时子程序 设TCON 计数器加一并显示 CLR A开中断 (P0)—(A) P3.2=0? 调用延时子程序调用延时子程序 (A)—(A) RETI INT1同理 五、程序清单 ORG 0000H LJMP START ORG 0003H LJMP INT_0 ORG 0013H LJMP INT_1 ORG 0100H ;主程序 START: MOV SP,#60H MOV IE,#85H

外部中断,定时器与串行口综合实验

硬件实验八外部中断,定时器与串行口综合实验 一.实验目的 1.进一步巩固外部中断,定时计数器和串行口的原理 2.进一步巩固外部中断,定时计数器使用和编程方法 3.进一步巩固串行口与PC机通信的实现方法 二.实验内容 独立按键按下后,单片机每隔3s将内部的RAM60H开始的存储单元中的数据发送到串行口,并在PC上的串行调试助手上显示。再次按下,则停止传送。若继续按下,则继续传送。以此类推。 三.实验连线 用杜邦线将P3.0口和独立按键连接起来 四.实验说明 本实验结合外部中断,定时计数器和串行口的知识,实现数据定式传输。独立按键的按下将产生从高到低的电平变化,可作为外部中断的输入信号。 主程序中,应首先对外部中断,定时计数器和串行口进行初始化。在外部中断程序中判断是发送还是停止发送,若需要发送数据则开启定时器,若停止发送数据则关闭定时器。在定时器中断服务程序中发送数据。 五.实验代码及其现象 程序代码: #include

#define uchar unsigned char #define uint unsigned int char code table[]="communication engineering kingsam 1006052150"; char *p; uint i; int k=0; char overtime,flag; void init() //初始化函数 { TMOD=0x21; //置工作方式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xfd; TL1=0xfd; EA=1; EX0=1; ET0=1; IT0=1; ES=1; TR1=1; //启动定时器R1 SCON=0x40; p=0x60;

定时器基本功能实验(定时器中断)

实验二、定时器基本功能实验(定时器中断) 班级: 学号: 姓名:

一、实验目的 熟悉LPC2000 系列ARM7 微控制器的定时器0的基本设置及定时中断应用。二、实验设备 硬件:PC 机、LPC2131 教学实验开发平台 软件:Windows98/XP系统,ADS 1.2 集成开发环境 三、实验内容 使用定时器 0 实现1 秒定时,控制蜂鸣器蜂鸣。采用中断方式实现定时控制。备注:EasyARM2131 实验板上的系统时钟默认为11.0592MHz;系统中已定义了符号常量Fpclk = 11059200。 四、实验步骤 1、启动 ADS 1.2,使用ARM Executable Image for lpc2131 工程模板建立一个工程TimeOut_C; 2、在 user 组中的main.c 中编写主程序代码; 3、主程序中使用IRQEnable( )使能IRQ 中断; 4、选用 DebugInExram 生成目标,然后编译连接工程; 5、将 LPC2131 实验板上的Beep 跳线短接到P0.7; 6、选择 -> ,启动AXD 进行JTAG 仿真调试; 7、全速运行程序,蜂鸣器会响一秒,停一秒,依次循环。 五、实验参考程序 #include "config.h" #define BEEP 1 << 7 /* P0.7 控制BEEP,低电平蜂鸣 */ /* ********************************************************************* ** 函数名称:IRQ_Timer0() ** 函数功能:定时器 0 中断服务程序,取反LED9 控制口。 ** 入口参数:无 ** 出口参数:无 ********************************************************************* */ void __irq IRQ_Timer0 (void) { if ((IO0SET & BEEP) == 0) IO0SET = BEEP; /* 关闭BEEP */

实验三简单程序设计(2)

实验三简单程序设计 【实验目的】 1、掌握scanf、printf函数语句的使用 2、掌握算术表达式和赋值表达式的使用 3、能够编程实现简单的数据处理 【实验性质】验证性 【实验要求】 1、认真阅读本次实验的目的,了解本次实验要求掌握的内容 2、在上机前,需要预习,在程序改错题旁将程序中存在的错误修改过来,将编程题的 代码和流程图写在预习报告中 3、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码, 在VC环境中编写出来 4、在VC中将编写的程序编译、调试,能正确运行结果,各题目的具体要求请看题目下 的要求 5、将正确程序上传FTP服务器(ftp://172.17.9.253) 6、争取完成选作题 【实验内容】 1、程序改错 1) 下面程序需要从键盘输入三个数,计算其平均值在屏幕上显示输出。要求平均值 需要保留两位小数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误。 include int Main(){ int x,y,z,float ave; /*定义变量*/ printf("请输入三个数:\n);/*输入提示*/ scanf("%d,%d,%d",x,y,z);/*从键盘输入*/ ave=x+y+z/3;/*计算*/ printf("平均值是:ave=%f",AVE); return 0; }

2、编程题 1)编写程序,在计算机屏幕上显示如下信息。 【要求】 (1)使用printf 函数输出字符 2) 设一个正圆台的上底半径r1,下底半径r2,高h 。请设计一程序,从键盘输入r1,r2,r3;计算并在显示器上输出该圆台的上底面积s 1,下底面积s 2,圆台的体积V 。 【要求】 (1)r1,r2,h 用scanf 函数输入,且在输入前要有提示; (2)在输出结果时要有文字说明,每个输出值占一行,且小数点后取2位数字。 【思路点拔】 (1)圆面积计算公式为 s=πr 2。其中r 为圆半径。 (2)圆台体积计算公式为 V=3 /)r1r2r2r1(h 22++π 3) 鸡兔同笼,已知鸡兔总头数为h ,总脚数为f ,求鸡兔各有多少只? 【要求】

实验项目:实验一 最简单的C程序设计

实验项目:实验一最简单的C程序设计 (所属课程:《C语言程序设计》学时:2) 一、实验目的 1.掌握:使用标准输入/输出函数进行常见数据类型的数据的输入/输出方法。 2.初步培养编制程序框图和源程序、准备测试数据以及实际调试程序的独立编程能力。 3.掌握顺序结构程序设计的基本思路。 二、实验条件 Pc和vc++编程环境 三、实验内容 1.熟悉编程环境。 2.输入并运行一个C程序 3.掌握各种格式转换符的正确使用方法。 4.编程序:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。要求用scanf函数从键盘上输入数据(半径和高),输出各计算结果,输出时要求有文字说明,取小数点后2位数字。5.编程序:用getchar函数输入两个字符给C1、C2,然后分别用putchar 函数和printf函数输出这两个字符。 四、实验步骤 编写程序,输入数据,观察结果。 五、实验结果 观察结果和预期是否一致。 实验项目:实验二选择结构程序设计

(所属课程:《C 语言程序设计》学时:2) 一、实验目的 1.了解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 2.学会正确使用逻辑运算符和逻辑表达式。 3.熟练掌握if 语句和switch 语句 二、实验条件 Pc 和vc++编程环境 三、实验内容 1.有一函数: ?? ???≥-<≤-<=)10x (113x )10x 1(12x )1x (x y 用scanf 函数输入x 的值,求y 值。 运行程序,输入x 的值(分别为x<1、1≤x <10、x ≥10三种情况),检查输出的y 值是否正确。 2.给出一个百分制成绩,要求输出成绩等级A 、B 、C 、D 、E 。90分以上为A ,81~89分为B ,71~79分为C ,61~69分为D ,60分以下为E 。 3.输入4个整数,要求按由小到大顺序输出。 四、实验步骤 编写程序,输入数据,观察结果。 五、实验结果 观察结果和预期是否一致。 实验项目:实验三 循环结构程序设计

相关文档
最新文档