?? com.c
字號:
#include <iom88v.h>
#include <stdio.h>
#include <macros.h>
#include<eeprom.h>
#include<string.h>
#define changeHexToInt(hex) ( ( ((hex)>>4) *10 ) + ((hex)%16) )
#define amount 10
int n=0;
unsigned char inbox[amount];//接收緩沖 10
unsigned char x[]="hello";
void IntToStr(unsigned int Number, char *CalBuff,char add)
{
unsigned char i;
for (i = 0; i < 5; i++)
{
CalBuff[5-1-i] = (Number%10)+add;
Number /= 10;
}
}
//#include <usart.h>
void port_init(void)
{
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x67; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;
}
void main(void)
{
char c;
char temp2;
char y[10];
unsigned char adcL,adcH;
char x[4],adc[3];
unsigned int dd;
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();
ADMUX=96; //設置參考電壓為AVCC,結構左對齊(就是8位精度)
ADCSRA|=135; //使能ADC,ADC時鐘=系統時鐘128分頻
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK0 = 0x00; //timer 0 interrupt sources
TIMSK1 = 0x00; //timer 1 interrupt sources
TIMSK2 = 0x00; //timer 2 interrupt sources
PCMSK0 = 0x00; //pin change mask 0
PCMSK1 = 0x00; //pin change mask 1
PCMSK2 = 0x00; //pin change mask 2
PCICR = 0x00; //pin change enable
PRR = 0x00; //power controller
SEI(); //re-enable interrupts
//all peripherals are now initialized
while(1)
{
switch(inbox[1])
{
case 0xFF:
put_char(inbox[1]);
inbox[1]='';
break;
case 'C':
EEPROMwrite(0x10,'a'); //向EEProm地址 0x10寫相應的字符
EEPROM_WRITE(0x20,"hello123"); //字符串雙引號
putstring(x);
DDRB=0x01; //定義 PB0為輸出
PORTB=0x00; // PB0 輸出低電平
inbox[1]='';
break;
case 'I':
temp2=EEPROMread(0x10);//讀取EEProm地址 0x10對應的字符
put_char(temp2);
DDRB=0x01; //定義 PB0為輸出
PORTB=0x01; // PB0 輸出高電平
inbox[1]='';
break;
case 'F':
//EEPROM_READ(0x20,y); //讀取EEProm地址 0x20對應的字符串
//putstring(y);
//DDRB=0x01;
//put_char(PB1);
if(PINB&BIT(1)) //PB1腳的電平為高時
{
if(PINB&BIT(1))
{
putstring("HELLO");
}
}
if(!(PINB&BIT(1)))//PB1腳的電平為低時
{
if(!(PINB&BIT(1)))
{
putstring("XXX");
}
}
inbox[1]='';
break;
case 'Q':
ADMUX=0x05; //清除已選擇的ADC通道,選擇新的ADC通道(0-7)
ADCSRA|=(1<<ADSC);//啟動ADC轉換
//ADCSRA|=64; //啟動單次ADC轉換
while((ADCSRA&16)==0); //等待ADC轉換結束
adcL=ADCL; //結果左對齊只需讀取高8位數據
adcH=ADCH; //read 2 high bits and shift into top byt
/*adc[0]='0x';
adc[1]=adcH;
adc[2]=adcL;*/
//adc=adc*380/1024;
//dd=changeHexToInt(adc);
//put_char(adc);
//IntToStr(dd,x,'0');
//putstring(adc);
//sprintf(dd, "%u", 123456);
dd=(int)ADC; //強制轉換為十進制
IntToStr(dd,x,'0');//十進制轉為字符輸出
putstring(x);
//dd=changeHexToInt(ADC);
//IntToStr(dd,x,'0');
//putstring(x);
/*
put_char(ADCL);
put_char(ADCH);
/*
put_char(adc/100+48); //從串口輸出ADC的百位數
put_char(adc/10%10+48); //從串口輸出ADC的十位數
put_char(adc%10+48); //從串口輸出ADC的個位數
delay_ms(500); //延時
ADCSRA|=16; //清除ADC轉換結束標記
//putchar(13); //回車
//putchar(10); //換行*/
//put_char(ADCL);
//put_char(ADCH);
inbox[1]='';
break;
default:
break;
}
}
}
void delay_us(int time)//微秒級延遲程序
{
do
time--;
while(time>1);
}
void delay_ms(unsigned int time)//毫秒級延遲程序
{
while(time!=0)
{
delay_us(1000);
time--;
}
}
void put_char(unsigned char c)
{
while (!(UCSR0A & (1<<UDRE0)));
UDR0=c;
}
void putstring(char *s)
{
while(*s)
{
put_char(*s);
s++;
}
put_char(0x0d);
put_char(0x0a);
}
unsigned char get_char(void)//字符輸入函數
{
while(!(UCSR0A & (1<<RXC0)));
return UDR0;
}
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
char temp;
temp=UDR0;
if((n<=amount))
{
inbox[n]=temp;
n++;
}
if((temp==0x0d)||(temp==0x0a)||(n>amount))
{
n=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -