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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教大神,誰用過STC15W204S單片機,怎么設置串口通信,簡單的收或發(fā)送例程都行?

[復制鏈接]
跳轉到指定樓層
樓主
ID:190577 發(fā)表于 2019-12-2 18:51 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "uart.h"

void UartInit(void)  [url=]//9600bps@11.0592MHz[/url]
{
PCON &= 0x7F;  //波特率不倍速
SCON = 0x50;  //8位數(shù)據(jù),可變波特率
AUXR |= 0x40;  //定時器1時鐘為Fosc,即1T
AUXR &= 0xFE;  //串口1選擇定時器1為波特率發(fā)生器
TMOD &= 0x0F;  //清除定時器1模式位
TMOD |= 0x20;  //設定定時器1為8位自動重裝方式
TL1 = 0xfd;  //設定定時初值
TH1 = 0xfd;  //設定定時器重裝值
ET1 = 0;  //禁止定時器1中斷
TR1 = 1;  //啟動定時器1
}
/*----------------------------
發(fā)送串口數(shù)據(jù)
----------------------------*/
void SendData(unsigned char ch)
{
    SBUF = ch;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
  while(TI == 0);
  TI = 0;
}
/*----------------------------
發(fā)送字符串
----------------------------*/
void SendString(char *s)
{
    while (*s)                  //檢測字符串結束標志
    {
        SendData(*s++);         //發(fā)送當前字符
    }
}

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

使用道具 舉報

沙發(fā)
ID:33998 發(fā)表于 2019-12-2 20:20 | 只看該作者
STC 下載軟件上有簡單的示例程序可以參考

