第06章 单片机定时计数器_第1页
第06章 单片机定时计数器_第2页
第06章 单片机定时计数器_第3页
第06章 单片机定时计数器_第4页
第06章 单片机定时计数器_第5页
已阅读5页,还剩38页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第06章 单片机定时计数器6.1 定时/计数器结构6.2 定时/计数器工作方式6.2.1 工作方式06.2.2 工作方式16.2.3 工作方式26.2.4 工作方式36.3 全自动洗衣机定时控制Proteus仿真计数器的溢出空间可随计数初值改变定时时间tt =(计数器最大值-计数初值)机器周期 =(2n-a)12/fosc (微秒)基本工作原理:定时时间定时时间t与与n、x、fosc三个因素有关三个因素有关TFx(X = 0、1)6.1 定时/计数器结构1 1工作方式寄存器(工作方式寄存器(TMOD 89H)TMOD 89H)位位D7D6D5D4D3D2D1D0位符号位符号GATEC/C/T

2、TM1M0GATEC/C/T TM1M0T1方式字段方式字段T0方式字段方式字段 GATE:门控位。GATE = 0 启动不受 /INT0或 /INT1的控制;GATE = 1 启动受 /INT0 或 /INT1 的控制。C/ : 外部计数器 / 定时器方式选择位。C/ = 0 定时方式;C/ = 1 计数方式。 TTTTM1M0:工作模式选择位。 M1 M0工作方式 方式说明 0 0方式013位定时器/计数器 0 1方式116位定时器/计数器 1 0方式2具有自动重装初值的8位定时器/计数器 1 1方式3T0为两个独立的8位计数器,T1为波特率发生器定时定时/ /计数器控制寄存器(计数器控制

3、寄存器(TCON 88H)TCON 88H) 位位D7D6D5D4D3D2D1D0位符号位符号TF1TR1TF0TR0IE1IT1IE0IT0TR0:定时 / 计数器0运行控制位。软件置位/复位。与GATE有关分两种情况: GATE = 0 时:若TR0 = 1,开启T0;若TR0 = 0,停止T0。 GATE = 1 时:若TR0 = 1 且/INT0 = 1时,开启T0; 若TR0 = 1 但 /INT0 = 0,则不能开启T0。 若TR0 = 0, 停止T0计数。6.2 6.2 定时器定时器/ /计数器的工作方式计数器的工作方式6.2.6.2.工作方式工作方式 M1M0=00M1M0=0

4、0 工作方式0:13位计数。TH的8位和TL的低5位1-81921-8192在工作方式在工作方式0 0下,计数器的计数值由下式确定:下,计数器的计数值由下式确定:2 21313-X=8192-X-X=8192-X计数值范围是:计数值范围是: 1 181928192(2 21313)定时器的定时值由下式确定:定时器的定时值由下式确定:T=NT=N* *Tcy=(8192-X)Tcy=(8192-X)* *TcyTcy 【例例6.2-16.2-1】LEDLED指示指示/ /提示灯。提示灯。在大多数单片机应用系统中,都需要用在大多数单片机应用系统中,都需要用LEDLED的点亮或的点亮或熄灭做状态指示

5、,用熄灭做状态指示,用LEDLED的闪烁做状态提示的闪烁做状态提示, ,如图如图6.2-6.2-2 2所示。所示。LEDLED的点亮时间、熄灭时间都可以用定时器的点亮时间、熄灭时间都可以用定时器控制。编写程序控制控制。编写程序控制P1.7P1.7引脚上的引脚上的LEDLED闪烁,闪烁周闪烁,闪烁周期为期为600s600s。计算计数初值。欲产生周期为计算计数初值。欲产生周期为600s600s的等宽方波脉的等宽方波脉冲,只需在冲,只需在P1.7P1.7端交替输出端交替输出300s300s的高低电平即可,的高低电平即可,因此定时时间应为因此定时时间应为300s300s。设计数初值为。设计数初值为X

6、X,则有:,则有:(213-X213-X)2 210-6=30010-6=30010-610-6X=7892=1ED4HX=7892=1ED4H0001111011010100B0001111011010100B将将X X的低的低5 5位位01010B01010B写入写入TL1TL1的低的低5 5位,因位,因TL1TL1有有8 8位,其高位,其高3 3位填位填0 0,即,即TL1=11010100B=1EHTL1=11010100B=1EH。将。将NN的高的高8 8位位00011110B=D4H00011110B=D4H写入写入TH1TH1。TMODTMOD初始化。题目要求定时器初始化。题目要

