我想用單片機按鍵控制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; } }
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |