单片机脉冲计数
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的中断服务程序,可以实现对外部脉冲信号的计数。
本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。
MCS-51单片机的定时器计数器

1. 定时器T0/T1 中断申请过程
(1)在已经开放T0/T1中断允许且已被启动的前提下, T0/T1加1计满溢出时 TF0/TF1标志位自动置“1” ;
(2)CPU 检测到TCON中TF0/TF1变“1”后,将产生指 令:LCALL 000BH/LCALL 001BH 执行中断服务程序;
(3)TF0/TF1标志位由硬件自动清“0”,以备下次中断申
郑州大学
docin/sundae_meng
(3)工作方式寄存器TMOD
T1
T2
GATE C / T M1 M0 GATE C / T M1 M0
M1,M0:工作方式选择位 。
=00:13位定时器/计数器; =01:16位定时器/计数器(常用); =10:可自动重装的8位定时器/计数器(常用); =11:T0 分为2个8位定时器/计数器;仅适用于T0。 C/T :定时方式/计数方式选择位。 = 1:选择计数器工作方式,对T0/T1引脚输入的外部事件 的负脉冲计数; = 0 :选择定时器工作方式,对机器周期脉冲计数定时。 如下页图所示。
CPL P1.0 MOV TH0,#15H MOV TL0,#0A0H
START:MOV SP,#60H MOV P1,#0FFH
SETB TR0 POP PSW
MOV TMOD,#01H MOV TH0,#15H MOV TL0,#0A0H
POP ACC RETI END
SETB EA
Байду номын сангаас
SETB ET0
定时器/计数器0采用工作方式1,其初值为:
21650ms/1s=6553650000=15536=3CB0H
电路图如下:
郑州大学
docin/sundae_meng
单片机脉冲计数器程序

单片机脉冲计数器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。
单片机脉冲计数

单片机脉冲计数单片机脉冲计数是指通过单片机对输入的脉冲信号进行计数。
在工业自动化、电子测量等领域中,脉冲计数广泛应用。
单片机脉冲计数是一种高精度、高可靠性的计数方式,可以实现对脉冲信号的精确计数和处理。
一、单片机脉冲计数的原理单片机脉冲计数的原理是通过单片机的计数器来实现的。
当有脉冲信号输入时,单片机的计数器开始计数。
在计数的过程中,单片机可以通过编程来实现对计数器的控制,如计数器的清零、计数器的读取等操作。
当计数结束时,单片机可以通过计算来得到脉冲信号的频率、周期、脉宽等参数。
二、单片机脉冲计数的步骤单片机脉冲计数的步骤主要包括以下几个方面:1.硬件电路设计硬件电路设计是单片机脉冲计数的重要环节。
在设计电路时,需要根据实际需要选择合适的计数器、脉冲输入口等元器件,并合理布局电路,确保电路的稳定性和可靠性。
2.编写单片机程序编写单片机程序是单片机脉冲计数的关键。
在编写程序时,需要考虑计数器的清零、计数器的读取、频率、周期、脉宽等参数的计算等多个方面。
同时,还需要考虑程序的效率和稳定性,确保程序能够正确地运行。
3.测试和调试测试和调试是单片机脉冲计数的最后一步。
在测试和调试时,需要使用示波器、计数器等设备进行检验,确保计数的精度和稳定性符合要求。
如果发现问题,需要及时进行排查和解决。
三、单片机脉冲计数的应用单片机脉冲计数在工业自动化、电子测量等领域中有着广泛的应用。
例如,可以用于物料计数、流量计量、速度检测、频率测量等方面。
在电子测量领域中,单片机脉冲计数可以实现高精度的波形测量和分析,如脉冲宽度测量、脉冲周期测量等。
四、单片机脉冲计数的优点单片机脉冲计数具有以下几个优点:1.高精度:单片机脉冲计数可以实现高精度的计数和测量,可以满足高精度的应用需求。
2.高可靠性:单片机脉冲计数采用数字化处理,具有高可靠性和稳定性,可以保证计数结果的准确性和可靠性。
3.易于扩展:单片机脉冲计数可以通过编程来实现计数器的扩展和功能的扩展,可以满足不同应用场合的需求。
单片机脉冲计数电路设计 毕业设计论文