7、求定时器/ /计数器计数器1 1为工作方为工作方式式0 0,所以,所以M1M0=00M1M0=00;为实现定时功能应使;为实现定时功能应使C/=0C/=0;为实现定时器内启动,应使为实现定时器内启动,应使GATE=0GATE=0。此题目不涉。此题目不涉及定时器及定时器/ /计数器计数器0 0,为方便起见,设其各控制位均,为方便起见,设其各控制位均为为0 0。则工作方式控制寄存器。则工作方式控制寄存器TMOD=00HTMOD=00H。 启动和停止控制。因为定时器启动和停止控制。因为定时器/ /计数器计数器1 1为内启动,为内启动,故当故当TR1=1TR1=1时,启动计数;当时,启动计数;当TR1

8、=0TR1=0时,停止计数。时,停止计数。 中断的开放中断的开放/ /禁止。题目中要求用查询方式检查禁止。题目中要求用查询方式检查T1T1的计数溢出状态,故设置的计数溢出状态,故设置IE=00HIE=00H,以关中断。,以关中断。ORG 0000H ORG 0000H LJMP START LJMP START ; ;转移到主程序转移到主程序ORG 0100H ORG 0100H ; ;主程序从主程序从0100H0100H开始开始START: MOV TCON,#00H START: MOV TCON,#00H MOV TMOD,#00H MOV TMOD,#00H ; ;工作方式设定工作方式

9、设定MOV TH1,#0FBH MOV TH1,#0FBH ; ;计数初值设定计数初值设定MOV TL1,#0AHMOV TL1,#0AHMOV IE,#00H MOV IE,#00H ; ;关中断关中断SETB TR1 SETB TR1 ; ;启动计数器启动计数器1 1LOOP0:JBC TF1,LOOP1 LOOP0:JBC TF1,LOOP1 ; ;查询是否溢出查询是否溢出SJMP LOOP0SJMP LOOP0; ;无溢出,查询等待无溢出,查询等待LOOP1:MOV TH1,#0FBH LOOP1:MOV TH1,#0FBH ; ;重设初值重设初值 MOV TL1,#0AHMOV TL

10、1,#0AH CPL P1.7 CPL P1.7 ; ;输出取反输出取反 SJMP LOOP0SJMP LOOP0ENDEND 6.2.2.6.2.2.定时定时/ /计数器工作方式计数器工作方式1 1 M1M0=01M1M0=01 P3.4P3.21-65536在工作方式在工作方式1 1下,计数器的计数值由下式确定:下,计数器的计数值由下式确定:2 21616-X=65536-X-X=65536-X计数值范围是:计数值范围是: 1 16553665536(2 21616) 定时时间长定时器的定时值由下式确定:定时器的定时值由下式确定:T=NT=N* *Tcy=(65536-X)Tcy=(655

11、36-X)* *TcyTcy 【例例6.2-26.2-2】声音报警。声音报警。(1)(1)计算计数初值。欲产生周期为计算计数初值。欲产生周期为1000s1000s的等宽方波的等宽方波脉冲,只需在脉冲,只需在P1.7P1.7端交替输出端交替输出500s500s的高低电平即可,的高低电平即可,因此定时时间应为因此定时时间应为500s500s。设计数初值为。设计数初值为X X,则有:,则有:(216-X216-X)2 210-6=50010-6=50010-610-6X=65536-500=65036X=65536-500=65036FE0CHFE0CH将将X X的低的低8 8位位0CH0CH写入写

12、入TL1TL1,将,将NN的高的高8 8位位FEHFEH写入写入TH1TH1。(2)TMOD(2)TMOD初始化。题目要求定时器初始化。题目要求定时器/ /计数器计数器1 1为工作为工作方式,所以方式,所以M1M0=01M1M0=01;为实现定时功能应使;为实现定时功能应使C/=0C/=0;为实现定时器内启动,应使为实现定时器内启动,应使GATE=0GATE=0。此题目不涉及。此题目不涉及定时器定时器/ /计数器计数器0 0,为方便起见,设其各控制位均为,为方便起见,设其各控制位均为0 0。则工作方式控制寄存器则工作方式控制寄存器TMOD=10HTMOD=10H。(3)(3)启动和停止控制。因

