单片机SH79F168串口调式

时间:2015-10-22
  近在弄中颖出来的8bit单片机,开始的时候挺棘手的,网上没有那些主流芯片那么多资料,一个小问题没有弄清楚都要调式很久才能搞明白,惨的在焊接电源的时候还让我烧了片,弄得我四处找新片子,幸好今天样片来了,烧之前没有调通的串口终于调通了,就把程序发出来,让像我一样的新手别像无头苍蝇一样到处乱撞,呵呵……
  需要注意的地方:
  (1)将接受和发送端口设置为输入,同时设置为输入,只将接受端口设置为输入都也不行;
  (2)波特率的计算跟51单片机不相同,可以仔细看数据手册怎么计算的;
  (3)RI与TI共用一个中断,需要由标志去区分(这里跟PIC的中断有点类似了)。
  程序不周到的地方还望各位见谅,有什么建议尽管提。
  void init_uart()
  {
  P3CR &= 0xF9 ; //这个需要将端口设置为输入,不然有可能会产生乱码
  TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
  TH1 = 0x94 ; //Baud:9600 fosc=16.6MHz
  TL1 = 0x94 ;
  SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
  PCON = 0x80 ; //SMOD=1;
  IEN0 |= 0x90 ; //Enable Serial Interrupt,EA=1,ES=1;
  TR1 = 1 ; // timer 1 run
  //TI = 1;
  }
  //向串口发送一个字符
  void send_char_com( uint8 ch)
  {
  SBUF = ch;
  while (!TI);
  TI = 0 ;
  }
  //向串口发送一个字符串,strlen为该字符串长度
  void send_string_com( unsigned char *str, unsigned int strlen)
  {
  unsigned int k= 0 ;
  do { send_char_com(*(str + k)); k++; }
  while (k < strlen);
  }
  //接受串口发送过来的数据,并再次发给串口
  void RX_ISR() interrupt 4
  {
  if(RI&&ES)
  {
  send_char_com(SBUF);
  RI=0;
  }
  }
上一篇:内置晶体的实时时钟模块:温度补偿带来卓越
下一篇:在单片机设计过程中 摆脱EMC的软硬件处理方法

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料