久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10049|回復: 0
收起左側

串口通信USART-AVR程序代碼

[復制鏈接]
ID:51024 發表于 2014-7-12 01:51 | 顯示全部樓層 |閱讀模式


以前學習AVR時候寫的程序,分享一下









#include

#include

#define RXB8 1

#define TXB8 0

#define UPE 2

#define OVR 3

#define FE 4

#define UDRE 5

#define RXC 7



#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)



// USART Receiver buffer

#define RX_BUFFER_SIZE 8

char rx_buffer[RX_BUFFER_SIZE];

unsigned char nCount =0 ;     //定義串口接收計數變量

#if RX_BUFFER_SIZE<256

unsigned char rx_wr_index,rx_rd_index,rx_counter;

#else

unsigned int rx_wr_index,rx_rd_index,rx_counter;

#endif



// This flag is set on USART Receiver buffer overflow

bit rx_buffer_overflow;



// USART Receiver interrupt service routine

interrupt [USART_RXC] void usart_rx_isr(void)

{

char status,data;

status=UCSRA;

data=UDR;   

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

   {

   //printf("interruption triged!\r\n"); //插樁測試,驗證中斷服務程序處于有效工作狀態  

   nCount++;   //接收到數據時,每接收一個,接收計數加1

   rx_buffer[rx_wr_index]=data;

   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;

   if (++rx_counter == RX_BUFFER_SIZE)

      {

      rx_counter=0;

      rx_buffer_overflow=1;

      };

   };

}



#ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART Receiver buffer

#define _ALTERNATE_GETCHAR_

#pragma used+

char getchar(void)

{

char data;

while (rx_counter==0);

data=rx_buffer[rx_rd_index];

if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;

#asm("cli")

--rx_counter;

#asm("sei")

return data;

}

#pragma used-

#endif



// Standard Input/Output functions





// Declare your global variables here



void main(void)

{

// Declare your local variables here

   unsigned char temp_data = 0;

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;



// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x00;



// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;



// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;



// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;



// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;



// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=0x00;

UCSRB=0x98;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;



// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;



// Global enable interrupts

#asm("sei")

SREG|=0x80;                       //開全局中斷

while (1)

      {

      // Place your code here

        if(nCount>0)              //判斷是否有接收數據

        {   

           nCount--;              //處理過的數據,減少數據計數

           temp_data= getchar(); //獲取接收字符   



      if(temp_data<='9'&&temp_data>='0')

           {

              temp_data=temp_data-38;

              printf("%d  ",temp_data);

           }   

      else if(temp_data<='Z'&&temp_data>='A')   

           {   temp_data=temp_data+32;

               printf("%c  ",temp_data);

           }  

      else if(temp_data<='z'&&temp_data>='a')



           {  temp_data=temp_data-32;

           printf("%c  ",temp_data);}

      else



          { printf("error\n")  ;  }

        }         

      } ;  

}


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99热在这里只有精品 | 亚洲自拍偷拍免费视频 | 九九亚洲精品 | 精品中文视频 | 国产专区在线 | 欧美日韩精品综合 | 久久这里只有精品首页 | 99re免费| 亚洲 成人 在线 | 国产xxx在线观看 | 亚洲综合精品 | 日韩综合在线 | 在线免费观看黄色 | h片在线观看免费 | 天天干天天玩天天操 | 成人精品久久日伦片大全免费 | 精品国产区 | 一区二区三区视频在线 | 精品久久久久久亚洲综合网 | 日本精品免费在线观看 | 99re6在线视频 | 日本免费小视频 | 日本一二三区电影 | 亚洲精品二区 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 久久国产精品一区二区三区 | 亚洲精品乱码久久久久v最新版 | 一二三四在线视频观看社区 | 国产精品99久久久久久www | 亚洲精品一区二区三区中文字幕 | 日韩有码一区 | 午夜精品久久久久久久久久久久久 | 婷婷不卡| 最新中文字幕在线 | 国产精品1区2区 | 国产精品不卡一区 | 九九久久精品 | 色婷婷综合久久久久中文一区二区 | 黑人巨大精品欧美一区二区免费 | 日韩av免费在线电影 | 国产乱码精品一区二三赶尸艳谈 |