13、为定时器启动和停止控制。因为定时器/ /计数器计数器1 1为内启动,为内启动,故当故当TR1=1TR1=1时,启动计数;当时,启动计数;当TR1=0TR1=0时,停止计数。时,停止计数。(4)(4)中断的开放中断的开放/ /禁止。题目中要求用查询方式检查禁止。题目中要求用查询方式检查T1T1的计数溢出状态,故设置的计数溢出状态,故设置IE=00HIE=00H,以关中断。,以关中断。ORG 0000H ORG 0000H ; ;在在0000H0000H单元存放转移指令单元存放转移指令LJMP START LJMP START ; ;转移到主程序转移到主程序ORG 0100H ORG 0100H

14、; ;主程序从主程序从0100H0100H开始开始START:MOV TCON,#00H START:MOV TCON,#00H MOV TMOD,#10H MOV TMOD,#10H ; ;工作方式工作方式1 1设定设定 MOV TH1,#0FEH MOV TH1,#0FEH MOV TL1,#0CHMOV TL1,#0CH MOV IE,#00H MOV IE,#00H ; ;关中断关中断 SETB TR1 SETB TR1 ; ;启动计数器启动计数器1 1LOOP0:JBC TF1,LOOP1 LOOP0:JBC TF1,LOOP1 ; ;查询是否溢出查询是否溢出 SJMP LOOP0S

15、JMP LOOP0; ;无溢出,查询等待无溢出,查询等待LOOP1:CLR TF1LOOP1:CLR TF1MOV TH1,#0FEH MOV TH1,#0FEH ; ;重设初值重设初值 MOV TL1,#0CHMOV TL1,#0CH CPL P1.7 CPL P1.7 ; ;输出取反输出取反 SJMP LOOP0SJMP LOOP0; ;返回状态查询返回状态查询ENDEND 6.2.36.2.3定时定时/ /计数器工作方式计数器工作方式2 2 M1M0=10M1M0=101 1256256工作在方式下,计数器的计数值由下式确定:工作在方式下,计数器的计数值由下式确定: 2 28 8-X=2

16、56-X-X=256-X 计数范围为计数范围为: : 1 1256256 定时准确定时准确定时器的定时值由下式确定:定时器的定时值由下式确定: T=NT=N* *Tcy=(256-X)Tcy=(256-X)* *TcyTcy 【例例6.2-36.2-3】数字秒表。利用单片机数字秒表。利用单片机定时定时0-90-9秒,一位数码管显示。秒,一位数码管显示。计算计数初值计算计数初值X, X, 定时定时250us250us(28-X28-X)1 110-6=25010-6=25010-610-6 X=6=06H X=6=06HTMODTMOD初始化。工作方式初始化。工作方式2 2时,时,M1M0=10

17、M1M0=10,实现,实现定时功能定时功能C/=0C/=0,内启动,内启动,GATE=0GATE=0。定时器。定时器1 1不用,不用,无关位设定为无关位设定为0 0,可得,可得TMOD=02HTMOD=02H。启动和停止定时器。启动:启动和停止定时器。启动:TR0=1TR0=1,停止:,停止:TR0=0TR0=0。中断的开放中断的开放/ /禁止。设置禁止。设置EA=0, ET0=0EA=0, ET0=0,以禁止,以禁止T0T0中断。中断。ORG 0000HORG 0000H; ;在在0000H0000H单元存放转移指令单元存放转移指令LJMP STARTLJMP START; ;转移到主程序转

18、移到主程序 ORG 000BH ORG 000BH; ;定时器定时器/ /计数器计数器T0T0入口地址入口地址 LJMP TIMER0 LJMP TIMER0; ;转移到中断服务程序转移到中断服务程序 ORG 0030H ORG 0030H; ;主程序从主程序从0030H0030H开始开始START: MOV SP,#5FHSTART: MOV SP,#5FH ; ;重置堆栈重置堆栈MOV TCON,#00HMOV TCON,#00H; ;清清T0T0溢出标志,停止溢出标志,停止计数计数MOV TMOD,#02HMOV TMOD,#02H;T0;T0定时方式定时方式1 1MOV TH0,#06

