• 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()函数。

  • 相关阅读:
    STM32WB55开发(4)----配置串口打印Debug调试信息
    利用Matlab进行图像的增强
    2023-5-27第二十七天
    Day1讲题题单
    HTTP缓存小结
    Java String转double
    nginx和gunicorn相关,反向代理和正向代理区别,静态资源和动态资源
    hiberate核心API/配置文件/一级缓存详解
    Linux安装vivado方法
    第4章 操作BLOB类型字段 & 第5章 批量插入
  • 原文地址:https://blog.csdn.net/u012846795/article/details/126906271