const int test_pin1 = 2;
const int test_pin2 = 3;
volatile byte state = LOW;
void stepper_init() {
cli(); // 关闭全局中断
//设置定时器0为10kHz(100us)
TCCR0A = 0; //将整个TCCR0A寄存器设置为0
TCCR0B = 0; //将整个TCCR0B寄存器设置为0
TCNT0 = 0; //将计数器值初始化为0
//设置计数器为10kHZ,即100us
OCR0A = 24; //比较匹配寄存器= [16,000,000Hz /(预分频器*所需中断频率)] - 1
//比较匹配寄存器=24,中断间隔=100us即中断频率10khz
TCCR0A |= (1 << WGM01); //打开CTC模式
TCCR0B |= (1 << CS01) | (1 << CS00); //设置CS01位为1,CS00位为1(64倍预分频)
// TIMSK0 |= (1 << OCIE0A); //启用定时器比较中断
//设置定时器1为1Hz(1s)
TCCR1A = 0; //将整个TCCR1A寄存器设置为0
TCCR1B = 0; //将整个TCCR1B寄存器设置为0
TCNT1 = 0; //将计数器值初始化为0
//设置计数器为1HZ,即1s
OCR1A = 15624; //比较匹配寄存器= [16,000,000Hz /(预分频器*所需中断频率)] - 1
TCCR1B |= (1 << WGM12); //打开CTC模式
TCCR1B |= (1 << CS12) | (1 << CS10); //设置CS12位为1,CS10位为1(1024倍预分频)
// TIMSK1 |= (1 << OCIE1A); //启用定时器比较中断
sei(); // 打开全局中断
}
//中断0服务函数
ISR(TIMER1_COMPA_vect) {
state = !state;
TIMSK1 &= ~(1 << OCIE1A);
}
void setup() {
Serial.begin(9600);
DDRD |= ((1 << test_pin1) | (1 << test_pin2));
stepper_init();
}
void loop() {
if (state == LOW) {
PORTD &= ~((1 << test_pin1) | (1 << test_pin2));
Serial.println(PORTD, BIN);
} else {
PORTD |= ((1 << test_pin1) | (1 << test_pin2));
Serial.println(PORTD, BIN);
}
delay(500);
}