定时中断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作为输出口,接八只发光二极管,编写程序,使发光二极管左(右)循环点亮。
软件程序:
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。