单片机脉冲计数C程序

合集下载

PWM调速的C语言程序编写(非常简单)

PWM调速的C语言程序编写(非常简单)

PWM调速的C语言程序编写关于PWM的原理在上一篇文章中已经说的很详细了,现在就细说一下pwm C语言程序的编写。

C语言中PWM的编写有这么几种方法;一、用普通的I/O 口输出的PWM ,二、使用定时计数器编写,三、就是使用片内PWM了。

1 先说使用普通的I\O口编写PWM程序了。

使用I/O口输出PWM波形你必须首先明白PWM他的实质是:调制占空比,占空比就是波形中高电平的长度与整个波长的比值。

我们写C语言的目的是写PWM波形的一个周期。

在这个周期内高低电平的比值是可以改变的。

这也就符合了PWM的原意脉宽调制。

即高电平的宽度的调制。

当然了PWM他也可用于改变频率,我们这里只先说他改变脉宽。

一旦我们的C语言程序写完那么他产生的PWM波形的频率就一定了。

(也可写频率变化的PWM,难度有点大)一般我们控制使用1K到10K的PWM波进行控制。

当然了你也可在要求不是很高的地方使用频率更低的PWM波。

比如在飞思卡尔智能车比赛中我们学校使用的PWM波频率只有600HZ.我们要改变一个PWM波周期内的高电平的宽度显然需要将一个PWM波的周期分成单片机可以控制的N个小的周期,N的取值越大你的调速等级越高,但产生的PWM频率就越低。

我们下面以实现100级调速为例编写PWM程序。

先写出程序再慢慢给大家分析void pwm (uchar x,uint y) //X 为占空比 Y为函数使用时间{ uint i,j,a,b;for(i=y;i>0;i--)//定时外函数{for(j=7;j>0;j--)//定时内函数{for(a=y;a>0;a--) / /PWM波高电平宽度{PORTA=0X01;}for(b=100-y;b>0;b--) //PWM低电平宽度{PORTA=0X00;}}}}这个程序够简单吧轻松的实现AVR单片机的PA.0口输出7KHZ左右的PWM脉冲你可以将PORTA=0X01;改为P1.0=0X01;就可以移植到51单片机上了为什么使用参数Y定时是因为用普通I/O口控制它的开关没有使用定时器编写的灵活。

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序51单片机外部脉冲计数程序是一种常见的嵌入式应用程序,它可以通过计数外部脉冲信号来实现各种功能,如测量速度、记录行程、控制电机等。

在本文中,我们将介绍如何编写一个简单的51单片机外部脉冲计数程序,供初学者参考。

一、程序框架```c#include <reg52.h>sbit PulsePin = P1^0; //定义脉冲信号输入引脚unsigned long cnt = 0; //计数器void ExternalInterrupt0() interrupt 0 //外部中断0的中断服务程序{cnt++; //计数器加一}```程序中定义了一个脉冲信号输入引脚PulsePin,一个计数器cnt,并在主程序中开启了全局中断和外部中断0,并设置外部中断0为下降沿触发。

在外部中断0的中断服务程序中,计数器cnt会加一。

二、程序解析1. 硬件连接将需要计数的脉冲信号输入引脚连接到单片机的P1.0引脚上,并连接好单片机的电源和地线。

2. 宏定义和全局变量首先定义了PulsePin引脚为输入模式,并定义了计数器cnt为无符号长整型变量。

3. 主程序在主程序中,首先开启了全局中断和外部中断0,然后设置外部中断0为下降沿触发。

最后加入一个无限循环,等待外部中断的触发。

4. 外部中断0的中断服务程序在外部中断0的中断服务程序中,计数器cnt会加一。

三、总结本文介绍了如何编写一个简单的51单片机外部脉冲计数程序。

通过外部中断0的中断服务程序,可以实现对外部脉冲信号的计数。

本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。

单片机课程设计外部脉冲计数器

单片机课程设计外部脉冲计数器

单片机课程设计外部脉冲计数器目录摘要:单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。

本课程设计的指导思想是控制单片机实现从0到99的计数功能,其结果显示在两位一体的共阳极数码管上。

关键词:脉冲计数器数码管单片机本设计基于单片机技术原理,以单片机芯片STC89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出脉冲,按下键就开始计数,并将数值显示在两位一体的共阳极数码管上。

1课题原理PCB板上设置开始计数按键和清零按键,以上按键与89C52单片机的P1口连接,通过查询按键是否被按下来判断进行计数或者清零。

若按下计数健,则单片机控制两位一体的共阳极数码管显示从00开始的数字,按下一次,则数字加一,一次类推;若按下清零键,则程序返回程序开始处,并且数码管显示00。

2 硬件及软件设计2.1 硬件系统2.1.1 硬件系统设计此设计是在单片机最小系统的基础上进行开发和拓展,增加了按键电路和和数码管显示电路,由于单片机输出电流不足以驱动数码管发光,所以数码管需要驱动电路。

我们采用了三极管对数码管电流进行放大,使电流大小达到要求值。

