首页 > 编程知识 正文

555定时器产生1hz脉冲,计数器的功能

时间:2023-05-04 00:17:10 阅读:162585 作者:2482

使用定时/计数器T0,从P1.0输出周期为1s的方波,使发光二极管以1Hz闪烁,石英振动频率为12MHz。

2021-01-20、51单片机学习笔记

代码(精简注释(/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ) void main () {num=0; //初始化计数变量EA=1; //接通特殊功能寄存器IE内的主开关EAET0=1; //接通特殊功能寄存器IE内的开关ET0TMOD=0X01; //0000 0001//后4位,GATE=0,C/T=0,M1M0=01; 中断源T0、方式1、16位定时器th0=(65536-50000 )/256; //初始化、装填初始值TL0=(65536-50000 ) %6; TR0=1; //启动计时器while(1) if ) num==20 ) {num=0; //中断函数每执行20次就初始化计数变量LED1=~LED1; //反转}//每执行20次中断函数,led1就会反转。 20*50ms=1s,即led1以1s间隔交替点亮熄灭}//中断函数中断源: '定时/计数器0(T0 )、符号1void time0) interrur //初始化、装填初始值60 //初始化,填充初始值176 (八进制) num; //计数变量自增加//*方式1在每个机器周期进行计数,在全部计数后溢出。 申请中断,这里是从15536(=65536-50000 )的位置开始计数,溢出到65535的位置,再加1,到0再加50000次(1),机器周期为1us的时候* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *晶振频率12 MHz void main () {num=0; //初始化计数变量EA=1; //接通特殊功能寄存器IE内的主开关EAET0=1; //接通特殊功能寄存器IE内的开关ET0TMOD=0X01; //0000 0001/*TMOD是定时器/计数器的动作模式寄存器,决定动作模式和功能。 后4位用于T/C0,前4位用于T/C1。 从左到右:前4位:[GATE|C/T|M1|M0]后4位:[GATE|C/T|M1|M0] ((此处选择T/C0,使用后4位,因此前4位设置为0 ) ) (其中,TR0对应于T/C0; TR1要开始支持t/C1 (GATA=1时,计时器/计数器) T/C )动作,必须满足两个条件。 1 .将tr0或TR1设置为1。 2 .同时外部中断端子INT0/1也是高电平时。 (INT0对应于T/C0; INT1选择T/C1 ) ((此处GATE=0,TR0=1) )、00000xxx )与c/t:时序/计数模式选择位相对应。 C/T=0是定时模式; C/T=1是计数模式。 (这里C/T=0,选择定时器模式) ) 000000xx ) m1m0)动作模式设定位。 计时器/计数器有4种动作方式,通过M1M0进行设定。

M1M0=00,方式0,13位定时器/计数器M1M0=01,方式1,16位定时器/计数器M1M0=10,方式2,8位自动重读定时器/计数器M1M0=11,方式3,T0是两个独立的//初始化、装填初始值、装填初始值176(8进制(/*方式1 )1(M1M0=01 )、定时器) C/T=0)模式方式1计数位数为16位,TL0为低位8位,TH0为高位8位, 16位1计数器16位的寄存器可以装填的范围为0~65535位,共计65536个(10 ) (=1111111111111111111 )2)=ffff ) 16 ) 7777 )8) 16位计时器0的//前8位=差对256(2的8次方)求商TL0=(65536-n ) %6; //下位8位=差相对于256(2的8次方)为馀数) */TR0=1起动定时器/*TR0(tcon.4 ) T/C0运转控制位tr0被置1时,T/C0开始动作; TR0设定为0时,T/C0停止动作。 TR0由软件设置为1或0。 因此,可以通过软件控制计时器/计数器的启动和停止。 */while(1) if(num==20 ) {num=0; //中断函数每执行20次就初始化计数变量LED1=~LED1; ///反转}//中断函数每执行20次,led1反转一次,以20*50ms=1s,即led1为1s的间隔交替点亮熄灭}//中断函数中断源: '定时/计数器0(t0 分别为:外部中断0(int0)--0定时/计数器0 ) t0 )--1外部中断1(int1)--2定时/计数器1(t1 )--3串行端口--4,自上而下//初始化,填充初始值176 (八进制) num; //计数变量自增加//* ((此处装填的个数为50000 ) ) ) ) fosc=12MHz,振荡周期=1/12um,机器周期=1us ) ) 50000*1us=50ms, 一次执行延迟50ms ) )振荡周期)向单片机提供振荡源的周期(振荡源的相邻的两个同方向峰值之间的时间)一个机械周期等于12个的振荡周期方式1按每个机械周期进行计数,在完全计数后,溢出在此,从15536(65536-50000 )位置开始计数,每次加1再加1,到返回0为止,进行50000次"加1 ",在机器周期为1us的情况下,每次加1需要1us,整体的时间为50000秒

本文只是个人的学习笔记,有很多错误,欢迎斧正!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。