久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2396|回復: 2
打印 上一主題 下一主題
收起左側

51單片機C語言指針數組發送的疑惑

[復制鏈接]
跳轉到指定樓層
樓主
ID:120930 發表于 2018-12-26 23:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請大俠指點迷津:在串口中斷服務函數里比如當串口接收到數據4時,程序依次執行61,62,63,64,65,66,17,18,19,20,21,37,38,39,40,41,67,68,69,70,71,72,73,74,75,然后就跳出67,if(TI)這個函數了,此時TI=0,RI=0,cmdArrived=0,主程序就停在17的位置了,此時第72行就執行了一次,就發送了數組的首地址的數據,然而事實上是都發送完了。請大俠指導一下,謝謝

各位大俠先看代碼
1,#include <reg52.h>

2,bit cmdArrived = 0;   //命令到達標志,即接收到上位機下發的命令
3,unsigned char cmdIndex = 0;//命令索引,與上位機約定好的數組編號
4,unsigned char *ptrTxd;//串口發送指針
5,unsigned char cntTxd = 0;//串口發送計數器

6,unsigned char array1[1] = {1};   //數組1
7,unsigned char array2[2] = {1,2}; //數組2
8,unsigned char array3[4] = {1,2,3,4}; //數組3
9,unsigned char array4[8] = {1,2,3,4,5,6,7,8};//數組4
10,void ConfigUART(unsigned int baud);
11,void main()
12,{
13,    EA = 1;  //開總中斷
14,    ConfigUART(9600);  //配置波特率為9600

15,    while (1)
16,    {
17,        if(cmdArrived) 串口接收到數據標志為真
18,        {
19,            cmdArrived = 0;
20,            switch(cmdIndex) //cmdIndex為串口接收的數值
21,            {
22,                case 1:
23,                ptrTxd = array1;//數組1的首地址賦值給發送指針
24,                cntTxd = sizeof(array1);//數組1的長度賦值給發送計數器
25,                TI = 1;//手動方式啟動發送中斷,處理數據發送
26,                break;
27,                case 2:
28,                ptrTxd = array2;
29,                cntTxd = sizeof(array2);
30,                TI = 1;
31,                break;
32,                case 3:
33,                ptrTxd = array3;
34,                cntTxd = sizeof(array3);
35,                TI = 1;
36,                break;
37,                case 4:
38,                ptrTxd = array4;
39,                cntTxd = sizeof(array4);
40,                TI = 1;
41,                break;
42,                default:
43,                break;        
44,            }        
45,  }

46,}
47,}

48,void ConfigUART(unsigned int baud)
49,{
50,    SCON  = 0x50;  //配置串口為模式1
51,    TMOD &= 0x0F;  //清零T1的控制位
52,    TMOD |= 0x20;  //配置T1為模式2
53,    TH1 = 256 - (11059200/12/32)/baud;  //計算T1重載值
54,    TL1 = TH1;     //初值等于重載值
55,    ET1 = 0;       //禁止T1中斷
56,    ES  = 1;       //使能串口中斷
57,    TR1 = 1;       //啟動T1
58,}

59,void InterruptUART() interrupt 4 //串口中斷服務函數
60,{
61,    if (RI)  //接收到字節
62,    {
63,        RI = 0;  //清零接收中斷標志位
64,        cmdIndex = SBUF; //接收的數值送給cmdIndex
65,        cmdArrived = 1;  //設置命令到達標志     
66,    }
67,    if (TI)  //字節發送完畢
68,    {
69,        TI = 0;  //清零發送中斷標志位
70,        if(cntTxd > 0)
71,        {
72,            SBUF = *ptrTxd;//發送指針指向的數據
73,            cntTxd--;//發送計數器遞減
74,            ptrTxd++;//發送計數器遞增
75,        }

    }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:120930 發表于 2018-12-27 09:07 | 只看該作者
這個程序是用串口調試助手對單片機發送1,單片機回傳數組1.對單片機發送2,單片機回傳數組2.依次類推,最多到4
回復

使用道具 舉報

板凳
ID:120930 發表于 2018-12-27 09:10 | 只看該作者
這個程序是串口調試助手對單片機發送1 單片機回傳數組1. 對單片機發送2 單片機回傳數組2. 對單片機發送3 單片機回傳數組3.  對單片機發送4 單片機回傳數組4
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色综合九九 | 国产精品毛片一区二区在线看 | 久久精品| 成人午夜视频在线观看 | 久久99精品久久久 | h视频免费观看 | 亚洲国产一区二区三区在线观看 | 精品久久久久久久久久久院品网 | 亚洲劲爆av| 手机在线不卡av | 看a网站| 美女黄网站 | 久久久一区二区三区 | 久久国产精品视频 | 欧美专区在线 | 国产精品免费观看视频 | 男人的天堂在线视频 | 欧美精品一区在线发布 | 精品无码三级在线观看视频 | 草草视频在线观看 | 国产1区 | 美女午夜影院 | 国产精品a免费一区久久电影 | 97人澡人人添人人爽欧美 | 秋霞精品 | 免费观看色 | 97国产在线观看 | 啪视频在线 | 不卡一区二区在线观看 | 国产毛片久久久久久久久春天 | 国产你懂的在线观看 | 午夜免费福利片 | 日韩理论电影在线观看 | 日韩波多野结衣 | 日韩免费福利视频 | 欧美中文一区 | 一区二区三区在线播放 | 亚洲欧洲日本国产 | 亚洲国产精品成人无久久精品 | 亚洲一区二区三区免费 | 亚洲一一在线 |