/**************************************************
文件名:test7.c
功能:AD采样程序,通过串口调试助手可以看到采样结果
说明:时钟:7.3728MHz
*****************************************************/
#include <avr/io.h>
#include <avr/delay.h>
#include <stdio.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define uchar unsigned char
#define uint unsigned int
#define SET_LED_Y PORTA&=~_BV(PA0)//PA0输出低电平,黄灯亮
#define CLR_LED_Y PORTA|=_BV(PA0)//PA0输出高电平,黄灯灭
uint16_t SENSOR_DATA_VALUE ;//传感器数据
uint8_t ADC_INTERRUPT_FLAG;//ADC中断标志
void adc_init(void);
/***************************************************
*名称usart_putchar()
*功能 向UART 写一字节
*入口参数:c
*出口参数: 0
*****************************************************/
int usart_putchar(char c)
{
if(c=='\n')
usart_putchar('\r');
//数据发送准备完毕,开始发送
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=c;
return 0;
}
/***************************************************
*名称usart_getchar()
*功能 从UART 读一字节
*入口参数:无
*出口参数: UDR0
*****************************************************/
int usart_getchar(void)
{
loop_until_bit_is_set(UCSR0A,RXC0);//USART0接收完成
return UDR0;//返回接收到的数据
}
/***************************************************
*名称IoInit()
*功能 初始化i/o
*入口参数:无
*出口参数: 无
*****************************************************/
void IoInit(void)
{
UCSR0B=_BV(RXEN0)|_BV(TXEN0);//UART 初始化
UBRR0L=7; //57.6k baud 7.3728MHz
fdevopen(usart_putchar,usart_getchar,0); //i/o 流UART 连接
}
/***************************************************
*名称adc_init()
*功能 初始化ad
*入口参数:无
*出口参数: 无
*****************************************************/
void adc_init(void)
{
cli(); //关全局中断
ADCSRA &=0x86; //ADC控制寄存器中ADIE位和ADSC位清零
ADMUX=1; //设置参考电压
sei(); //打开全局中断
ADC_INTERRUPT_FLAG=0;
}
/***************************************************
*名称main()
*功能 查询实现AD采样
*入口参数:无
*出口参数: 无
*****************************************************/
int main(void)
{
uint i;
DDRA=_BV(PA0); //打开I/O端口PA0
PORTA=_BV(PA0);
DDRE|=_BV(PE5); //打开AD采样端口PE5
PORTE|=_BV(PE5);
IoInit();
while(1)
{
SENSOR_DATA_VALUE=0;
cli();
ADMUX |=0x01; //设置ADMUX寄存器
ADCSRA |=0xe7; //AD使能开始AD转换
sei(); //查询ADCSRA中断
while(ADC_INTERRUPT_FLAG==0)
{
ADC_INTERRUPT_FLAG=(ADCSRA&0x10);
}
SET_LED_Y; //黄灯亮
SENSOR_DATA_VALUE=ADCL;
SENSOR_DATA_VALUE+=(ADCH<<8); //读取ADCH和ADCL
printf("sensor data is %d\n",SENSOR_DATA_VALUE); //显示ad采样结果
for(i=0;i<100;i++)
_delay_loop_2(18432); //7.3728M/400=18432
CLR_LED_Y; //黄灯灭
cli();
ADCSRA |=0x10; //清除ADC中断标志
sei();
adc_init();
for(i=0;i<100;i++)
_delay_loop_2(18432);//10ms
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
使用查询方式实现AVR单片机AD转换 平台 atmega128 实验使用自带的10位精度AD转换 包含程序 │adcaiyang1.pnproj 65 bytes │Makefile 13.78 KB │test7.c 3.12 KB │test7.eep 13 bytes │test7.elf 8.91 KB │test7.hex 8.38 KB │test7.lss 53.57 KB │test7.lst 9.98 KB │test7.map 25.27 KB │test7.o 4.72 KB │test7.pnproj 60 bytes │test7.sym 3.09 KB └─.dep (0 folders, 1 files, 1.71 KB, 1.71 KB in total.) test7.o.d 1.71 KB
资源推荐
资源详情
资源评论
收起资源包目录
3.9.AD采样实验1.rar (13个子文件)
3.9.AD采样实验1
test7.hex 8KB
test7.c.bak 3KB
test7.map 23KB
test7.lss 50KB
test7.elf 9KB
test7.eep 13B
test7.sym 3KB
.dep
test7.o.d 2KB
test7.pnproj 60B
test7.lst 10KB
Makefile 14KB
test7.c 3KB
test7.o 5KB
共 13 条
- 1
资源评论
- wdxperfect2013-05-27还可以吧,值得一看
- dengxin1232013-03-15不错,找了很久,谢谢
chensz08
- 粉丝: 2
- 资源: 27
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功