我想用單片機按鍵控制AD轉換,然后用另一個按鍵控制,按一下向上位機傳送一個AD轉換數據。可是我實在是太新了,真心求助。我的代碼很亂,都是我各種拼湊的。如果有師傅給個例程最好不過,沒有例程的話也希望大家能給指點一下,拜謝。
#include<iom16v.h>
#include<macros.h>
unsigned char data_receive = 0,i=0;
unsigned char num[10];
unsigned char tx[1000];
unsigned int value,a=0,j=0,flag0=1,flag1,n,c=0,m;
void port_init(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0xff;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
}
void uart0_init(void)
{
UCSRB=0X00;
UCSRA=0X00;
UCSRC=BIT(URSEL) | 0X06;
UBRRL = 0X67;
UBRRH = 0X00;
UCSRB = 0XD8;
}
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
flag0=1;
flag1=1;
}
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
num[c]=value;
c++;
if(c==10)
c=0;
}
#pragma interrupt_handler adc_isr:iv_ADC
void adc_isr(void)
{
value=ADCL;
value|=(int)ADCH<<8;
}
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
data_receive = UDR;
}
#pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC
void uart0_tx_isr(void)
{
delay(100);
if(flag1==1)
{
transmit(num[i++]);
flag1=0;
}
}
void adc_init(void)
{
ADCSR = 0X00;
ADMUX = 0X40;
ACSR = 0X80;
ADCSR = 0XEF;
SFIOR=0x40;
}
void init_devices(void)
{
CLI();
port_init();
adc_init();
uart0_init();
MCUCR = 0x0a;
GICR = 0xc0;
TIMSK = 0x00;
SEI();
}
void delay(void)
{
int a=0,b=0;
for(a=0;a<30000;a++)
for(b=0;b<20;b++);
}
void transmit(unsigned char data_tx)
{
while(!(UCSRA&(1<<UDRE)));
UDR = data_tx;
}
void main(void)
{
init_devices();
DDRA=0xff;
DDRB=0xff;
while(1)
{if(flag0==1)
{
transmit(num[0]);
flag0=2;
//transmit(tx[j]);
//j++;
}
if(i>=10)
{
i=0;
}
PORTA= data_receive;
//tx[a]= data_receive;
//for(n=0;n<30000;n++)
//for(m=0;m<20;m++);
//a++;
//if(a==1000)
//a=0;
}
}
|