19、HMOV TH0,#06H;T0;T0计数初值计数初值,50ms,50msMOV TL0,#06HMOV TL0,#06HMOV IE,#82HMOV IE,#82H;cpu;cpu、T0T0中断开放中断开放MOV R4,#200MOV R4,#200;50ms;50ms循环次数循环次数MOV R1,#20 MOV R1,#20 ;1;1秒秒MOV R0,#00MOV R0,#00; ;数码管显示的初值数码管显示的初值SETB TR0SETB TR0; ;启动启动T0T0定时定时 MAIN: LCALL DISDPMAIN: LCALL DISDP; ;调用显示程序调用显示程序 SJMP MA

20、IN SJMP MAIN; ;返回到返回到mainmain主程序主程序DISDP: MOV A,R0DISDP: MOV A,R0;R0;R0的值存放在的值存放在A A中中MOV DPTR,#TABMOV DPTR,#TAB; ;置共阳字段码表首址置共阳字段码表首址 MOVC A,A+DPTR MOVC A,A+DPTR; ;查段码表查段码表MOV P2,AMOV P2,A; ;在在P2P2口输出显示代码口输出显示代码 RET RET; ;子程序返回子程序返回TIMER0: PUSH ACCTIMER0: PUSH ACC; ;保护现场保护现场 PUSH PSW PUSH PSWDJNZ R4

21、,EXITDJNZ R4,EXIT; ;判断是否到了判断是否到了1 1秒秒MOV R4,#200MOV R4,#200; ;重新赋值初值重新赋值初值DJNZ R1,EXITDJNZ R1,EXITMOV R1,#20MOV R1,#20INC R0INC R0 CJNE R0,#0AH,EXIT CJNE R0,#0AH,EXIT; ;判断是否到了第判断是否到了第9 9秒秒 MOV R0,#00H MOV R0,#00H; ;重新开始计时显示重新开始计时显示EXIT: POP PSWEXIT: POP PSW; ;恢复现场恢复现场 POP ACC POP ACC RETI RETI; ;中断程

22、序返回中断程序返回TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ; 0 1 2 3 4 5 6 ; 0 1 2 3 4 5 6 7 7 对应内容对应内容 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ; 8 9 A B C D E F ; 8 9 A B C D E FEND ;END ;汇编结束汇编结束6.2.6.2.定时定时/ /计数器工作方式计数器工作方式

23、 功能多功能多波波特特率率发发生生器器【例例6.2-46.2-4】假设有一个用户系统,已经使用了两个假设有一个用户系统,已经使用了两个外部中断源外部中断源, , 并置定时器并置定时器 T1T1于方式于方式2, 2, 作串行口波特率作串行口波特率发生器用(计数初值为发生器用(计数初值为0FDH0FDH)。现要求再增加一个)。现要求再增加一个外部中断源外部中断源, , 中断一次,计数器加一,数码管显示;中断一次,计数器加一,数码管显示;并由并由P0.4 P0.4 口输出一个口输出一个5kHz5kHz的方波,设晶振频率为的方波,设晶振频率为 6 6 MHzMHz。(1)(1)计算计数初值计算计数初值

24、由由P0.4P0.4输出输出5kHz5kHz的方波(周期为的方波(周期为200s200s),即每隔),即每隔100s100s使使P0.4P0.4的电平发生一次变化。设的电平发生一次变化。设TH0TH0的初始值的初始值为为X X,则有:,则有:(28-X28-X)2 210-6=10010-6=10010-610-6X=256-100/2=206X=256-100/2=206。引脚引脚T0T0端作扩展的外部中断输入端,故端作扩展的外部中断输入端,故TL0=0FFHTL0=0FFH。T1T1工作于定时方式工作于定时方式2, 2, 作串行口波特率发生器,初值作串行口波特率发生器,初值为为0FDH0F

25、DH,故,故TL1=TH1=0FDHTL1=TH1=0FDH。(2)TMOD(2)TMOD初始化初始化定时器定时器/ /计数器计数器1 1工作于定时方式工作于定时方式2 2,M1M0=10M1M0=10,作波特率发生,作波特率发生器,启动后自动运行。但器,启动后自动运行。但TH0TH0作定时器,作定时器,C/=0C/=0,TH0TH0内启动,内启动,GATE=0GATE=0,TH0TH0的启动、停止由的启动、停止由TR1TR1控制。控制。定时器定时器/ /计数器计数器0 0工作于方式工作于方式3 3,M1M0=11M1M0=11,TL0TL0计数方式,计数方式,C/=1C/=1,内部启动,内部

26、启动,GATE=0GATE=0。TL0TL0的启动、停止由的启动、停止由TR0TR0控制。控制。综上可得综上可得TMOD=27HTMOD=27H。(3)(3)启动和停止定时器启动和停止定时器因为因为TL0TL0作内部启动计数器,故设作内部启动计数器,故设TR0=1,TR0=1,当当T0T0引脚有下降沿时,引脚有下降沿时,计数器加计数器加1 1。因为因为TH0TH0作内部启动定时器,故当作内部启动定时器,故当TR1=1TR1=1时,定时开始。时,定时开始。定时器定时器/ /计数器计数器1 1作波特率发生器,对机器周期计数,机器启动后作波特率发生器,对机器周期计数,机器启动后就开始工作。就开始工作

27、。综上可得综上可得TCON=50HTCON=50H。(4)(4)中断的开放中断的开放/ /禁止禁止设置设置IE=9FH, IE=9FH, 开放所有中断。中断响应一次,计数器加一,并开放所有中断。中断响应一次,计数器加一,并通过通过P2P2口驱动数码管显示计数值。口驱动数码管显示计数值。ORG 0000H ORG 0000H ; ;在在0000H0000H单元存放转移指令单元存放转移指令LJMP START LJMP START ; ;转移到主程序转移到主程序ORG 000BH ORG 000BH ; ;计数计数/ /定时器定时器T0T0的中断入口地址的中断入口地址LJMP TL0INT LJM

28、P TL0INT ; ;转到中断服务程序转到中断服务程序TH0INTTH0INTORG 001BH ORG 001BH ; ;计数计数/ /定时器定时器T1T1的中断入口地址的中断入口地址LJMP TH0INT LJMP TH0INT ; ;转到中断服务程序转到中断服务程序TL0INTTL0INTORG 0100H ORG 0100H ; ;主程序从主程序从0100H0100H开始开始START:MOV R0,#00HSTART:MOV R0,#00HMOV TL0, #0FFH MOV TL0, #0FFH ;T0;T0(P3.4P3.4)做扩展中断源)做扩展中断源 MOV TH0, #20

29、6 MOV TH0, #206 ; ;送定时送定时100s100s的初值的初值 MOV TL1, #0FDH MOV TL1, #0FDH ; ;波特率常数设置波特率常数设置 MOV TH1, #0FDHMOV TH1, #0FDHMOV TMOD, #27H MOV TMOD, #27H ; ;置置T0T0方式方式3,TL03,TL0计数器;计数器;TH0TH0定时器定时器 MOV TCON, #50H MOV TCON, #50H ; ;启动定时器启动定时器T0T0、T1T1MOV IE, #9FH MOV IE, #9FH ; ;开放全部中断开放全部中断LOOP1:LCALL DISPA

30、LYLOOP1:LCALL DISPALY; ;调用显示程序调用显示程序LJMP LOOP1LJMP LOOP1; ;循环等待循环等待ORG 0200H ORG 0200H ;TL0;TL0中断服务程序中断服务程序TL0INT:MOV TL0,#0FFH TL0INT:MOV TL0,#0FFH ; ;中断响应后重新设置初值中断响应后重新设置初值INC R0INC R0; ;显示的变量显示的变量RETIRETI; ;中断返回中断返回ORG 0300H ORG 0300H ;TH0;TH0中断服务程序,处理中断服务程序,处理5kHz5kHz方方波波TH0INT:MOV TH0,#206 TH0I

31、NT:MOV TH0,#206 ; ;中断响应后重新设置初值中断响应后重新设置初值 CPL P0.4 CPL P0.4 ;P0.4;P0.4口取反口取反RETI RETI ; ;中断返回中断返回DISPALY:MOV DPTR,#LABDISPALY:MOV DPTR,#LAB; ;置共阳字段码表首址置共阳字段码表首址MOV A,R0MOV A,R0;R0;R0中的值存入中的值存入A A中中MOVC A,A+DPTRMOVC A,A+DPTR; ;查段码表查段码表MOV P2,AMOV P2,A; ;在在P2P2口输出显示代码口输出显示代码LCALL DELAYLCALL DELAY; ;调用

32、延时程序调用延时程序RETRETDELAY:MOV R5,#10DELAY:MOV R5,#10; ;延时程序延时程序DELAY1:MOV R6,#1DELAY1:MOV R6,#1DELAY2:MOV R7,#20DELAY2:MOV R7,#20DJNZ R7,$DJNZ R7,$DJNZ R6,DELAY2DJNZ R6,DELAY2DJNZ R5,DELAY1DJNZ R5,DELAY1RETRETLAB:DB LAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;段段码表码

