有项目用的这款单片机,所以就该单片机基本功能操作做了一个记录。
1:IO操作
首先初始需要操作的IO,这里主要是配置为输入还是输出,如果是输出设置输出电平。
void port_init(void)
{
//Run
DDRC |= 0x08; //PC3
PORTC |= 0x08; //set pb1 output high
//Times
DDRC |= 0x04; //PC2
PORTC |= 0x04; //set pb1 output high
//Alarm
DDRD |= 0x20; //PD5
PORTD |= 0x20; //set pb1 output high
//Dir485
DDRD |= 0x04; //PD2
PORTD &= ~(1 << DIR485);
//PORT_DIR485 |= (1 << DIR485);
UCSRA |= (1 << TXC);
//PLUS
DDRD |= 0x80; //PD7
PORTD &= ~(1 << PLUS);
//DDRC &= 0xFE; //PC0
//PORTC |= 0x01;
}
然后就是在主循环中设置或者读取值。设置时,用PORT的定义,读取是用PIN的定义。
2:定时器
void timer0_init(void)
{
TCCR0 = 0x00; //timer0 普通模式
TCCR0 = 0x03; //预分频/64 启动TIME0 普通模式
TCNT0 = 141; //晶振8MHz, 频率为1KHz 0x83 = 256 - 8000000 / 64 / 1000
//晶振7MHz, 频率为1KHz 141 = 256 - 7372800 / 64 / 1000
TIMSK|=0x01;
TIFR |= (1<<TOV0);
//SREG|=0x80; //使能全局中断
}
在主程序中
timer0_init();
sei(); //使能总中断
在中断程序中
ISR(TIMER0_OVF_vect){
TCNT0 = 141; //重装
t_1s++;
if(t_1s <= 800) //1s到
{
PORT_RUN |= (1<<RUN); //pd1输出高定平
}
else
{
PORT_RUN &= ~(1<<RUN); //pd1输出低电平


1万+

被折叠的 条评论
为什么被折叠?



