標(biāo)題: 52單片機(jī)學(xué)習(xí)中,通過(guò)串口發(fā)字符的問(wèn)題,請(qǐng)大俠幫忙 [打印本頁(yè)]

作者: hdle    時(shí)間: 2017-7-7 17:01
標(biāo)題: 52單片機(jī)學(xué)習(xí)中,通過(guò)串口發(fā)字符的問(wèn)題,請(qǐng)大俠幫忙
一臺(tái)成品機(jī)器通過(guò)串口助手找出來(lái)的控制代碼:FE  68  00  01  0F  00  00  76  16 。我這里用了如下程序代碼,可是就發(fā)不出這樣的 16 進(jìn)制代碼,只能發(fā)出相同的字符,希望有大俠給指點(diǎn)指點(diǎn),謝謝!



#include <reg52.h>
#define botelv                /*波特率定義為1200*/
unsigned char zifuchuan[]="FE 68 00 01 0F 00 00 76 16";                        //待顯示字符。
volatile unsigned char sending;
sbit s2=P3^4;

void delay(unsigned char i)
{
        unsigned char j,k;
        for(j=i;j>0;j--)
                for(k=90;k>0;k--);
}
void init(void)                                //串口初始化
{
EA=0; //暫時(shí)關(guān)閉中斷
TMOD&=0x0F;  //定時(shí)器1模式控制在高4位
TMOD|=0x20;    //定時(shí)器1工作在模式2,自動(dòng)重裝模式
SCON=0x50;     //串口工作在模式1
TH1=0xE8;  //計(jì)算定時(shí)器重裝值
TL1=0xE8;
//PCON|=0x80;    //串口波特率加倍
ES=1;         //串行中斷允許
TR1=1;        //啟動(dòng)定時(shí)器1
REN=1;        //允許接收
EA=1;         //允許中斷
}

void send(unsigned char d)                  //發(fā)送一個(gè)字節(jié)的數(shù)據(jù),形參d即為待發(fā)送數(shù)據(jù)。
{

SBUF=d; //將數(shù)據(jù)寫(xiě)入到串口緩沖
sending=1;         //設(shè)置發(fā)送標(biāo)志
while(sending); //等待發(fā)送完畢
}

void sendc(unsigned char * pd)
{
while((*pd)!='\0') //發(fā)送字符串,直到遇到0才結(jié)束
{
  send(*pd); //發(fā)送一個(gè)字符
  pd++;  //移動(dòng)到下一個(gè)字符
}
}

void main()
{
        init();
        while(1)
        {
                if(s2==0)
                {
                        delay(20);
                        if(!s2)
                        {
                                while(!s2);               
                                sendc(zifuchuan);
                        }
                }
        }
}

void uart(void) interrupt 4                 //串口發(fā)送中斷
{
if(RI)    //收到數(shù)據(jù)
{
  RI=0;   //清中斷請(qǐng)求
}
else      //發(fā)送完一字節(jié)數(shù)據(jù)
{
  TI=0;
  sending=0;  //清正在發(fā)送標(biāo)志
}
}




作者: cjjcjj1    時(shí)間: 2017-7-7 18:25
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 蟲(chóng)蟲(chóng)飛    時(shí)間: 2017-7-7 19:54
unsigned char zifuchuan[]="FE 68 00 01 0F 00 00 76 16";&nbsp;改成unsigned char zifuchuan[]={0xfe,……}這種形式
作者: 怯情久°    時(shí)間: 2017-7-7 20:03
首先,你發(fā)送的是字符串,也就是"FE 68 00 01 0F 00 00 76 16"這一串的ASCII碼,你要寫(xiě)成unsigned char zifuchuan[]=0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16";還有,51單片機(jī)的停止位是1位,你的串口調(diào)試助手上面是兩位
作者: hdle    時(shí)間: 2017-7-7 22:23
怯情久° 發(fā)表于 2017-7-7 20:03
首先,你發(fā)送的是字符串,也就是"FE 68 00 01 0F 00 00 76 16"這一串的ASCII碼,你要寫(xiě)成unsigned char zif ...

unsigned char zifuchuan[]=0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16";
改了問(wèn)題依舊喲  串口調(diào)試助手停止位也改成1位了。

作者: wulin    時(shí)間: 2017-7-8 07:10
hdle 發(fā)表于 2017-7-7 22:23
unsigned char zifuchuan[]=0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16";
改了問(wèn)題依舊喲  串口調(diào)試 ...

你改成這樣還是字符串,不要用雙引號(hào),要用花括號(hào),如樓上所述unsigned char zifuchuan[]={0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16};
作者: 怯情久°    時(shí)間: 2017-7-8 09:09
hdle 發(fā)表于 2017-7-7 22:23
unsigned char zifuchuan[]=0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16";
改了問(wèn)題依舊喲  串口調(diào)試 ...

沒(méi)打全,是unsigned char zifuchuan[]={0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16};
還有你的發(fā)送代碼要改一下,別用指針了,既然知道要發(fā)送幾個(gè)數(shù)據(jù),直接發(fā)送固定長(zhǎng)度的字符串就行。 void sendc(unsigned char  *pd)
{
unsigned char i;
for(i=0;i<9;i++)
{
  send(*pd); //發(fā)送一個(gè)字符
}
}
作者: hdle    時(shí)間: 2017-7-8 10:43
怯情久° 發(fā)表于 2017-7-8 09:09
沒(méi)打全,是unsigned char zifuchuan[]={0XFE,0X68,0X00,0X01,0X0F,0X00,0X00,0X76,0X16};
還有你的發(fā)送 ...

修行的路上有困難也不會(huì)害怕了,在51黑中有你們真好!
大俠依你的指點(diǎn),問(wèn)題解決了,非常的感謝!
sendc(unsigned char  *pd)
{
unsigned char i;
for(i=0;i<9;i++)
{
  send(*pd); //發(fā)送一個(gè)字符
  pd++;  //移動(dòng)到下一個(gè)字符
}
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1