導航:首頁 > 編程語言 > 單片機串口編程實例

單片機串口編程實例

發布時間:2024-06-11 15:04:03

⑴ 用單片機串口向電腦串口調試助手發送一個字元串,用C語言編程

uchar idata SystemBuf[10]; //用於接收
uchar Rx=0; //接收數據條數
uchar code AT[]="YES,IT IS";
void UART_init (void)
{
TMOD=0x20; //用定時器1
PCON=0x00; //波特率不加倍
SCON=0x50; //串列方式1
TH1=0xFD; //9600
TL1=0xFD; //
EA=1; //
ES=1; //
TR1=1;
}
void sendchar(uchar ch) //串口送一個位元組
{
SBUF=ch;
while(TI==0);
TI=0;
}
void sendstring(uchar *p) //送字元串
{

while(*p)
{
sendchar(*p);
p++;
}
}
///////
void receive(void) interrupt 4 using 1 //中斷
{

if(RI)
{

if(Rx<10) //這兒最多收10個位元組
{
SystemBuf[Rx]=SBUF;
Rx++;
}

RI=0;
}
}
///
void main()
{
uchar i;
UART_init();
while(1)
{
if(SystemBuf=='S')
{
sendstring(AT);
for(i=0;i<10;i++) //接收清0
{
SystemBuf[i]=0;
}
Rx=0;
}
}
}
//////////如有小錯誤,自己調下,手打的,大小寫可能不正常,這是標准程序,直接用,

⑵ 簡單51單片機串口程序

試試下列程序,這時用中斷發送的。

#include<reg51.h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}

本程序,可以用串口助手接收。收到的是:hellohellohellohellohello....

⑶ 求單片機高手編寫一個串口通信接受字元程序,用匯編語言. 急急急!!!!

ORG 00H

AJMP MAIN

ORG 23H

AJMP URT;串口中斷

ORG 30H

MAIN:

MOV SP,#60H

MOV R0,#50H

MOV TMOD,#20H;T1工作方式2

SETB EA;開總中斷

ACALL URTINIT;串口初始化

AJMP $ ;等待串口中斷

URT: ;串口中斷每次只收1個位元組,未完繼續進入中斷,接收。

PUSH ACC

JNB RI,URT1

URT0:

CLR ES

CLR RI

MOV A,SBUF

MOV @R0,A;先保存

INC R0

CJNE R0,#60H,URT1

CLR EA

URT1:

SETB ES

POP ACC

RTI: RETI

URTINIT:

MOV SCON,#50H;串口工作方式1,接收

MOV TH1,#0F4H;11.0592M2400BPS

MOV TL1,TH1

SETB TR1;開啟定時器

SETB ES;開啟串口中斷

RET

⑷ 編程實現stm32單片機串口的數據收發

int main(void)
{
u16 t;
u16 len;
u16 times=0;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先順序,2位響應優先順序
uart_init(115200); //串口初始化為115200
LED_Init(); //LED埠初始化
KEY_Init(); //初始化與按鍵連接的硬體介面
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
printf("\r\n您發送的消息為:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1發送數據
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
}
printf("\r\n\r\n");//插入換行
USART_RX_STA=0;
}
}
}

⑸ 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;
}

閱讀全文

與單片機串口編程實例相關的資料

熱點內容
主角姓庄穿越到香港當探長 瀏覽:271
百度網盤視頻是雙語的怎麼改為單語的 瀏覽:334
伺服器關閉玩家充的錢怎麼辦 瀏覽:251
日本男男影片 瀏覽:860
matlab實用教程pdf 瀏覽:769
伺服器加密方式哪種好 瀏覽:121
顯示加密服務超時 瀏覽:611
日語口譯pdf 瀏覽:433
外人如何評價身邊的程序員 瀏覽:105
霍夫曼編碼壓縮演算法 瀏覽:122
我想學習單片機 瀏覽:644
陳寶蓮拍過 瀏覽:336
遙調命令的設定命令實現過程 瀏覽:76
演算法中最壞情況都為多少 瀏覽:995
排序演算法圖形化展示 瀏覽:782
看電影免費網站入口 瀏覽:447
加密U盤啟動區和交換區格式化 瀏覽:247
求不需要下載播放器就能看的網站 瀏覽:828
日本重生電影在線 瀏覽:623
女的被一個小孩上了 瀏覽:948