一道51单片机的C语言程序,关于串口通讯的,很简单......

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-28
51单片机执行一条C语言程序需要多长时间?

求一个51单片机简单的中断C语言程序51单片机C语言程序51单片机C语言程序求助!51单片机,帮忙写个c语言程序一道51单片机的C语言程序,关于串口通讯的,很简单.....51单片机:程序 51单片机:c语言 51单片机:语言 51单片机:中断 51单片机:手册51单片机烧写程序通常需要哪些软件?怎样烧写?51单片机汇编程序求教!51单片机与DS18B20程序51单片机程序求51单片机C程序一:要求通过按键输入控制8个流水灯的... 冯子衡�0�22012-3-21 指令周期,和你的晶振有关,然后c语言的内容也是有关系的,不是所有语句都一样的。不过,都很快。 �0�22012-3-21 那要看你这条语句的步数了,用汇编解释这条语句,再查对应会变语句的步数,

#include
#define uchar unsigned char
#define uint unsigned int


sbit ring=P3^7;
sbit CASE1=P2^0;
sbit CASE2=P2^1;
sbit CASE3=P2^2;
sbit CASE4=P2^3;


uchar se=0,re=0;
uchar temp=0;


void wait(uint cnt)
{
while(--cnt);
}


//串口发送程序
void send(uchar se)
{
SBUF=se; //发送数据
while(TI == 0);
TI = 0;
}
//串口接收程序
uchar receive(void)
{
re=SBUF; //接收数据
while(RI==0);
RI=0;
return re;
}
//串口初始化
void sinti(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
}
void delay(int cnt)
{
while(--cnt);
}



//主程序
int main (void)
{
int i;
sinti(); //串口初始化程序
ring=1;
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a');
ring=0;
break;
}
if(CASE2==0)
{
send('b');
ring=0;
break;
}
if(CASE3==0)
{
send('c');
ring=0;
break;
}
if(CASE4==0)
{
send('d');
ring=0;
break;
}
}
if(ring==0)
{
wait(60000);
ring=1;
}
for(i=0;i<10000;i++);
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{


if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
temp=SBUF;
}
if(TI) //如果是发送标志位,清零
TI=0;
}

#include<reg52.h> //增强型52寄存器的定义
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定义变量flag,a,i
uchar code table[]="I receive,thanks"; //定义一个字符串数组

void init()
{
} //设置工作方式,这个懂。