33、表 ; 0 1 ; 0 1 2 3 4 5 6 8 2 3 4 5 6 8 对应内容对应内容 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EHDB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ; 8 9 A B C D E F ; 8 9 A B C D E FEND END 在使用定时在使用定时/ /计数器时,应做好计数器时,应做好4件事:设置设置TMODTMOD以选择工作方式;以选择工作方式;计算并设置计数初值计算并设置计数初值THX,TLXTHX,TLX;设置设置IEIE、IPIP以规定中断的开放以规定中断的开放/ /禁止及优先级;禁止及优

34、先级;设置设置TCONTCON以启动以启动/ /停止定时停止定时/ /计数器的工作计数器的工作。总结总结6.46.4全自动洗衣机定时控制全自动洗衣机定时控制ProteusProteus仿真仿真洗衣机中所需的定时功能并不复杂,可以利用单片机洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。设洗衣机有三段定时时间,提供的定时器方便实现。设洗衣机有三段定时时间,分别为:进水阶段定时分别为:进水阶段定时2 2秒,洗涤阶段定时秒,洗涤阶段定时4 4秒,甩干秒,甩干阶段定时阶段定时2 2秒。并分别用三个秒。并分别用三个LEDLED发光二极管表示进发光二极管表示进水、洗涤、甩干三个环节的工

35、作状态。其中如果发光水、洗涤、甩干三个环节的工作状态。其中如果发光二极管二极管A A亮,表示进水工作正在进行;发光二极管亮,表示进水工作正在进行;发光二极管B B亮,亮,表示洗涤工作正在进行;发光二极管表示洗涤工作正在进行;发光二极管C C亮,表示甩干亮,表示甩干工作正在进行。发光二极管熄灭时,说明相应的定时工作正在进行。发光二极管熄灭时,说明相应的定时已到,工作停止。图已到,工作停止。图5-75-7给出了给出了ProteusProteus仿真电路图。仿真电路图。图图5-65-6中,中,S S表示洗衣机启动开关,开关表示洗衣机启动开关,开关按下洗衣机开始工作。首先是进水定时按下洗衣机开始工作。

36、首先是进水定时控制,表示正在进水的控制,表示正在进水的LEDLED发光二极管发光二极管A A点亮。当进水控制的定时时间到时,点亮。当进水控制的定时时间到时,进水工作停止,发光二极管进水工作停止,发光二极管A A灭灯;接灭灯;接着开始洗涤工作定时,发光二极管着开始洗涤工作定时,发光二极管B B点点亮;洗涤工作结束后,开始甩干工作定亮;洗涤工作结束后,开始甩干工作定时,发光二极管时,发光二极管C C点亮。当洗衣功能结点亮。当洗衣功能结束时,三个指示灯都熄灭,表示洗衣工束时,三个指示灯都熄灭,表示洗衣工作结束,并接通蜂鸣器作结束,并接通蜂鸣器LS1LS1鸣声提醒。鸣声提醒。汇编语言参考程序汇编语言参

37、考程序ORG 0000H ORG 0000H ; ;在在0000H0000H单元存放转移指令单元存放转移指令 LJMP MAIN LJMP MAIN ; ;转移到主程序转移到主程序ORG 000BH ORG 000BH ; ;计数计数/ /定时器定时器T0T0的中断入口地址的中断入口地址LJMP Time0 LJMP Time0 ; ;转到中断子程序转到中断子程序Time0Time0ORG 0100H ORG 0100H ; ;主程序从主程序从0100H0100H开始开始MAIN: JB P2.0,MAIN ;MAIN: JB P2.0,MAIN ;判按键是否按下判按键是否按下 LACLL D

38、ISPLY ;LACLL DISPLY ;有键按下,延时去抖动有键按下,延时去抖动 JB P2.0,MAIN JB P2.0,MAIN ; ;再判有键按下再判有键按下 MOV P1,#0EH MOV P1,#0EH ; ;确定键按下,确定键按下,A A灯亮,开始放水灯亮,开始放水定时定时 MOV R0,#00H MOV R0,#00H ;R0;R0放放3 3个阶段的工作标志个阶段的工作标志 MOV R1,#00H MOV R1,#00H ; ;R1R1放定时器的中断计数放定时器的中断计数 SETB EA SETB EA ; ;开中断总开关开中断总开关 SETB ET0 SETB ET0 ; ;

