AVR串口发送程序

/*
CPU:    ATMega32
频率:  8.0MHz
编译器:CodeVisionAVR   1.24.8c

串口发送程序
*/



#include 
< mega32.h >
#include 
< delay.h >
#include 
< stdio.h >

#define  uchar unsigned char  //  0~255
#define  uint unsigned int      //  0~65535    
#define  _SPK            PORTB.2
#define  _LED            PORTB.3
#define  CLI()           #asm("cli")
#define  SEI()           #asm("sei")

/* UCSRA */
#define  RXC     7
#define  TXC     6
#define  UDRE    5
#define  FE      4
#define  DOR     3
#define  PE      2
#define  U2X     1
#define  MPCM    0

/* UCSRB */
#define  RXCIE   7
#define  TXCIE   6
#define  UDRIE   5
#define  RXEN    4
#define  TXEN    3
#define  UCSZ2   2
#define  RXB8    1
#define  TXB8    0

/* UCSRC */
#define  URSEL   7
#define  UMSEL   6
#define  UPM1    5
#define  UPM0    4
#define  USBS    3
#define  UCSZ1   2
#define  UCSZ0   1
#define  UCPOL   0

// =============================================================================
//  初始化,闪亮LED
// =============================================================================
void  initport( void )
{
    uchar i;
    DDRB 
= 0xFF;
    PORTB 
= 0xFF;
    
    
for(i=0; i<20; i++)
    
{
        _LED 
= ~_LED;
        delay_ms(
100);
    }

    
    _SPK 
= 0;
    delay_ms(
500);
    _SPK 
= 1;
}

                 
           
#define  BAUDRATE    9600
#define  F_CPU       8000000
void  init_USART( void ) // USART 初始化
{
    
//USART 9600 8, n,1  PC上位机软件(超级终端等)也要设成同样的设置才能通讯
    UCSRC = (1<<URSEL) | 0x06;    //异步,8位数据,无奇偶校验,一个停止位,无倍速    
    UBRRL= (F_CPU/BAUDRATE/16-1)%256;
    UBRRH
= (F_CPU/BAUDRATE/16-1)/256;
    UCSRA 
= 0x00;
    
// UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //使能接收中断,使能接收,使能发送
    UCSRB = (1<<TXEN);    // 使能发送
}
   

void  put_c(unsigned  char  c)  // 发送采用查询方式
{
    
while!(UCSRA & (1<<UDRE)) );
    UDR
=c;
}


void  put_s(unsigned  char   * ptr)
{
    
while (*ptr)
    
{
        put_c(
*ptr++);
    }

    put_c(
0x0D);
    put_c(
0x0A);  //结尾发送回车换行
}


char  ss[ 10 =   " 12345 " ;
void  main()
{
    DDRB 
= 0xFF;
    PORTB 
= 0xFF;
    init_USART();
    initport();
   
    
while(1)
    
{
        _LED 
= ~_LED;
        delay_ms(
500);
        put_s(ss);
    }

}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值