[U3RM@0AAO`OJ68Q6JQHX@M.png (89.87 KB, 下載次數(shù): 33)

[U3RM@0AAO`OJ68Q6JQHX@M.png
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2019-12-2 21:12 | 只看該作者
芯片型號 : STC15W204S
關于此芯片的重要說明:
  有定時器0和定時器2 (注意:無定時器1)
  有比較器 (可當作一路ADC使用)

所以要用定時器2做波特率發(fā)生器,官方示例:
  1. void UartInit(void)                //9600bps@11.0592MHz
  2. {
  3.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  4.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  5.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
  6.         TMOD &= 0x0F;                //設定定時器1為16位自動重裝方式
  7.         TL1 = 0xE0;                //設定定時初值
  8.         TH1 = 0xFE;                //設定定時初值
  9.         ET1 = 0;                //禁止定時器1中斷
  10.         TR1 = 1;                //啟動定時器1
  11. }
復制代碼
回復

使用道具 舉報

地板
ID:155507 發(fā)表于 2019-12-2 22:01 | 只看該作者
STC15W204S單片機 沒有定時器1

  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15W201S 系列 定時器2用作串口1的波特率發(fā)生器舉例------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
  7. /* --- Web: www.STCMCU.com --------------------------------------------*/
  8. /* --- Web: www.GXWMCU.com --------------------------------------------*/
  9. /* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
  10. /* 如果要在文章中應用此代碼,請在文章中注明使用了STC的資料及程序        */
  11. /*---------------------------------------------------------------------*/

  12. //本示例在Keil開發(fā)環(huán)境下請選擇Intel的8058芯片型號進行編譯
  13. //若無特別說明,工作頻率一般為11.0592MHz


  14. #include "reg51.h"
  15. #include "intrins.h"

  16. typedef unsigned char BYTE;
  17. typedef unsigned int WORD;

  18. #define FOSC 11059200L          //系統(tǒng)頻率
  19. #define BAUD 115200             //串口波特率

  20. #define NONE_PARITY     0       //無校驗
  21. #define ODD_PARITY      1       //奇校驗
  22. #define EVEN_PARITY     2       //偶校驗
  23. #define MARK_PARITY     3       //標記校驗
  24. #define SPACE_PARITY    4       //空白校驗

  25. #define PARITYBIT EVEN_PARITY   //定義校驗位

  26. sfr P5          =   0xC8;   //xxxx,1111 端口5
  27. sbit P50        =   P5^0;
  28. sbit P51        =   P5^1;
  29. sbit P52        =   P5^2;
  30. sbit P53        =   P5^3;
  31. sbit P54        =   P5^4;
  32. sbit P55        =   P5^5;
  33. sbit P56        =   P5^6;
  34. sbit P57        =   P5^7;
  35. sfr P1M1 = 0x91;
  36. sfr P1M0 = 0x92;
  37. sfr P3M1 = 0xb1;
  38. sfr P3M0 = 0xb2;
  39. sfr P5M1 = 0xC9;
  40. sfr P5M0 = 0xCA;


  41. sfr AUXR  = 0x8e;               //輔助寄存器
  42. sfr T2H   = 0xd6;               //定時器2高8位
  43. sfr T2L   = 0xd7;               //定時器2低8位

  44. sfr P_SW1   = 0xA2;             //外設功能切換寄存器1

  45. #define S1_S0 0x40              //P_SW1.6
  46. #define S1_S1 0x80              //P_SW1.7

  47. //sbit P55 = P5^5;

  48. bit busy;

  49. void SendData(BYTE dat);
  50. void SendString(char *s);

  51. void main()
  52. {
  53.     P1M0 = 0x00;
  54.     P1M1 = 0x00;
  55.     P3M0 = 0x00;
  56.     P3M1 = 0x00;
  57.     P5M0 = 0x00;
  58.     P5M1 = 0x00;


  59.     ACC = P_SW1;
  60.     ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  61.     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  62.    
  63. //  ACC = P_SW1;
  64. //  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
  65. //  ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
  66. //  P_SW1 = ACC;  
  67. //  
  68. //  ACC = P_SW1;
  69. //  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
  70. //  ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
  71. //  P_SW1 = ACC;  

  72. #if (PARITYBIT == NONE_PARITY)
  73.     SCON = 0x50;                //8位可變波特率
  74. #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
  75.     SCON = 0xda;                //9位可變波特率,校驗位初始為1
  76. #elif (PARITYBIT == SPACE_PARITY)
  77.     SCON = 0xd2;                //9位可變波特率,校驗位初始為0
  78. #endif

  79.     T2L = (65536 - (FOSC/4/BAUD));   //設置波特率重裝值
  80.     T2H = (65536 - (FOSC/4/BAUD))>>8;
  81.     AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
  82.     AUXR |= 0x01;               //選擇定時器2為串口1的波特率發(fā)生器
  83.     ES = 1;                     //使能串口1中斷
  84.     EA = 1;

  85.     SendString("STC15W201S\r\nUart Test !\r\n");
  86.     while(1);
  87. }

  88. /*----------------------------
  89. UART 中斷服務程序
  90. -----------------------------*/
  91. void Uart() interrupt 4
  92. {
  93.     if (RI)
  94.     {
  95.         RI = 0;                 //清除RI位
  96.         P1 = SBUF;              //P0顯示串口數(shù)據(jù)
  97.         P55 = RB8;              //P5.5顯示校驗位
  98.     }
  99.     if (TI)
  100.     {
  101.         TI = 0;                 //清除TI位
  102.         busy = 0;               //清忙標志
  103.     }
  104. }

  105. /*----------------------------
  106. 發(fā)送串口數(shù)據(jù)
  107. ----------------------------*/
  108. void SendData(BYTE dat)
  109. {
  110.     while (busy);               //等待前面的數(shù)據(jù)發(fā)送完成
  111.     ACC = dat;                  //獲取校驗位P (PSW.0)
  112.     if (P)                      //根據(jù)P來設置校驗位
  113.     {
  114. #if (PARITYBIT == ODD_PARITY)
  115.         TB8 = 0;                //設置校驗位為0
  116. #elif (PARITYBIT == EVEN_PARITY)
  117.         TB8 = 1;                //設置校驗位為1
  118. #endif
  119.     }
  120.     else
  121.     {
  122. #if (PARITYBIT == ODD_PARITY)
  123.         TB8 = 1;                //設置校驗位為1
  124. #elif (PARITYBIT == EVEN_PARITY)
  125.         TB8 = 0;                //設置校驗位為0
  126. #endif
  127.     }
  128.     busy = 1;
  129.     SBUF = ACC;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
  130. }

  131. /*----------------------------
  132. 發(fā)送字符串
  133. ----------------------------*/
  134. void SendString(char *s)
  135. {
  136.     while (*s)                  //檢測字符串結束標志
  137.     {
  138.         SendData(*s++);         //發(fā)送當前字符
  139.     }
  140. }



復制代碼
回復

使用道具 舉報

5#
ID:235200 發(fā)表于 2019-12-2 22:42 | 只看該作者
這不是已有發(fā)送程序嗎?
char RceData()
{
  while(RI == 0);
   ch = SBUF ;                 //接收數(shù)據(jù)存放
  RI = 0;
return ch;
}
回復

使用道具 舉報

6#
ID:47286 發(fā)表于 2019-12-3 00:39 | 只看該作者
你是最近遇到的第二個不看手冊的人 15W204S沒有定時器1 只有0和2

下面是用STC-ISP生成的串口初始化范例

void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x01;                //串口1選擇定時器2為波特率發(fā)生器
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = 0xE0;                //設定定時初值
        T2H = 0xFE;                //設定定時初值
        AUXR |= 0x10;                //啟動定時器2
}