39、开定时器开定时器T0T0的中断开关的中断开关 MOV TMOD,#01H MOV TMOD,#01H ; ;设定时器设定时器T0T0工作方式工作方式1 1 MOV TH0,#3CH MOV TH0,#3CH ; ;定时定时50ms50ms高高8 8位初值位初值 MOV TL0,#0B0H MOV TL0,#0B0H ; ;定时定时50ms50ms低低8 8位初值位初值 SETB TR0 SETB TR0 ; ;允许计数允许计数 SIMP $ SIMP $ ; ;循环等待循环等待Time0: Time0: ; ;定时器定时器T0T0中断子程序中断子程序 CJNE R0,#00H,L1 CJNE

40、R0,#00H,L1 ; ;若若R0=0R0=0,执行第,执行第1 1阶段定时(放水功能)阶段定时(放水功能) INC R1 INC R1 ;R1;R1内容加内容加1 1 CJNE R1,#40,L4 ; CJNE R1,#40,L4 ;若累计满若累计满4040次,即计时满次,即计时满2s2s MOV P1,#0DH MOV P1,#0DH ;A;A灯灭,结束放水,灯灭,结束放水,B B灯亮,开始洗涤灯亮,开始洗涤 MOV R1,#00H MOV R1,#00H ;R1;R1内容清内容清0 0,重新从,重新从0 0开始计数开始计数 INC R0 INC R0 ;R0;R0内容加内容加1 1,准

41、备第,准备第2 2阶段的定时阶段的定时 SJMP L4 SJMP L4 ; ;转转L4L4,送初值,中断返回,送初值,中断返回L1: CJNE R0,#01H,L2 L1: CJNE R0,#01H,L2 ; ;若若R0=1R0=1,执行第,执行第2 2阶段定时(洗涤阶段定时(洗涤功能)功能) INC R1 INC R1 ;R1;R1内容加内容加1 1 CJNE R1,#80,L4 CJNE R1,#80,L4 ; ;若累计满若累计满8080次,即计时满次,即计时满4s4s MOV P1,#0BH MOV P1,#0BH ;B ;B灯灭,结束洗涤,灯灭,结束洗涤,C C灯亮,开始甩干灯亮,开始

42、甩干 MOV R1,#00H MOV R1,#00H ;R1;R1内容清内容清0 0,重新从,重新从0 0开始计数开始计数 INC R0 INC R0 ;R0;R0内容加内容加1 1,准备第,准备第3 3阶段的定时阶段的定时SJMP L4 SJMP L4 ; ;转转L4L4,送初值,中断返回,送初值,中断返回L2: CJNE R0,#02H,L3 ;L2: CJNE R0,#02H,L3 ;若若R0=2R0=2,执行第,执行第3 3阶段定时(甩干功能)阶段定时(甩干功能) INC R1 INC R1 ;R1;R1内容加内容加1 1 CJNE R1,#40,L4 CJNE R1,#40,L4 ;

43、 ;若累计满若累计满4040次,即计时满次,即计时满2s2s MOV R1,#00H MOV R1,#00H ; ;将将CountorCountor清清0 0,重新从,重新从0 0开始计数开始计数 INC R0 INC R0 ;R0;R0内容加内容加1 1,准备第,准备第4 4阶段的工作阶段的工作L3: MOV P1,#07H L3: MOV P1,#07H ; ;灯全灭,洗衣机结束工作灯全灭,洗衣机结束工作 CPL P3.7 CPL P3.7 ; ;蜂鸣器提醒蜂鸣器提醒L4: MOV TH0,#3CH ;L4: MOV TH0,#3CH ;定时器定时器T 1T 1的高的高8 8位重新赋初值位重新赋初值 MOV TL0,#0B0H MOV TL0,#0B0H ; ; 定时器定时器T1T1的低的低8 8位重新赋初值位重新赋初值 RETI RETI ; ;中断返回中断返回ENDEND单片机音乐单片机音乐 声音的频谱范围为声音的频谱范围为20Hz-200KHz20Hz-200KHz,人的耳朵,人的耳朵能辨别的声音频率大概在能辨别的声音频率大概在200Hz-20KHz200Hz-20KHz。音符音符 1 2 3 4 5 6 71 2 3 4 5 6 7节拍节拍

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论