单片机定时器实验
单片机定时器实验报告

一、实验目的1. 理解单片机定时器的工作原理和功能。
2. 掌握单片机定时器的编程方法,包括初始化、设置定时时间、启动定时器等。
3. 学会使用定时器实现定时功能,并通过实验验证其效果。
二、实验器材1. 单片机实验板2. 连接线3. 51单片机4. 计时器5. 示波器6. 电脑7. Keil软件三、实验原理定时器是单片机的一种重要外设,用于实现定时功能。
51单片机内部有两个定时器,分别为定时器0和定时器1。
定时器的工作原理是通过定时器计数器对机器周期进行计数,当计数器达到设定值时,定时器溢出,并产生中断请求。
定时器0和定时器1都具有四种工作模式,分别为:1. 模式0:13位定时器/计数器2. 模式1:16位定时器/计数器3. 模式2:8位自动重装模式4. 模式3:两个8位计数器本实验采用定时器0工作在模式1,实现50ms的定时功能。
四、实验步骤1. 将单片机实验板连接到电脑,并启动Keil软件。
2. 创建一个新的项目,并添加51单片机头文件(reg51.h)。
3. 编写定时器初始化函数,设置定时器0工作在模式1,并设置定时时间为50ms。
4. 编写定时器中断服务函数,用于处理定时器溢出事件。
5. 编写主函数,设置定时器中断,并启动定时器。
6. 编译并下载程序到单片机实验板。
7. 使用示波器观察定时器0的溢出信号。
五、实验代码```c#include <reg51.h>#define TIMER0_MODE1 0x01// 定时器0初始化函数void Timer0_Init() {TMOD &= 0xF0; // 清除定时器0模式位TMOD |= TIMER0_MODE1; // 设置定时器0工作在模式1TH0 = 0xFC; // 设置定时器0高8位初值TL0 = 0x18; // 设置定时器0低8位初值ET0 = 1; // 开启定时器0中断EA = 1; // 开启总中断TR0 = 1; // 启动定时器0}// 定时器0中断服务函数void Timer0_ISR() interrupt 1 {TH0 = 0xFC; // 重新加载定时器0高8位初值TL0 = 0x18; // 重新加载定时器0低8位初值// ... (其他处理)}void main() {Timer0_Init(); // 初始化定时器0while(1) {// ... (其他处理)}}```六、实验结果与分析1. 编译并下载程序到单片机实验板,使用示波器观察定时器0的溢出信号,可以看到定时器0每隔50ms产生一个溢出信号。
单片机定时器仿真实验

定时 / 计数器1
定时 / 计数器0
M1,M0——操作方式选择位;
M1M0=00——13位计数器; M1M0=01——16位计数器; M1M0=10——自动再装入8位计数器; M1M0=11 ——T0分成两个8位计数器;T1无效
元件名称 所属类 所属子类
AT89C51
CAP CAP-ELEC
Microprocessor ICs
Capacitors Capacitors
8051 Family
Generic Generic
CRYSTAL
RES LED-BLUE SWITCH
5 年3月 2013
Miscellaneous
Resistors Active Active
PT0=0——定时器/计数器中断低优先级; PT0=1——定时器/计数器中断高优先级;
PT1—— 定时中断1优先级设定位;
PT1=0——定时器/计数器中断低优先级; PT1=1——定时器/计数器中断高优先级。
2 年3月 2013
2006-2-10
传感器原理与应用
51系列单片机定时器/计数器实验Proteus仿真
(1)中断允许寄存器IE (地址为A8H )
位地址 位符号
AF EA
AE -
AD -
AC AB ES ET1
AA EX1
A9 ET0
A8 EX0
EA—— 中断允许总控制位;
EA=0—— 中断总禁止,禁止所有中断; EA=1—— 中断总允许; ET0=0——禁止定时器/计数器中断; ET0=1——允许定时器/计数器中断; ET1=0——禁止定时器/计数器中断; ET1=1——允许定时器/计数器中断。
单片机定时器实验原理

