📄 timer.c
字号:
/*
void Timer0_init(void) //0.03秒
{
TCCR0=0b00000101;
TCNT0=39;
TIMSK=0x01;
}
*/
//&&&&&&&&&&&&&&&&&&&&&&&&
#define SET_T1_INTR TIMSK |= 0b00000100;
#define CLR_T1_INTR TIMSK &= 0b11111011;
void Timer1_init(void)
{
TCCR1B = 0b00000001; //无分频
// TCNT1=0x735f;
TCNT1 = 0xf70c; //4M时0.5个字符-0.000573s产生一个中断
TIMSK = 0b00000100; //使能T1中断
}
//&&&&&&&&&&&&&&&&&&&&&&&&
ISR(SIG_OVERFLOW0)
{
//PORTC=0xff;
//write("t\0");
TCNT0=39;
if(bit_is_set(Startup_counter_flg,0))
{
counter0 ++;
if(counter0 >= 110)
{
Startup_counter_flg &= 0b11111110;
}
}
if(bit_is_set(Startup_counter_flg,1) )
{
counter1 ++;
if(counter1 >= 110)
{
Startup_counter_flg &= 0b11111101;
counter1 = 0;
}
}
}
ISR(SIG_OVERFLOW1)
{
TCNT1 = 0XFF39;
PORTC &= 0XFB;
// writeln("here");
}
modbus
? 1个起始位
? 8个数据位,最小的有效位先发送
? 1个奇偶校验位,无校验则无
? 1个停止位(有校验时),2个Bit(无校验时)
计数方向始终向上( 增加), 且没有计数器清除操作。当计数器值超过最大8 位值 (MAX
= 0xFF) 时,重新由0x00 开始计数。
TOV0 标志可用定时器溢出中
断清零,同时定时器的分辨率可通过软件提高。可随时写入新的计数器值。
CS02 CS01 CS00 说明
0 0 0 无时钟, T/C 不工作
0 0 1 clkI/O/1 ( 没有预分频)
0 1 0 clkI/O/8 ( 来自预分频器)
0 1 1 clkI/O/64 ( 来自预分频器)
1 0 0 clkI/O/256 ( 来自预分频器)
1 0 1 clkI/O/1024 ( 来自预分频器)
1 1 0 时钟由T0 引脚输入,下降沿触发
1 1 1 时钟由T0 引脚输入,上升沿触发
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -