ATmega128 A/D 学习

本文介绍了一个基于AVR单片机的简单电路设计案例,利用模拟比较器来判断外部电压是否超过1.22V阈值,并通过LED指示结果。涉及端口初始化、中断设置及模拟比较器配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <avr/io.h>        
#include <util/delay.h>
#include <avr/interrupt.h>   //中断函数头文件

//函数声明
void Port_Init(void);   //端口初始化配置
void Compare_Init(void);  //模拟比较器初始化设置

int main(void)            
{
        Port_Init();
        Compare_Init();
        
        DDRA=0XFF;
        PORTA=0X00;//设置低电平,让所有灯亮
        
        
        sei();          //使能全局中断  
        
        while(1)
        {
                if(ACSR & (1 << ACO))    //判断ADC0的电压是否大于1.22V
                {
                        PORTA = 0X01;       //低于1.22V,D1点亮,
                }
                else
                {
                        PORTA = 0X02;     //高于1.22V,D2点亮,
                }
        }
}

//端口状态初始化设置函数
void Port_Init()
{
        //PORTF = 0X00;         
        DDRF |= (1 << PF1) | (1 << PF0);   //PF0、PF1(代表滑动变阻器)设置为输出
        
}

//模拟比较器初始化函数
void Compare_Init()
{
        SFIOR |= (1 << ACME);  //使用ADC多路复用器选择ADC的模拟输入端口
                                //作为模拟比较器反向输入端的信号源。
                                //同时选择ADC的ADC0作为输入端,并且关闭AD转换的使能
        ACSR |= (1 << ACBG);   //允许模拟比较器,AIN0设置为内部固定能隙参考电源1.22V
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值