Ⅰ 編程實現51單片機與PC的串口通信,要求波特率設置為9600,循環發送字元串「abc
#include "reg51.h"
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void)
{
initUart();
EA=1;
while(1)
{
send_byte('abc');
}
}
Ⅱ 一道51單片機的C語言程序,關於串口通訊的,很簡單......
#include<reg52.h> //增強型52寄存器的定義
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
unsigned char flag,a,i; //定義變數flag,a,i
uchar code table[]="I receive,thanks"; //定義一個字元串數組
void init()
{
} //設置工作方式,這個懂。
void main()
{
init(); //系統初始化,你懂的
while(1) //主循環部分,一直運行
{
if(flag==1) //等待flag標志位置位,當接收到數據的時候在串口接收中斷中置位
{
ES=0; //禁止串口中斷,但是注意發送中斷標志位的置位仍然正常
for(i=0;i<18;i++) //for循環為了一個個把之前定義的字元串
{
SBUF=table[i]; //向串口收發緩沖器中寫入回應的內容「I receive,thanks」
while(!TI); //等待發送完成,發送中斷標志被置一,否則while循環一直進行
TI=0; //清除發送中斷標志位
}
SBUF=a; //繼續通過串口向串口收發緩沖器發送a,回顯收到的數據
while(!TI); //等待發送完成
TI=0; //清除發送中斷標志位
ES=1; //重新使能串口中斷
flag=0; //清除flag,為了等待下一次接收
}
}
}
void serial() interrupt 4 //串口中斷服務程序,優先順序為4
{
RI=0; //當接收完成之後RI被置一,發生串口中斷,清標志位
a=SBUF; //讀取收到的字元,並賦給變數a
flag=1; //置接收完成標志flag為一,便於主程序中發送響應
}
Ⅲ 51單片機串口問題,程序如下。
12288的十六進制是3000H
12544的十六進制是3100H
如果你送的是「2「,那列印出來的就是3200H了,也就是12800.
因此(其實我也不怎麼知道,推斷的):0的asc2碼是48,也就是30H,1的asc2碼是49,也就是31H……就是說:存儲asc2碼值的是sbuf的高8位,如果想列印真正的asc2碼,就用高八位輸出吧~
Ⅳ 簡單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....
Ⅳ 51單片機串口問題 修改程序
按你這程序,那隻能是把:
SBUF=receiveData;
while(!TI);
修改成:
SBUF='O';
while(!TI);
SBUF='K';
while(!TI);
如果一定要指定接收『Y』,那就在這4條語句外括上if條件,if(receiveData=='Y'){xxxxx}
不過本人建議你不要這么搞,這個while(!TI);是潛在死循環,也是N多串口通信導致死機的起因,它可能導致系統其他任務無法執行,出現所謂「死機」現象。
另外,標准51單片機,9600bps,其晶振必定得使用非整數晶振,如11.0592MHz。用 12MHz的晶振,會因其誤碼率過大而導致通信失敗。
Ⅵ 使用8051單片機的串列通信方式1,要求波特率9600bps,請編寫初始化程序。
初始化程序:
SCON = 0x50 ; //方式1,允許接受
TMOD = 0x20 ; //設置time1,方式2
TH1 = 0xfd; //波特率9600b/s 晶振12MHz
TL1 = 0xfd;
ES = 1 ; //允許串口中斷
EA = 1; //中斷總開啟
TR1 = 1 ; //T1開啟
Ⅶ 51單片機串列口工作方式1,波特率9600,fosc=6MHz,請用查詢 的方法編寫發送和接
如下即可:
JNBRI,$
CLRRI
MOVA,SUBF
MOVSUBF,A
JNBTI,$
CLRTI
別忘了採納。
Ⅷ 51單片機的晶振頻率為11.0592MHZ,波特率為9600b/s,要求串口工作在方式1,發送數據
init_uart()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x5=40;
TR1=1;
}