单片机定时器实验原理一、概述单片机定时器是单片机的重要组成部分,它能够实现定时控制、时间间隔生成等功能。
通过单片机定时器实验,可以更好地了解单片机的内部结构和工作原理,为进一步开发单片机应用系统打下坚实的基础。
二、实验目的1. 掌握单片机定时器的结构和原理。
2. 学会使用单片机定时器进行时间间隔控制。
3. 了解单片机定时器的应用范围和限制。
三、实验原理1. 单片机定时器的结构单片机定时器通常由一个计数器和一个控制逻辑组成。
计数器负责记录脉冲数,控制逻辑负责控制计数器的计数和复位。
单片机定时器通常采用可编程计数脉冲,可以实现任意时间间隔的生成。
2. 单片机定时器的原理单片机定时器的工作原理是基于计数器的计数。
当单片机接收到一个启动信号时,计数器开始计数,当计数达到预设的时间间隔时,单片机输出相应的信号或执行相应的操作。
通过改变计数器的预设值,可以改变时间间隔的长短。
3. 单片机定时器的应用单片机定时器在许多领域都有应用,如智能家居、工业控制、通信设备等。
在智能家居中,可以通过单片机定时器控制家电设备的开启和关闭;在工业控制中,可以通过单片机定时器实现生产线的自动化控制;在通信设备中,可以通过单片机定时器实现时间戳的生成和数据传输的时间控制。
四、实验步骤1. 准备实验器材和软件环境,包括单片机、定时器芯片、编程器、开发板等。
2. 连接实验设备,并调试确保连接正常。
3. 编写实验程序,并上传到单片机中。
4. 观察并记录实验结果,分析误差原因。
5. 根据实验结果,调整程序参数,进行多次实验,直到达到满意的效果。
五、实验注意事项1. 实验过程中要保持设备连接的稳定性,避免意外断开。
2. 编程和调试过程中要确保程序正确,避免误操作导致设备损坏。
3. 注意观察实验现象,及时记录实验数据,分析实验结果。
4. 实验结束后,要清理实验现场,确保设备复位。
六、实验结果分析通过实验,我们能够得到较为准确的时间间隔控制结果。
单片机定时计数器实验

实验结果图
原程序
打开开关,小灯依次亮
修改一
修改二
利用开关。
修改三
小灯每隔200us亮依次
修改四
七、心得体会
通过这次实验,我学会了计数器的使用方法。学会了计数器程序的编写,定时器的使用方法和定时器程序的编写。做完这次实验后,我熟练了对修改程序的修改,掌握了各种语句的作用,通过修改程序得到了实验结果。
2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转
三、实验仪器和条件
计算机
伟福实验箱(lab2000P)
四、实验内容与软件流程图
实验3-1 、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。
、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。
实验三单片机定时/计数器实验
一、实验目的
1、学习计数器的使用方法。
2、学习计数器程序的器程序的编写。
5、熟悉汇编语言
二、实验说明
1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。
、流程图
、实验电路及连线
实验3-2 、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转
、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
单片机实验之定时器计数器应用实验二

