8051有几个定时器/计数器?要让他们按需要的状态工作需要哪些操作?
发布网友
发布时间:2023-07-10 20:13
我来回答
共3个回答
热心网友
时间:2024-12-05 06:53
8051这个系列也太广泛了
你想说的是ATMEL的还是STC的还是新茂或是笙泉的等等
一般我们常用的是ATMEL和STC。
就教科书上来说的是89C51只有两个定时器0和1,89C52是三个:0、1、2;或者形象点来说,你在KEIL中写头文件时,REG51只有两个定时器,这里的程序是即使程序中用了定时器2,可是编译不出来的。
但事实上各种厂家的PDF要求又不同……这个你得看下PDF了
不过操作是一样的,定时器0和1是一样的操作,而且各有四种模式,就以最常用的举例说明:
//定时器1,模式1:16位,晶振:12M
TMOD=0x10; //“1”位置表示定时器1,而“1”值表示工作方式1
TH1=(65536-50000)/256; //装载初值为11.0592M晶振定时50ms 数为 45872
TL1=(65536-50000)%256;
EA=1; //打开总中断
ET1=1; //允许定时器0中断
TR1=1; //启动定时器0
//12M每个周期为1/12M=1us,24M则为1/24M=0.5us,以此类推。TH1中的50000表示50000个周期us,即50000us,想用其他的可以再代入
热心网友
时间:2024-12-05 06:53
8051有2个定时器,分别是定时器0和定时器1.
TMOD=0x01; //定时器0 工作方式1
TH0=(65536-45872)/256; //装载初值为11.0592M晶振定时50ms 数为 45872
TL0=(65536-45872)%256;
EA=1; //打开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
热心网友
时间:2024-12-05 06:53
你还要看看中断程序怎么写的,TMOD=0x00的话采用的是方式0,也就是13位计数方式,0xcb和0x1d的就是11001011 11101=6525,初值是6525,13位最大计数值是8192,技术个数就是1667,4MHz晶振,每周期3us,1667*3us=5000us,所以实际上它中断发一次请求是5000us,中断服务程序里面肯定还有软件计数,对于这5000us,200个5000us才是1秒,然后P1.0口反相输出一次,所以我觉得这个程序的中断子程序应该有个200次的计数才对。