求一个80c51单片机通过串口将一个变量发给pc的下位机程序,要c的。谢谢

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-01
求一个80c51单片机通过串口将一个变量发给pc的下位机程序,要c的。非常感谢

void uart_init (void)
{
TMOD=0x20; //选择定时器1
PCON=0x00;///波特率不加倍
SCON=0x50;//串行工作方式1允许串行接收
TH1=0xFD;//实验板上晶振位11.0592MHZ,选择波特率为9600
TL1=0xFD;//在相应计数器上赋值
EA=1;//总中断开启
ES=1;//串行中断开启
TR1=1;//开启定时器1

}
/*
函数void sendchar(uchar ch);实现功能:发送一字节数据
****/
void sendchar(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/*****
发送字符串
********/
void sendstring(uchar dd[],uchar num)
{

uchar i;
for(i=0;i<num;i++)
{
sendchar(dd[i]);
}
}
/*****************************

通过串口接收数据

******************************/
void receive(void) interrupt 4 using 1
{

if(RI)
{

if(rx<rxin)
{
systembuf[rx]=SBUF;
rx++;
}

RI=0;
}
}

/*
清空接收
*/
void clr_sys()
{
for(rx=0;rx<rxin;rx++)
{
systembuf[rx]=0x00;
}
rx=0;
}

#include #include #include "com_0.h"sbit led1=P1^0;sbit led2=P1^6;sbit led3=P2^5;sbit led4=P2^0;sbit sw1=P3^6;sbit sw2=P3^7; //接到XTAL1不对void SetupTimer0(){TMOD &=0XF0; //仅保留T1信息TMOD |=0X02; //设置T0:定时功能,方式2,自动重载8位定时器/计数器TH0= 256-250;//定时每0.25ms中断一次TL0= 256-250;TR0= 1; //开启定时器ET0= 1; //定时器0中断打开}data unsigned char us250;data unsigned int ms;void Timer0_ISR() interrupt1 //定时中断服务程序,为按键消抖服务{if (++us2501000) k1t=ms-1000;if (sw1==1 && k1s==0 &&t>10){k1s=1; k1t=ms; return 2;}if (sw1==0 && k1s==1 &&t>10){k1s=0; k1t=ms; return 1;}if (sw1==k1s) k1t=ms;t= ms-k2t;if (t>1000) k2t=ms-1000;if (sw2==1 && k2s==0 &&t>10){k2s=1; k2t=ms; return 4;}if (sw2==0 && k2s==1 &&t>10){k2s=0; k2t=ms; return 3;}if (sw2==k2s) k2t=ms;return 0;}void main(){data unsigned char ch;data char buf[16];data unsigned char bufp;bitLED2; //用以记住当前led2的状态us250=ms=bufp=0;k1t=k2t=0;sw1=sw2=1=k1s=k2s=1;SetupTimer0();Com0Init();EA = 1; //全局中断打开Com0PutStr("Start...
");while(1){ch=key();switch(ch){case 1:led2=LED2; LED2^=1;Com0PutStr(LED2?"LED2 ON
":"LED2 OFF
");break;case 3:led4=0;Com0PutStr("LED4 ON
");break;case 4:led4=1;Com0PutStr("LED4 OFF
");break;}if (Com0Ready()==0)continue;ch=Com0Getch();if (ch=='
'||ch=='')ch=0;//下面一行防止非法按键造成缓冲溢出if (bufp>=15) {memmove(buf,buf+1, 15);bufp=14;}buf[bufp++]=ch;if (ch)continue; if(strcmp("L10",buf)==0){led1=0;Com0PutStr("LED1 ON
"); }else if(strcmp("L11",buf)==0){led1=1;Com0PutStr("LED1 OFF
");}else if(strcmp("L30",buf)==0){led3=0;Com0PutStr("LED3 ON
"); }else if(strcmp("L31",buf)==0){led3=1;Com0PutStr("LED3 OFF
");}else{Com0PutStr("Badcommand.
");}bufp=0;//命令处理完毕,则清除缓冲}}

#include <reg51.h>

//////////////////////////////////////////////////////////////////////////////
typedef unsigned char uchar;
typedef unsigned int uint;

//unsigned char date[32] = "leige oh my god!";

//void init1602(void);
//void disstr(uchar x, uchar y, uchar *sp);
//unsigned char readbyte(unsigned cmd);

/////////////////////////////////////////////////////////////////////////

void delay(unsigned int t)
{
while(t--);
}

//串口部分
////////////////////////////////////////////////////////////////////

void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xF3;
TL1 = TH1;
PCON = 0x00;
EA = 0;
ES = 0;
TR1 = 1;
}

void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}

void puts(unsigned char *str)
{
while (*str)
{
SendOneByte(*str);
str++;
}
}

void gets(unsigned char *str)
{
unsigned char i = 0;

// RI=0;
while(1)
{
while(!RI);
RI = 0;

str[i] = SBUF;

if(str[i] == ';')break;
if(str[i] == '.')break;
if(str[i] == ':')break;
if(str[i] == '\r')break;
i++;
}
str[i] = '\0';
}
///////////////////////////////////////////////////////////////////////////

