将计数值按二进制数在P1口驱动发光二极管显示出来,到15秒后,计数值清零再从0开始计。
--这些发光二极管,是低电平发光,还是高电平发光?
下面的程序,适合于低电平发光:
ORG
0000H
LJMP
START
ORG
000BH
DEC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
MOV
A,
#255
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
如果是高电平发光,可以使用下面的程序:
ORG
0000H
LJMP
START
ORG
000BH
INC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
CLR
A
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
㈡ 单片机定时器/计数器程序如何掌握,我不会写
单片机定时器/计数器程序如何掌握,我不会写。
这很正常,万事开头难。
为便于理解,我用打比方的形式说明。
1、为什么叫定时器/计数器?因为可以对内部时钟计数(定时器)也可以对外部脉冲计数(计数器)。
2、好比你有一个水桶(相当于定时器/计数器),这个桶是有一定容量的(定时器/计数器使用两个字节计时/计数),现在拿一个碗从水池向桶内装水(一碗水相当于一个计时/计数脉冲),装水满了会怎么样?外溢(相当于定时器/计数器溢出)。一般我们利用的就是这个溢出功能(也有例外),因为这时候他会通知你(有溢出标志)。
3、51单片机定时器/计数器是加计数,两字节计数寄存器计数最大数65535,再多一个计数单位就回零了,同时置位溢出标志(开了中断还会引起中断)。
4、因为是加计数,你期望的计数值不一定从零开始,那就要“垫底”(赋初值)。
理顺消化一下,看是不是明白了。
编写单片机定时器/计数器程序就是设置与单片机定时器/计数器有关的寄存器,理解上边的就好办了。
㈢ 51单片机定时/计数器的问题 (代码)
TH0 = THC0; // 向TH0寄存器写入THC0常数,也就是0xEE
TL0 = TLC0; // 向TL0寄存器写入TLC0常数,也就是0x00
// 以上完成定时器0在16位模式下的初值加载,也就是0xEE00
TR0 = 1; // 开启定时器0的运行。此语句之后Timer0计数器才开始累加
ET0 = 1; // 开启定时器0的中断。此语句之后,Timer0计数器溢出才会产生中断标志
EA = 1; // 开启总中断开关。此语句之后,中断标志置位才会触发PC跳转到对应的中断向量
好好学习天天向上
㈣ 51单片机按键计数器C语言编程
#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,dis[4];
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=3;
switch(number)
P1=0x20<<number;
P0=distab[dis[number]];
}
voidint0isr()interrupt0
{
dat++;
dat%=1000;
dis[0]=dat%10;
dis[1]=dat%100/10;
dis[2]=dat/100;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}
㈤ 求解:怎么在单片机中实现计数器
用74HC161设计一个四进制计数器,使用同步置数功能。当计数到最大数3时,用一个与非门74LS00,产生一个置数信号加到置数端LD即可。下图是逻辑图,也是仿真图,是计数到最大数3时的截图。你画逻辑图时,要省掉 那个数码管,那是为了显示仿真效果的。
㈥ 单片机定时器/计数器程序,如果想让定时器T1工作在方式0 那么应该是TMOD=;如果让T1工作在方式1,那
TMOD高四位是负责定时器1的操作,低4位负责定时器0的操作。
而每个四位中的M1和M0负责控制定时器工作方式,其中
M1M0 = 00, 定时器工作在方式0
M1M0 = 01,方式1
M1M0 = 10,方式2
M1M0 = 11,这种设置只对定时器0有效,表示定时器0工作方式
因此,T1工作在方式0,TMOD = 00000000;
T1工作在方式1,TMOD = 00010000;
㈦ 单片机定时器/计数器程序,如果想让定时器T0工作在方式1 那么应该是TMOD=0x01;如果让T0工作在方式0,那
TMOD =0x00;
定时模式0:TMOD=0X00;定时模式1:TMOD=0x01,;定时模式2:TMOD=0x02,:定时模式3:TMOD=0x03;
定时器的设置可以参考:http://wenku..com/link?url=ck___tBbK
㈧ 单片机计数器编程如何计数脉冲,用C语言
每50ms来了多少脉冲,那定时器就不能50ms中断一次,尽量快的中断会比较好,2个变量计数,一个计算50ms,一个累加脉冲
㈨ 单片机计数器0到999的编程怎么写
估计你说的是汇编语言。我以51为标准假设晶振为6Mhz.
计算计数初值是0CEH。计数器工作方式2。
程序:mov ie, #00h 关中断
mov tmod,#02h 置计数器工作方式2
mov th0,#0ceh 保存计数初值
mov tl0,#0ceh 值计数初值
mov r0,#0ah 置循环次数
setb tr 启动计数器
loop:jbc tf0,loop1 判断溢出标志位
ajmp loop
loop1:cjnz r0,loop xunhuan
reti 返回主程序
㈩ 简述8051单片机定时计数器编程的基本步骤
设置定时计数器的工作方式。
给定时器赋初始值:THx 和TLx;
允许定时器中断;
允许全局中断;
启动定制器;
中断函数编写(这个是目的,定时计数最终要干什么?)