代价是计数范围少一半。4、定时/计数器被拆成2个独立的定时/计数器来用。TL0能组成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。TLO使用T0状态控制位C/T、GATE、TR0、INT0,而TH0使用T1的状态控制位TR1,一般只有T1以方式2运行(当波特率发生器用),才能让T0以方式3工作。

定时器1对外部脉冲计数时TMOD高4位设置应该是5 因此TMOD=0x51;以下我的频率计程序:include //因没用到STC12C5410专有特殊功能寄存器,此处用52或51的头文件均可 define unit unsigned int define uchar unsigned char //定义以I/O口的功能 sbit beiguang=P3^2;//液晶屏背光 sbit r

//用定时计数器1作为脉冲计数器(P3.5引脚正是输入功能),定时器0作为定时器用,定时50ms产生中断 //中断4次后(即0.2s)读计数器1的数据 include define uint unsigned int define uchar unsigned char //定义以I/O口的功能 sbit rs=P1^3;//液晶屏写选择,0命令 1数据 sbit

int i; //全局变量 void timing(void) //晶振为3.6864M { TMOD|=0x01; //定时器T0,工作方式1 TH0=0xC3;TL0=0xC7; //这两个寄存器存的是计数器的计数开始的值,这两个值累加至溢出后正好是50ms ET0=1; //使T0中断可以溢出 EA=1; //开启总中断 TF0=0; //溢

计数器设定用硬件方式,提议T0定时,T1计数T0的定时跳变信号P1.0的跳变次数,计 用P1.7驱动发光二极管亮一秒灭一秒地闪烁。时钟频率为6MHz。提示:长时间定时采用定时器和计数器结合。计数器设定用硬件方式,提议T0定时,T1计数T0的定时跳变信号P1.0的跳变次数,计满五个跳变一秒,即T0定时为200ms。T0长时间定时的

51单片机实验(关于定时器计数器)

LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV SP,#5FH MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB ET0 SETB EA MOV 30H,#0 CLR P1.0 SJMP T0ISR:CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC 30H MOV A,30H CJNE A,#60,T0ISR1 T0IS

程序嘛,也很简单啊,你说用定时器,每个两秒如果单纯用一个定时器的话肯定不够用的,要结合循环判断语句,比如你采用12M的晶振,并且将定时中断时间定为50ms,那么设置一个变量,每20次就是一秒了,所以40次就是两秒。这样的话,每个40次就让led的状态(用0和1表示亮与灭)改变就可以了。main函数

