導航:首頁 > 操作系統 > 單片機數據傳送實驗

單片機數據傳送實驗

發布時間:2024-01-23 12:32:32

⑴ 51單片機通過串口實現數據的發送與接收程序

串口收發,要有通信協議。也就是什麼時候開始接收,接收到指令後,轉發什麼數據。這個要知道,才可以寫。而且使用不同的51單片機,其內部寄存器配置是不同的。
一般來說,過程如下:
1,配置串口參數、波特率等,開啟串口中斷;
void Init_UART()
{

}
2,中斷函數里寫中斷響應函數,根據接收的指令或者數據,執行相應的動作;
程序一般為:
void UART_ISR() interrupt x using y
{
;串口中斷處理函數
}
x - 單片機的C51中斷號
y - 指定使用的當前工作寄存器組號(0-3 PSW中的RS0,RS1組合)

3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//數據發送函數
}
}

⑵ 單片機串列通信實驗

1、實驗:用單片機串列口,實現兩個實驗台之間的串列通訊。其中一個實驗台作為發送方,
另一側為接收方。發送方讀入按鍵值,並發送給接收方,接收方收到數據後在LED上顯示
2、原理:串列通信是指數據按位順序傳送的通信。串列數據傳送的特點是:通信線路簡單,最多隻需一對傳輸線即可實現通信,成本低但速度慢,其通信線路既能傳送數據信息,又能傳送控制信息。它對信息的傳送格式有固定要求,具體分為非同步和同步兩種信息格式.與此相應有非同步通信和同步通信兩種方式;在串列通信中,對信息的邏輯定義與TTL不兼容,需要進行邏輯電平轉換:計算機與外界的數據傳送大多是串列的,其傳送的距離可以從幾米到幾千公里。單片機中使用的串列通信通常都是非同步方式的
3、實驗目的:1)掌握單片機串列口工作方式的程序設計,及簡易三線式通訊的方法。 2)了解實現串列通訊的硬環境、數據格式的協議、數據交換的協議。 3)學習串口通訊的中斷方式的程序編寫方法
4、參考實現:
http://wenku..com/link?url=uyYKlkBQqwjGl-akFJ3xWa67R814ShF50uwd3

⑶ 您好請問一下,兩個單片機互相傳數據的程序怎麼寫

兩個單片機互相傳數據,其實很簡單的 就是兩個單片機的串口通信,當然需要一個串口通信的協議,如指令碼、數據長度、數據等等,就是什麼指令需要怎麼操作、操作數據是什麼。如這是兩個單片機簡單通信操作的模擬實例可以作為參考。

#include <reg52.h> // 單片機1

#define uchar unsigned char

#include <stdio.h>

unsigned char* c;

sbit k0=P3^2;

sbit k1=P3^3;

sbit led1=P3^5;

uchar k;

bit y0,y1;

bit t,s;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //發送位元組到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //發送字元串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main()

{

SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 數據位8、停止位1。效驗位無 (11.0592M)

TH1 = 0xF4; //TH1: reload value for [email protected]

TR1 = 1; //啟動定時器1

ES = 1; //允許串口中斷位

EA = 1; //允許總中斷位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //發送字元串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0)

{

y1=1;

c = "as";

SendString(c); //發送字元串

}

if(k1==1 ) { y1=0; }

// for(i = 0; i < 4000; i++); //延遲一小段時間

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;led1=~led1; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

------------------

#include <reg51.h> // 單片機2

#define uchar unsigned char

unsigned char* c;

sbit led1=P3^2; // 接收 az , P.2 輸出低電平, P3.3 輸出高電平。

sbit led2=P3^3; // 接收 aa , P.2 輸出高電平, P3.3 輸出低電平。

sbit k0=P3^5;

bit y0,t,s;

uchar k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //發送位元組到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //發送字元串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main (void)

{

SCON = 0x50; // REN=1允許串列接受狀態,串口工作模式1

TMOD = 0x21; // 定時器工作方式2

PCON = 0x80; // 數據位8、停止位1。效驗位無 (11.0592M)

TH1 = 0xF4; // TH1 = 0xFD; 波特率 2400

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

TR1 = 1;

ES = 1; // 開串口中斷

EA = 1; // 開總中斷

// ET0=1;

// TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //發送字元串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') {led1=0;led2=1; k++; }

if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10) // 這里修改時間

{

k=0;

led1=1;

led2=1;

}

}

