标题:
关于STC15W204S单片机的计数器
[打印本页]
作者:
qq4113787
时间:
2023-2-19 18:08
标题:
关于STC15W204S单片机的计数器
本人不才,以前的时候学过stc51单片机,用过定时器0和定时器1的方式0模式,在51单片机里是设置TMOD 基本就是设置选择哪个定时器 哪个模式,然后就是定时器赋值,然后再开启定时器,开启总中断。然后就写主程序和中断程序
今天到手了一个stc15w204s的单片机,查了手册的时候才发现只有定时器0和定时器2,定时器0是内部计时,定时器2是可计时可计数(P3.2)然后找了一顿也没看懂 貌似T0设置TMOD T2设置AUXR
但是网上没有找到类似的文章,而且我用了定时器0号选择内部1秒中断 发现已经对AUXR赋值了 也没搞懂为什么要这样写 AUXR &= 0x7F; 直接写AUXR = 0x7F;不可以吗
想请各位大佬帮忙解决一下,大概意思就是 用定时器t0获得一个一秒的中断 用T2做计数器 用来获得外部脉冲进行测速(每秒一转)
作者:
405616736
时间:
2023-2-20 02:32
void main()
{
P0M0=0x00;P0M1=0x00;
P1M0=0x00;P1M1=0x00;
P2M0=0x00;P2M1=0x00;
P3M0=0x00;P3M1=0x00;
P4M0=0x00;P4M1=0x00;
P5M0=0x00;P5M1=0x00;
P6M0=0x00;P6M1=0x00;
P7M0=0x00;P7M1=0x00;
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0=0xB0; //设置定时初始值,50毫秒@12.000MHz
TH0=0x3C; //设置定时初始值,50毫秒@12.000MHz
TF0=0; //清除TF0标志
TR0=1; //定时器0开始计时
ET0=1; //使能定时器0中断
AUXR |= 0x04; //定时器2为1T模式
AUXR |= 0x08; //T2_C/T=1, T2(P3.1)引脚为时钟源
T2H=T2L=0xff; //初始化计时值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x04; //开定时器2中断
EA=1;
while (1);
}
void tm0_isr() interrupt 1
{
static unsigned char count,counts;
if(count++==20) //50ms*20 → 1s
{
//1秒定时
}
}
void t2int() interrupt 12 //中断入口
{
//计数器
}
作者:
coody_sz
时间:
2023-2-20 10:12
楼主是否看错资料?
1、定时/计数器0和2都可以定时或对外计数,对外计数时定时器0从P1.2输入脉冲,定时器2从P3.1输入脉冲。
2、没搞懂为什么要这样写 AUXR &= 0x7F; 直接写AUXR = 0x7F;不可以吗 ?
楼主可能很少编程,这是标准做法。
AUXR &= 0x7F 是对AUXR的bit7请0,其余位不变。
AUXR = 0x7F 是将bit7写入0,其余位写入1,跟上面的操作差别很大的。重新看看C语言吧。
3、用定时器t0获得一个一秒的中断 用T2做计数器 来测速。
对于一圈一个脉冲的,这种方法很慢,误差也很大,一般用测周期的方式计算转速。
如果是300线以上的同轴编码器则可以。
作者:
wufa1986
时间:
2023-2-21 09:59
打开STC下载软件,找到对应型号,点开右边的范例程序,里面基本所有外设操作都有,整合的时候注意共用的寄存器操作即可
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1