回復

使用道具 舉報

7#
ID:65956 發(fā)表于 2019-12-3 08:03 | 只看該作者
問題問得有點讓人不明白,你到底要什么?你這個串口函數(shù)不是可以嗎?程序加個工程再加個主函數(shù)就可以了
回復

使用道具 舉報

8#
ID:25310 發(fā)表于 2019-12-3 09:33 | 只看該作者
可愛的小小白,需要多動手啊! STC有程序范例保存成項目多改改程序多練手吧!
回復

使用道具 舉報

9#
ID:190577 發(fā)表于 2019-12-3 21:12 | 只看該作者
jxrjamu 發(fā)表于 2019-12-2 20:20
STC 下載軟件上有簡單的示例程序可以參考

感謝指導。
回復

使用道具 舉報

10#
ID:190577 發(fā)表于 2019-12-3 21:16 | 只看該作者
終于可以通信,分析下我代碼,感謝各位前輩的指導。
#include "config.h"
#include "delay.h"
#include "uart.h"
unsigned int INT0_cnt=0, INT1_cnt=0; //測試用的計數(shù)變量
sbit key=P5^5;
/************* 功能說明 **************

******************************************/
/************* 本地常量聲明 **************/

/************* 本地變量聲明 **************/

/************* 本地函數(shù)聲明 **************/

/*************  外部函數(shù)和變量聲明 *****************/

