单片机
可以用来
作
定时器
或者
外部计数器
作
定时器
一般以中断
形式完成,当
定时器溢出后
产生中断,中断服务程序
先重装初始值,
再处理中断
需要做的事情,(如果不重装初始值
计数值从
0
开始继续计数)
作
计数器
一般可以
记录
单位时间内
的计数值(如
外部输入脉冲个数
/
秒)
#include<stdioh>
#include<AT89X52h>
unsigned char flag;
unsigned char commond;
void main()
{
TMOD=0x21;//计数器1工作方式2,计数器0工作方式1
TH1=TL1=0xfb; //波特率9600
TR1=1; //开始计时
SCON=0x50; //串口工作方式1 ,允许接收数据
EA=1;
ES=1; //打开串口中断
ET0=0; //禁止计时器TO中断
while(1)
{
if(flag)
{
flag=0;
}
}
}
void comm() interrupt 4 using 2
{ //unsigned char i;
if(RI)
{
RI=0;
flag=1;
commond = SBUF;
P2= commond;
RI=0;
if(commond=='e')
{
ET0=1; //打开计数器0中断
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //延时05秒
TR0=1; //开始计时
}
}
}
void time0() interrupt 1 using 3
{
unsigned char j,k;
EA=0;
while(j>10)
{
j=0;
P3_4 = ~P3_4;
k++;
if(k>13)
{
TR0 =0;
k = 0;
}
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
EA =1;
}
你的程序好像是定时器中断那里有问题,这个改过的可以实现你的要求了
能记录下INT0引脚上输入的脉冲个数
--记在什么地方?
T0定时
在P12引脚输出频率为100HZ的方波以及
在P11引脚输出频率为10hz的方波
--T0 定时 5ms。
--中断一次,就把 P12 取反,这就是 100Hz。
--中断十次,就把 P11 取反,这就是 10Hz。
利用7数码管显示中断次数的方法可以通过以下步骤实现:
1 在中断处理程序中定义一个计数器变量,用于记录中断次数。
2 在主程序中初始化7数码管的引脚,将其设置为输出模式。
3 在主程序中循环读取计数器变量的值,并将其转换为7数码管的显示格式。
4 将转换后的数码管显示值输出到对应的引脚上,实现中断次数的显示。
具体实现方式可以参考以下代码:
```c
int count = 0; // 初始化计数器变量
void interrupt_handler() {
count++; // 中断处理程序中更新计数器变量
}
void setup() {
// 初始化7数码管引脚为输出模式
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(A6, OUTPUT);
}
void loop() {
// 将计数器变量转换为7数码管显示格式
int digit1 = count / 1000;
int digit2 = (count / 100) % 10;
int digit3 = (count / 10) % 10;
int digit4 = count % 10;
// 在数码管上显示转换后的值
digitalWrite(A0, (digit1 == 0) LOW : HIGH);
digitalWrite(A1, (digit2 == 0 && digit1 == 0) LOW : HIGH);
digitalWrite(A2, (digit3 == 0 && digit2 == 0 && digit1 == 0) LOW : HIGH);
digitalWrite(A3, (digit4 == 0 && digit3 == 0 && digit2 == 0 && digit1 == 0) LOW : HIGH);
digitalWrite(A4, (digit4 == 1 || digit4 == 3 || digit4 == 5 || digit4 == 7) HIGH : LOW);
digitalWrite(A5, (digit4 == 2 || digit4 == 3 || digit4 == 6 || digit4 == 7) HIGH : LOW);
digitalWrite(A6, (digit4 == 4 || digit4 == 5 || digit4 == 6 || digit4 == 7) HIGH : LOW);
delay(100); // 延时等待,以降低数码管闪烁频率
}
```
需要注意的是,以上代码仅为示例,具体实现方式可能会因硬件平台和编程语言的不同而略有不同。
嘿嘿 俺来帮你解决
1 选择计数脉冲的上升沿 触发中断 即设外部中断0为边沿触发方式
2 进入外部中断0的中断服务程序后,首先要让外部中断0关中断,避免计一个脉冲时产生多次中断。
3 计数加1后,要延时一段时间,让计数脉冲稳定后,再让外部中断0重新开中断。
呵呵 赶快试试吧 如果对的话 就给俺加分吧
以上就是关于当单片机的定时器中断溢出后,计数器还计数么全部的内容,包括:当单片机的定时器中断溢出后,计数器还计数么、一个简单的单片机计数器中断计时的程序、利用中断方式设计一个计数程序,能记录下INT0引脚上输入的脉冲个数。。用汇编语言怎么编等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)