2570|3

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

初入单片机,菜鸟问题,请高手指点..在线等 [复制链接]

我做一个USART接口与PC机通讯程序,下面是部分代码:

flash uchar led_7[10] = {0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};
interrupt [USART_RXC] void usart_rx_isr(void)
{
        uchar status,data;
        status = UCSRA;
        data = UDR;
        if((status & (FRAMING_ERROR|PARITY_ERROR|DATA_OVERRUN)) == 0)
               {                  
               write_command(0x01);
               write_command(0x80);
               write_data(0xa3);
               write_data(led_7[data]);
               delay_ms(1);
               
                }
}

void USART_Transmit(uchar data)
{
   while(!(UCSRA & DATA_REGISTER_EMPTY));            //等待寄存器空
        {
        UDR = data;                                  //发送数据
        }
}

void main(void)
{
uchar i = 0;

PORTD=0x03;
DDRD=0xE2;
delay(2000);

UCSRA = 0x00;           //USART 初始化
UCSRB = 0xd8;           //RXD中断。TXD中断 接收允许,发送允许
UCSRC = 0x86;                 //8位数据位 1位停止位 无奇偶位


UBRRH = 0x00;
UBRRL = 0X67;
#asm("sei")
//初始化LCD//

while(1)
{
     if(++i < 10)
     {
     USART_Transmit(i);
     delay_ms(1);
      }
      else
      i = 0;
     delay(800);
};
}

其中write_command和write_data是向LCD写数据.LCD串口联接

问:  为什么串口调试工具输出不是0--9这10个数.是一大堆乱码..而且没有什么规律...但在跟踪的时候感觉所有正常..

请高手帮忙看看.是不是程序不执行中断呀.我该怎么修改呢?

最新回复

我用的LCD带字库的.上面定义了一个数组led_7[10]如果一个个显示会在LCD上显示0--9 这些数.现在就是不知道为什么不去执行中断呀..上面的方法都用过了.不行...不知道为什么. 波特率设的9600.和串口调试助手试一样的.晶振为16MHz..为什么寄存器A7在数据输入输出的时候不变呢?  详情 回复 发表于 2007-12-28 17:02
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
问题出在这里:USART_Transmit(i);

试试USART_Transmit('1');
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
首先,检查你的波特率。看你的程序USART_Transmit(..)是输出函数吧。如果想输出0-9,那实际上应该输出0x30-0x39,这个才是ASCII码中的0-9呢。

也就是说,输出0应该是USART_Transmit(0x30)
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
我用的LCD带字库的.上面定义了一个数组led_7[10]如果一个个显示会在LCD上显示0--9 这些数.现在就是不知道为什么不去执行中断呀..上面的方法都用过了.不行...不知道为什么.

波特率设的9600.和串口调试助手试一样的.晶振为16MHz..为什么寄存器A7在数据输入输出的时候不变呢?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表