打印
[AVR单片机]

这个串口程序有问题吗?

[复制链接]
2002|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序如下,就是串口发送,这么简单怎么下载后没有反应呢?
M128芯片。ICC编译器。
熔丝如下。


#include <iom128v.h>
#include <macros.h>

#define  uchar  unsigned char
#define  uint   unsigned int

#define  f_count   183         //定时器初值,定时器加1计数
#define  timer_clk 0x07         //时钟1024分频
#define  fosc           8000000                           //晶振8M
#define  baud      2400                                   //波特率

uchar time_1s_count =0;
uint  second;
uint  A1,A2,A3;
uint  dly;

void Port_init(void)
{
         PORTC=0X7a;                           //亮3个灯
        DDRC =0XFF;
}
/*---------------------------------------------------------------------------------
     延时程序计算方法
     计数个数j = 延时时间/6*晶振频率 - 1
---------------------------------------------------------------------------------*/
void uart_init(void)
{
  UCSR0B =0X00;
  UCSR0A =0X00;
  UCSR0C =(1<<UCSZ01)|(1<<UCSZ00); //8个数据位
  UBRR0L=(fosc/16/(baud+1))%256;
  UBRR0H=(fosc/16/(baud+1))/256;
  UCSR0B=(1<<RXEN0)|(1<<TXEN0);        //使能接收发送
}

void putchar0(unsigned char c)
{
  while(!(UCSR0A&(1<<UDRE0)));        //发送器已经准备就绪
  UDR0=c;                                                //数据放进SBUF
}

unsigned char getchar0(void)
{
  while(!(UCSR0A&(1<<RXC0)));                                  //接收完毕
  return UDR0;
}
//--------------------------------------------------------------------------------   
void puts0(char *s)
{
  while(*s !='\0')
  {
     putchar0(*s);
         s++;
  }
}
/*---------------------------------------------------------------------------------
---------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------
---------------------------------------------------------------------------------*/
void  main(void)
{
        uchar  i,j;            //定义变量
        Port_init();
        uart_init();
        i=1;
        puts0("HELLO");
        while(1)
        {
               
                dly++;
                if(dly>60000)
                {
                    dly=0;
                        puts0("test ok!");
                          
                }
        }
}

相关帖子

沙发
airwill| | 2013-8-3 10:55 | 只看该作者
又是来让人看程序的.
作为新人, 要知道调试比写代码更重要!
你有工程板, 比网友们纯粹靠猜要容易得多.
可以下载本坛一个高人撰写的 "程序调试黒宝书", 仔细学习下. 好好努力哦!

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4 很给力!
板凳
ningling_21|  楼主 | 2013-8-3 19:13 | 只看该作者
airwill 发表于 2013-8-3 10:55
又是来让人看程序的.
作为新人, 要知道调试比写代码更重要!
你有工程板, 比网友们纯粹靠猜要容易得多.

这个程序其实是抄别人的能用的,只是到我这个板上不行,所以想让大家看看熔丝有没有问题...

使用特权

评论回复
地板
joyme| | 2013-8-5 10:47 | 只看该作者
你在烧录界面上也没勾选“编程熔丝”啊,就是说你的数据没有写进去

使用特权

评论回复
5
ningling_21|  楼主 | 2013-8-5 12:05 | 只看该作者
joyme 发表于 2013-8-5 10:47
你在烧录界面上也没勾选“编程熔丝”啊,就是说你的数据没有写进去

这些熔丝是从芯片里面读出来的,不知道有没有问题。

使用特权

评论回复
6
grasswolfs| | 2013-8-5 12:11 | 只看该作者
joyme 发表于 2013-8-5 10:47
你在烧录界面上也没勾选“编程熔丝”啊,就是说你的数据没有写进去

应该没有问题

使用特权

评论回复
7
joyme| | 2013-8-5 14:16 | 只看该作者
Notes: 1. These options should only be used when not operating close to the maximum frequency of the
device, and only if frequency stability at start-up is not important for the application. These
options are not suitable for crystals.
你可以改改CKSEL0试试

使用特权

评论回复
8
ningling_21|  楼主 | 2013-8-5 18:21 | 只看该作者
joyme 发表于 2013-8-5 14:16
你可以改改CKSEL0试试

用的是外部晶振8MHZ ,CKSEL0要改为1吗?

使用特权

评论回复
9
hyhmh| | 2013-8-6 06:44 | 只看该作者
熔丝也一样看Datasheet.

使用特权

评论回复
10
huangxz| | 2013-8-6 10:07 | 只看该作者
ningling_21 发表于 2013-8-5 18:21
用的是外部晶振8MHZ ,CKSEL0要改为1吗?

最后一位影响不大

使用特权

评论回复
11
ningling_21|  楼主 | 2013-8-6 21:57 | 只看该作者
huangxz 发表于 2013-8-6 10:07
最后一位影响不大

会是什么原因呢?

使用特权

评论回复
12
huangxz| | 2013-8-6 22:52 | 只看该作者
ningling_21 发表于 2013-8-6 21:57
会是什么原因呢?

看看txd有没有输出

使用特权

评论回复
13
qin552011373| | 2013-8-7 08:30 | 只看该作者
airwill 发表于 2013-8-3 10:55
又是来让人看程序的.
作为新人, 要知道调试比写代码更重要!
你有工程板, 比网友们纯粹靠猜要容易得多.

而且好多程序连个注释还不写   不是针对这个帖子   昨天看一个程序   最近好多程序都是这样子   还要让人去猜测他要做什么   现在code的风格不好的   都懒得看

使用特权

评论回复
14
ningling_21|  楼主 | 2013-8-16 21:46 | 只看该作者
huangxz 发表于 2013-8-6 22:52
看看txd有没有输出

TXD没有输出什么波形.

使用特权

评论回复
15
ningling_21|  楼主 | 2013-8-25 09:29 | 只看该作者
这样就没问题?
/***************串口0初始化********************/
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
//UBRR0L = 0x47; //baud rate=9600
UBRR0L = 0x33;
UBRR0H = 0x00; //
UCSR0B = 0x98;
}       

/**************发送采用查询方式**************/
void uart0_send(uchar c)
{
  while( !(UCSR0A & (1<<UDRE0)) );
        UDR0=c;
}

使用特权

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

本版积分规则

5013

主题

17734

帖子

51

粉丝