智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2058|回复: 0
打印 上一主题 下一主题

关于SCI中断法收发数据的问题

[复制链接]

37

主题

358

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3787
威望
1857
贡献
918
兑换币
704
注册时间
2012-3-12
在线时间
506 小时
跳转到指定楼层
1#
发表于 2012-6-2 21:03:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟的问题在注释中,有点疑惑~~求解,求交流,不胜感激啊~
unsigned char putstring[]="http:/|shop62148944.taobao.com\r\n";
unsigned char *send;

void INIT_SCI(void)                                                                     
{
  SCI0BD = BUS_CLOCK/16/BAUD;   //设置SCI0波特率为9600
  SCI0CR1 = 0x00;        //设置SCI0为正常模式,八位数据位,无奇偶校验
  SCI0CR2 = 0x88;        //允许发送数据(1、允许发送数据后,是不是只要向数据寄存器SCI0DRL写数据后就会发送出去了???),允许发送中断功能                        
}

/*************************************************************/
/*                       串口发送函数                        */
/*************************************************************/
void SCI_send(unsigned char data)
{
  while(!SCI0SR1_TDRE);         //等待发送数据寄存器(缓冲器)为空
  SCI0DRL = data;
}

/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void send_string(void)                                   这是中断函数,是怎么进入的?我的理解是一个字节                 
                                                                            发送完,也就是TDRE置1后进入的,但是没进入中断函数前主
                                                                            函数里在做什么?不是没有发送吗? SCI0DRL里没有初值的吧?
                                                                            没有发送TDRE怎么会置1呢?
{                                                                           
  if(*send!=0x00)         //判断字符串是否发送完毕
    SCI_send(*send++);
  else
  {
    send = putstring;         //重新装载发送的数据
    LEDCPU = ~LEDCPU;         //闪灯
  }
}
#pragma CODE_SEG DEFAULT
/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
  DisableInterrupts;
  INIT_PLL();
  INIT_SCI();
  LEDCPU_dir = 1;
  LEDCPU = LED_ON;
send = putstring;                 这句是让send指向putstring的首地址,应该还没有个SCI的发送数据寄存器SCI0DRL赋值吧?
  EnableInterrupts;                   究竟是怎么进中断的?
  for(;;) {}
}

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-2-23 01:50 , Processed in 0.058984 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表