|
我的開(kāi)發(fā)板晶振是12MHZ的,第一個(gè)是別人寫(xiě)的,在2400波特率下可以正常通訊,第二個(gè)我的,在任何波特率下都是亂碼,大家?guī)臀铱聪履睦锊煌耍x謝大家了。
/**************************************************************************************
實(shí)驗(yàn)名稱:串口通信實(shí)驗(yàn)
接線說(shuō)明:
實(shí)驗(yàn)現(xiàn)象:下載程序后,當(dāng)串口助手發(fā)送數(shù)據(jù)給單片機(jī),單片機(jī)原封不動(dòng)轉(zhuǎn)發(fā)給串口助手顯示
注意事項(xiàng):使用黃色跳線帽將CH340旁的P5端子的UTX和P30短接,URX和P31短接,出廠默認(rèn)已短接好
***************************************************************************************/
#include "reg52.h"
typedef unsigned int u16; //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;
/*******************************************************************************
* 函 數(shù) 名 : uart_init
* 函數(shù)功能 : 串口通信中斷配置函數(shù),通過(guò)設(shè)置TH和TL即可確定定時(shí)時(shí)間
* 輸 入 : baud:波特率對(duì)應(yīng)的TH、TL裝載值
* 輸 出 : 無(wú)
*******************************************************************************/
void uart_init(u8 baud)
{
TMOD|=0X20; //設(shè)置計(jì)數(shù)器工作方式2
SCON=0X50; //設(shè)置為工作方式1
PCON=0X80; //波特率加倍
TH1=0xe6; //計(jì)數(shù)器初始值設(shè)置
TL1=0xe6;
ES=1; //打開(kāi)接收中斷
EA=1; //打開(kāi)總中斷
TR1=1; //打開(kāi)計(jì)數(shù)器
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{
uart_init(0XFA);//波特率為2400
while(1)
{
}
}
void uart() interrupt 4 //串口通信中斷函數(shù)
{
u8 rec_data;
RI = 0; //清除接收中斷標(biāo)志位
rec_data=SBUF; //存儲(chǔ)接收到的數(shù)據(jù)
SBUF=rec_data; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
}
這是我的
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag, a, i;
uchar code table[]="i get";
void init()
{
TMOD=0x20;
SCON=0x50;
PCON=0x80;
TH1=0xe6;
TL1=0xe6;
TR1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
for(i=0;i<6;i++)
{
SBUF=table[ i];
while(!TI);
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
|
|