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

📄 单片机与电脑通讯.c

📁 这是本人花了200元买的51开发板上的所有程序资料
💻 C
字号:
//MCU: AT89S51
//晶振:11.0592M  (一定要用这个晶振)
#include"AT89X51.H"
#include "absacc.h"
#include "stdio.h"
#include "stdlib.h"
unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
                              0x92,0x82,0xf8,0x80,0x90,
							  
							  };//数字0~9及"-"共阳数码管代码 
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                             0xef,0xdf,0xbf,0x7f};

unsigned char dispbuff[8]={0,0,0,0,0,0,0,0};
unsigned char disp_bit_count;
unsigned char disp_count;

unsigned char send_allow=1;
unsigned int send_count; /*定时器计数变量*/
unsigned char zhi=0;
unsigned char r_char;

/********1ms延时子程序***********/
delay_nms(unsigned int n)
{
 unsigned int i;
 unsigned char j;

 for(i=0;i<n;i++)
    for(j=0;j<120;j++)
	  ;     //空操作
}


void main(void)
{	
// 以下是设置中断和定时器
	PT0=1; 
	ET0=1;
	ES=1;  //开串口接收中断
	IT0=1;IT1=1;

    TMOD=0X20;
	
// 定时器0为产生1ms的中断,定时器1为9600bit/s 的波特率发生器
	TH0=-1000/256;
	TL0=-1000%256;
	TL1=0xfd; //波特率发生
	TH1=0xfd;
    SCON=0xd8;
    PCON=0X00;//波特率不加倍	
// 开定时器  
	TR1=1;
	TR0=1;
	TI=1;
	EA=1;
	while(1)
	  {
	   if(P2_0==0)
        {
          delay_nms(2);
          if(P2_0==0)
            {
             //按键SW1按下,停止发送,再按一下继续发送
			 send_allow^=1;
             while(P2_0==0);
            }
        }

	  }
}

// 定时器0的中断服务程序,向串口发送姿态数据。
void intsvr1(void) interrupt 1
{

// 重新装入定时器0的初值;
	TH0=-1000/256;	
	TL0=-1000%256; 
    send_count++;
	/*****数码管显示*********/
    disp_count++;
  if(disp_count==4)
    {
      disp_count=0;
      P0=numcode[dispbuff[disp_bit_count]];
     P1=dispbitcode[disp_bit_count];
      disp_bit_count++;
      if(disp_bit_count==8)
        {
          disp_bit_count=0;
        }
     }
  if(disp_count==8)
    {
      disp_count=0;
    }
/////////////////////////////////////////////////	  
  //***每隔0.2秒发一个字符到电脑上			
   if (send_count==200)					 	// 0.2秒判断
	{
    send_count=0;
	if(send_allow==1)
	 {
	  putchar(zhi);// 发送字符
      zhi++;
	 }
	}
}  


void receive(void) interrupt 4 using 1
{
 RI=0;  //清楚接收标志位
 r_char=SBUF;  //将接收缓冲区数据读出
 dispbuff[2]=r_char/100;
 dispbuff[1]=(r_char%100)/10;
 dispbuff[0]=r_char%10;
}	 

⌨️ 快捷键说明

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