STC15W408AS单片机定时器计数器简介

在日常生活中,我们经常使用灯光来传递某种信息,如交通指示灯、报警灯等。这些灯光的变化是由控制电路中单片机来控制的。
下面我以利用stc单片机来的定时器来控制led灯有规律的闪动来向大家介绍其中的控制原理。
一、stc15w408as控制led灯电路
二、定时器工作原理
定时器是一种计时的装置。是于1876年由英国外科医生索加申请的一项专利,定时器的出现给我们的生活带来了巨大的改变。起初,我们使用沙漏来对时间进行确定;在定时器出现的初始阶段,它利用机械钟带动 开关 来达到控制煤气阀 门 的目的,但需每周对其上一次发条;1918年后,使用电钟进行计时,使得定时器无需再上发条;
在单片机中,我们利用单片机中的计数器对单片机的脉冲进行计数来定时。也就是当计数脉冲个数达到一定的数时,就发生一次中断,然后又重新开始计数,再次达到这个数时,又进行一次中断。如此不断重复这个过程,直到关闭定时器为止。
三、stc15w408as单片机定时器计数器简介
stc15w408as只有定时器0和定时器2,工作工作位定时器或者计数器模式。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每1个时钟得到一个计数脉冲,计数值加1。以定时器0为例,当定时器/计数器t0工作在定时模式时,特殊功能寄存器auxr中的t0x12决定是系统时钟/12还是系统时钟/1后让t0进行计数。
定时器/计数器0有4种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模式),模式2(8位自动重装模式),模式3(不可屏蔽中断的16位自动重装载模式)。
stc15w408as单片机定时器计数器0相关寄存器
四、定时器/计数器0控制寄存器tcon
tcon为定时器/计数器t0的控制寄存器,同时也锁存t0、溢出中断源和外部请求中断源等,tcon格式如下:
tf0:t0溢出中断标志。t0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置“1”tf0,向cpu请求中断,一直保持cpu响应该中断时,才由硬件清0。
tr0:定时器t0的运行控制位。该位由软件置位和清零。当gate(tmod.3)=0,tr0=1时 就允许t0开始计数,tr0=0时禁止t0计数。当gate(tmod.3)=1,tr0=1且int0输入高电平时,才允许t0计数,tr0=0时禁止t0计数。
五、定时器/计数器工作模式寄存器tmod
定时和计数功能由特殊功能寄存器tmod的控制位c/t进行选择,tmod寄存器的各位信息如下表所列。
六、辅助寄存器auxr
stc15系列单片机 1t 的8051单片机,为兼容传统8051,定时器0 , 复位后是传统8051的速度,即12分频,这是为了兼容传统8051。
七、定时器t0的中断控制寄存器ie
八、定时器t0的中断控制寄存器ip
九、定时器0控制下的led闪亮程序
#define fosc 11059200l#define t1ms (65536-fosc/1000) // 1 t模式#define bit0 0x01#define bit1 0x02#define bit2 0x04#define bit3 0x08#define bit4 0x10#define bit5 0x20#define bit6 0x40#define bit7 0x80#define true 1#define false 0#define pin_led p32#define pin_led_m1 p3m1#define pin_led_m0 p3m0#define pin_led_bit bit2#define pinled_high() pin_led=1#define pinled_low() pin_led=0#define bool unsigned char#define uint unsigned intuint mtimer500ms=0;void pinled_dirout(void);void timer0_init(void);bool bledon=false;void main(void){ pinled_dirout(); pinled_high(); timer0_init(); while(true) { } }void pinled_dirout(void){ pin_led_m1 &=~pin_led_bit; pin_led_m0 |=pin_led_bit; }void timer0_init(void){ auxr |= 0x80; //定时器0为1t模式 tmod = 0x00; //设置定时器为模式0(16位自动重装载) tl0 = t1ms; //初始化计时值 th0 = t1ms > > 8; tr0 = 1; //定时器0开始计时 et0 = 1; //使能定时器0中断 ea = 1;}// 定时中断函数:定时1msvoid timer0_isr (void) interrupt 1{ mtimer500ms++; if(mtimer500ms >=500) { mtimer500ms=0; if(bledon) { bledon=false; pinled_high(); }else{ bledon=true; pinled_low(); } } }

英特尔推出金字塔型的数据存储架构,使得数据更加靠近CPU和GPU
在5G还没到来以前,却开启了“后全面屏时代”
德州仪器ADC12DJ5200RF器件功能方框图介绍
5G应用“爆点”尚未出现,2B和2C应“齐头并进”发展
Bosch Sensortec推出首款电容式气压传感器BMP581
STC15W408AS单片机定时器计数器简介
为何要在汽车信息娱乐系统中使用D类音频放大器
送给妈妈最好的礼物!电动拖把哪个牌子好?
WPA2加密协议不再安全,漏洞竟达10个之多
KUKA机器人控制系统等待信息提前继续运行程序
在Altera CycIone II系列FPGA中用VHDL实现E2PROM控制器的设计
PowerShell运行的是什么脚本
苹果Macbook Pro依然热销 国产神舟优雅X4-SL5S1想挑战它
宏碁推出新一代热介面材料 Predator PowerGen
MINIX3代码编译运行案例分析
PID调节,最生动的讲解!
pll倍频最大倍数
推荐几个半入耳式蓝牙耳机,300以内半入耳蓝牙耳机
Ameco成都分公司圆满完成了澳门航空一架A320飞机交付检工作
第三季度智能手表出货量为270万部