PC与89C51单片机之间的串行通信(PC发送,单片机接收,接收信息送发光二极管显示)

最好是用C或者汇编来写得程序(PC发送,单片机接收,接收信息送发光二极管显示)... 最好是用C或者汇编来写得程序(PC发送,单片机接收,接收信息送发光二极管显示) 展开
 我来答
36557832
2012-03-17 · TA获得超过11.4万个赞
知道顶级答主
回答量:7万
采纳率:1%
帮助的人:4.6亿
展开全部
/********************************************************************
* 文件名 : 串口接收试验.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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友56d0baa
2012-03-09 · TA获得超过1138个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:481万
展开全部
#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) );
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq1826797881
2012-03-09
知道答主
回答量:10
采纳率:0%
帮助的人:1.6万
展开全部
这个用串口就可以的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式