24位定时器, T2/T3/T4增加了8位预分频

24位定时器, T2/T3/T4增加了8位预分频,所以T2/T3/T4是支持24位的定时器
====8H/8G/8A/8C系列
T0/T1/T2/T3/T4增加了8位预分频,所以T0/T1/T2/T3/T4是支持24位的定时器
====32G系列,AI8051U系列
 



 



 



 


T2/T3/T4增加了8位预分频,所以T2/T3/T4是支持24位的定时器
 

定时器的自动程序生成器, 见 V6.95M 或以上版本

AiCube-可视化 图形 I/O配置 体验

``` #include "all.h" void Timer0_Init(void) //100微秒@24.000MHz.定时器0, { AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xA0; //设置定时初始值 TH0 = 0xF6; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; // 开启定时器0中断 } void Timer1_Init(void) //10微秒@24.000MHz.定时器1 { AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 TL1 = 0x10; //设置定时初始值 TH1 = 0xFF; //设置定时初始值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 ET1 = 1; // 开启定时器0中断 // TMOD = 0x00; // TL1 = 0x10; //65536-11.0592M/12/1000 // TH1 = 0xff; // TR1 = 1; //启动定时器 // ET1 = 1; //使能定时器中断 // EA = 1; } void UART_Init(void) //定时器2,波特率9600,用来做串口中断 { SCON=0x50; T2L=0x8f; T2H=0xfd; AUXR= 0x15; ES=1; EA=1; } void Timer3_Init(void) //100微秒@24.000MHz.定时器3 { T4T3M |= 0x02; //定时器时钟1T模式 T3L = 0xA0; //设置定时初始值 T3H = 0xF6; //设置定时初始值 T4T3M |= 0x08; //定时器3开始计时 }#include "all.h" unsigned char u8time=255; unsigned char u8timing=0; void TM1_Isr() interrupt 3 //定时器中断1每10uS执行一次 { //测试端口 u8timing++; if(u8timing==50000) { P_LED0= !P_LED0; } } //void TM3_Isr() interrupt 19 //定时器中断3每100uS执行一次 //{ // P_LED1 = !P_LED1; //测试端口 // if(u8timing<u8time) // { // u8time=u8timing; // } //}#include <ai8h.h> #include "intrins.h" #include "all.h" unsigned char receiveFlag = 0; unsigned int receiveData = 0; void main() { unsigned char i; // unsigned char len; P_SW2 |=0x80; UART_Init(); Init(); Timer0_Init(); Timer1_Init(); Timer3_Init(); while(1) { SysClk_Scan(); if(ms1==50) { receiveFlag=1; } if(receiveFlag) { EA = 0; // len = byte; // byte = 0; receiveFlag = 0; EA = 1; for(i=0; i<byte; i++) { receiveBuffer[i] += 1; } SendPacket(receiveBuffer, byte); byte = 0; } } } #include "all.h" bit F1ms,F10ms,F01s,F1s; unsigned char U8_TimingTo1ms; unsigned char ms1; unsigned int timeoutCounter = 0; void teme(void) interrupt 1 //10毫秒@24.000MHz,定时器0中断 { U8_TimingTo1ms++; ms1++; } void SysClk_Scan(void) { unsigned char timing1ms; unsigned int timing10ms; F01s=0; F10ms=0; if(U8_TimingTo1ms>=10) //1ms { U8_TimingTo1ms=U8_TimingTo1ms-10; timing1ms++; // ms1++; if(timing1ms>=10) //10ms { timing1ms=0; F10ms=1; timing10ms++; if(timing10ms>=10) //01s { timing10ms=0; F01s=1; } } } }```不会进入定时器中断1是什么原因
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值