AVR单片机与C语言的一些入门简要概述

  用C语言进行嵌入式系统的开发具有汇编语言编程不可比拟的优势,虽然C语言编写出的代码要比汇编语言占有的空间大5%~20%,但是由于半导体技术的发展,芯片的容量和速度有了大幅度的提升,占用空间的比例已经不是那么关键,相比之下,更看重软件是否具有长期稳定运行的能力,注重使用先进开发工具所带来的时间和成本的优势,那么对于AVR单片机与C语言来说,也是一样的。AVR单片机在ATMEL的设计下吸取了PIC和80C51的优点并进行了大量改进,使其运用也十分广泛,这里不具体详述,来解读一下AVR单片机和C语言的关键点和一些注意事项,以此谈谈感受与经验。

  在AVR输入输出的使用中,I/O口是重点,AVR的I/O口为标准双向口,在复位时所有端口处于没有上拉电阻的输入状态(高阻态,管脚电平完全由外部电路决定)。AVR的每一个端口对应3个地址即DDRX,PORTX,PINX(X取A~F,但是只有PINX可以取F)

  在AVR中断系统中有2点要注意的事项:1.由于TI的TCNT1,OCR1A,OCR1B,ICR1都是16位的定时器,为了正确的写入和读出,在写入数据时应该先写高字节,再写低字节,在读取数据时应该先读取低字节,再读取高字节。  2.TI的捕捉方式,可用于ICP引脚上频率或者周期的测量,在使用时只需使能捕捉中断即可,对T1的设置可参考定时的用法。

  注意:在AVR的子程序中,硬件不保护SREG状态寄存器,应该根据实际情况由软件保护,例如:

  #pragma interrupt_handler timer1:7  //  申明timer1()为中断处理函数

  #pragma interrupt_handler int0:2    //申明_int0()为中断处理函数

  void main(void)

  {

    GIMSK=0X40;    //使能INT0中断

    TIMSK=0X80;    //使能T1溢出中断

    _SEI();      //使能全局中端

  }

  void timer1(void)    //T1溢出中断服务程序

  {

    _SEI();      //在T1溢出中断服务程序使用全局中断

              //保证INT0的优先级

  }

        在C语言的中断服务程序(中断处理函数)中,会自动保护中断服务函数中使用的所有的寄存器

 AVR单片机内置EEPROM和看门狗(Watchdog)的使用:注意事项,看门狗电路的振荡器为内部RC振荡器,其震荡频率受电压影响,在DC5V时约为1MHZ,在AVR汇编中有一条指令WDR来清除看门狗定时器,在C语言中对应为_WDR()函数或WDR()函数。

 

posted @ 2022-09-17 14:35  技术让梦想更伟大  阅读(244)  评论(0编辑  收藏  举报