void main (){ EA=1;ES=1;TMOD=0x20; //定时器T1方式为2 TH1=0xfa; //波特率设定为9600 TL1=0xfa;while(1){ if(t!=0){ k=2000/t;dalay1ms (k) ;LED0=!LED0;} if(t==0)LED0=0;} } void counter4(void) interrupt 4 { while(RI==0);RI = 0;t= SBUF;}

说一下思路吧,使用两个定时器(T0和T1),T0为P0.0的接的LED定时,T1为P0.1接LED定时,需要两个变量led1_time和led2_time来计时(单位是秒),然后分别根据LED的状态来判断led1_time(或led2_time)需要计多少秒,按照你的要求,LED1(P0.0)亮时led1_time需要计时3秒,LED1灭时led1_t

D3 D2 D1 亮、亮、亮;亮、亮、灭;亮、灭、亮;亮、灭、灭;亮、亮、亮;亮、亮、灭;灭、灭、亮 灭、灭、灭;灭、亮、亮;灭、亮、灭;灭、灭、亮 灭、灭、灭;每隔 500ms 执行一行。两行即为 1s。6s 为一个周期,共有 12 行。

LED=1; //点亮LED delay(3000); //LED持续3秒 LED=0; //灭掉LED while(1); //芯片不工作 } 在上述程序中,使用了一个计数器来实现上电后30秒的延时,然后LED点亮并持续3秒后灭掉,最后芯片不工作。需要注意的是,示例程序仅供参考,具体实现方式需要根据实际情况进行调整和优化。

2.LED=1; //假设高电平亮 3.定时中断次数设置X=m //2秒等于m次中断 4.开定时器中断 5.While(x); //未到时间停在这一步 6.关定时器中断 7.LED=0;8.定时中断次数设置X=n //3秒等于n次中断 9.开定时器中断 10.While(x); //未到时间停在这一步 11.关定时器中断

求助!!!!用单片机的定时器T1怎么写一个LED亮2秒灭3秒的程序 C语言

数字钟电路设计主要功能提供单片机外部LED显示、273址锁存片选及外部存储器2764接口电路外需要设计相关LED驱电路(1)电路原理器件选择本实例相关关键部器件名称及其数字钟电路主要功能:89S52:单片机控制LED数据显示LED1--LED6:用于显示单片机数据其三采用7段显示用于显示、、秒十位另三采用8段显示用于显示、、秒位74LS

void timer0();void main() // 主程序 { TMOD=0x01; //定时器0工作方式1 EA=1;ET0=1; //定时器0中断 TR0=1; //启动定时器0 TH0=(65536-50000)/256;TL0=(65536-50000)%256;while(1); //程序循环 } /***定时器0中断***/ void timer0() interrupt 1 { uchar t;//定义变

define FALSE0//定义布尔量'0':假 define uchar unsigned char//定义 无符号字符型数据 简称 define uint unsigned int//定义 无符号整型数据 简称 define th00x3c define tl00xb0//50ms at 12MHz(定时器工作模式1 状态)define FlickTimeAt50ms 20;//50ms×20=1s sbit LED=P1^0;void Timer

{ P1=~P1;counter=0; //定时器计5000次,counter 计100次,总计500000=500ms.} } void main(void){ P1=0;initT0();while(1);}//实测图。如下:

{ P1=~P1;counter=0; //定时器计5000次,counter 计100次,总计500000=500ms.} } void main(void){ P1=0;initT0();while(1);}//实测图。如下:

P1口8位LED以1S的周期闪烁(即亮0.5S,灭0.5S)要求用单片机的定时器计数器来工作?程序

#include #define fso=12000000 #define t0dat=65536-(fso/12)/(2/2*1000) void main() { TH0=t0dat/256; TL0=t0dat%256; TMOD=0x1; TR0=1; ET0=1; EA=1; while(1); } void intt0(void) interrupt 1 using 1 { TH0=t0dat/256; TL0=t0dat%256; TR0=1; P1

MOVTL1,#(65536-50000)MOD256;定时50000us@12MHz RETI;中断返回 END;完 功能特性 1,可以仿真63K程序空间,接近64K的16位地址空间;2,可以仿真64Kxdata空间,全部64K的16位地址空间;3,可以真实仿真全部32条IO脚;4,完全兼容keilC51UV2调试环境,可以通过UV2环境进行单步,断点,全速等操作;5

系统晶振为12MHz时,定时器的计数脉冲周期即为 1uS;要求输出周期为200us,占空比为50% 的方波,即方波的高电平时间=100uS,低电平时间=100uS。所以每定时100uS便产生一次中断,并将输出信号状态翻转一次;sbit cp=P1^7;void timer1 interrupt 3 { cp=~cp; } void main(){ TMOD=0x20; //

定时器的初值的计算如下:在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12/晶振频率。X为定时器初值。则 X=2^n-T/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8

12MHz晶振,单片机机械周期 T=12/Fosc=12/12MHz=1us;T1定时器工作模式1 为 16位定时器,定时计算公式为:t= (2^16-)×机械周期 T,将T=1us,t=20ms 代入公式得:(65536-)×1us=20ms,得:TH1:TL1=65536-20ms×1000us/ms÷1us=45536=0xB1E0,得:TH1=0xB1

1、系统晶振频率是12M,则机器周期=12/12=1us;2、定时1ms=1*1000=1000us;3、工作在方式0下:最大计数值是2^13=8192;4、定时初值=8192-(1*1000)=7192;5、换算成十六进制数为:定时初值=1C18H。定时器中断是由单片机中的定时器溢出而申请的中断。51单片机中有两个定时器T0和T1。定时/计

单片机定时器应用,设计要求:设单片机的晶振频率为12Mhz,使用定时器1,在方式0下由P1.0输出周期为10ms的等宽方波(现象可以用LED显示或者用示波器观看波形) 单片机定时器应用,设计要求:设单片机的晶振频率为12Mhz,使用定时器1,在方式0下由P1.0输出周期为10ms的等宽方波(现象可以用LED显示或者用示波器观看波形) 展

单片机定时器应用,设计要求:设单片机的晶振频率为12Mhz,使用定时器1

请问静态显示能显示两位数字吗??下面是电路图:

等待按键 LCALL DELAY JB KEY,$ MOV A,KCOUNT CJNE A,#00H,K2; 判断按键次数 SETB TR0; 第1次按键,启动定时器 MOV IE,#82H JNB KEY,$ INC KCOUNT; 按键抬起,按键次数值加1 LJMP K1K2: CJNE A,#01H,K3

delay(5);P2=0x10;P0=led[s];delay(5);P2=0x20;P0=led[g];delay(5);//TR0=0;//TR1=0;} void init(){ //TMOD=0x61; //定时器0,方式1;计数器1,方式2 TMOD=0x25;//TH0=(65536-50000)/256; //TH0=0x3C //TL0=(65536-50000)%256; // TL0=0xB0 定时50ms TH1

利用51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。2.电路原理图 见插图 3.程序设计内容 (1).定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下

define uint unsigned int define SEG_OUT P2 //段码输出口 define BIT_OUT P3 //扫描口 define KEY_IO P0 //键盘接口 sbit dot=P2^7; //LED小数点控制 uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};/

用的是多倍周期法。。首先用个计数器来计脉冲的个数,比如说是16个用定时器来记这16个脉冲的时间T。。。16/T就是你所求的频率啊。。

频率计系统设计利用单片机的定时器 计数器定时和记数 计算出频率用LED数码管显示出来即使的时间

(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。(3).把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。4.程序设计内容 (1).定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在

void display()//显示子程序 { P2=0x01;P0=tab[second/10];//显示十位 delay();P2=0x02;P0=tab[second%10];//显示个位 delay();} void main(){ TMOD=0x01;//用T0定时,中断方式 TH0 =0x3C;//晶振12M,定时50ms TL0 =0xB0;IE =0x82;while(1){ display();//调显示子程序 if

define KEY_IO P0 //键盘接口 sbit dot=P2^7; //LED小数点控制 uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"

用的是多倍周期法。。首先用个计数器来计脉冲的个数,比如说是16个用定时器来记这16个脉冲的时间T。。。16/T就是你所求的频率啊。。

首先用个计数器来计脉冲的个数,比如说是16个 用定时器来记这16个脉冲的时间t。。。16/t就是你所求的频率啊。。

如何用单片机的定时/计数器计算频率并用LED数码管显示?

#include"reg51.h" #include "intrins.h" //_nop_();延时函数用 #define uchar unsigned char #define uint unsigned int #define SEG_OUT P2 //段码输出口 #define BIT_OUT P3 //扫描口 #define KEY_IO P0 //键盘接口 sbit dot=P2^7; //LED小数点控制 uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf}; /* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */ uchar data dis_buff[6]={1,2,0,0,0,0}; //待显示单元数据,共6个数据 uchar data keytemp,key; //键值存放 uchar data t10ms=0,ts=0,tmin=0,thour=12,t50ms=0; uchar data flag=0x00; bit flag_key=0; /*************1毫秒延时程序**************/ delay1ms(int t) { int i,j; for(i=0;i<t;i++) for(j=0;j<120;j++) ; } // /***********LED显示动态扫描函数**********/ display() { char k; char m=0xfe; for(k=0;k<6;k++) //6位LED扫描控制 { BIT_OUT=0xff; SEG_OUT=tab[dis_buff[k]]; if(k==1|k==3) {dot=0;} BIT_OUT=m; if((flag!=0)&(t50ms>=10)) { switch(flag) { case 1:BIT_OUT|=0x03;break; case 2:BIT_OUT|=0x0c;break; case 3:BIT_OUT|=0x30;break; default:break; } } delay1ms(3); m=(m<<1)|0x01; } } /***************按键扫描函数*************/ void keyscan() { uchar i,t=0xef; //1110 1111 KEY_IO=0x0f; keytemp=(~KEY_IO)&0x0f; if(keytemp!=0) //0000 0000 ;0000 1000; 0000 0100; 0000 0010; 0000 0001; { delay1ms(1); for(i=0;i<4;i++) { KEY_IO=t; keytemp=(~KEY_IO)&0x0f; if(keytemp!=0&flag_key==0) { flag_key=1; switch(keytemp) { case 0x08:key=0*4+i;break; case 0x04:key=1*4+i;break; case 0x02:key=2*4+i;break; case 0x01:key=3*4+i;break; default:break; } switch(key) { case 0:thour++;if(thour==24)thour=0;break; case 1:tmin++;if(tmin==60)tmin=0;break; case 2:ts++;if(ts==60)ts=0;break; default:break; } } t=(t<<1)|0x01; } } else flag_key=0; } /**************初始化程序****************/ void initiation() { TMOD=0x11; TH0=-10000/256; TL0=-10000%256; //10MS定时初值(T0计时用) TH1=-25000/256; TL1=-25000%256; //25MS定时初值(T1计时用) ET0=1; ET1=1; TR0=1; TR1=1; EA=1; } /****************定时器0中断服务程序*****/ void init_timer0(void) interrupt 1 { TH0=-10000/256; TL0=-10000%256; //10MS定时初值(T0计时用) t10ms++; if(t10ms==100) { t10ms=0; ts++; if(ts==60) { ts=0; tmin++; if(tmin==60) { tmin=0; thour++; if(thour==24)thour=0; } } } dis_buff[0]=thour/10; dis_buff[1]=thour%10; dis_buff[2]=tmin/10; dis_buff[3]=tmin%10; dis_buff[4]=ts/10; dis_buff[5]=ts%10; } /****************主程序******************/ main() { initiation(); while(1) { display(); keyscan(); } } 这是一个矩形按键控制6位数码管的一个时钟,里面都包含你所说的要求了,至于你说的哪个计数器可以通过TMOD寄存器来设置的。计数器跟定时器的区别是没有益出中断的功能。希望对你有帮助。
被测频率较高时,可以采用楼主所说的《定时计数法》。 如果频率较低,几秒钟,都不来一个脉冲,这方法就不行了。 就应该采用《测量周期法》来测频。
void Timer1_Init() { TMOD = 0x10; //定时器1,工作方式1; TH1 = (65536-10000)/256; //定时器1定时10mS TL1 = (65536-10000)%256; //定时器1定时10mS ET1 = 1; //打开定时器1中断; EA = 1; //打开总中断; TR1 = 1; //定时器1开始计数; } 没有手册,印象中是这样;下个手册看看就知道了;
#include"reg52.h" #define uchar unsigned char sbit Wave=P1^0; void Timer0() interrupt 1 { static uchar t50ms; TL0=0xb0; TH0=0x3c; t50ms=++t50ms%20; if(!t50ms) Wave=~Wave; } void TimerInit() { TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; EA=1; ET0=1; } void main() { TimerInit(); while(1); } 直接打的,没进行编译,希望不会错。
都没说什么语言
#include #define uchar unsigned char uchar times=0; sbit p17=P1^7; sbit p16=P1^6; sbit p15=P1^5; sbit p14=P1^4; sbit p13=P1^3; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; times++; p17=~p17; p16=~p16; p15=~p15; p14=~p14; if(times>=5) { p13=~p13; times=0; } } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); }
这个和晶振有关的,假设是12M吧 你给我邮箱,我发你一个工具吧,可以生成代码的 #include sbit LED=P1^1; void InitTimer0(void) { TMOD = 0x01; TH0 = 0x0D8; TL0 = 0x0F0; EA = 1; ET0 = 1; TR0 = 1; } unsigned int time; void main(void) { time=0; LED=0;//1关 0开; InitTimer0(); while(1); } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x0D8; TL0 = 0x0F0; time++; if(time==200)//第二秒 { LED=1; } if(time==500)//第五秒 { LED=0; time=0; } }
这个很简单,定时器设置成100ms中断一次(或是200ms,看自己需求),在中断里放标志位,在主程序while(1)内处理标志位,并++计数,10次就是1秒,20次就是2秒,50次就是5秒,随便怎么处理
ORG 0000H LJMP MAIN ORG 000BH LJMP T0_INT ORG 0100 MAIN: MOV TMOD,#01H ;定时器0设为模式1 MOV TH0,#0D8H ;赋初值(65536-10000) MOV TL0,#0F0H MOV A,#00H ;A=0 MOV P1,A ;P1=A MOV R0,#20 ;R2=20 SETB EA ;开中断 SETB ET0 ;开定时器0中断 SETB TR0 ;启动定时器0 LOOP: NOP ;空操作 LJMP LOOP ;转LOOP T0_INT: MOV TH0,#0D8H ;重赋初值 MOV TL0,#0F0H DJNZ R0,OUT ;R0减1不为0转OUT MOV R0,#20H ;R0重赋初值 CPL A ;A取反 MOV P1,A ;P1=A OUT: RETI END ;该程序结果在P1上产生周期为400毫秒的脉冲输出,控制LED灯的话,以400毫秒周期闪烁
一样的,定时器和计数器是这个功能的一体两面。 当使用内部时钟作为脉冲源时,它就是定时器,当使用外部脉冲时,它就是计数器。当然,这个需要寄存器配置