📄 uart.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 + -