/******************** IO配置函數(shù) **************************/
void GPIO_config(void)
{
P5M1 = 0x40;   //設置準雙向口
P5M0 = 0x00;
P0M1 = 0; P0M0 = 0; //設置為準雙向口
P1M1 = 0; P1M0 = 0; //設置為準雙向口
P2M1 = 0; P2M0 = 0; //設置為準雙向口
P3M1 = 0; P3M0 = 0; //設置為準雙向口
P4M1 = 0; P4M0 = 0; //設置為準雙向口
P5M1 = 0; P5M0 = 0; //設置為準雙向口
P6M1 = 0; P6M0 = 0; //設置為準雙向口
P7M1 = 0; P7M0 = 0; //設置為準雙向口
}
/******************** 主函數(shù) **************************/
void main(void)
{
int count = 0;
GPIO_config();
UartInit();

INT0_cnt = 0;
INT1_cnt = 0;
IE1  = 0; //外中斷1標志位
IE0  = 0; //外中斷0標志位
EX1 = 1; //INT1 Enable
EX0 = 1; //INT0 Enable
IT0 = 1;  //INT0 下降沿中斷  
// IT0 = 0;  //INT0 上升,下降沿中斷
IT1 = 1;  //INT1 下降沿中斷  
// IT1 = 0;  //INT1 上升,下降沿中斷
EA = 1;  //允許總中斷
while(1)
{

   
  SendData(1+0x30);
  INT0_cnt++;
  if(INT0_cnt >= 65536)
   INT0_cnt = 0;
  if(key==0)
  {
   delay_ms(10);
   if(key==0)
   {
   
    while(!key);
    SendData(INT1_cnt/10000+0x30);
    SendData(INT1_cnt%10000/1000+0x30);
    SendData(INT1_cnt%10000%1000/100+0x30);
    SendData(INT1_cnt%10000%1000%100/10+0x30);
    SendData(INT1_cnt%10+0x30);
    SendString("\r\n");
    INT1_cnt=0;
   
   }
  
  }
  
}
}
/********************* INT0中斷函數(shù) *************************/
void INT0_int (void) interrupt 0  //進中斷時已經(jīng)清除標志
{
EX0=0;
INT0_cnt++; //中斷+1
EX0=1;
}
/********************* INT1中斷函數(shù) *************************/
void INT1_int (void) interrupt 2 //進中斷時已經(jīng)清除標志
{
EX1=0;
INT1_cnt++; //中斷+1
}

/*********************************************************/
//#define MAIN_Fosc  22118400L //定義主時鐘
//#define MAIN_Fosc  12000000L //定義主時鐘
#define MAIN_Fosc  11059200L //定義主時鐘
//#define MAIN_Fosc   5529600L //定義主時鐘
//#define MAIN_Fosc  24000000L //定義主時鐘
#define BaudRate1 9600UL
#define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1)
/*********************************************************/
#include "uart.h"

void UartInit(void)  [url=]//9600bps@11.0592MHz[/url]
{
SCON = 0x50;                //8位可變波特率
AUXR&=~(1<<4);  
AUXR|=0x10;
AUXR|=(1<<2);
T2H =(u8)(Timer2_Reload>>8);
T2L=(u8)(Timer2_Reload);
AUXR|=(1<<4);  //啟動
REN=1;
ES=1;EA=1;
}
/*----------------------------
發(fā)送串口數(shù)據(jù)
----------------------------*/
void SendData(unsigned char ch)
{
    SBUF = ch;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
  while(TI == 0);
  TI = 0;
}
/*----------------------------
發(fā)送字符串
----------------------------*/
void SendString(char *s)
{
    while (*s)                  //檢測字符串結束標志
    {
        SendData(*s++);         //發(fā)送當前字符
    }
}



回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 北条麻妃99精品青青久久主播 | www.99re| 天堂中文字幕av | 国产精品一区二区三区四区五区 | 成人精品一区二区三区 | 国产成人精品一区二区 | 久久er99热精品一区二区 | 久日精品 | 久久久久国产成人精品亚洲午夜 | 亚洲视频欧美视频 | 久久欧美高清二区三区 | 久久网一区二区 | 成人免费看电影 | 欧美成人免费 | 99久久久久久99国产精品免 | 免费看的av | 亚洲欧美国产精品久久 | 国产三级国产精品 | 国产精品国产精品国产专区不片 | 国产激情在线 | 精品国产乱码久久久久久闺蜜 | 日韩免费网站 | 欧美激情在线精品一区二区三区 | 中文av网站 | 久久国产精品视频 | 亚洲视频免费观看 | 视频在线观看亚洲 | 99亚洲综合 | 国产又爽又黄的视频 | 日韩精品极品视频在线观看免费 | 国产一区二区视频免费在线观看 | 天天干天天干 | 天天操网 | 成人av电影在线观看 | 精品国产成人 | 久久r精品| 在线不卡视频 | 亚洲免费视频一区 | 亚洲精品一区二区 | 免费一级欧美在线观看视频 | www.夜夜骑.com|