本科毕业论文(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 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机的定时器模式

单片机的定时器模式
单片机的定时器模式有以下几种:
1. 定时/计数模式(T/C mode):定时器用作定时器或者计数器,在设定时间或者计数到设定值后触发中断或者输出信号。
2. 输入捕获模式(Input Capture mode):定时器用于测量输入信号的脉冲宽度或者周期,在每次捕获到输入信号时记录定时器的值。
3. 输出比较模式(Output Compare mode):定时器用于与某个参考值进行比较,当定时器的值与参考值相等时,可以触发中断或者产生输出信号。
4. 脉冲宽度调制模式(PWM mode):定时器通过改变输出信号的占空比来生成脉冲宽度可调的方波,用于控制电机速度、LED亮度等应用。
5. 脉冲计数模式(Pulse Count mode):定时器用于计数输入信号的脉冲个数,在达到设定的脉冲数后触发中断或者产生输出信号。
这些定时器模式可以根据单片机的型号和品牌的不同而略有差异,具体的定时器模式可以参考单片机的技术手册或者开发工具的相关文档。
单片机计数器原理

单片机计数器原理
单片机计数器是一种用来计数或记录事件发生次数的电子装置。
它由一些逻辑门和触发器组成,能够实现多种不同的计数方式。
单片机计数器的工作原理是基于二进制数的变化。
它包括一个计数器寄存器,该寄存器可以保存当前计数值。
每当计数器收到一个时钟脉冲时,它将根据计数方式对计数值进行修改。
在计数器工作过程中,需要设置计数初始值和计数方式。
计数器的初始值决定了计数开始时的值,而计数方式决定了计数的规则和变化方式。
常见的计数方式包括二进制计数、BCD计数和循环计数等。
在二进制计数方式下,计数器从0开始,依次递增至最大值,再从0开始循环。
在BCD计数方式下,计数器以十进制方式
计数,每当计数器值达到9时,将进位信号传递给高位,并从
0开始计数。
在循环计数方式下,计数器按照预先设置的规则
进行循环计数。
计数器的输出可以用于各种应用,例如生成周期性脉冲、测量脉冲频率、分频等。
通过改变计数器的初始值和计数方式,可以实现不同的计数需求。
总的来说,单片机计数器是一种能够实现计数功能的电子设备,它根据不同的计数方式和初始值,可以实现多种计数规则和用途。
单片机方波脉冲计数控制

桂林电子科技大学单片机最小应用系统设计报告指导老师:吴兆华学生:张亚鲁学号:082011224桂林电子科技大学机电工程系目录一、实验课题及要求 (3)二、实验目的 (3)三、系统硬件电路 (3)3.1硬件电路说明 (4)3.3最小系统控制部分 (6)3.3.1晶振电路 (6)3.3.2复位电路 (8)四、软件设计 (11)4.1程序流程图 (11)4.2程序源代码 (12)五、设计总结 (14)六、参考文献 (15)一、实验课题及要求用8031单片机控制可测方波1~100Hz,并显示每分钟计数的脉冲二、实验目的1、加深外部中断指令的基本使用方法;2、熟悉外部中断处理程序的编程方法;3、进一步熟悉8051内部定时/计数器的初始化、使用方法及编程方法;4、进一步掌握8051中断处理程序的编程方法和应用;5、掌握I/O接口的基本方法;6、学会使用并熟练掌握电路绘制软件Protel99SE(或DXP)。
三、系统硬件电路整个设计主要包括单片机基本的晶振电路,按键复位电路,设计中需要的LED管,开关、按键等。
具体的电路图如下图1所示图1系统设计总电路图3.1硬件电路说明本次硬件系统包括单片机最小系统、外部中断电路、LED显示电路三部分在下面介绍中对每一部分都有详细的说明。
3.2 AT89C51单片机简介AT89S51单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL 公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器,既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
图2 AT89S51引脚图AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
班级:自动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; //开启外部中断0
IT0=1; //设置成下降沿触发方式
TMOD=0x01; //设置定时器0为模式1,即16位计数模式
TH0=(65536-10000)/256; //计数时间为10ms
TL0=(65536-10000)%256;
ET0=1; //开启定时器0中断
TR0=1; //启动定时器0
P2=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--)
;
}。