、实验目的1 、掌握定时器/计数器计数功能的使用方法。
2 、掌握定时器/计数器的中断、查询使用方法。
3 、掌握Proteus 软件与Keil 软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
、设计要求1 、用Proteus 软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满 100个脉冲,则取反P1.0 口线状态,在P 1.0 口线上接示波器观察波形。
2、用Proteus 软件画出电路原理图,单片机的定时器/计数器以中断方式工 作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满 200个脉冲, 则取反P1.0 口线状态,在P 1.0 口线上接示波器观察波形。
通过本实验弄清楚了定时/计数器计数功能的初始化设定(TMOD 初值的计 算,被计数信号的输入点等等),掌握了查询和中断工作方式的应用。
七、思考题1、利用定时器0,在P1.0 口线上产生周期为200微秒的连续方波,利用定 时器1,对P1.0 口线上波形进行计数,满50个,则取反P1.1 口线状态,在P 1.1 口线上接示波器观察波形。
tJI-JTTALlRSTIPO 1 Z^Cil POiPD 3/jfiD3 IPCLW/MH FD-5/^CB”血P2 O/jtS PNUMa P 2 .2/AJOPI F3JD/RKDP1 且1门池F1 2P1 .3P3^/|NT1 卩11 .4P3.4Z1D P1.5 P3 .5fT1 尸1P3.0AA/RP1I.7 P3.?/RD17三、电路原理图 18HQAT69C52P 2 .4/A12P2 5/A13 P2P2 .7XA1«5蝕丘2Q 37答:程序见程序清单四、实验程序流程框图和程序清单1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数,MAIN: MOV IE, #00HMOV TMOD, #60H MOV TH1, #9CH MOV TL1, #9CH SETB TR1LOOP: JNB TF1, LOOP CLRTF1 CPL P1.0 AJMP LOOP ENDC 语言程序:#in elude <reg52.h> sbit Y=P1A0; void mai n() {EA=0; ET1=0; TMOD=0x60;TH1=0x9C;计数数值初始化中断断 艙化!l[启动 =时器1 器一、r动 启N箱 * 1溢断清计数溢出标志—1 ~ P1.(口线取反TL 仁 0x9C; while(1) { TR1=1; while(!TF1); TF1=0; Y=!Y; } }2、定时器/计数器以中断方式工作,对外部连续周期性脉冲信号进行计数, 每计满200个脉冲,则取反P1.0 口线状态。
单片机定时器实验报告

单片机定时器实验报告篇一:单片机实验报告——定时器实验四定时器实验自动化121班 36 张礼一.实验目的掌握定时器的工作原理及四种工作方式,掌握定时器计数初始值的计算,掌握如何对定时器进行初始化,以及程序中如何使用定时器进行定时。
二.实验仪器单片机开发板一套,计算机一台。
三.实验任务编写程序,使用单片机开发板上8位共阴极数码管的其中一位来显示0~9这九个字符,先从“0”开始显示,数字依次递增,当显示完“9”这个字符后,又从“0”开始显示,循环往复,每1秒钟变换一个字符,1秒钟的定时时间必须由定时器T0(或T1)提供。
开发板上的8位共阴极数码管与单片机的输入输出端口P1的硬件接线如图4-1所示,单片机P1口的8条数据线通过J3端子同时连接到 2片74HC573D锁存器的输入端,数码管的各个同名端分别连接后再与锁存器U2的8个输出端相连,每一位数码管的位选端分别与锁存器U3的8个输出端相连。
两片锁存器的输出使能端OE都恒接地,使得锁存器的内部数据保持器输出端与锁存器的输出端保持接通。
而U2的锁存使能端LE由P2.1控制,所以P2.1是段锁存;U3的锁存使能端LE由P2.0控制,所以P2.0是位锁存。
当锁存使能端为“1”时,则锁存器输入端的数据传送到输出端;当锁存使能端为“0”时,锁存器输入端的数据则不能传送到输出端;因此段码和位码通过锁存器分时输出。
汇编语言程序流程如图4-2:四.实验步骤:1.数码管的0~9的字型码表如下:2.参考图4-2所给的程序流程图编写实验程序。
(注:以下程序为两位60秒计数程序)#include sbit wei=P2^0; sbit duan=P2^1;char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int i,j,k,num,shi,ge; void delay(int a) {for(i=0;i void display(int shi,int ge){wei=1;P1=0xfe;wei=0;duan=1;P1=table[shi];duan=0;wei=1; delay(5);P1=0xfd;wei=0; duan=1;P1=table[ge];duan=0; }void main() {TMOD=0x01;TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1; num=0; while(1) {delay(5);display(shi,ge); } }void T0_time() interrupt 1 {TH0=(65536-45872)/256; TL0=(65536-45872)%256; k++; if(k==20) { k=0; num++;if(num==60)num=0; shi=num/10; ge=num%10; } }3.实验接线,如图4-1。
单片机实验四-定时器和中断的应用实验(1)

