PC与89C51单片机之间的串行通信(PC发送,单片机接收,接收信息送发光二极管显示)
3个回答
展开全部
/********************************************************************
* 文件名 : 串口接收试验.c
* 描述 : 该文件实现通过单片机从电脑接收数据
······该试验使用的晶振是11.0592,
P0接8个发光二极管
***********************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar LED_Buffer[8] = {0}; //从串口接收的数据
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
static uchar i = 7; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
LED_Buffer[i] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;
if(i==0) i = 8;
i--;
}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
uchar i = 0;
Delay_1ms(100);
Com_Init();
while(1)
{
P0 = table[LED_Buffer[i]];
Delay_1ms(1);
i++;
if(i == 8) i=0;
}
}
* 文件名 : 串口接收试验.c
* 描述 : 该文件实现通过单片机从电脑接收数据
······该试验使用的晶振是11.0592,
P0接8个发光二极管
***********************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar LED_Buffer[8] = {0}; //从串口接收的数据
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
static uchar i = 7; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
LED_Buffer[i] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;
if(i==0) i = 8;
i--;
}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
uchar i = 0;
Delay_1ms(100);
Com_Init();
while(1)
{
P0 = table[LED_Buffer[i]];
Delay_1ms(1);
i++;
if(i == 8) i=0;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <reg51.h> /* define 8051 registers */
#include <stdio.h> /* define I/O functions */
extern unsigned int getnumber (void);
extern void output (unsigned int);
void main (void) { /* main program */
unsigned int number1, number2; /* define operation registers */
bit operation; /* define operation */
SCON = 0x52; /* SCON */ /* setup serial port control */
TMOD = 0x20; /* TMOD */ /* hardware (2400 BAUD @12MHZ) */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
printf ("\n\nC compiler demonstration program\n\n");
while (1) { /* repeat forever */
number1 = getnumber (); /* read number1 */
number2 = getnumber (); /* read number2 */
printf ("Input operation: '+' (ADD) or '-' (SUB) ? ");
operation = (getchar () == '+'); /* get operation */
output (operation ? (number1 + number2)/* perform operation */
: (number1 - number2) );
}
}
#include <stdio.h> /* define I/O functions */
extern unsigned int getnumber (void);
extern void output (unsigned int);
void main (void) { /* main program */
unsigned int number1, number2; /* define operation registers */
bit operation; /* define operation */
SCON = 0x52; /* SCON */ /* setup serial port control */
TMOD = 0x20; /* TMOD */ /* hardware (2400 BAUD @12MHZ) */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
printf ("\n\nC compiler demonstration program\n\n");
while (1) { /* repeat forever */
number1 = getnumber (); /* read number1 */
number2 = getnumber (); /* read number2 */
printf ("Input operation: '+' (ADD) or '-' (SUB) ? ");
operation = (getchar () == '+'); /* get operation */
output (operation ? (number1 + number2)/* perform operation */
: (number1 - number2) );
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询