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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

MEGA16單片機_UART程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年09月01日   【字體:

 

 
 最常用的配置方式
 
UCSRB=0x00;
UCSRA=0x00;     //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);//選擇UCSRC,異步模式,禁止校驗,1位停止位,8位數(shù)據(jù)位
baud=MCLK/16/baud-1    //波特率最大為65K
UBRRL=baud;         
UBRRH=baud>>8;    //設(shè)置波特率
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);//接收、發(fā)送使能,接收中斷使能
SREG=BIT(7);                 //全局中斷開放
DDRD|=0X02;                 //配置TX為輸出(很重要)
 
 就是編程三個寄存器與設(shè)置波特率。調(diào)通簡單,調(diào)精不容易。
#include "uart.h"
void main(void)
{
   uchar *str = "Hello World!";
    SystemInit();
    UartInit(19200);
  while(1)
  {
   if(flag)
   {
    flag = 0;
    //Show(rdata,1);
    UartSendB(rdata);
    PutString(str);
    CR();
    SPACE();
   }
  } 
}
//////////////////////////////////////////////////////////////////////
#include <iom16v.h>
#include <macros.h>
#include "uart.h"
 
#define  mclk   8000000
#pragma interrupt_handler UartRx:12
volatile uchar rdata;
uchar flag=0;
/*void delay(uint ms)
{
 uchar i;
 while(--ms)
 {
     for(i=1141;i>0;--i);
 }
}*/
//**********************************************************************
//函 數(shù) 名:     void PutString(unsigned char  *puts)
//功    能:   發(fā)送字符串到串口
//說    明:     
//參    數(shù):     發(fā)送的字符串
//返 回 值:
//示    范:   putstring("\r\n")
//***********************************************************************
    void PutString(uchar  *puts)
   {
       //for(;*puts!=0;puts++)   //遇到停止符0結(jié)束
    while(*puts!=0)
    {
       UartSendB(*puts++);
    }
   }
void UartInit(uint baud)
{
  UCSRA &= 0x00;
  UCSRB &= 0x00;
  UCSRC |= 0x86;//寄存器選擇、字符長度為8,
  baud = mclk/16/baud-1;
  UBRRL = baud;
  UBRRH = baud>>8;
  UCSRB = 0x98;//接收中斷使能、接收使能、發(fā)送使能
  SREG |= 0x80;
  DDRD |= 0x02;//TX為輸出(重要)
}
void UartSendB(uchar data)
{
 while(!(UCSRA & 0x20));//UDRE為空時置位
 UDR  = data;
 while(!(UCSRA & 0x40));//TXC為空時置位
 UCSRA |= 0x40;
}
void UartRx(void)
{
 UCSRB &= 0x7F;//接收結(jié)束中斷禁止
 rdata = UDR;  //存儲緩沖區(qū)的數(shù)據(jù)
 flag = 1;  //接收標(biāo)志置位
 UCSRB |= 0X80;//接收結(jié)束中斷使能
}
void SystemInit(void)
{
  DDRA |= (1<<2)|(1<<3)|(1<<4)|(1<<6);
 DDRB |= 0xFF; 
 PORTA |= (1<<2)|(1<<6);
 PORTB = 0xFF; 
 PORTA &= (~(1<<2))&(~(1<<6));
}
//////////////////////////////////////////////////////////////////////////
#ifndef __UART_H__
#define __UART_H__
#include <iom16v.h>
#include <macros.h>
#define CR() PutString("\r\n")        //CR=回車換行
#define SPACE() UartSendB(0x20)         //發(fā)送一個空格。
#define  uchar unsigned char
#define  uint  unsigned int
extern volatile uchar rdata;
extern uchar flag;
//void delay(uint ms);
void UartInit(uint baud);
void UartSendB(uchar data);
void UartRx(void);
void SystemInit(void);
void PutString(uchar  *puts);
#endif
 
關(guān)閉窗口
主站蜘蛛池模板: 国产午夜亚洲精品不卡 | eeuss国产一区二区三区四区 | 亚洲第一福利网 | 在线播放国产一区二区三区 | 国产免费黄网 | 91影院在线观看 | 亚洲欧美在线视频 | 91观看 | www久久99 | 四虎国产| 色成人免费网站 | 草草草草视频 | 1000部精品久久久久久久久 | 日本一本视频 | 国产精品久久久久一区二区三区 | 亚洲三级在线 | 国产成人精品a视频一区www | 黄网站免费在线 | 美女黄网 | 午夜精品一区二区三区在线播放 | 国产大片一区 | 成人免费视频 | 国产日韩欧美二区 | 亚洲精品国产电影 | 日日夜夜av | 国产农村妇女毛片精品久久麻豆 | 久久合久久 | 国产欧美精品 | 久草视频在线播放 | 中文字幕蜜臀av | 亚洲欧洲小视频 | 91亚洲精华国产 | 日日天天 | 国产亚洲一区二区三区在线 | 日韩三级视频 | 一区二区精品视频 | 日韩视频在线观看一区二区 | 中文字幕第90页 | 色综合久久88色综合天天 | 免费播放一级片 | 成人在线观 |