📄 lesson10._c
字号:
#include <iom88v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
//晶振 7.3728MHZ
#define mclk 7372800
// #pragma interrupt_handler uart_rx:12
#pragma interrupt_handler uart_rx:iv_USART0_RXC
uchar rdata,flag=0;
uchar Rec_Data[27];
uchar Data_Len =0,i;
uchar adcL,adcH;
uint adresult;
void delay(uint ms) //延时函数
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1100;j++);
}
}
//0D 0A 3E 0D 0A 52 65 61 64 20 46 77 64 20 33 3E 0D 0A 20 39 33 31 36 37 3F 20 20
//0D 0A 3E 0D 0A 52 65 61 64 20 46 6C 6F 77 20 31 3E 0D 0A 20 35 34 2E 39 32 30 3F 20 20
void uart_init(uint baud) //串口初始化
{
UCSR0B=0x00;
UCSR0A=0x00; //控制寄存器清零
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);
//选择UCSRC,异步模式,禁止
// 校验,1位停止位,8位数据位
baud=mclk/16/baud-1 ; //波特率最大为65K
UBRR0L=baud;
UBRR0H=baud>>8; //设置波特率
UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);
//接收、发送使能,接收中断使能
SREG=BIT(7); //全局中断开放
DDRD|=0X02; //配置TX为输出(很重要)
}
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
//ADMUX = 0x46; //选择AVCC为参考,采集电压右对齐,1110 1.1V
}
void uart_sendB(uchar data) //发送字符
{
while(!(UCSR0A&(BIT(UDRE0)))) ;
UDR0=data;
while(!(UCSR0A&(BIT(TXC0))));
UCSR0A|=BIT(TXC0);
}
void uart_rx() //接收字符
{
UCSR0B&=~BIT(RXCIE0);
rdata=UDR0;
//flag=1;
Data_Len++;
UCSR0B|=BIT(RXCIE0);
}
void main()
{
//uchar i=4;
//uchar j='a';
uart_init(4800); //初始化串口
adc_init(); //初始化ADC
while(1)
{
if(rdata==0xaa) //开始ADC转换标志
{
rdata=0x00;
//****************************************************
ADMUX = 0x46; //选择AVCC为参考,采集电压右对齐 6通道
delay(100);
ADCSRA =0x84; //0b11000100 8分频
ADCSRA |=BIT(ADSC); //开始转换
while(!(ADCSRA&(1<<ADIF)));
//while(ADCSRA&(1<<ADSC)); //为1等待
adcL=ADCL;
adcH=ADCH;
ADCSRA |=BIT(1<<ADIF);
//delay(100);
ADCSRA |=BIT(ADSC); //开始转换第二次,第一次的不准确
while(!(ADCSRA&(1<<ADIF)));
//while(ADCSRA&(1<<ADSC)); //为1等待
adcL=ADCL;
adcH=ADCH;
ADCSRA |=BIT(1<<ADIF);
uart_sendB(adcH);
uart_sendB(adcL);
//****************************************************
ADMUX = 0x47; //选择AVCC为参考,采集电压右对齐 7通道
delay(100);
ADCSRA =0x84; //0b11000100 8分频
ADCSRA |=BIT(ADSC); //开始转换
while(!(ADCSRA&(1<<ADIF)));
//while(ADCSRA&(1<<ADSC)); //为1等待
adcL=ADCL;
adcH=ADCH;
ADCSRA |=BIT(1<<ADIF);
//delay(100);
ADCSRA |=BIT(ADSC); //开始转换
while(!(ADCSRA&(1<<ADIF)));
//while(ADCSRA&(1<<ADSC)); //为1等待
adcL=ADCL;
adcH=ADCH;
ADCSRA |=BIT(1<<ADIF);
//delay(100);
uart_sendB(adcH);
uart_sendB(adcL);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -