定时中断T0服务程序参考框图
- 格式:doc
- 大小:40.50 KB
- 文档页数:4
定时器工作原理通电延时型。
只要在定时的时间段内(即1分钟)定时器一直得电,则常开触电就会闭合,只要定时器不断电常开触电就会一直闭合。
定时器断电则常开触电断开101 6.1010116801图6.1定时器/计数器结构框图011011011 0265536216016553621606.2411010110104位用于T0,高4位用于T1的。
:门控位。
GATE=0,只要用软件使TR0(或TR1)置1就能启动定时器/计数器0(或定时器/计数器1);GATE=1,只有在(或)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器/计数器0(或定时器/计数器1)工作。
不管GATE处于什么状态,只要TR0(或TR1)=0定时器/计数器便停止工作。
:定时器/计数器工作方式选择位。
C/=0,为定时工作方式;C/=1,为计数工作方式。
、M1:工作方式选择位,确定4种工作方式。
如表6.1所示。
表6.1定时器/计数器工作方式选择【例6.1】设置定时器1工作于方式1,定时工作方式与外部中断无关,则,M0=1,GATE=0,因此,高4位应为0001;定时器0未用,低4位可随意11(因方式3时,定时器1停止计数),一般将其设为0000。
因此,指令形式为:MOV TMOD,#10H/计数器工作方式与程序设计通过对特殊功能寄存器TMOD中的设置M1、M0两位的设置来选择四种工作/计数器0、1和2的工作方式相同,方式3的设置差别较大。
工作方式0工作方式寄存器TMOD中的M1M0为:00。
定时器/计数器T0工作在方式0 16位计数器只用了13位,即TH0的高8位和TL0的低5位,组成一个13 /计数器。
当TL0的低5位计满溢出时,向TH0进位,TH0溢出时,对TF0置位,向CPU申请中断。
定时器/计数器0方式0的逻辑结构如6.2所示。
1013121312213131310612 12130106128 192211310110136.22138103213 16.32502132130 16.401200131300819210001110000085 851 140 01011 011601 6.3121312213161610612 121601061265 53621161166.51216101032130 16.6980012162169800 16.711121610103216 111011000888821202 6.41021688812812288810612 128010612256218186.825006.56.5 6.62115001022321250050050050031130 168031021031203 6.66.923821002561001233201。
实验2 定时器T0中断实验目的掌握定时器相关寄存器的配置,以及定时时间的计算等实验内容定时器中断控制P1.0口输出(实现LED的亮灭),在Proteus界面观察。
实验步骤1、在Keil开发环境下建立一个工程,命名为‘定时器中断’,然后选择存储路径进行文件保存。
2、程序的编写,a.定时常数的确定定时器/计数器的输入脉冲周期与机器周期一致,为振荡频率的1/12。
本实验中时钟频率为12 MHZ,现采用中断方法来实现0.5秒延时,选用定时器T0来完成。
(用T0计时器不能直接实现0.5S的延时,实验可以通过中断延时0.05秒,然后进行10次中断后,实现LED的亮灭)时间常数可按下述方法确定:机器周期=12÷晶振频率=12/(12×106)=1us设计数初值为X,则(216-X)×1×10-6=0.05,可求得X,然后将X化为十六进制则X=3CB0H,故初始值为TH1=3CH,TL1=B0Hb.初始化程序包括定时器初始化和中断系统初始化,主要是对IE、TCON、TMOD 的相应位进行正确的设置,并将时间常数送入定时器中。
c.设计中断服务程序和主程序中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
d.编译代码:ORG 0000HSJMP MainORG 000BHAJMP TT0 ;定时器T0的中断服务程序入口地址ORG 0030HMain : MOV TMOD ,#00000001B ,定时器T0工作在方式1CLR TR0CLR TF0MOV TH0,#60 ;(65536-50000)延时5ms的初值MOV TL0,#176MOV R7,#10 ;循环10次,5*10=50msSETB P1.0MOV IE,#00000010B ;允许T0中断SETB TR0 ;启动定时器T0SETB EA ;打开中断系统Loop: SJMP LoopTT0 : DJNZ R7,Next ;CPL P1.0 ;取反p1.0MOV R7,#10 ;重置循环次数初值Next: CLR TR0 ;关闭定时器MOV TH0,#60 ;重写定时5ms的初值MOV TL0,#176SETB TR0 ;启动定时器RETI3、搭建Proteus仿真平台,仿真平台如实验1中平台一致。
1、方式1应用(输出如图所示方波,时钟频率为6MHz)中断程序方式:ORG 0000HAJMP MAIN ;转主程序ORG 000BH ;T0的中断入口AJMP IT0P ;转T0中断处理程序IT0PORG 0100HMAIN: MOV SP,#60H ;设堆栈指针MOV TMOD,#01H ;设置T0为方式1MOV TL0,#0CH ;T0置初值,如何计算初值MOV TH0,#0FEHSETB TR0 ;启动T0SETB ET0 ;允许T0中断SETB EA ;CPU开中断RETHERE: AJMP HERE ;自身跳转ITOP: MOV TL0,#0CH ;T0中断服务子程序,T0置初值MOV TH0,#0FEHCPL P1.0 ;P1.0的状态取反RETI查询程序方式:ORG 0000HAJMP MAIN ;转主程序ORG 0100HMAIN: MOV TMOD,#01H ;设置T0为方式1SETB TR0 ;接通T0LOOP: MOV TH0,#0FEH ;T0置初值MOV TL0,# 0CHLOOP1: JNB TF0,LOOP1 ;查询TF0标志CPL P1.0 ;P1.0的状态求反SJMP LOOP2、方式1应用(1秒定时程序,时钟频率为6MHz)思路:每次定时中断100ms,10次产生1秒ORG 0000HLJMP MAIN ;上电,转主程序入口MAINORG 000BH ;T0的中断入口LJMP IT0P ;转T0中断处理程序IT0PORG 1000HMAIN: MOV SP,#60H ;设堆栈指针MOV B,#0AH ;设循环次数10次MOV TMOD,#01H ;设T0工作在方式1MOV TL0,#0B0H ;给T0设初值,如何计算初值MOV TH0,#3CHSETB TR0 ;启动T0SETB ET0 ;允许T0中断SETB EA ;CPU开放中断HERE:SJMP HERE ;等待中断ITOP:MOV TL0,#0B0H ;T0中断子程序,重装初值MOV TH0,#3CH ;DJNZ B,LOOPCLR TR0 ;1s定时时间到,停止T0工作LOOP: RETI3、T1的方式2对外部信号计数,要求每计满100个数,将P1.0取反。
单片机实验实验一顺序结构程序实验二数据区传送子程序实验三简单I/O口控制实验实验四信号灯控制实验五脉冲计数实验实验六并口扩展芯片8255控制交通灯实验七点阵LED显示实验实验八AD转换实验实验九电脑时钟(定时器,中断综合实验)实验十步进电机控制实验实验十一LCD液晶显示屏实验实验一顺序结构程序设计一、实验目的掌握汇编语言设计和调试方法。
二、实验内容1.拼字程序:把2000H的内容拆开,高位送2001H低位,低位送2002H 低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
2.拼字程序:把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节。
3. 求和程序:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD 码存入32H单元,31H单元中的数为低4位。
三、实验步骤用连续或单步方式运行程序,检查2000—2002H中内容变化情况。
四、思考如何用断点方式调试本程序。
实验二数据传送程序一)实验目的:1)掌握单片机汇编语言程序设计和调试方法2)掌握单片机内部RAM,外部RAM,ROM中数据操作方法二)实验内容及步骤:1)再将内部RAM50H单元开始的十个数传到40H为始址的内部RAM中2)再将内部RAM 50H单元开始的十个数送到1000H为始址的外部RAM中3)再将ROM的2000H单元开始的十个数传送到以70H为始址的内部RAM中实验三简单I/O口控制实验一、实验目的(1)学习P1口的使用方法;(2)学习延时子程序的编写。
二、实验预备知识(1)P1口对准双向口,每一位都可独立地定义为输出线或输入线。
(2)本实验中延时子程序采用指令循环来实现,机器周期(12/6MHz)*指令所需机器周期数*循环次数,在系统时间允许的情况下可以采用此方法。
三、实验内容P1作为输出口,接八只发光二极管,编写程序,使发光二极管左(右)循环点亮。
1.函数波形发生器流程图主程序流程T0中断服务程序流程2. 255秒定时器流程主程序流程图INT0中断服务程序流程T1中断服务程序流程T0中断服务程序流程3. 比例电压变换器流程主程序流程图4. 模拟电压显示器流程主程序流程图注:P1口和P3.0-P3.3接12个LED 灯,其中P3.3接最高位灯L12,P1.0接最低位灯L0。
5. 脉冲计数器流程主程序流程图T1中断服务程序流程图T0中断服务程序流程图6. 水塔水位控制器流程主程序流程图T0中断服务程序流程图T1中断服务程序流程图7. 占空比可调的方波发生器流程主程序流程图T0中断服务程序流程图注:T0的中断服务程序编制过程中必须注意使程序所有流程的执行时间小于100μS 。
否则,输出波形的频率不符合题目的要求8. 双机通过串行接口互传数据流程主程序流程图T0中断服务程序流程图串口中断服务程序流程图9. 花样流水灯流程主程序流程图T0中断服务程序流程图注:在主程序中由于仅使用了8bit运算,故实际A/D采样值为255时,得到的延时时间间隔为1280mS。
若要完全符合题意,则需要使用16bit的算术运算才能满足要求。
10. 模拟电压比较器流程主程序流程图T0中断服务程序流程图T1中断服务程序流程图11. 利用PWM 信号实现直流小电机的调速流程主程序流程图注:在程序的编制过程中,必须仔细调整延时37微秒的延时子程序的延时时间,使输出波形的频率满足题目要求。
12. 调频信号发生器流程主程序流程图T0中断服务程序流程图注:该程序编制过程中须注意,T0中断服务程序与主程序均使用0区的工作寄存器。
另外,T0的中断服务程序中最长流程的执行时间必须小于50微秒13. 频率计主程序流程图T1中断服务程序流程图动态显示子程序流程图主程序流程图14. 电子钟T0中断服务程序流程图INT0中断服务程序流程图动态显示子程序流程图15. 数字电压表主程序流程图T0中断服务程序流程图动态显示子程序流程图16. 数字跑表主程序流程图INT0中断服务程序流程图T0中断服务程序流程图动态显示子程序流程图17. 步进电机驱动器主程序流程图INT0中断服务程序流程T0中断服务程序流程。
学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:实验一 I/O 口输入、输出实验地点:基础实验大楼A311一、实验目的掌握单片机P1口、P3口的使用方法。
二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。
以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区)。
2学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:五、实验步骤1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。
2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。
六、实验参考程序本实验参考程序:;//******************************************************************;文件名: Port for MCU51;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。
单片机原理课程设计——秒表时钟计时器的设计专业:电气工程及其自动化方向:电力系统*****学号:************指导老师:***目录第1章方案论证 (3)第2章硬件设计 (5)2.1秒表/时钟计时器的总体设计 (5)2.2 AT89C52单片机最小系统 (6)2.3 74LS244芯片说明 (8)2.4 LED显示器的显示方法及其与单片机的接口 (8)2.5电源电路的设计 (10)第3章软件设计 (11)3.1主程序 (11)3.2显示子程序 (11)3.3定时器T0中断服务程序 (12)3.4 T1中断服务程序 (12)3.5调时功能程序 (13)3.6整点响程序 (13)3.7时钟/秒表功能程序 (13)3.8 程序清单 (13)第4章设计总结 (23)第1章方案论证现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。
这种计时器查看的时间只能为计时结束时刻。
实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间。
本课设即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。
这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。
本系统采用AT89C52单片机作控制器,LED数码管,实现显示时、分、秒,以24小时计时方式。
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,结构较为复杂,考虑时钟显示只有六位,且系统没有其他复杂的处理任务,所以采用动态扫描法实现LED的显示。
单片机采用AT89C52系列,有足够的空余硬件资源实现其它的扩充功能。
秒表/时钟计时器的总体设计框图如下图所示。
图1.1 系统总体设计框图系统主要实现如下功能:1.时钟功能对于时钟功能,需要在数码管上显示小时、分钟和秒钟,因此,可以在内部存储空间分别定义它们的显示缓存空间,来存放小时、分钟和秒钟的BCD码,各2个字节。
单片机汇编中断程序(定时器中断)
;首相,介绍一下51 单片机的定时计数器,51 有两个定时计数器,分别为
T0,T1,基本一样,
;有一点不同,下面我们介绍定时计数器T0
;了解8051 的timer0 中断的程序写法,用中断法产生定时
;上面显示的是proteus 仿真图,下面的是源程序
;说明:(源程序中的终端入口地址很重要(这个是固定的),程序中断时,
会在对应中断固定的
;入口地址进入,因为规定的相隔入口间的空进有限,只能用跳转指令跳转,最终用RETI 强制返回
;这个程序把所有的中断入口地址都写上了,没有用到的,用RETI 直接屏蔽)
;运行结果是使led 灯明一下,暗一下。
COUNT EQU9217;对于11.0592 的晶振来说,延时10ms
LEDEQUP1.1
ORG0000H
LJMP RESET;开始时跳转转到初始化程序中
ORG0003H;外部中断0
RETI
ORG000BH;定时器/计数器T0 入口地址
LJMP INT_TIMER0;跳转到定时器/计数器中断服务程序中去
ORG0013H;外部中断1。
软件程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP PIT0
ORG 001BH
LJMP PIT1
ORG 0100H
MAIN: MOV SP,#FH ;设堆栈指针
MOV SCON,#00H ;设置串行口为方式0
MOV TMOD,#11H ;T0和T1初始化为方式1
MOV TH0, #3CH ;置时间常数,T0和T1定时100ms MOV TL0, #OB0H
MOV TH1, #3CH
MOV TL1, #0B0H
MOV 50H, #96H ;T0中断次数计数单元
MOV 51H,#14H ;T1中断次数计数单元
MOV R1, #00H
MOV R2, #00H
MOV R0, #40H ;显示缓冲单元起始地址
DISP0:MOV @R0, #00H ;显示缓冲单元清零
INC R0
CJNE R0, #4CH,DISP0
MOV 44H,#01H ;设置通道号的显示缓冲单元
MOV 48H,#02H
MOV R7,#40H ;置当前通道显示缓冲单元首址
MOV 53H,#40H
SETB ETO ;开中断
SETB ET1
SETB EA
SETB TR0 ;启动定时器
SETB TR1
LP: MOV R7, 53H ;调显示子程序
ACALL DISP
AJMP JP
定时器TO中断服务程序
PIT0: MOV TH0, #3CH ;重置时间常数
MOV TL0, #OBOH
DJNZ 50H,#96H
PUSH ACC
PUSH 03H
ACALL WDXJ ;调温度巡检子程序
POP 03H
POP ACC
DH0: RET1
定时器T1中断服务程序
PIT1: MOV TH1,#3CH ;重置时间常数
MOV TL0, #OBOH
DJNZ 51H,DH1 ;计数20次即定时2S
MOV 51H,#14H
INC R2
CJNE R2,#03H,CNL0 ;根据R2中的内容确定显示缓冲区首址 MOV R2,#00H
CNL0: CJNE R2,#00H,CNL1
MOV 53H,#40H
SJMP DH1
CNL1: CJNE R2,#01H,CNL2
MOV 53H,#40H
SJMP DH1
CNL2: MOV 53H,#48H
DH1: RETI
显示子程序
DISP: CLR P3.7 ;输出锁存
MOV R3,#01H ;置显示字位码
MOV DPTR,#TAB
DISP1:MOV A,R3
MOV SBUF,A ;字位码送串行口
JNB T1,$ ;等待串行转送结束
CLR T1 ;清串行中断标志
MOV A,R7
MOV R0,A
MOV A,@RO ;取代显示的数据
MOVC A,@R0 ;查表求字段码
MOV SBUF, A ;字段码送串行口,
JNB T1,$ ;等待串行中断标志
SETB P3.7 ;允许输出显示
ACALL DEL ;调延时子程序
MOV A,R3
JB ACC.3,DISP2 ;4位显示完否
RL A
MOV R3,A
INC R7
CLR P3.7 ;输出锁存
AJNP DISP1
DISP2:RET
TAB : DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DEL: PUSH 07H ;延时子程序
MOV R6,#32H
AA: MOV R7,#19H
DJNZ R7,$
DJNZ R6,AA
POP 06H
POP 07H
RET
温度巡检子程序
WDXJ: CLR P2.0
CLR P2.1
SERB P2.2
MOV A,R1 ;读入当前待检测的通道号
RL A
RL A
ADD A,#40H ;求显示缓冲区首址
MOV R0,A
MOV A,R1
MOV @R0,A
INC R0
MOV R5,#00H
MOV R6,#04H
STAT: CJNE R1,#00H,AD01 ;根据R1的内容选择通道
CLR P2.5
CLR P2.6
CLR P2.7
SJMP ZH
AD01: CJNE R1,#01H,AD02
SETB P2.5
CLR P2.6
CLR P2.7
SJMP ZH
AD02: CLR P2.5
SETB P2.6
CLR P2.7
ZH: SETB P2.0
NOP
N0P
NOP
CLP P2.0
JNB P2.2,$ ;检测EOC信号,等待转换完毕 SETB P2.1
MOV P1,#0FFH
MOV A,P1 ;读入转换结果
RRC A ;转换结果除以4
ADD A,R5 ;累加
MOV R5,A
DJNZ R6,ZH ;4次到?
MOV A,R5 ;保存平均值
MOV B,#03H ;标度变换
DIV AB
MOV R3,B
MOV B,#0AH ;将标度变换结果的整数部分 DIV AB ;进行BCD码转换
MOV @R0,A 送显示缓冲单元(十,个位)
INC R0
MOV @R0,B
INC R0
CJNE R3,#00H,L1 ;标度变换结果的余数部分 MOV @RO,#00H ;小数处理
SJMP L3
L1: CJNE R3,#01H,L2。