⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcys.c

📁 51单片机模拟串口
💻 C
字号:
/*=========================================================================================
本程序为在DOS环境下,用微机控制KY系列智能液晶终端最简单的程序。
在Turbo C 2.0 环境中编译并运行通过.
本程序运行结果:清屏,初始化后分20行显示120组"1234567 ".
使用COM1,  波特率:9600Hz
输出数据格式:8个数据位,1个停止位,校验位恒0
本程序仅供KY系列智能液晶终端的用户参考.
北京金创业科技开发中心
===========================================================================================*/
int ck=0;	/*  ck=0:com1       ck=1:com2  */
/*===将指定的16位波特率因子输出到指定串口的波特率因子寄存器================================*/
set_baudrate(unsigned int baud)
  {
  int portaddr;
  unsigned char lcr,lsb,msb;
  lsb=baud;
  msb=baud>>8;
  portaddr=(ck==0)?0x3f8:0x2f8;
  lcr=inportb(portaddr+3);
  outportb(portaddr+3,0x80);
  outportb(portaddr+0,lsb);
  outportb(portaddr+1,msb);
  outportb(portaddr+3,lcr);
  }
/*===根据数据位,停止位,校验位写指定串口====================================================*/
set_format(unsigned char data,unsigned char stop,unsigned char parity)
  {  outportb((ck==0)?0x3f8:0x2f8+3,data|stop|parity);  }
/*=====sc1zj()输出1字节到串口 ==============================================================*/
sc1zj(unsigned char s)
  {
  unsigned int ckdz;
  ckdz=(ck==0)?0x3f8:0x2f8;
  while(1){if(((inportb((ckdz+6))&0x10))==0x10){break;}}
   /* ckdz+6为MODEM状态寄存器,D4位为CTS状态 */
   /* 等待终端发出的"忙"BUSY信号,如BUSY=1则循环等待.BUSY经RS232板电平转换后,接微机串口的CTS端.*/
  outportb(ckdz,s);
   /* 将数据送"发送保持寄存器"  */
  while(1){if(((inportb((ckdz+5))&0x40))==0x40){break;}}
   /* ckdz+5为线路状态寄存器,D6=1:表示"发送保持寄存器"和"发送移位寄存器"都处于空闲状态,如不空则等待 */
  }
/*==========================================================================================*/
/*==========================================================================================*/
main()
  {
  unsigned char i,btl;
  ck=0;    /*  ck=0:com1       ck=1:com2  */
  btl=12;  /*  600Hz:btl=192   2400Hz:btl=48  9600:btl=12  19200:btl=6  38400:btl=3  */
  set_baudrate(btl);               /*设置波特率                      */
  set_format(0x03,0x0,0x38);       /*8个数据位,1个停止位,校验为恒0   */
  sc1zj(0);                        /*无效数据                        */
  sc1zj(0x1b);                     /*1B 51 0 清为黑屏                */
  sc1zj(0x51);
  sc1zj(0);
  sc1zj(0x1b);                     /*1B 40  初始化                   */
  sc1zj('@');
  for(i=1;i<121;i++)               /*输出121组                       */
  {
  sc1zj(0x31);  sc1zj(0x32);  sc1zj(0x33);  sc1zj(0x34);
  sc1zj(0x35);  sc1zj(0x36);  sc1zj(0x37);  sc1zj(0x20);
  if(i%6==0)    /* 每6组发“回车,换行” */
    {
    sc1zj(0x0d);
    sc1zj(0x0a);
    }
  }
  printf("\n------END-------\n");
  return 0;
  }
/*==========================================================================================*/
#define RXD	0		/*  接收数据寄存器 */
#define TXD	0		/*  发送保持寄存器 */
#define LSB	0		/*  波特率因子低位 */
#define MSB	1		/*  波特率因子高位 */
#define IER	1		/*  中断允许寄存器 */
#define IIR	2		/*  中断标识寄存器 */
#define LCR	3		/*  线路控制寄存器 */
#define MCR	4		/*  MODEM控制寄存器 */
#define LSR	5		/*  线路状态寄存器 */
#define MSR	6		/*  MODEM状态寄存器 */
/*==========================================================================================
北京金创业科技开发中心  孙刚  
==========================================================================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -