串口通信編程
㈠ 串口通信程序
根據你的要求,寫了幾個簡單的子函數。 #include<reg52.h>
#define N 6 //方便修改密碼的長度
sbit key=P1^0; //確定發送密碼,發送完後將密碼清0
unsigned char i,a[N]; //定義數組來存放密碼 void serial_init()//串口初始化
{
TMOD=0x20;//設置定時器1為工作方式2
TH1=0xfd; //波特率為9600,標准波特率
TL1=0xfd;
TR1=1; //啟動定時器1
PCON&=0x7f; //SMOD=0,這里不需要倍頻
SCON=0x40; //設置串口為工作方式1
} void serial_send() //串口發送函數
{
for(i=0;i<N;i++)
{
TI=0; //串口發送完畢標志位清0
SBUF=a[i]; //發送數組中存放的密碼字元
while(!TI); //等待發送完畢
}
} void keyscan() //鍵盤掃描
{
if(!key) //用獨立鍵盤簡單舉例,按下為低電平
{
delay(10);//延時10毫秒,去抖。delay()函數省略
if(!key)
{ while(!key); //鬆手監測
serial_send(); //發送密碼
for(i=0;i<N;i++) //發送完畢清0
a[i]=0;
}
}
} void main(){ serial_send() ; while(1) { keyscan() ; }}大概就是這個思路,你可以把密碼鍵盤的值都寫在keyscan()函數里,可以加刪除鍵(密碼輸錯可以退格),最好加個顯示,密碼雖然不能顯示出來,但還是要顯示輸入的個數吧。還有個要提醒你的,就是上位機軟體的編寫,下位機發送的格式要與上位機接收的格式對應(字元或者數字)。
#include<conio.h>
#include<stdio.h>
#include<bios.h>
#define true 1
main( )
{
char ch;int i;
char a[50];
clrscr();
for(i=0;i<50;i++)
{
a[i]='a'+i;
}
i=0;
outportb(0x3fb,0x80);
outportb(0x3f8,0);
outportb(0x3f9,0x06);
outportb(0x3fb,0x03);
outportb(0x3fc,0x03);
outportb(0x3f8,a[i]);
while (true)
{
ch=inportb(0x3fd);
if(ch&0x01)
{
ch=inportb(0x3f8);
if(ch=='\r')
{printf("jikejlm");
outportb(0x3f8,a[i+1]);i++;
}
else
{ putch(ch);putch('\n');}
}
if(bioskey(1))
{
ch=bioskey(0)&0x0ff;
if(ch=='\r')
{
outportb(0x3f8,ch);
putch(ch);
}
}
}
}
㈢ RS232串口通信的程序怎麼寫啊
c或vb中有mscomm控制項很好用,我常用,以下是我用delphi寫的
with mscomm1 do begin
commport:=1; //埠號
settings:=9600,n,8,1; //埠設置
InputMode:=0; //設置或返回Input屬性取回的數據的類型 0:文本 1:二進制
RThreshold:=1; //每次接收到字元即產生OnComm事件
SThreshold:=0; //傳輸緩沖區允許最小字元數
InBufferCount:=0; //清空接收緩沖區內容
InputLen:=0; //為0時 Input一次讀取整個緩沖區內容
DTREnable:=true; //數據終端准備好
RTSEnable:=true; //發送請求
end;
mscomm1.Output:=edit1.text;//發送
str:=mscomm1.input; //接收
㈣ 51單片機串口通信c語言編程
#include <REG52.H>
#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;
}
㈤ RS232串口通信程序(VC++實現)
visual
c++_turbo
c串口通信編程實踐
㈥ 關於串口通信編程的疑問
上位機以PC,下位機以單片機為例,兩者在進行通信時一般用串口通信,而數據通過串口時是以16進制來傳送的,為了發送、接收處理方便,建議通過函數做一下處理,使發送的數據為16進制,這樣,通過串口接收到的數據也是相同的16進制,方便查看。
如果想讓下位機做某事,則需要上位機給下位機發送指令,也就是數據幀,這個要根據協議來寫,比如移動GSM、聯通GSM協議,里邊都有數據幀的格式以及具體定義。
補充:這個協議不是說串口通信協議,那個協議是根據用途或要求來採用的,比如說,要用單片機做一個聯通GSM協議的數據通信,那麼數據幀的格式必須是X開頭,X結尾的,有固定的格式。再比如移動的,數據幀格式有7E開頭7E結尾的,也有!開頭!結尾的,如果你的數據幀格式不正確,將無法識別而不能做出相關的動作。
你如果只是自己弄著玩,數據幀可以自己定義,但如果要做項目,最好根據要求協議來編寫。
㈦ 怎樣編寫單片機的串口通信的程序,一般的步驟是怎麼樣
編寫串口通訊程序步驟為:
1、設置波特率
2、設置串口工作方式
3、收發數據。
比如:
main()
{
unsignedchardat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0);
RI=0;
dat=SBUF;
SBUF=~dat;
while(TI==0)
TI=0;
}
}
㈧ KEIL編程 串口通信程序
如果使用51系列單片機如STC89C52,它用的是串列通信方式的在線燒寫功能,和單片機裡面編程的串列通信無關,是硬體本身的功能,你連接串口的兩根線和共地線,用STC-ISP 4.8,選擇單片機型號與程序位置,關閉單片機開發板,點擊程序下載後再上電就可以完成燒寫。通常可採用MAX232,台式機後面的串口線或USB+PL2303這兩種形式,這個功能AT89C52或是AVR系列都是不具備的。
㈨ c++ 編寫串口通信程序
c++ 編寫串口通信程序
推薦 看書
Visual C++_Turbo C串口通信編程實踐
㈩ vb串口通信程序實例
我也是自己摸索開發出來的每一款VBtoCOM通訊,有具體的思路如下:
給你推薦一個工具「com串口測試工具 ComTone V1.0 中文綠色版」
1、打開你的噪音計的測試軟體,調整好串口號、通訊頻率等等,我用溫度計舉例說明。