void main()
{
init(); //系统初始化,你懂的
while(1) //主循环部分,一直运行
{
if(flag==1) //等待flag标志位置位,当接收到数据的时候在串口接收中断中置位
{
ES=0; //禁止串口中断,但是注意发送中断标志位的置位仍然正常
for(i=0;i<18;i++) //for循环为了一个个把之前定义的字符串
{
SBUF=table[i]; //向串口收发缓冲器中写入回应的内容“I receive,thanks”
while(!TI); //等待发送完成,发送中断标志被置一,否则while循环一直进行
TI=0; //清除发送中断标志位
}
SBUF=a; //继续通过串口向串口收发缓冲器发送a,回显收到的数据
while(!TI); //等待发送完成
TI=0; //清除发送中断标志位
ES=1; //重新使能串口中断
flag=0; //清除flag,为了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中断服务程序,优先级为4
{
RI=0; //当接收完成之后RI被置一,发生串口中断,清标志位
a=SBUF; //读取收到的字符,并赋给变量a
flag=1; //置接收完成标志flag为一,便于主程序中发送响应
}

托你的福,我也学到了这点,谢谢!

#include<reg52.h> //头文件,c语言一样
#define uchar unsigned char //定义unsigned char为uchar
#define uint unsigned int
unsigned char flag,a,i; //定义unsigned char变量,其实这里用uchar也行
uchar code table[]="I receive, thanks "; //定义一个数组,存放到rom中,因为有code

void init()
{
} //设置工作方式,这个懂。

void main()
{
init(); //调用初始化函数
while(1) //while(1)循环,就是一直在这里面循环,一直接收
{
if(flag==1) //等待标志位也就是要等待接收中断执行之后,标志位置1,就是执行接收中断后,flag为1
{
ES=0; //关掉中断
for(i=0;i<18;i++) //for循环,依次取出数据发送(你写错了,是8)
{
SBUF=table[i]; //将你取出的一个uchar型数据送给SBUF
while(!TI); //等待发送完成,当发送完成后TI为1
TI=0; //发送中断清零,智能软件清零如果不清0会一直中断,出错的会
}
SBUF=a; //然后再发个a
while(!TI); //同上
TI=0;
ES=1; //置位中断标志位
flag=0; //清除标志位
}
}
}
void serial() interrupt 4 //中断,注意是interrupt 4
{
RI=0; //当发生中断清楚接收中断标志RI,也就是置0,它只能软件清零,一定要注意,只要你发送或者接收到后,RI和TI都会置位,必须软件清0
a=SBUF; //从SBUF中取出数据
flag=1; //标志位置1
}
呵呵,好了,慢慢来吧,单片机还是挺重要的~~~
记得给分啊~~~
(*^__^*) 嘻嘻……

  • 一道51单片机的C语言程序,关于串口通讯的,很简单...
    答:flag=1; //置接收完成标志flag为一,便于主程序中发送响应 }
  • 51单片机串口通信c语言编程
    答://主程序 int main (void){ int i;sinti(); //串口初始化程序 ring=1;while(1){ while (1){ if(CASE1==0){ send('a');ring=0;break;} if(CASE2==0){ send('b');ring=0;break;} if(CASE3==0){ send('c');ring=0;break;} if(CASE4==0){ send('d');ring=0...
  • 求一个基于51单片机的C语言程序,要求从串口接收一组数据,然后将其通过...
    答:unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容 sbit gewei=P2^2; //个位选通定义 sbit shiwei=P2^3; //十位选通定义 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};//{0x3...
  • c51单片机与PC机之间的串行交流的C语言程序
    答:include <reg51.h> include <intrins.h> char temp;bit flag;void ser() interrupt 4 { RI=0;temp=SBUF;flag=1;} void serinit(){ TMOD=0x20;TH1=0xfd;TL1=0xfd; //设置波特率9600 SM0=0;SM1=1;REN=1;TR1=1;ES=1;EA=1;} void main(){ serinit();while(1){ if(flag==...
  • 51单片机 串口设计c语言程序简单设计
    答:define uint unsigned int uchar flag, a;sbit d = P0^0;void init(){ TMOD = 0x20; //设置定时器1为工作方式2 TH1 = 0xfd;TL1 = 0xfd;TR1 = 1; //开定时器1 REN = 1; //开串口通信.SM0 = 0; //设置串口通信方式1 SM1 = 1;EA = 1; //开总中断.ES = 1...
  • 有个51单片机关于12864串口显示读写程序求助(c语言)
    答:if(a&(1<<(i-1))) RW_SID=1;表示1左移i-1位再于a进行与运算,i=8的情况下i-1=7,1左移7位就是0x80。再跟a与运算(全1出1有0出0)即可获得a的最高位。以此类推可以取出a的所有位。if(RW_SID==1) dat|=(1<<(i-1));当RW_SID端口为1时把1左移i-1位跟dat或运算。
  • 求51单片机字符串转换程序,C语言哦~~
    答:{ char l;//长度 char i,j;char Str_out[32];// 输出最多32字节,或者设为其他数字 char* ss=Str_in;char cc=Str_out;for(l=0;l++;*(ss++));// 检查字符串长度 l=l/2;// 输出的字符串长度 ss=Str_in;for(i=0;i<l;i++){ if((*ss)<='9')&&(*ss>'0')){ j=*...
  • C语言51单片机串口通信程序求教
    答:串口通讯,首先设置波特率,再设置串口模式,之后就可以收发数据了。比如:init(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0x50;}send(unsigned char dat){SBUF=dat;while(TI==0);TI==0;}unsigned char recive(){unsigned char dd;if(RI) { dd=SBUF; RI=0; } return(...
  • 求51单片机串口程序,单片机与PC互通讯,C语言
    答:include <AT89X51.H>#include <string.h>#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,自动...
  • ...单片机将字符串逆序发送回计算机,用C语言编程
    答:void Send(uint8 c){ SBUF = c;while(!TI);TI = 0;} void main(void){ char j;InitUART();while(1){ if(flag) //是否接收到回车 字符串发送完 { flag = 0;for(j = ct ; j > 0 ; j--){ Send(buf[j-1]);} } } } void UARTInterrupt(void) interrupt 4 { static...