打印
[AVR单片机]

各位走过的,路过的,打酱油的大哥大姐,都进来看看我的代码哪里错了,实验不出结果呀

[复制链接]
1160|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zezy371|  楼主 | 2013-7-24 22:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位走过的,路过的,打酱油的大哥大姐,都进来看看我的代码哪里错了,实验不出结果呀
大姐,大哥们帮帮忙吧
#include<iom16v.h>                                //头文件
#include<macros.h>                                //引脚定义头文件
typedef unsigned int uint;                //替代定义
typedef unsigned char uchar;        //替代定义

uchar Bz=0,Dt=0;                                //定义两个变量,一个是接收到数据标志,一个是保存数据变量
#define CS_485_0 PORTC&=~(1<<PC6)
#define CS_485_1 PORTC|=(1<<PC6)                        //使用485时用到的引脚定义
#define CS_485_O DDRC|=(1<<PC6)
#define CS_485_I DDRC&=~(1<<PC6)

void main(void)
{
   CS_485_O;                                            //设置485引脚为输出
   CS_485_0;                                        //设置485引脚输出低电平(准备接收)
   
   UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//接收中断使能,发送使能,
                                                                                   //接收使能,并且打开串口
   UBRRL=47;//设置波特率为9600,晶振频率为8MHz
   UBRRH=0;
   UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//访问UCSRC,设置8位数据
   UBRRH=0;
   SREG|=(1<<7);//打开全局中断开关                                                //打开全局中断

   //CS_485_0;                                        //用485发送和接收时,开始先处于接收状态

   while(1)                                                //死循环
   {
      if(Bz==1)                                        //判断是否接收到数据标志
          {                                                        //接收到了
             //CS_485_1;                        //使用485时准备发送,CS_485置1
                 UCSRB&=~(1<<RXCIE);        //先禁止串口中断
                 Bz=0;                                        //接收到数据标志清零
                 UDR=Dt;                                //送数据给发送寄存器
                 while(!(UCSRA&(BIT(TXC))));                        //判断是否发送完成
                 //UCSRA|=(1<<TXC);                                        //发送完成标志清零
                 UCSRB|=(1<<RXCIE);                                        //打开串口中断准备接收
                 //CS_485_0;                        //使用485时准备接收,CS_485清零
          }
   }
}
#pragma interrupt_handler uart_rx:12
void uart_rx(void)                                  //串口中断服务函数
{
   UCSRA&=~(1<<RXC);                        //接收中断标志位清零
   Dt=UDR;                                                //接收数据保存在Dt变量中
   Bz=1;                                                //接收到数据标志置1
}

相关帖子

沙发
huangxz| | 2013-7-25 17:51 | 只看该作者
你首先应该说下你要实现什么功能啊;P

使用特权

评论回复
板凳
qin552011373| | 2013-7-27 21:32 | 只看该作者
huangxz 发表于 2013-7-25 17:51
你首先应该说下你要实现什么功能啊

貌似是485  看代码应该是

使用特权

评论回复
地板
huangxz| | 2013-7-27 22:27 | 只看该作者
qin552011373 发表于 2013-7-27 21:32
貌似是485  看代码应该是

呵呵,提问了也不看结果的。

使用特权

评论回复
5
qin552011373| | 2013-7-27 23:03 | 只看该作者
huangxz 发表于 2013-7-27 22:27
呵呵,提问了也不看结果的。

使用特权

评论回复
6
zezy371|  楼主 | 2013-7-28 21:27 | 只看该作者
哈哈,最近工作太忙,没有时间看,不好意思,我的目的是串口通信

使用特权

评论回复
7
zezy371|  楼主 | 2013-7-28 21:34 | 只看该作者
我的错误貌似在串口通信的初始化部分,下载到目标板后,做通信实验,什么现象也没有,看了好多书,无解,我的程序,和他们的基本不相同啊,好像能接收到信息但就是发不出来

使用特权

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

本版积分规则

27

主题

241

帖子

0

粉丝