打印
[AVR单片机]

我写了一段程序想实现电脑先往单片机里发数然后单片机在往电脑上返数

[复制链接]
1338|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianminadmin|  楼主 | 2013-6-22 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int

#define  mclk   8000000
#pragma interrupt_handler uart_rx:12
uchar rdata[100]={0,1,2,3,56,69,'+',85.58},flag=0,i=0;
void delay(uint ms)
{
        uint i,j;
        for(i=0;i<ms;i++)
           {
           for(j=0;j<1141;j++);
       }
}

void uart_init(uint baud)
{
    UCSRB=0x00;
   UCSRA=0x00;                     //控制寄存器清零
   UCSRC=(1<<URSEL)|(0<<UPM0)|(0<<UPM1)|(3<<UCSZ0);   
                                                        //选择UCSRC,异步模式,禁止                        
                                                     //   校验,1位停止位,8位数据位
   baud=mclk/16/baud-1        ;   //波特率最大为65K
   UBRRL=baud;                                                        
   UBRRH=baud>>8;                    //设置波特率
   UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
                                                       //接收、发送使能,接收中断使能
   SREG=BIT(7);                        //全局中断开放
   DDRD|=0X02;                        //配置TX为输出(很重要)

}
void uart_sendB(uchar data)
{
   while(!(UCSRA&(BIT(UDRE)))) ;
   UDR=data;
   while(!(UCSRA&(BIT(TXC))));
   UCSRA|=BIT(TXC);
}
void uart_rx()
{  
    UCSRB&=~BIT(RXCIE);
        while(RXC)
        {
        rdata[i]=4;
        i++;
        }
        UCSRB|=BIT(RXCIE);
}
void main()
{  uchar sdate;
    //uchar i=4;
        //uchar j='a';
    uart_init(19200);
        while(1)
        {
           if(flag)
           {  for(sdate=0;sdate<i;sdate++)
              uart_sendB(rdata[sdate]);
                  sdate=0;
                  i=0;
                  flag=0;
           }
        }
       
}

相关帖子

沙发
qin552011373| | 2013-6-23 22:08 | 只看该作者
好乱

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