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

📄 uart.c

📁 本人收集的一些C语言程序
💻 C
字号:
/************************************************************************************/
/*     程序名:PC和单片机的串口通信                                                 */
/*                                                                                  */
/*     晶振:12.0 M                                        CPU型号:AT89S52         */
/*                                                                                  */
/*                                                                                  */
/*     功能描述:点击上位机软件的数值,在单片机的数码管上相应的显示			        */
/*                                                                                  */
/*     http://www.mculover.net                                                      */
/*     http://www.mculover.net/bbs                                                  */
/*   													 					    	*/
/*                                                                                  */
/*                                                湘灵电子工作室 版权所有           */     
/*                                                         2006-02-20               */
/************************************************************************************/ 

#include <reg51.h>

#define _TH0_TL0_ 	(65536 - 50000)  
#define HI 			(_TH0_TL0_ / 256) //给高8位赋值
#define LO 			(_TH0_TL0_ % 256) //给低8位赋值
#define M 			20                //(1000/50)1秒要50个中断的累计

sbit P2_4 = P2 ^ 4;
sbit P2_6 = P2 ^ 6;

unsigned char Seg_tab[] = {0x41, 0xf5, 0x29, 0x31, 0x95, 0x13, 0x03, 0x75, 0x01, 0x11,0x05,0x83,0x4b,0xa1,0x0b,0x0f};//0-f数字
unsigned char a;

/***********************************************************************************************/
void Delay(unsigned char a)
{
	unsigned char i;
	while( --a != 0)
	{
		for(i = 0; i < 125; i++);
	}
}

void IsrTimer0(void) interrupt 1 using 1    //定时器0中断服务程序
{
	TR0 = 0;               //以下调整出栈入栈的时间误差
    TL0 += (_TH0_TL0_ + 9) % 256;
   	TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
    TR0 = 1;

	P2_4 = 0x00;
	P0 = Seg_tab[a/10];   //将得到的A值赋值给P1口。
	Delay(10);
	P2_4 = 0x01;

	P2_6 = 0x00;
	P0 = Seg_tab[a%10];
	Delay(10);
	P2_6 = 0x01;
}
    
/******************************************************************************************/
void Timer0Init(void)  //初始化定时器0程序
{
	TMOD = 0x01; //设置模式1 定时器0 工作方式0

	TH0 = HI; //给TH0,TL0赋初始值
	TL0 = LO;

	TR0 = 1;  //启动定时器0
	ET0 = 1;  //定时器中断开
	EA = 1;	//总中断开
}

/***********************************************************************************************/
void main (void)
{
	Timer0Init();

	P1   = 0xff;//关闭P1口的LED
	P2   = 0xff;

	TMOD = 0x20;  //在11.0592M下,设置波特率9600,方式1
	TL1 = 0xfd;
	TH1 = 0xfd;
	SCON = 0Xd8;
	PCON = 0X00;
	TR1 = 1;

	while(1)
	{
		while(RI == 0);//等待接受完毕
		RI  = 0;
		a   = SBUF;
		P1  = a;//将接受到的数据送P1口显示

		SBUF = a;//将A中的值发到PC上去
		while(TI == 0);
		TI = 0;
	}
}
 

	

⌨️ 快捷键说明

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