原创 单片机串口实现微型热敏打印机的方法

2007-8-6 23:59 8539 13 13 分类: MCU/ 嵌入式

       调试硬件平台:SP0605-51/AVR单片机实验开发板


       调试软件环境:Keil8.01版本( www.keil.com


       最近给客户开发的项目中要求通过单片机打印相关的记录问题,该项目中的微打采用北京炜煌公司生产的WHXX05/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />08A一款微型打印机,该打印可以通过并口或串口实现微打功能,由于单片机串口的使用是最普遍,因此通过单片机串口与微型打印机之间连接起来,在使用过程中要设置微打的跳线使其工作在串口模式下。


       由于该微打的串口数据格式是:1位起始位+8位数据位+1位奇偶校验位+1位停止。对于51单片机来说可以让51单片机工作在方式3模式下,可以实现9位数据的传输,而将TB8RB8作为奇偶校验位即可。


       由于51单片机的TB8/RB8是作为多机通信的命令/数据标识位,没有专门的奇偶位,我们需要在发送每个字节之前对该字节进行奇偶校验。具体实现的源程序段如下:


void SendDataToPrint(unsigned char SendByte)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


{


  unsigned char i;


  unsigned char j;


  unsigned char temp;


 


  j=0;


  temp=SendByte;


  for(i=0;i<8;i++)


    {


      if(0!=(temp & 0x01))


        {


          j++;


        }


      temp>>=1;


    }


  if(0!=(j%2))


    {


      TB8=1;   


    }


    else


      {


        TB8=0;


      }


  SBUF=SendByte;


  TI=0;


  while(0==TI);


  TI=0;


}


       因此,在主程序中只需要调用SendDataToPrint函数来实现内容打印即可。


       下面是主程序段


unsigned char TestStr[]={"西 "};


 


void main(void)


{


  unsigned char i;


 


  SCON=0xC0;//串口工作于方式3,禁止接收


  TMOD|=0x20;


  TH1=0xFA;//Fosc=22.1184MHz,9600波特率


  TL1=0xFA;


  TR1=1;


  Delay(60000);


  Delay(60000);


  SendStrToPrint(TestStr);


  SendDataToPrint(13);//换行命令


  Delay(60000);


  Delay(60000);


  Delay(60000);


  Delay(60000);


  Delay(60000);


  Delay(60000);


  Delay(60000);


  Delay(60000);


  SendDataToPrint(27);


  SendDataToPrint(74);


  SendDataToPrint(60);


  while(1);


}


运行的效果是在热敏纸上打印出“西 子”


我们的网站:西谱电子( www.supermcu.com


       SP0605-51/AVR实验开发板( www.supermcu.com/p_info.asp?id=247

文章评论0条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /2 下一条