bit cmp(unsigned char *p1, unsigned char *p2)
{
unsigned char i;

for(i= 0 ; p1[i] != '\0' && p2[i] != '\0'; i++)
{
if (*p1 != *p2)
{
return 0;
}
p1++;
p2++;
}
return 1;
}

//将p2复制到p1从n开始的地方
////////////////////////////////////////////////////////////
void cop(unsigned char n, unsigned char *p1, unsigned char *p2)
{
int len1 = 1, len2 = 0, i = 0;

while(p2[i] != '\0')
{
p1[n] = p2[i];
n++;
i++;
}
p1[n] = '\0';
}

/////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////

void UARTInterrupt(void) interrupt 4
{
//if(RI)
// {
// RI = 0;
//add your code here!
// }
//else
// TI = 0;
}

  • 求80C51单片机的程序
    答:void delay_music1(uint j){ while(j!=0)} void delay_music2(uint j){ while(j!=0)} main(){//uint i;uchar k,n,m;delay_music(100);TMOD=0x11;TH0=0xfc;TL0=0x66;t0count=0;EA=1;ET0=0;TR0=0;ET1=0;TR1=0;while(1){ ET1=1;TR1=1;for(k=0;k<32;k++){ n=...
  • 单片机80C51的哪个管脚接串行口
    答:单片机80C51的P3口的P3.0和P3.1分别接串行口的RXD(串行数据接收)和TXD(串行数据发送)。由于物理层协议标准不同,它本身不能和电脑连接来进行通信,但可以通过转换芯片转成其他接口与电脑连接,比如RS232口(计算机的COM口)。80C51结构框图:80C51引脚图:引脚功能图:...
  • 用80C51单片机的P1端口作输出,经驱动电路接8只发光二极管,如图,输出位...
    答:LP:MOV P1,#81H ;点亮第1第8灯 LCALL DELAY MOV P1,#42H ;点亮第2第7灯 LCALL DELAY MOV P1,#24H ;点亮第3第6灯 LCALL DELAY MOV P1,#18H ;点亮第4第5灯 LCALL DELAY MOV P1,#24H ;点亮第3第6灯 LCALL DELAY MOV P1,#42H ;点亮第2第7灯 LCALL DELAY ...
  • 单片机80C51程序设计
    答:如果是高电平灯亮的话,将二进制数据00000001的1依次左移3次然后再右移3次即可实现上述的效果;如果是低电平亮的话,将二进制数据11111110的0依次左移3次然后再右移3次即可实现上述的效果。
  • 51单片机中80C51串口的SBUF(存外面输入的数据的SBUF)中的数据怎么样才会...
    答:如果是单片机串口接收,当接收到数据之后,硬件会自动将数据存入SBUF,然后置位RI,表示有数据接收 如果是发送,你把数据写入SBUF,硬件会自动发送,完成后,置位TI,表示发送完成
  • ...语言写。。题目如下:利用80C51串行口设计4位七段显示器,要求4位显...
    答:while (1);}void b() interrupt 1{ TH0 = 0x3C; TL0 = 0xB0; tt++; if (tt == 10) { tt = 0; flg = !flg; if(flg) { SBUF = table[3]; while(!TI); TI = 0; SBUF = table[2]; while(!TI); TI = 0; SBUF = table[1]; while(...
  • 80C51串行口使用定时器1作波特率发生器,应定义为工作方式2,即( )方式...
    答:假定晶振频率为12MHZ,则可设定的波特率范围为 (6000 ) 到 ( 4800 ) 。理由如下:波特率=((2的SMOD1次方)/32)x(F/(12x(256-TH1))其中:SMOD1 是控制寄存器PCON的第7位(值为0或1),F是晶振频率 TH1是定数计数器Timer1高8位TH1及低8位TL1之初值。为顾及单片机与PC机串行通信,...
  • 80C51的中断有哪些?
    答:80C51单片机有五个中断源,分别是两个外部中断(INT0和INT1)、两个定时器中断(T0和T1)以及一个串行通信中断。每个中断源都有对应的中断请求标志位,当相应的中断事件发生时,这些标志位会被硬件自动置位。如果单片机的中断允许位被设置,且该中断源的优先级最高,那么CPU会在当前机器周期结束后响应...
  • 10、80C51单片机的P0口以作地址 /数据复用口使用时,是如何进行地址和数...
    答:80C51单片机的P0口是地址 /数据复用口,在一个指令周期的前半段,P0口先输出程序存储器地址的低8位,同时ALE信号加到锁存器74LS373的CLK端且为高电平,这个地址就送入锁存器之后,ALE变为低电平,低8位地址便由74LS373锁存并输出。在指令周期后半段,P0则变成双向数据口,即可读入指令,数据,也可以...
  • 高分求:用80c51/52单片机小系统编程制作计算器
    答:如 《51单片机通过串口进行基于逆波兰算法的逻辑运算》《双数组逆波兰表达式法:计算器源程(c语言) 转载》《RPN——逆波兰算法简介(huiyujian翻译) 转载》认真读完,不用注释,你能看懂了!满意要加分哦!这里也贴一段程序:include "stdio.h"include "REG52.h"define m0 15 void init(){SCON=0x...