⑷ 89C51單片機到PC機數據傳送實驗

匯編語言:

ORG0000H

LJMPSt


ORG0020H

St:


CLRA

MOVR7,A

ANLPCON,#0x7F ;波特率不倍速

MOVSCON,#0x50 ;8位數據,可變波特率

ANLTMOD,#0x0F ;清除定時器1模式位

ORLTMOD,#0x20 ;設定定時器1為8位自動重裝方式

MOVTL1,#0xE8 ;設定定時初值

MOVTH1,#0xE8 ;設定定時器重裝值

CLRET1 ;禁止定時器1中斷

SETBTR1 ;啟動定時器1


LOOP1:

CLRTI

MOVSBUF,R7 ;串口發送

INCR7

SETBC

MOVA,R7

XRLA,#0x80

SUBBA,#0xE4

JCLOOP2

CLRA

MOVR7,A

LOOP2:

JBTI,LOOP1

SJMPLOOP2


end


調試結果:

⑸ 求單片機數據傳送試驗源程序

我來答
1.假定16個頃碧數放在20H為首的地址里,送到目的50H為首的地址里
LOOP:
MOV R0,#20H
MOV R1,#50H
MOV A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R0,#30H,LOOP;當inc r0 前,R0=2FH,加1後R0+1=30H,不跳轉

2.假定16個數放在內部RAM20H為首的地址里,送到外部RAM目的0010H為首的地址里
MOV R0,#20H
MOV DPTR,#0010H
MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
CJNE R0,#30H,LOOP;當R0=2FH時,R0+1=30H,不跳轉

3.將外部RAM以1000H為首的16個數據放入,外部RAM以2000h為首的地址內
MOV R7,#0FH
MOV DPTR,#1000H;將源地址放入第一個DPTR
INC AUXR1;轉換指針,指向圓隱第二個DPTR
MOV DPTR,#2000H;將目的地址放入第二個DPTR
INC AUXR1;指向源dptr
LOOP:
MOV A,@DPTR;將源地址數據放入A
INC DPTR;源地址加1
INC AUXR1;轉換為目的橘乎廳地址
MOV @DPTR,A;將A內容放入目的地址
INC DPTR;目的地址加1
INC AURX1;指向源地址
DJNZ R7,LOOP;R7減1,循環,減15次

閱讀全文

與單片機數據傳送實驗相關的資料

熱點內容
單片機x地址 瀏覽:208
回車鍵失靈運行命令如何使用 瀏覽:984
電腦一鍵解壓縮的軟體 瀏覽:171
怎麼關閉手機通訊錄對外app 瀏覽:370
我的世界如何強行進入一個滿人的伺服器 瀏覽:653
什麼app可以查詢會考成績 瀏覽:389
程序員能創造的價值 瀏覽:259
伺服器上的redis是什麼意思 瀏覽:379
軟體產品經理與程序員 瀏覽:922
高中生程序員 瀏覽:892
ps處理pdf 瀏覽:723
伺服器c1什麼意思 瀏覽:222
哈爾濱手機什麼app拍違章有獎勵 瀏覽:478
盜賊用什麼app最好 瀏覽:903
51單片機如何測量電導率 瀏覽:500
移動花卡怎麼使用app流量 瀏覽:555
個稅演算法2021表格公式解讀 瀏覽:175
怎麼進入電腦板2b2t伺服器 瀏覽:286
idea編譯進度條 瀏覽:134
文件夾工具箱軟體 瀏覽:688