2.1.2 单元电路设计基本框架如下图2.1开始按键数码管 89C52单片机清零按键显示控制加一按键2.1基本框架SEL11JDB91627384954.7kR112P3VCC142C00Q91vccVCC5PP25440CCPC-RXPC-TX0112110Q9465317126118vcc01-+DpVV7SEG-2abcdefghNVCCGR1INR2IN39867412T1OUTT2OUT0000000000000000R104.7k11111111D S232A-NR1OUTT2INC1+C1-C2+C2-T1INR2OUT123456781RRRRRRRRU20134519SEL2111DB0DB1DB2DB3DB4DB5DB6DB7PP1444 VCCCC0011RXDTXDDB0DB1DB2DB3DB4DB5DB6DB7TXDRXD92987654321234567800010333333332 222222242113DNP00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P27VCCGPSENP30/ RXDP31/ TXDALE/ PROGP10P11P12P13P14P15P16P17P32/ INT0P33/ INT1P34/ T0P35/T1EA/VppXTAL1XTAL2RST/VpdP36/ WRP37/RD89C52AT89S5X123456784518991131123671111VCCR10DTTWRINT1INT0P10P11SEL1SE L2SPEAKP12P13VCCC1010UF/16V12311.0592MHzXTALVCC4K35021RSTP1KEYK0R121PP67 00C3C3VCC211234SSW-PBSSW-PBSSW-PBSSW-PB2PDC5V图2.2 计数器原理图图2.3 计数器PCB图1(STC89C52芯片 89C52STC89C52RC芯片包括: 8k字节139P10P00238P11P01Flash,512字节RAM, 32位I/O口337P12P02436P13P03线,看门狗定时器,两个数据指针,535P14P04634三个16位定时器/计数器,一个6向P15P05733P16P06832量2级中断结构,全双工串行口,片P17P071221内晶振及时钟电路。

脉冲计数

脉冲计数

实验九脉冲计数(定时/计数器实验)1、实验目的:熟悉单片机内部定时/计数器功能,掌握初始化编程方法。

2、实验内容:把定时器0外部输入的脉冲进行计数,并送显示器显示3、实验程序框图:4、实验接线图:5、实验步骤:P3.4 依次接T0~T7或单脉冲输出孔,执行程序,观察数码管上计数脉冲的速度及个数。

6、思考:修改程序使显示器上可显示到999999个脉冲个数。

7、程序清单文件名:SW09.ASM;脉冲计数实验ORG 0000HLJMP SE15ORG 06E0HSE15: MOV SP,#53HMOV P2,#0FFHMOV A,#81HMOV DPTR,#0FF23HMOVX @DPTR,A ; 1MOV TMOD,#05HMOV TH0,#00HMOV TL0,#00HSETB TR0LO29: MOV R2,TH0MOV R3,TL0LCALL ZOY0MOV R0,#79HMOV A,R6LCALL PTDSMOV A,R5LCALL PTDSMOV A,R4LCALL PTDSLCALL SSEESJMP LO29ZOY0: CLR AMOV R4,AMOV R5,AMOV R6,AMOV R7,#10HLO30: CLR CMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LO30RETPTDS: MOV R1,AACALL PTDS1MOV A,R1SWAP APTDS1:ANL A,#0FHMOV @R0,AINC R0RETSSEE: SETB RS1MOV R5,#05HSSE2: MOV 30H,#20HMOV 31H,#7EHMOV R7,#06HSSE1: MOV R1,#20HMOV A,30HCPL AMOVX @R1,AMOV R0,31HMOV A,@R0MOV DPTR,#DDFFMOVC A,@A+DPTRMOV R1,#21HMOVX @R1,AMOV A,30HRR AMOV 30H,ADEC 31HMOV A,#0FFHMOVX @R1,ADJNZ R7,SSE1DJNZ R5,SSE2CLR RS1RETDDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEHEND实验九A/D转换实验1、实验目的:(1)掌握A/D转换与单片机接口的方法;(2)了解A/D芯片0809转换性能及编程方法;(3)通过实验了解单片机如何进行数据采集。

C51单片机定时计数器应用编程归纳总结

C51单片机定时计数器应用编程归纳总结

C51 T and C● 80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。

● 对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。

● 计数器由二个8位计数器组成。

● 定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。

调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。

● 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚Tx(P3.4、P3.5)输入。

且外部脉冲的最高频率不能超过时钟频率的1/24一、定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。

TMOD 是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON 是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

二、定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。

每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON 中TF0或TF1置1,向CPU 发出中断请求(定时/计数器中断允许时)。

如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。

计数值N 乘以机器周期Tcy 就是定时时间t 。

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。

在每个机器周期的S5P2期间采样T0、T1引脚电平。

当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。

由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。

51单片机脉冲产生程序设计

51单片机脉冲产生程序设计

51单片机脉冲产生程序设计脉冲产生是嵌入式系统中非常重要的功能之一、在51单片机中,我们可以通过定时器/计数器和中断来实现脉冲的产生。

下面将详细介绍如何设计一个脉冲产生的程序。

首先,我们需要选择一个定时器作为脉冲产生的源。

在51单片机中,有两个可用的定时器,分别是定时器0和定时器1、我们选择一个定时器后,就需要设置定时器的工作模式和计数方式。

在这个例子中,我们选择使用定时器1,并设置为工作模式1和16位计数。

下面是相关的代码示例:```c#include <reg51.h>//定义定时器1的计数周期,用于控制脉冲的频率//主函数void main//声明并初始化定时器计数值unsigned int count = 0xFFFF - TIM1_CYCLE;//设置定时器1的工作模式和计数方式TMOD=0x20;//工作模式1TH1 = count / 256; // 设置高字节TL1 = count % 256; // 设置低字节//启动定时器1TR1=1;while (1)//脉冲输出的相关处理//这里可以添加相关操作}```在上述代码中,我们通过`TIM1_CYCLE`宏定义了定时器1的计数周期,用于控制脉冲的频率。

然后,我们设置了定时器1的工作模式为工作模式1,并计算出计数值,将其分别赋值给TH1和TL1寄存器。

最后,启动定时器1,并在主循环中进行相关的脉冲输出处理。

通过以上的代码段,我们实现了一个简单的脉冲产生程序。

在实际应用中,我们可以根据需要进行进一步的处理,例如根据输入信号进行触发控制、与其他模块进行通信等。

需要注意的是,在上述代码中,我们使用了51单片机的计数方式1,即工作模式1、根据实际需求,您可以根据相应的定时器和计数方式进行调整。

另外,定时器的计数周期也可以根据具体应用进行调整,以满足不同的脉冲需求。

总结起来,设计一个脉冲产生的程序需要选择定时器和计数方式,设置定时器的工作模式和计数值,然后启动定时器,并在主循环中进行相关的处理。

单片机脉冲计数器程序

单片机脉冲计数器程序

单片机脉冲计数器1、设计内容用单片机实现对一路脉冲计数和显示的功能。

硬件包括单片机最小系统、LED显示、控制按钮;软件实现检测到显示2、要求计数范围0~2000;脉冲输入有光电隔离整形,有清零按钮程序如下:ORG 0000HLJMP MAINORG 0003HLJMP 0100HORG 0013HLJMP 0150HORG 0050HMAIN: CLR AMOV 30H , A ;初始化缓存区MOV 31H , AMOV 32H , AMOV 33H , AMOV R6 , AMOV R7 , ASETB EASETB EX0SETB EX1SETB IT0SETB IT1SETB PX1NEXT1: ACALL HEXTOBCDD ;调用数制转换子程序ACALL DISPLAY ;调用显示子程序LJMP NEXT1ORG 0100H ;中断0服务程序MOV A , R7ADD A , #1MOV R7, AMOV A , R6ADDC A , #0MOV R6 , ACJNE R6 , #07H , NEXTCLR AMOV R6 , AMOV R7 , ANEXT: RETIORG 0150H ;中断1服务程序CLR AMOV R6 , AMOV R7 , ARETIORG 0200HHEXTOBCDD:MOV A , R6 ;由十六进制转化为十进制PUSH ACCMOV A , R7PUSH ACCMOV A , R2PUSH ACCCLR AMOV R3 , AMOV R4 , AMOV R5 , AMOV R2 , #10HHB3: MOV A , R7 ;将十六进制中最高位移入进位位中RLC AMOV R7 , AMOV A , R6RLC AMOV R6 , AMOV A , R5 ;每位数加上本身相当于将这个数乘以2 ADDC A , R5DA AMOV R5 , AMOV A , R4ADDC A , R4DA A ;十进制调整MOV R4 , AMOV A , R3ADDC A , R3DJNZ R2 , HB3POP ACCMOV R2 , APOP ACCMOV R7 , APOP ACCMOV R6 , ARETORG 0250HDISPLAY: MOV R0 , #30HMOV A , R5ANL A , #0FHMOV @R0 , AMOV A , R5SW AP AANL A , #0FHINC R0MOV @R0 , AMOV A , R4ANL A , #0FHINC R0MOV @R0 , AMOV A , R4SW AP AANL A , #0FHINC R0MOV @R0 , AMOV R0 , #30HMOV R2 , #11111110BAGAIN: MOV A , R2MOV P2 , AMOV A , @R0MOV DPTR , #TABMOVC A , @A+DPTRMOV P0 , AACALL DELAYINC R0MOV A , R2RL AMOV R2 , AJB ACC.4 , AGAINRETTAB: DB 03FH , 06H , 5BH , 4FH , 66H , 6DH , 7DH , 07H , 7FH , 6FH ;七段码表DELAY: MOV TMOD , #01H ;0.05s延时子程序MOV TL0 , #0B0HMOV TH0 , #3CHSETB TR0WAIT: JNB TF0 , WAITCLR TF0CLR TR0RETEND单片机的T1口计数,T0口定时,P1口输出段码,P2口位选,三位数码管显示 ORG 0000HAJMP MAINORG 000BHAJMP COUNTORG 0100HMAIN: MOV TMOD,#51HMOV TH1,#00HMOV TL1,#00HMOV TL0,#0B0HMOV TH0,#3CHSETB PT0SETB ET0SETB EASETB TR0SETB TR1WAIT: AJMP WAITCOUNT: MOV 30H,TL1MOV 31H,TH1LCALL BCDLCALL WFRETIBCD: MOV R1,30HMOV A,R1MOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 35H,BPLAY: MOV A,33HMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ASETB P2.2LCALL DELAYCLR P2.2MOV A,34HMOVC A,@A+DPTRMOV P1,ASETB P2.1LCALL DELAYCLR P2.1MOV A,35HMOVC A,@A+DPTRMOV P1,ASETB 2.0LCALL DELAYCLR P2.0RETTAB: DB 3FH,06H,5BH,4FH,66F,6DH,7DH,07H,7FH,6FHDELAY: MOV R5,#10HDE1: MOV R7,#5DE2: MOV R6,#20DE3: DJNZ R6,DE3DJNZ R7,DE2DJNZ R5,DE1RETWF: MOV TH1,#00HMOV TL1,#00HMOV TH0,#0B0HMOV TL0,#3CHSETB TR1SETB TR0RETENDCOUNT: CLR TR1CLR TR0MOV 30H,TL1MOV 31H,TH1LCALL BCDLCALL WFRETORG 0000HAJMP MAINORG 000BHAJMP COUNTORG 0100HMAIN: MOV TMOD,#51HMOV TH1,#00HMOV TL1,#00HMOV TL0,#0B0HSETB PT0SETB ET0SETB EASETB TR0SETB TR1WAIT: AJMP W AITCOUNT: MOV 30H,TL1MOV 31H,TH1LCALL BCDLCALL WFRETIBCD: MOV R1,30HMOV A,R1MOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 35H,BPLAY: MOV A,33HMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ASETB P2.2LCALL DELAYCLR P2.2MOV A,34HMOVC A,@A+DPTRMOV P1,ASETB P2.1LCALL DELAYCLR P2.1MOV A,35HMOVC A,@A+DPTRMOV P1,ASETB 2.0LCALL DELAYCLR P2.0RETTAB: DB 3FH,06H,5BH,4FH,66F,6DH,7DH,07H,7FH,6FHDE1: MOV R7,#5DE2: MOV R6,#20 DE3: DJNZ R6,DE3DJNZ R7,DE2DJNZ R5,DE1RETWF: MOV TH1,#00H MOV TL1,#00HMOV TH0,#0B0HMOV TL0,#3CHSETB TR1SETB TR0RETENDCOUNT: CLR TR1CLR TR0MOV 30H,TL1MOV 31H,TH1LCALL BCDLCALL WFRET。

单片机脉冲计数

单片机脉冲计数

单片机实验报告班级:自动0903姓名:一.软件实验实验题目:脉冲计数(定时/计数器实验)1,实验目的:熟悉单片机内部定时/计数器功能,掌握初始化编程方法。

2,实验内容:把外部中断0输入的脉冲进行计数,并送数码管显示。

仿真电路图如下所示:设定频率发生器为50Hz程序如下:#include <reg51.h>sbit P2_0=P2^0; //数码管选定位sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unsigned int motorspeed;unsigned char GE,SHI,BAI,QIAN;unsigned int counter=0; //脉冲数unsigned int calsp; //设定多长时间计算一次void display(); //数码管显示void delay(); //延迟函数void calspeed();void main(){EA=1; //开启总中断EX0=1; //开启外部中断0IT0=1; //设置成下降沿触发方式TMOD=0x01; //设置定时器0为模式1,即16位计数模式TH0=(65536-10000)/256; //计数时间为10msTL0=(65536-10000)%256;ET0=1; //开启定时器0中断TR0=1; //启动定时器0P2=P2&0xf0;while(1){display();calspeed();}}void calspeed(){if(calsp>=100) //100*10ms=1s计算一次{motorspeed=counter;counter=0; //清零脉冲数calsp=0; //清零标志}}void _TIMER0() interrupt 1{TH0=(65536-10000)/256; //重新装入初值,计数时间为10ms TL0=(65536-10000)%256;calsp++;}void _INT0() interrupt 0{counter++;}void display() //数码管显示函数{GE=motorspeed%10;SHI=motorspeed/10%10;BAI=motorspeed/100%10;QIAN=motorspeed/1000%10;P2_0=1;P0=table[QIAN];delay();P2_0=0;P2_1=1;P0=table[BAI];delay();P2_1=0;P2_2=1;P0=table[SHI];delay();P2_2=0;P2_3=1;P0=table[GE];delay();P2_3=0;}void delay() //延迟函数{unsigned char i=10;while(i--);}二.硬件实验实验题目:用单片机控制二极管1,实验目的:熟悉用单片机控制二极管及其编程方法2,实验内容:跑马灯显示二极管仿真电路图如下所示:程序如下:#include <reg51.h>#include <intrins.h>void delay();//延时子函数void main(void){unsigned char temp;temp=0xfe;while(1){P2=temp;delay();temp=_crol_(temp,1);}}void delay(){unsigned int y;y=10000;while(y--);}。

单片机脉冲计数电路设计 毕业设计论文

单片机脉冲计数电路设计 毕业设计论文

本科毕业论文(2012届)题目单片机脉冲计数电路设计学院理学院专业应用物理专业班级08073211学号08072121学生姓名xx指导教师xx完成日期2011年12月摘要随着单片机技术和电子技术的不断发展(单片机在医学仪器领域得到广泛应用,其在生物医学信号处理和控制中发挥着越来越重要的作用。

各种生物医学信号经过放大、滤波等处理后(可将模拟信号转换为数字信号送到单片机处理(此外还可以通过单片机根据处理结果对医疗仪器进行控制)。

可以更精确简单便携的检测脉搏、心跳、血压等数据。

因此本论文所做脉冲计数系统采用了以单片机(PIC16F877A)为核心,结合相关的外围元器件例如六位8段数码管、复位电路,再配以相应的软件,达到制作简易脉冲计数器的目的。

以C语言为程序设计的基础,利用PIC单片机独有的CCP捕捉模式能实现脉冲的检测计算,频率实时显示在数码管上。

关键词:PIC16F877A;CCP捕捉模式;脉冲;C语言ABSTRACTWith the single chip microcomputer technology and electronic technology development of microcomputer in the medical instrument (was widely used in the, in the biomedical signal processing and control a more and more important role in biological medicine. Various signal amplified, filtering processing (analog signal after can be converted to digital signals to SCM processing (also can through the MCU according to deal with the results of the medical instrument control). It will be more accurate, simple and portable for the detection of heart beating, blood pressure and pulse data. This research of the digital clock with the single chip processor (PIC16F877A) as the core, combining related peripheral components such as six 8 period of digital tube and reset circuit, matching again with the corresponding software to create a simple counter to the purpose of the pulse. C language program is designed for the foundation, PIC microcontroller unique CCP capture mode is used to realize pulse test calculation, frequency real-time display in digital tubes.Keywords: PIC16F877A;CCP Capture mode;Pulse;C Language目录引言 (1)第一章方案选择 (2)1.1脉冲检测方案 (2)1.2显示方案 (2)1.3编程语言选择方案 (2)第一章系统设计 (4)2.1总体设计 (4)2.2主控制模块的方案选择与设计 (4)2.3芯片介绍 (4)2.3.1 基本介绍 (4)2.4主控模块电路 (10)2.5数码管显示电路设计 (11)2.6Protel99SE设计 (11)第三章软件设计 (13)3.1编程语言的选择 (13)3.2程序设计 (13)3.2.1程序流程图 (13)3.2.2 CPP捕捉中断函数 (14)3.2.3 初始化函数 (14)3.2.4 BCD转化函数 (17)3.2.5 延时函数 (18)第四章选材及应用软件 (20)4.1制作选材 (20)4.1.1 硬件选材 (20)4.1.2 电路制作 (20)4.2源程序编译与软件调试 (21)4.2.1 MPLAB和HI-TECH PICC软件简介 (21)第五章总结 (23)致谢 (25)参考文献 (26)附件 (27)引言单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

外部中断脉冲计数实验

外部中断脉冲计数实验

《单片机原理与应用》课程实验报告实验名称:外部中断----脉冲计数实验实验日期:班级:电技13-2班姓名:马倩南学号:02号指导老师:评分:一、实验目的:1.熟悉单片机外部中断的使用方法;2.熟悉数码管的工作原理和驱动方法;3.程序设计中数组的使用。

、实验内容: 连接最小系统板与脉冲开关、数码管模块电路,构成模拟计数器电路。

编程检测外部脉冲的输入,并通过数码管来指示脉冲个数1、设计出外部中断计数器的电路原理图,单片机选用AT89C51 P0 口接八位逻辑电平显示发光二极管,INTO或INT1接单次脉冲输出端。

2、打开Keil uVision2 仿真软件,首先建立本实验的项目文件,接着编写外部中断计数器.AS M源程序,进行编译,直到编译无误,生成HEX文件。

3、将HEX文件上载到Protues电路原理图的AT89C5仲,并仿真成功。

4、实验电路功能,连续按动单次脉冲产生电路的按键,对单次脉冲进行计数,八个发光二极管显示计数结果。

三、程序及其运行结果:1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1 (i=0 或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。

因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)或INT1(P3.3)引入。

2、中断服务的关键:a、保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。

c、用POP指令恢复中断时的现场。

3、中断控制原理:中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON、IE、SCON及IP。

4、中断响应的过程:首先中断采样然后中断查询最后中断响应。

单片机常用c代码

单片机常用c代码

单片机常用c代码在单片机领域,C语言是最常用的编程语言之一。

它具有简单易学、灵活高效的特点,被广泛应用于单片机系统的开发中。

本文将介绍一些常用的单片机C代码,为读者提供参考和学习的资源。

一、IO口控制单片机的IO口是与外部设备连接的重要接口,通过控制IO口的高低电平来实现与外部设备的通信。

以下是常见的IO口控制代码示例:1. 设置IO口为输出模式:```c#define LED_PIN 0 // 指定IO口引脚号void setup() {pinMode(LED_PIN, OUTPUT); // 设置IO口为输出模式}void loop() {digitalWrite(LED_PIN, HIGH); // 设置IO口为高电平delay(1000); // 延迟1秒digitalWrite(LED_PIN, LOW); // 设置IO口为低电平delay(1000); // 延迟1秒```2. 设置IO口为输入模式:```c#define BUTTON_PIN 1 // 指定IO口引脚号void setup() {pinMode(BUTTON_PIN, INPUT); // 设置IO口为输入模式}void loop() {if (digitalRead(BUTTON_PIN) == HIGH) { // 判断IO口电平是否为高电平// 执行相应操作}}```二、定时器控制定时器是单片机中的重要组件,可用于实现精确的时间控制和周期性任务。

以下是常见的定时器控制代码示例:1. 设置定时器计数器和预分频值:void setup() {TCCR1B = (1 << CS12) | (1 << CS10); // 设置定时器1的预分频为1024}void loop() {// 执行相应操作}```2. 设置定时器中断服务程序:```cISR(TIMER1_COMPA_vect) {// 定时器1比较匹配中断服务程序}void setup() {TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // 设置定时器1的CTC模式和预分频为1024OCR1A = 15624; // 设置定时器1的比较匹配值,实现1秒中断一次TIMSK1 = (1 << OCIE1A); // 允许定时器1比较匹配中断}void loop() {// 执行相应操作}```三、串口通信串口通信是单片机与计算机或其他外部设备进行数据交互的常用方式。

脉冲计数(定时计数器的记数功能实验)

脉冲计数(定时计数器的记数功能实验)

实验三脉冲计数(定时/计数器的记数功能实验1、实验目的:(1熟悉8031定时/计数器的记数功能,(2掌握初始化编程方法(3掌握中断程序的调试方法2、实验内容:定时/记数器0对外部输入的脉冲进行计数,并送显示器显示。

3.实验电路图:方案1方案24、实验器材:(1超想-3000TB综合实验仪 1 台(2超想3000仿真器 1 台(3连线若干根(4计算机 1 台5、实验连线:方案1:总线插孔的P3.4接脉冲源的DOWN,按下脉冲按钮,观察数码管上计数脉冲的个数。

6、实验原理:MCS-51有两个16位的定时/计数器:T0和T1。

计数和定时实质上都是对脉冲信号进行计数,只不过脉冲源不同而已.当工作在定时方式时,计数脉冲来自单片机的内部,每个机器周期使计数器加1,由于计数脉冲的频率是固定的(即每个脉冲为1个机器周期的时间,故可通过设定计数值来实现定时功能。

当工作在计数方式时,计数脉冲来自单片机的引脚,每当引脚上出现一个由1到0 的电平变化时,计数器的值加1,从而实现计数功能。

可以通过编程来指定时计数器的功能,以及它的工作方式。

读取计数器的当前值时,应读3次。

这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的错误。

7、程序框图8、程序清单; “验证式”实验三脉冲计数(定时/记数实验;对定时器0外部输入的脉冲信号进行计数且显示OUTBIT equ 0e101hCLK164 equ 0e102h ; 段控制口(接164时钟位DAT164 equ 0e102h ; 段控制口(接164数据位LEDBuf equ 40hORG 0000hMOV SP,#60HMOV DPTR,#0e100H ;8155初始化MOV A,#03HMOVX @DPTR,AMOV TMOD,#05H ;定时器初始化MOV TH0,#00HMOV TL0,#00HSETB TR0LOOP0:MOV R2,TH0MOV R3,TL0LCALL LOOP1 ;调用二转十子程序,结果放在R4 R5 R6中MOV R0,#40H MOV A,R6LCALL PTDSMOV A,R5LCALL PTDSMOV A,R4LCALL PTDSLCALL DISPLAYSJMP LOOP0LOOP1:CLR A ;二转十子程序MOV R4,AMOV R5,AMOV R6,AMOV R7,#10H LOOP2:CLR CMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LOOP2RETPTDS: MOV R1,A ;拆字子程序ACALL PTDS1MOV A,R1SWAP APTDS1: ANL A,#0FHMOV @R0,AINC R0RETDelay:mov r7, #0 ; 延时子程序DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDISPLAY:setb 0d3hmov r0, #LEDBufmov r1, #6 ; 共6个八段管 mov r2, #00000001b ; 从左边开始显示Loop: mov dptr, #OUTBITmov a, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov dptr,#LEDmapmovc a,@a+dptrmov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, canl a,#0fdhmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管 mov r6, #1 call Delaymov a, r2 ; 显示下一位rl amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管clr 0d3hretLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h END。

单片机读取脉冲流量计程序

单片机读取脉冲流量计程序

单片机读取脉冲流量计程序1.引言1.1 概述概述部分的内容可以包括以下内容:在工业自动化领域中,脉冲流量计被广泛应用于测量流体的流量。

脉冲流量计通过感知流体流过管道的脉冲信号来计算流量值,具有精度高、反应快和可靠性强等优点。

为了实现对脉冲流量计的读取和监控,可以通过使用单片机来设计和实现相应的程序。

本文以单片机读取脉冲流量计为主题,主要介绍了脉冲流量计的原理以及通过单片机实现对脉冲流量计读取的程序设计。

首先,在第二部分中,我们将详细介绍脉冲流量计的工作原理,包括信号发生器的构造和工作原理,以及脉冲信号的计数和流量值计算方法。

其次,在第三部分中,我们将介绍通过单片机实现对脉冲流量计的读取的程序设计方法,包括硬件电路设计和软件编程。

最后,在结论部分中,我们将总结本文的主要内容,并对程序设计的实现结果进行讨论。

通过本文的阅读,读者可以了解脉冲流量计的原理及其在自动化领域中的应用,以及通过单片机实现对脉冲流量计读取的程序设计方法。

这对于进一步提高流量计的性能和可靠性,以及在实际应用中更好地满足工业生产的需求具有重要的参考价值。

所以,希望通过本文的阅读能够对读者有所帮助。

1.2 文章结构文章结构部分主要介绍了该篇长文的整体结构和各个章节的内容安排。

具体内容如下:本文分为引言、正文和结论三个部分。

引言部分包括概述、文章结构和目的三个小节。

在概述中,将介绍脉冲流量计的背景和作用。

文章结构部分即本段落,将说明文章的整体结构和各个章节的内容。

目的部分将明确本文的研究目标和意义。

正文部分将包括脉冲流量计简介和单片机读取脉冲流量计的原理两个小节。

脉冲流量计简介将介绍脉冲流量计的基本原理、工作原理和应用领域。

单片机读取脉冲流量计的原理将详细阐述如何使用单片机来获取脉冲流量计的数据,介绍读取流程和相关技术。

结论部分将包括实现脉冲流量计读取的程序设计和结果与讨论两个小节。

实现脉冲流量计读取的程序设计将介绍如何编写程序来实现读取脉冲流量计数据的功能,并讨论设计方案和具体实现过程。

stc单片机脉冲捕捉测量频率

stc单片机脉冲捕捉测量频率

stc单片机脉冲捕捉测量频率STC单片机(STC Microcontroller)是一系列由中国STC公司(深圳特发信息科技有限公司)生产的单片机产品。

在STC单片机中,要实现脉冲捕捉和测量频率,通常可以使用定时器/计数器模块来完成。

以下是一般的步骤和示例代码,具体的代码可能需要根据使用的具体型号和开发环境进行调整。

以下是一个简单的STC单片机脉冲捕捉测量频率的示例代码,基于STC-89C52单片机:#include <reg52.h>// 定义定时器相关寄存器sbit TRIG = P3^5; // 触发脉冲引脚unsigned int count = 0; // 计数器值// 定时器1中断服务程序void Timer1_ISR() interrupt 3{TH1 = 0xFC; // 设置定时器1初值,用于下一次计数TL1 = 0x18;1/ 3count++; // 每次中断计数器加一}void main(){TMOD = 0x10; // 设置定时器1为工作方式1,16位计数器TH1 = 0xFC; // 设置定时器1初值TL1 = 0x18;ET1 = 1; // 允许定时器1中断EA = 1; // 允许总中断TR1 = 1; // 启动定时器1while (1){TRIG = 1; // 产生触发脉冲_nop_(); // 等待_nop_();_nop_();TRIG = 0;2/ 3// 在此处可以进行其他操作,或者将测得的频率值用于其他用途// 输出测得的频率值// 例如,假设时钟频率为11.0592MHz,频率 = count / (65536 * 定时器溢出次数)// 在这里,假设定时器溢出次数为10次,那么频率 = count / (65536 * 10)// 输出频率值到外设或串口等}}这是一个简单的例子,实际应用中可能需要根据具体的需求和硬件环境进行调整。

单片机 高频脉冲计数缺陷

单片机 高频脉冲计数缺陷

单片机高频脉冲计数缺陷单片机是一种集成电路,可以实现多种功能。

在许多应用领域中,高频脉冲计数是单片机常见的任务之一。

然而,高频脉冲计数的过程中存在一些缺陷,这些缺陷可能会影响计数的准确性和稳定性。

高频脉冲计数的缺陷之一是计数误差。

在高频脉冲计数过程中,由于单片机的计数精度有限,可能会导致计数误差的出现。

这种误差可能是由于单片机内部时钟的不稳定性或计数算法的不精确性所引起的。

这种计数误差可能会导致最终计数结果与实际值存在较大的差异。

高频脉冲计数还存在计数溢出的问题。

当脉冲频率非常高时,单片机内部的计数器可能无法承载如此大的计数值,导致计数器溢出。

计数器溢出意味着计数值将从最大值重新开始计数,这会导致计数结果的错误。

为了解决这个问题,我们可以使用更高精度的计数器或者采取适当的溢出处理方法。

高频脉冲计数还可能受到外部干扰的影响。

由于高频脉冲信号往往具有较高的频率和较短的脉冲宽度,容易受到周围环境中的电磁干扰的影响。

这种干扰可能会导致计数器计数错误或计数结果的抖动。

为了解决这个问题,可以采取屏蔽措施,如合理布局电路、增加滤波电路等,以减小外部干扰对高频脉冲计数的影响。

高频脉冲计数还可能受到单片机性能限制的影响。

单片机的处理能力和计数速度是有限的,当高频脉冲信号超出单片机处理范围时,就无法正常进行计数。

在这种情况下,我们可以考虑使用更高性能的单片机或者分频技术来降低脉冲频率,以使其在单片机能够处理的范围内。

单片机高频脉冲计数存在一些缺陷,包括计数误差、计数溢出、外部干扰和单片机性能限制等。

为了解决这些问题,我们可以采取一系列措施,如提高计数精度、处理溢出、采取屏蔽措施和使用更高性能的单片机等。

通过不断改进和优化,可以提高高频脉冲计数的准确性和稳定性,以满足不同应用领域的需求。

单片机(c语言版)定时器计数器..

单片机(c语言版)定时器计数器..
21
#include<reg51.h> Char i=100;/*给变量i赋初值,定时0.5S,每次定时中断 5MS,需要中断100次*/ void main( ) { TMOD=0x01; /*设置定时器T0为方式1*/ TH0=0xee; /*向TH0写入初值的高8位*/ TL0=0x00; /*向TL0写入初值的低8位*/ P1=0x00; /*P1口8只LED点亮*/ EA=1; /*总中断允许*/ ET0=1; /*定时器T0中断允许*/ TR0=1; /*启动定时器T0*/ while(1) ; /*无穷循环,等待定时中断*/ }
定时时间:计数器溢出时间,时间常数越大,定时
时间就越短;时间常数越小,定时时间就越长。时 钟的频率越高,定时时间越短;时钟的频率越低, 定时时间越长。
设系统时钟的频率为fosc,计数器的初始值为N,定 时器工作于方式1,则定时时间: T=(216-N)×12/fosc (1) 如果定时器工作于方式2或方式3,定时时间为: T=(28-N)×12/fosc (2)
6.4 定时器/计数器的编程和应用
MCS-51单片机的定时器是可编程的,但在进行定时或计数
之前要对程序进行初始化,具体步骤如下: (1)确定工作方式字:对TMOD寄存器正确赋值; (2)确定定时初值:计算初值,直接将初值写入寄存器的TH0 、TL0或TH1、TL1; 初值计算:设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0-M为213,模式1-M为216,模式2和3-M为28) (3)根据需要,对IE置初值,开放定时器中断; (4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位, 置位以后,计数器即按规定的工作模式和初值进行计数或开 始定时。

c语言单片机定时器计数器程序

c语言单片机定时器计数器程序

C语言单片机定时器计数器程序1. 简介C语言是一种被广泛应用于单片机编程的高级编程语言,它可以方便地操作单片机的各种硬件模块,包括定时器和计数器。

定时器和计数器是单片机中常用的功能模块,它们可以用来实现精确的时间控制和计数功能。

本文将介绍如何使用C语言编程实现单片机的定时器计数器程序。

2. 程序原理在单片机中,定时器和计数器通常是以寄存器的形式存在的。

通过对这些寄存器的操作,可以实现定时器的启动、停止、重载以及计数器的增加、减少等功能。

在C语言中,可以通过对这些寄存器的直接操作来实现对定时器和计数器的控制。

具体而言,可以使用C语言中的位操作和移位操作来对寄存器的各个位进行设置和清零,从而实现对定时器和计数器的控制。

3. 程序设计在编写单片机定时器计数器程序时,首先需要确定定时器的工作模式,包括定时模式和计数模式。

在定时模式下,定时器可以按照设定的时间间隔生成中断,从而实现定时功能;在计数模式下,定时器可以根据外部的脉冲信号进行计数。

根据不同的应用需求,可以选择不同的工作模式,并根据具体情况进行相应的配置。

4. 程序实现在C语言中,可以通过编写相应的函数来实现对定时器和计数器的控制。

需要定义相关的寄存器位置区域和位掩码,以便于程序对这些寄存器进行操作。

编写初始化定时器的函数、启动定时器的函数、停止定时器的函数、重载定时器的函数等。

通过这些函数的调用,可以实现对定时器的各种操作,从而实现定时和计数功能。

5. 示例代码以下是一个简单的单片机定时器计数器程序的示例代码:```c#include <reg52.h>sbit LED = P1^0; // 定义LED连接的引脚void InitTimer() // 初始化定时器{TMOD = 0x01; // 设置定时器0为工作在方式1TH0 = 0x3C; // 设置初值,定时50msTL0 = 0xAF;ET0 = 1; // 允许定时器0中断EA = 1; // 打开总中断void Timer0_ISR() interrupt 1 // 定时器0中断服务函数{LED = !LED; // 翻转LED状态TH0 = 0x3C; // 重新加载初值,定时50msTL0 = 0xAF;}void m本人n(){InitTimer(); // 初始化定时器while(1){}}```以上代码实现了一个简单的定时器中断程序,当定时器计数到50ms 时,会触发定时器中断,并翻转LED的状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,A ;清零
MOV R2,#24 ;24次移位
H_B: CLR RS1 ;选择0区通用工作寄存器组
MOV A,R7
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R2,H_B ;二进制数转十进制
CT1: SETB RS1 ;选择2区通用工作寄存器组
ST1: JB P1.2,STOP1
LCALL DELY
JB P1.2,STOP1 ; 清零否
LJMP START ; 清零后,调转到START
RET
;------------------------------------------------------------------------------
CLR 30H ;将停止标志位清零
MOV 30H,#00H ;设预置数70000
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#07H
CLR ET1
CLR EA ; 关中断
LL5: JB P1.2,LL6
LCALL DELY
JB P1.2,LL6 ;清零否
LJMP START ;清零调转到START
MOV P2,A ;送字位
RR A
MOV R1,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A ;送字形
MOV R2,#4FH
DJNZ R2,$
INC R0
CJNE R1,#80H,CT4
DJNZ R3,CT2
CT5: RET
;------------------------------------------------------------------------------
LL0: JB 30H,STOP1 ;电机是否停止
LL1: SETB TR1 ;开定时器
SETB EA
SETB ET1 ;开中断
SETB TR0 ;开计数器
;显示子程序
CT: CLR RS1 ;选择0区通用工作寄存器组
MOV R6,TH0 ;计数器高八位传给R6
MOV R7,TL0 ;计数器低八位传给R7
JNB TF0,HB ;计数器是否溢出
ORG 001BH
LJMP STOP ;转发送中断服务
;-----------------------------------------------------------------------------
;主程序
DELY: SETB RS0 ;消抖延时子程序
MOV R5,#04H
DEL1: MOV R4,#0FFH
DJNZ R4,$
DJNZ R2,DEL1
CLR RS0
RET
;------------------------------------------------------------------------------
CLR P1.3 ;启动电机
LL2: LCALL CT ;显示
LL3: SETB RS1 ;选择2区工作寄存器组
CJNE R7,#00H,LL0
CJNE R6,#00H,LL0
;中断子程序
STOP: JB P1.1,STP
LCALL DELY
JB P1.1,STP ;是否停止
SETB 30H ;停止,标志位置1
STP: RETI
;------------------------------------------------------------------------------
MOV 35H,#00H
MOV 36H,#00H
MOV 37H,#00H
LCALL CT6 ;显示预置数
START1: JB P1.0,START1
LCALL DELY
JB P1.0,START1 ;电机是否启动
CJNE R5,#07H,LL0
CJNE R4,#00H,LL0 ;预置数到否
LL4: SETB P1.3 ; 关电机
CLR TR0 ; 关计数器
CLR TR1 ; 关定时器
CLR ET1 ;关中断
STOP2: LCALL CT ;显示
START2: JB P1.0,ST1
LCALL DELY
JB P1.0,ST1 ; 继续启动电机否
LJMP LL1 ; 继续启动电机,调转到LL1
START: MOV SP,#60H ;堆栈SP=60H
MOV TMOD,#15H ;T0为计算器,工作方式1,T1为定时器,工作方式1
MOV P0,#03FH
MOV P1,#0FFH
MOV P2,#0FFH ;P0,P1,P2口赋初值
C_T: MOV R1,A ;拆字子程序
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1:,A
INC R0
RET
;------------------------------------------------------------------------------
LL6: LCALL CT ; 显示
LJMP LL5 ; 不清零调转到LL5
RET
;------------------------------------------------------------------------------
;-----------------------------------------------------------------------------
ORG 0000H
LJMP START ;转发送主程序
;-----------------------------------------------------------------------------
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
SETB RS1 ;选择2区通用工作寄存器组
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
STOP1: SETB P1.3 ;关电机
CLR 30H ;停止标志位清零
CLR TR0 ;关计数器
CLR TR1 ;关定时器
CLR EA
MOV R0,#30H ;拆字,十进制数由低位到高位依次存放到30H-37H
MOV A,R7
LCALL C_T
MOV A,R6
LCALL C_T
MOV A,R5
LCALL C_T
MOV TH0,#00H
MOV TL0,#00H ;TO从0开始计数
MOV TH1,#00H
MOV TL1,#00H ;T1定时 时间为65.5ms
MOV 59H,#00H ;计数器溢出的数累计存放在59H单元
MOV A,R4
LCALL C_T
CT6: MOV R3,#5 ;循环显示5次
CT2: MOV DPTR,#TAB ;查表
MOV R0,#30H
CT3: MOV R1,#80H
CT4: MOV A,R1
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
;------------------------------------------------------------------------------
END
INC 59H ;将溢出的数累加后存在59H单元
CLR TF0 ;溢出标志位清零
HB: MOV R5,59H ;将累加后的溢出数传给R5
SETB RS1 ;选择2区通用工作寄存器组
CLR A
相关文档
最新文档