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緩存區的,你要做的就是不斷的讀取緩存區的數據,不必去關心數據是如何發送和接受的。