c语言rs232
❶ 求问用c语言编写51的rs232,要求六个字符,每个字符14字节,由单片机发给电脑,怎么写出程序呢
#define SENDLEN 14
unsigned char sendbuf[SENDLEN ];
//初始化串口
SCON = 0x50; //串口方式1,允许接滚困收
TMOD = 0x20; //定时器1定时方式2
TCON = 0x40; //设定时器1开瞎旁始计数
TH1 = 250; //波特率9600
TL1 = 250;
PCON = 0x80; //波特率加倍控制,SMOD位
RI = 0; //清大神念收发标志
TI = 0;
TR1 1 = 1; //启动定时器
//在这里要给sendbuf装入要发送的数据
for(i=0 ; i <S ENDLEN ; i++)
{
while(!TI);
SBUF = sendbuf[i];
}
❷ 求RS232发送和接收数据包的C语言程序
首先,串口调试软件的波特率最好设置成9600,这种波特率也支持显示中文的,
USB转串口看你用的什么芯片,经过实验采用CH340或是竖枣341的是没有问题的,其他还有待验证。
串口调试软件也很重要,有些软件会奇怪出现乱码,但并不是程序错误,推荐你用小丁的sscom32,个人感觉很棒! ;**************************************************************************
; 程序名称:单片机串口发送中文字符实验,232通信程序
; 硬件说明:打开《串口调试助手》,波特率设为9600速率,11.0592晶体
; 注 意:《串口调试助手》要设置好COM号(请核对是否和设备管理器的COM编号一致)
; 操作说明:下载李纤链程序后打开串口调试助手sscom32.exe即可显示,或按一下复位开关
;***************************************************************************/
ORG 0000H
AJMP main
ORG 0030H
main: MOV 20H,#00H
MOV TMOD,#22H ;定时器工作方式
MOV SCON,#40H
MOV TH1,#0FAH ;波特率9600
MOV PCON,#80H
SETB TR1
SETB REN ;允许接收
ajmp start
start: mov dptr,#num ;查表
send : clr a ;
movc a,@a+dptr
cjne a,#'$',send_2
ajmp $ ;遇到$停止。
send_2:mov sbuf,a
JNB TI,$ ;串行发送一帧结束了吗?
CLR TI ;
inc dptr ;指针加一
Ljmp send
num:
db 0dh,0ah,0dh,0ah,"XY900_USB型单片机学习板USB-232串口中文发送试验 "
db 0dh,0ah,0dh,0ah,"-----心情解梦-----"
db 0dh,0ah,0dh,0ah,"我梦见自己和前女友生了一个小孩,自己用婴儿车推着孩子在山间的公路上不停地走..."
db 0dh,0ah,0dh,0ah,"最佳答案:"
db 0dh,0ah,0dh,0ah,"首先,你们之间的感情给你留下了很深刻的东西,我想那些镜头可能是你们在一起时你所感受到的---那也许可能会是真的景物..."
db 0dh,0ah,0dh,0ah,"其次,也可能是代表某种心情,我猜想是不是你们曾经的爱情让你觉得幸福但同时也哪孙有隐隐作痛...回忆让你觉得不安全和无法掌握。",0dh,0ah,'$'
end
❸ 帮忙用C语言写一段单片机rs232程序
你坦亩好!!
给你一个串口通讯的友信清例子,你看看吧
❹ RS-232-C的C语言程序
通过RS232总线与PC进行通信的测猜迹铅试程序(c语言)
/*这是一个使用单片机串行通信口通过RS232总线与PC进行通信的测试程序,无需扩展.可将DB9的第2和第3脚短路,进行自收自发测试.采用串行中断接收州卜,速率:9600,通信方式2,晶振使用:osc=11.0592MHz。使用SW1-SW6键盘发送文本数字1-6,数穗好码管显示接收的ASCII数据*/
void main(void)
{
SCON=0x50;
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=0xf4;
TL0=0x48;
ES=1;ET0=1;EA=1;
TR1=1;
TR0=1;
while(1)
{
if(!key){ Delay(30000);
a=Key_down();
SBUF=table[a];
while(TI==0);
TI=0;
}
}
}
uchar Key_down(void)
{ uchar x;
if(!sw1)x=1;
else if(!sw2)x=2;
else if(!sw3)x=3;
else if(!sw4)x=4;
else if(!sw5)x=5;
else if(!sw6)x=6;
return(x);
}
void Int_T0(void) interrupt 1
{
TH0=0xf4;
TL0=0x48;
if(count==5)count=0;
else count++;
switch(count)
{
case 0:DIG_NUM=0x7f;
LED_DISPLAY=buff_led1;
break;
case 1:DIG_NUM=0xbf;
LED_DISPLAY=buff_led2;
break;
case 2:DIG_NUM=0xdf;
LED_DISPLAY=buff_led3;
break;
case 3:DIG_NUM=0xef;
LED_DISPLAY=buff_led4;
break;
case 4:DIG_NUM=0xf7;
LED_DISPLAY=buff_led5;
break;
case 5:DIG_NUM=0xfb;
LED_DISPLAY=buff_led6;
break;
default:break;
}
}
void Int_Serial(void) interrupt 4
{
while(RI==0);
a=SBUF;RI=0;
buff_led1=buff_led2;
buff_led2=buff_led3;
buff_led3=buff_led4;
buff_led4=buff_led5;
buff_led5=buff_led6;
buff_led6=a;
}
void Delay(int t)
{while(--t);}
❺ 求 单片机向RS232发射 代码 START 延时2.5ms C语言例程
#include<reg51.h>悄铅伏激改
#define uchar unsigned char
#define uint unsigned int
void delay()
{
uint i;
for(i=0;i<启携300;i++);
}
main()
uchar a;
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
while(1)
{
SBUF=a;
a++;
while(TI==0);
TI=0;
delay();
}
}
❻ 单片机AT89C51连接DS18B20然后将采集到的两个字节通过RS232发送到PC机界面中,请问单片机用C语言怎么编写
好编写啊,1.DS18B20采样 2.提取数据 3.UART传输。
给你点代码,自己参考下。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dq=P1^5;
void sdelay(unsigned int i)
{
while(i--);
}
ds18b20on(void)//ds18b20初始颂枝绝化
{
uchar x=0;
dq=1;
sdelay(8);
dq=0;
sdelay(80);
dq=1;
sdelay(14);
sdelay(20);
}
//读一个字节
readds18b20(void)
{
uchar i=0,dat=0;
for(i=8;i>0;i--)
{
dq=0;
dat>>=1;
dq=1;
if(dq)
dat|=0x80;
sdelay(4);
}
return(dat);
}
//写一个字节
writeds18b20(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
sdelay(5);
dq=1;
dat>>=1;
}
}
//读取温度
readtemperature(void)
{
uchar a=0,b=0;
uint t=0;
float tt=0;
ds18b20on();
writeds18b20(0xCC);//跳过ROM
writeds18b20(0x44);//开启温度转换
ds18b20on();
writeds18b20(0xCC);
writeds18b20(0xBE);//读暂存器
a=readds18b20();
b=readds18b20();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
这部分是DS18B20的采样:
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
这部分的处理是得到十进制的温度数据。
如果你想直接得到2个字节数据(a=readds18b20();b=readds18b20();
),那么刚才那段可以不处理,删掉!
然后是串口部分:
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar receive[35]; //串口接收数据存放
uchar t=0;
void delay(uint z)//延时子程序
{
uint x,y;
for(x=10;x>0;x--)
for(y=z;y>0;y--); //z*10 us
}
void init()//串口初始化
{
SCON=0x50; //SCON:串行口工作方式1, 8-bit UART,允许串行接收位(REN=1)
TMOD=0x20; //TMOD:定时器1,方式2,8位自动重装方式
PCON=0x80; //SMOD=1;(将串口传送的波特率加倍)
TH1=0xfa; //Baud:9600 fosc=11.0592MHz
TL1=0xfa;
TR1=1; //启动定时器/计数器1运行
//IE=0x90; //EA=1,ES=1允许总中断,允许串口中断
EA=1; //开总中断
ES=1; //开串口中断
}
void send_char(uchar a)//向串口发送一个野姿字符搭槐
{
SBUF=a; //发送数据给“串口调试助手”接收窗口
while(TI==0);//等待发送完,TI置1
TI=0; //清零 TI为发送中断标志
}
void send_string(uchar *str) //向串口发送一个字符串,strlen为该字符串长度
{
uint k=0;
do
{
send_char(*(str + k));
k++;
} while(k<strlen(str));
t=0;//发送完毕,准备接收
}
//串口接收中断函数,并将数据放入预存放数组里,每收到一个字符中断一次
void serial() interrupt 4 using 3
{
if(RI==1)//RI为接受中断标志,可能是发送产生的中断
{
uchar a;
RI=0;//接受中断标志软件清零
P0=SBUF;//把收到的缓存数据赋给P0口
a=SBUF;//把缓存在单片机的数据给a
// send_char(a);
receive[t++]=a;//将接受数据放入预置数组
send_string(receive);//将收到的数据发送回去,给P0口&显示在“串口调试助手”接收框
}
}
/*******************************主函数*******************************************/
void main()
{
init(); //串口初始化
delay(1);
// send_string();//利用串口发送字符串
while(1);
}
这个是串口收发程序,收什么发什么,那么我们修改一下,把我们的数据传出去。
void main()
{
uchar aa[2];//用于发数据
uint bb=0;//用于保存温度数据
init(); //串口初始化
ds18b20on(); //ds18b20初始化
bb=readtemperature();//温度采样
aa[0]=bb; //取温度数据低字节
aa[1]=bb>>8; //取温度数据高字节
send_string(aa);//利用串口发送字符串
while(1);//这里只循环了一次,你可以做修改
}
基本思路就这样,程序要你自己修改一部分,有问题Hi我!
❼ 如何实现VC与单片机RS-232通讯控制
有c语言基础开发RS-232,用c++,MFC开发早槐,(雀盯开发com使用简单c++语句就可以了,不难跟你用的c语言很相似)vb更陆岁友容易实现同样功能,但是vc是大势所趋,看一下龚建伟的RS232串口设计,非常简单,最主要就是电话控件(串口的控件),书上面源代码有,买一本,串口助手实现的源码也有,也很容易,一个礼拜就看完,书上从最简单的用PC控制跑马灯讲解,放寒假可以练习,平时上课时间久别去弄了,高考要紧,想研究单片机或者更复杂的嵌入式上面,时间不够用,在没人带你的情况下要走的路也很曲折,在应试教育的情况下,先把高考这关过了。
❽ 单片机C语言编程输入字符串问题
单片机和PC通讯,通过RS232串口是最简单的方式。
要实现你的想法,首先在PC端有个应用程序,可以通过串口向单片机发出字符,比如“串口调试助手”。然后将单片机与PC通过RS232连接。
然后,在单片机这边,你自己去了解下单片机RS232编程,很简单的,设定好RS232中断,当单片机的RS232接口接收到PC端发送过来的字符时,单片机便会产生一个中断,然后你编程响应这个中断,回发一个字符就行了。
如果是一个个的字符,也不用担心,单片机有RS232缓存区的,你要做的就是不断的读取缓存区的数据,不必去关心数据是如何发送和接受的。