电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1399|回复: 0
收起左侧

51单片机(STC12C5A60S2)的T0设置为16位计数器模式

[复制链接]

2851

主题

4614

帖子

2万

积分

官网认证

Rank: 3Rank: 3

积分
25793

活跃会员热心会员推广达人优秀版主

发表于 2023-5-31 08:09:26 | 显示全部楼层 |阅读模式
外部输入引脚P3.4边沿触发技术增加,初始化完成后,计数器的TH0和TL0的值在一个固定值上下波动,通过软件清零也只能维持一段时间0,且外部输入不能使得计数器计数
#include <STC12C5A60S2.H>
#include "LCD1602.H"
#include "Delay.H"


unsigned int ticks=0;//时钟中断计数,一直更新
unsigned int Freq_t=0;


void Timer0_Init(void)//频率计数器,当T0/P3.4为高时计数
{
TMOD = 0x15;//设置计数器0模式0001 0101
TL0 = 0x00;
TH0 = 0x00;
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时
}


void Timer1_Init(void)//10毫秒@11.y0592MHz
{
ET1 = 1;//中断控制器
AUXR = 0xFF;//定时器时钟12T模式1011 1111
TL1 = 0x00;//设置定时初始值
TH1 = 0xDC;//设定时初始值
TF1 = 0;//清除TF1标志(中断请求信号)
TR1 = 1;//定时器1开始计时(运行控制位)
}


/*定时器1中断操作函数,读取计数器0的值,计数器0清0*/
void Timer1_Routine(void) interrupt 3
{
//1s内计数高电平个数得到频率
if(ticks==1000){
Freq_t =((TH0<<8)|TL0);//读取计数器0,16位二进制
LCD_ShowNum(1,1,Freq_t,5);
Freq_t=20000;
LCD_ShowNum(1,8,Freq_t,5);
LCD_ShowNum(2,1,TH0,3);//显示计数器的值
LCD_ShowNum(2,9,TL0,3);//显示计数器的值


TL0 = 0x00;//计数器0清0
TH0 = 0x00;
ticks=0;
}
TL1 = 0x00;//重装载定时初始值
TH1 = 0xDC;//设置定时初始值.
ticks++;
}
该会员没有填写今日想说内容.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表