欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

以下單片機代碼發給電腦串口助手調試沒有顯示?

查看數: 3929 | 評論數: 20 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-12-19 16:08

正文摘要:

做串口助手學習,寫了一個程序,在keil調試沒問題, 在助手上不行,但顯示有發送計數。 現將程序主要部分抄上,請各位大佬幫忙,謝謝! main() {              ...

回復

ID:161164 發表于 2022-12-21 11:40
wh8010jky 發表于 2022-12-21 11:18
文本模式,hex模式都試過了,沒有反應

經仿真測試
文本模式發'M'
會在兩秒后傳回'N'



ID:134430 發表于 2022-12-21 11:18
Longan.Wang 發表于 2022-12-20 17:18
在文本模式下,發送區輸入一個"M",然后點擊“發送數據”,就發送出去了。

文本模式,hex模式都試過了,沒有反應
ID:77589 發表于 2022-12-20 17:18
wh8010jky 發表于 2022-12-20 15:37
謝謝14樓!!
由于粗心,在發帖時漏掉了init(),一直沒發現,你質疑了才發現,那是當時刪除其他文字時誤刪 ...

在文本模式下,發送區輸入一個"M",然后點擊“發送數據”,就發送出去了。
ID:134430 發表于 2022-12-20 15:37
謝謝14樓!!
由于粗心,在發帖時漏掉了init(),一直沒發現,你質疑了才發現,那是當時刪除其他文字時誤刪的。
現將程序全部重發一下。
這個程序keil 上調試是順利的。
我現在最想知道的是:如何在串口助手上讓電腦發送一個 M ?


#include "reg52.h"
#define         uchar unsigned char
#define  uint16 unsigned int


void Init();
void delay_1ms(uint16);
void SetLcd12864();
void WriteDat(uchar dat);
void WriteIns(uchar ins);
void ShowAddr(uchar x,uchar y);

#define LcdValue P1                //定義數據口   
sbit LCD_RS=P3^5;                //定義工作指令性質設置口:指令、數據               
sbit LCD_RW=P3^6;                //定義工作模式設置口:寫、讀
sbit LCD_EN=P3^7;                //定義使能口
sbit PSB=P3^2;                        //定義通訊方式口: =1:并口,8位  =0:串口
sbit RST=P3^3;                        //定義復位口


uchar message=0;
uchar code menuA[] ={"     Hello !    "};
uchar code menuC[] ={"     Over!      "};
uchar code menuB[] ={"     N          "};


main()
{                                                                         
        Init();
    while(1)
    {
                uchar i;
                if(message != 0)                //!=0:收到電腦發來的信息有效
                {
                        delay_1ms(2000);
                        SBUF='N';
                        while(!TI);
                                TI=0;
                        ShowAddr(2,0);                       
                            for(i=0;i<16;i++)        WriteDat(menuB[i]);        //'N'
                        delay_1ms(2000);
                        message=0;                        //消息清0,等待新消息
                        ES=1;
}        }        }
       

void receive() interrupt 4        //串行接收服務程序
{
        uchar i;
        RI=0;                                //收到標志清0
        ES=0;
        message=SBUF;                        //從上位機收到的存入:
        if(message=='M')                //判斷信息是 M嗎?
        {
            ShowAddr(3,0);                       
                    for(i=0;i<16;i++)        WriteDat(menuC[i]);        //“   Over!     ”  
                message=1;
        }
        else
                message=0;
}

void Init()
{
    uchar i;
    SetLcd12864();                //初始化12864
        delay_1ms(1000);
    ShowAddr(1,0);                       
            for(i=0;i<16;i++)        WriteDat(menuA[i]);        //“   Hello !     ”  
        TMOD=0x20;                //定時器1,工作方式2
        TH1=0xfd;                //波特率9600,晶振11.0592
        TL1=0xfd;
        TR1=1;                        //開定時器1

        SM0=0;                        //串行工作方式1
        SM1=1;                        //SCON 設置:sm0,sm1,ren
        REN=1;                        //允許串行接收
        ES=1;                        //開串口中斷
        EA=1;                        //開總中斷
}

void delay_1ms(uint16 n)
{
        uchar m;
        while(n--)                                       
    {
        m=123;
                while(m--);       
    }
}

        //********** 初始化 ***********//
void SetLcd12864()
{
    PSB=1;                  //p23     //工作方式:8位,并口                         
    RST=1;                  //p25     //復位
    LCD_EN=0;               //p22       使能

    WriteIns(0x30);                        //寫入指令:采用基本指令系統  
    delay_1ms(5);                       
    WriteIns(0x0c);                        //寫入指令:開顯示,關光標,不反白
    delay_1ms(5);
    WriteIns(0x01);                        //寫入指令:清屏
    delay_1ms(5);
}

    //********* 寫指令的接口操作 ************//
void WriteIns(uchar ins)
{
    LCD_RS=0;               //p20 =0:指令模式
    LCD_RW=0;               //p21 =0:寫模式,  =1:讀模式
    LCD_EN=1;               //p22

    LcdValue = ins;         //發送指令數據   
    delay_1ms(1);

    LCD_EN=0;
}

    //********* 寫數據的接口操作 ************//
void WriteDat(uchar dat)
{                       
    LCD_RS=1;               //p20 =1: 數據模式
    LCD_RW=0;               //p21 =0:寫模式,  =1:讀模式模式
    LCD_EN=1;

    LcdValue = dat;
    delay_1ms(1);

    LCD_EN=0;
}

    //********** 設置顯示位置 **********//
void ShowAddr(uchar x,uchar y)        //xy:顯示地址,行位
{
    if(x==0)
        x=0x80;
    else if(x==1)
        x=0x90;
    else if(x==2)
        x=0x88;
    else if(x==3)
        x=0x98;

    WriteIns(x+y);
}         
ID:134430 發表于 2022-12-20 15:18
lkc8210 發表于 2022-12-20 10:41
那么init()在哪里運行?

在main()里
ID:161164 發表于 2022-12-20 10:41
wh8010jky 發表于 2022-12-20 09:34
初始化在init()里。

那么init()在哪里運行?
ID:134430 發表于 2022-12-20 09:37
Y_G_G 發表于 2022-12-19 22:43
開了中斷,就得在中斷中清除TI和RI位,不然中斷會卡死

RI在中斷里,TI在main()里,因為發送沒用中斷
ID:134430 發表于 2022-12-20 09:34

初始化在init()里。
ID:1054554 發表于 2022-12-20 09:30
初始化
ID:161164 發表于 2022-12-20 09:21
wh8010jky 發表于 2022-12-19 19:02
首先感謝各位的熱心!!
先前的求助帖,提示字太多,不能發布,正在修改,不知怎么就發出去了,連一個說明 ...

結合一樓的代碼
發現和我推斷的一樣
沒有運行初始化代碼Init()
ID:1058360 發表于 2022-12-19 23:15
沒寫初始化
ID:401564 發表于 2022-12-19 22:43
開了中斷,就得在中斷中清除TI和RI位,不然中斷會卡死
ID:134430 發表于 2022-12-19 19:28
說一下我是這么操作串口助手的:
配置好端口、波特率,然后打開串口,用電腦輸入'M'  ,在助手發送區可見'M',點擊發送數據,發送計數有增加,但是單片機端無反應。
我現在的疑惑:
1、助手的發送區數據是電腦向單片機發送的,還是單片機向電腦發送的?接收區的數據是哪一端收到的數據?
2、程序有什么問題?程序的流程很簡單:電腦向單片機發一個字符 M ,單片機收到后,顯示Over字樣,然后單片機向電腦發送一個字符 N ,同時在單片機端顯示 N 字樣,再然后等待下一個電腦發來的信息。

附圖:紅圈顯示發送有計數
哎呀,圖發不上去。
ID:134430 發表于 2022-12-19 19:02
首先感謝各位的熱心!!
先前的求助帖,提示字太多,不能發布,正在修改,不知怎么就發出去了,連一個說明文字都沒有,收不回了,于是趕緊又發了一個,文字也不敢多寫。現在把程序補齊。

#include "reg52.h"
#define         uchar unsigned char
#define  uint16 unsigned int


void Init();
void delay_1ms(uint16);
void SetLcd12864();
void WriteDat(uchar dat);
void WriteIns(uchar ins);
void ShowAddr(uchar x,uchar y);

#define LcdValue P1                //定義數據口   
sbit LCD_RS=P3^5;                //定義工作指令性質設置口:指令、數據               
sbit LCD_RW=P3^6;                //定義工作模式設置口:寫、讀
sbit LCD_EN=P3^7;                //定義使能口
sbit PSB=P3^2;                        //定義通訊方式口: =1:并口,8位  =0:串口
sbit RST=P3^3;                        //定義復位口


uchar message=0;
uchar code menuA[] ={"     Hello !    "};
uchar code menuC[] ={"     Over!      "};
uchar code menuB[] ={"     N          "};


void Init()
{
    uchar i;
    SetLcd12864();                //初始化12864
        delay_1ms(1000);
    ShowAddr(1,0);                       
            for(i=0;i<16;i++)        WriteDat(menuA[i]);        //“   Hello !     ”  
        TMOD=0x20;                //定時器1,工作方式2
        TH1=0xfd;                //波特率9600,晶振11.0592
        TL1=0xfd;
        TR1=1;                        //開定時器1

        SM0=0;                        //串行工作方式1
        SM1=1;                        //SCON 設置:sm0,sm1,ren
        REN=1;                        //允許串行接收
        ES=1;                        //開串口中斷
        EA=1;                        //開總中斷
}

void delay_1ms(uint16 n)
{
        uchar m;
        while(n--)                                       
    {
        m=123;
                while(m--);       
    }
}

        //********** 初始化 ***********//
void SetLcd12864()
{
    PSB=1;                  //p23     //工作方式:8位,并口                         
    RST=1;                  //p25     //復位
    LCD_EN=0;               //p22       使能

    WriteIns(0x30);                        //寫入指令:采用基本指令系統  
    delay_1ms(5);                       
    WriteIns(0x0c);                        //寫入指令:開顯示,關光標,不反白
    delay_1ms(5);
    WriteIns(0x01);                        //寫入指令:清屏
    delay_1ms(5);
}

    //********* 寫指令的接口操作 ************//
void WriteIns(uchar ins)
{
    LCD_RS=0;               //p20 =0:指令模式
    LCD_RW=0;               //p21 =0:寫模式,  =1:讀模式
    LCD_EN=1;               //p22

    LcdValue = ins;         //發送指令數據   
    delay_1ms(1);

    LCD_EN=0;
}

    //********* 寫數據的接口操作 ************//
void WriteDat(uchar dat)
{                       
    LCD_RS=1;               //p20 =1: 數據模式
    LCD_RW=0;               //p21 =0:寫模式,  =1:讀模式模式
    LCD_EN=1;

    LcdValue = dat;
    delay_1ms(1);

    LCD_EN=0;
}

    //********** 設置顯示位置 **********//
void ShowAddr(uchar x,uchar y)        //xy:顯示地址,行位
{
    if(x==0)
        x=0x80;
    else if(x==1)
        x=0x90;
    else if(x==2)
        x=0x88;
    else if(x==3)
        x=0x98;

    WriteIns(x+y);
}
ID:961114 發表于 2022-12-19 17:30
STC8H8K64U-45MHz-TSSOP20,可以USB下載 USB仿真  很方便很簡單
廠家提供核心板和范例程序包  還有教學視頻   
樓主這個簡單程序 看不出問題
ID:883242 發表于 2022-12-19 17:27
先用示波器看波形是否出現,你的代碼如果沒收到數據是不會發送的,你的代碼沒有串口初始化,接收在中斷,結果當然是無論如何都不可能發送。
ID:161164 發表于 2022-12-19 17:00
串口初始化呢?

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表