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

📄 sio36.c

📁 不少单片机C代码
💻 C
字号:
#include <reg51.h>
#define uchar unsigned char
uchar xdata r_buf[32];		/* item */
uchar xdata t_buf[32];
uchar r_in,r_out,t_in,t_out;	/* queue pointer */
bit r_full,t_empty,t_done;	/* item2 */
code uchar m[]={"this is a test program\r\n"};

serial() interrupt 4 using 1 {      	/* item3 */
  if ( RI && ~r_full) {
    r_buf[r_in]=SBUF;
    RI=0;
    r_in=++r_in&0x1f;
    if (r_in==r_out) r_full=1;
  }
  else if( TI && ~t_empty) {
    SBUF=t_buf[t_out];
    TI=0;
    t_out=++t_out&0x1f;
    if (t_out==t_in) t_empty=1;
  }
  else if (TI) {
    TI=0;
    t_done=1;
  }
}

void loadmsg(uchar code *msg) {		/* item */
  while((*msg!=0)&&((((t_in+1)^t_out)&0x1f)!=0)) {
         /* test for buffer full */
    t_buf[t_in]=*msg;
    msg++;
    t_in=++t_in&0x1f;
    if(t_done) {
      TI=1;
      t_empty=t_done=0;
           /* restart if all finished */
    }
  }
}

void process(uchar ch) {return;}	/* item5 */
      /* user define */

void processmsg(void) {			/* item6 */
  while(((r_out+1)^r_in)!=0) {
        /* not empty */
    process(r_buf[r_out]);
    r_out=++r_out&0x1f;
  }
}

main() {				/* item7 */
  TMOD=0x20;	/* timer1 mode 2 */
  TH1=0xfd;	/* 9600 baud 11.0592MHz */
  TCON=0x40;	/* start time1 */
  SCON=0x50;	/* enable receive */
  IE=0x90;	/* enable serial interrupt */
  t_empty=t_done=1;
  r_full=0;
  r_out=t_in=t_out=0;
  r_in=1;	/* r_buf and t_buf empty */
  for (;;) {
    loadmsg(&m);
    processmsg();
  }
}
  
     	 

⌨️ 快捷键说明

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