实验四定时器和中断应用实验一、实验目的1. 学习定时器的编程和使用2.学习中断的使用方法二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。
三、实验内容及步骤1.使用单片机最小应用系统。
用八位数据线连接单片机P1口JD2F与八位逻辑电平显示模块JD3I,打开相关模块电源。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到单片机最小系统的锁紧插座中,请注意仿真器的方向:缺口朝上。
打开单片机最小应用系统的电源开关。
3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,编制源程序,进行编译,直到编译无误。
4.进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。
5.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。
实验1用导线分别把单片机最小应用系统的 P1.1接拨断开关K0,P1.0接发光二极管L0。
采用定时中断处理方式,通过拨断开关K0控制二个不同占空比的脉冲信号输出,即当K0=0时,从P1.0输出周期为1秒占空比为50%的方波、当K0=1时,从P1.0输出周期为1秒占空比为20%的方波。
实验2用导线将实验箱上的单次脉冲源的负脉冲信号接到单片机最小应用系统的INT0( P3.2)输入引脚,模拟中断请求脉冲输入信号,P1.0接发光二极管L0。
程序响应中断请求执行中断服务程序使发光二极管L0闪烁3次,这样每输入一个中断请求脉冲(即按下单次脉冲源按钮),使发光二极管L0闪烁3次要求同学自己思考:修改实验2程序,每输入一个中断请求脉冲(即按下单次脉冲源按钮),使P1口连接的8个发光二极管从右到左(L0到L7)循环点亮一次(每个发光二极管闪烁3次)。
再按下单次脉冲源按钮,重复上述过程。
实验3用导线将拨断开关K0接到单片机最小应用系统的INT1( P3.3)输入引脚,并将开关K0拨在低电平位置K0=0。
单片机定时器及外部中断实验报告

单片机实验报告(二)实验名称:定时器及外部中断*名:**学号:*********班级:通信2班时间:2013.11南京理工大学紫金学院电光系一、实验目的1、学习定时/计数器的应用;2、学习外部中断技术的基本使用方法;3、学习中断处理程序的编程方法。
二、实验原理(1)以P1口作为输出口,定时器实现1s定时,实现显示数的1s加1,外部中断0键盘外接BUTTON,实现对显示数快速加1的控制。
(2)系统板上硬件连线把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。
把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上;三、实验内容利用定时器中断控制1s的输出,使用外部中断0使得显示的数加1. 程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(){uint x,y;for(x=100;x>0;x--)for(y=110;y>0;y--);}uchar m,flag;void main(){uchar a,b;TMOD=0x01;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EX0=1; EX1=1; PX1=1; ET0=1; EA=1; 中断开启TR0=1;m=0; P1=0;while(1){while(flag==0); flag=0;if(m==100) m=0;m++;a=m/10;b=m+a*6;P1=b;}}void timer0() interrupt 1 using 0{uchar t;TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(t<20) t++;else { flag=1; t=0; }}void exter0() interrupt 0 using 1{if(INT0==0) delay();if(INT0==0) flag=1;}void exter1() interrupt 2 using 2{if(INT1==0) delay();if(INT1==0) m=0;}将编译好的程序下载到仿真电路中四、小结与体会通过本次定时器中断实验,我对定时器的工作原理有了更加深入的理解,这也是建立在向同学请教的基础上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机定时器实验实验三单片机内部定时器应用实验目的1、理解单片机内部定时器的工作原理及使用方法2、了解单片机定时中断程序的编写和调试方法3、掌握定时器的基本使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、单片机定时器的工原理MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。
它们即可用作定时器方式,又可用作计数器方式。
其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。
工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。
故系统晶振频率直接影响定时时间。
如果晶振频率为图4-8 定时控制寄存器数据格式编写程序控制这两个寄存器就可以控制定时器的运行方式。
单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD设置;(3)然后启动计数,即对TR0或TR1置1。
(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。
2、用定时器编写一个秒计时器假设系统使用的晶振频率为12MH Z,即每个机器周期为1us。
如使用方式1,则定时时间最长是216×1us=65536us=65.536ms,小于1s。
故必须设置一个软件计数单元,即假设定时器定时中断时间为50ms,则必须定时中断20次才达到1s并对秒计时单元加1,20即为软件计数次数。
最后再把秒计时单元的值转成显示数码送显示缓冲区。
图4-9 定时器应用程序流程图实验内容1、单片机定时器秒计时器LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0; 定时器中断中断保护现场 恢复现场 软件计秒计时器加Y N主程初始化中断控制器,定启动定时器调用显示程DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256 MOV TL0,#(65535-TIMECOUNT)MOD 256 SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T02MOV timetick,#20 INC second; cjne second,#60,P_T01 ; MOV SECOND,#0; inc minute;P_T01: M OV A,second MOV B,#100DIV ABMOV R0,#dispbuf+2 MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BP_T02: C LR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0MOVTH0,#(65535-TIMECOUNT)/256;3CAFMOV TL0,#(65535-TIMECOUNT)MOD 256; MOV TMOD,#01H;设定定时器的工作方式SETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbuf CLR LEDCLKCLR LEDDINNOPDISP1: S ETB LEDCLK MOV A,@R0MOV DPTR,#LEDTAB MOVC A,@A+DPTR MOV LEDDATA,A; MOV R7,#5ACALL DelayNms INC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1 RET; 大延时DelayNms:D1: ACALL Delay1ms DJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB:DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND2、修改上面的程序,设计一个N秒倒计时器(N 为学号后两位)。
倒计时时间到后,重新开始计时。
LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030H;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256 MOV TL0,#(65535-TIMECOUNT)MOD 256 SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T01MOV timetick,#20dec secondMOV A,secondCJNE A,#00,P_T01 MOV SECOND,#33P_T01: M OV A,second MOV B,#100DIV ABMOV R0,#dispbuf+2 MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BCLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0mov timetick,#20mov second,#33MOVTH0,#(65535-TIMECOUNT)/256;3CAFMOV TL0,#(65535-TIMECOUNT)MOD 256; MOV TMOD,#01HSETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbuf CLR LEDCLKCLR LEDDINNOPDISP1: S ETB LEDCLK MOV A,@R0MOV DPTR,#LEDTAB MOVC A,@A+DPTR MOV LEDDATA,A; MOV R7,#5ACALL DelayNms INC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1 RET; 大延时DelayNms:D1: ACALL Delay1ms DJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND思考题1、在实验程序基础上编写一个24小时计时时钟。
LEDCLK BIT P3.4;LEDDIN BIT P2.3;LEDDATA DATA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030H;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256SETB RS0;后面所使用的R0~r7DJNZ timetick,P_T02MOV timetick,#20INC secondMOV A,secondCJNE A,#60,P_T01;秒MOV SECOND,#0inc minute;MOV A,minute;分CJNE A,#60,P-T01INC HOUR;时MOV A,HOURCJNE A,#12,P-T01MOV HOUR,#0P_T01:MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV @R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV @R0,ADEC R0MOV @R0,BP_T02:CLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0MOVTH0,#(65535-TIMECOUNT)/256;3CAFMOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01H;设定定时器的工作方式SETB ET0;允许T0溢出中断SETB TR0;启动t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1:SETB LEDCLKMOV A,@R0MOV DPTR,#LEDTAB MOVC A,@A+DPTRMOV LEDDATA,A;MOV R7,#5ACALL DelayNmsINC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1RET; 大延时DelayNms:D1: ACALL Delay1msDJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,F END2、说说把显示程序放在主程序和定时中断程序的优缺点。