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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2742|回復: 1
收起左側

關于STC12C5A60S2單片機雙串口程序問題

[復制鏈接]
ID:487464 發表于 2019-3-11 14:32 | 顯示全部樓層 |閱讀模式
為什么我的程序編譯成功了,但是串口2卻不會發送數據呢?謝謝!

  1. #include<STC12C5A60S2.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include<intrins.h>
  5. #include "UART2.h"
  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. uchar code dis_tab1[]={"    識別結果    "};
  9. uchar code dis_tab4[]={"------------------------"};

  10. uchar RecDate[14]={0};  //串口接收 數據

  11. uint count_ms=0; //計時
  12. uchar recnum2=0; //串口接收長度

  13. uchar disflag=0;//顯示模式

  14. bit recfinish=0; //串口接收完成為1


  15. void Timer0Init(void)                //10m秒@11.0592MHz
  16. {

  17. TMOD &= 0xF0;                //設置定時器模式
  18.         TMOD |= 0x01;                //設置定時器模式
  19.         TL0 = 0x00;                //設置定時初值
  20.         TH0 = 0xDC;                //設置定時初值
  21.         TF0 = 0;                //清除TF0標志
  22.         TR0 = 0;                //定時器0關閉計時
  23.   ET0=1;
  24.         EA=1;
  25. }


  26. /* 串行通信初始化*/
  27. void UartInit(void)                //9600bps@11.0592MHz
  28. {
  29.         PCON &= 0x7F;                //波特率不倍速
  30.         SCON = 0x50;                //8位數據,可變波特率

  31.         TMOD &= 0x0F;                //清除定時器1模式位
  32.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  33.         TL1 = 0xfd;                //設定定時初值
  34.         TH1 = 0xfd;                //設定定時器重裝值
  35.         ET1 = 0;                //禁止定時器1中斷
  36.         TR1 = 1;                //啟動定時器1
  37.         ES = 1;                 //Enable UART1 interrupt
  38.         EA=1;                                        //開總中斷
  39.         

  40. }

  41. /************************************************/
  42. void Delay_1ms(unsigned int xms)
  43. {
  44.         unsigned int i,j;
  45.         for(i=xms;i>0;i--)
  46.                 for(j=122;j>0;j--);
  47. }
復制代碼

  1. #include"12864.h"

  2. void display()///液晶顯示函數
  3. {
  4.         uchar i=0;
  5.   uchar temp[14]={0};
  6.          
  7.           LCD_pos(3,0);
  8.      for(i=0;i<16;i++)                        
  9.      write_dat(' ');
  10.      LCD_pos(3,0);
  11.      sprintf((char*)temp,"%13s",RecDate);        
  12.          
  13.                         i=0;
  14.                         while(temp[i] != '\0')
  15.                         {                        
  16.                                  write_dat(temp[i]);
  17.                                  i++;
  18.                         }
  19.                
  20.                  LCD_pos(1,3);
  21.                  for(i=0;i<10;i++)                        
  22.      write_dat(' ');        
  23.                  LCD_pos(1,3);   
  24.          

  25.         }


  26. void send_char_com(unsigned char ch)  //串口1發送字節
  27. {
  28.     SBUF=ch;
  29.     while(TI==0); //若果TI=0,循環等待
  30.     TI=0;                  //發送完,清零TI
  31. }


  32. void main() //主函數
  33. {
  34.         uint count=0;
  35.         uchar i=0;

  36.         Timer0Init();//初始化T0
  37.         LCD_init();//初始化led        
  38.         UartInit();         //初始化串口1
  39.         Uart2Init();  //初始化串口2
  40.         while(1)
  41.         {
  42.          count++;
  43.   if(count>10)
  44.         {
  45.          count=0;
  46.         }               

  47.          
  48.         if(recfinish==1)//串口接收到數據,得到識別碼
  49.         {
  50.           recfinish=0;
  51.                 TR0=0;//關閉定時器0
  52.                 count_ms=0;
  53.                 display();
  54.         
  55.         
  56.                          Delay_1ms(30);
  57.                          recnum2=0;// 接收數據長度清零
  58.                 for(i=0;i<14;i++)   
  59.                 RecDate[i]=0;
  60.         }

  61.                  Delay_1ms(30);
  62.         }            


  63. }
  64. /***********************************************
  65. 函數名稱:Timer0_ISR
  66. 功    能:定時器0中斷處理函數
  67. 入口參數:無
  68. 返 回 值:無        
  69. 備    注:無
  70. ************************************************/
  71. void Timer0_ISR() interrupt 1  //10ms
  72. {  

  73.         TL0 = 0x00;                //設置定時初值
  74.         TH0 = 0xDC;                //設置定時初值
  75.   count_ms++;
  76. if(count_ms>100)//超過1s
  77. {
  78.          count_ms=0;
  79.    recfinish=1; //串口接收完成
  80. }
  81. }




  82.   /*----------------------------
  83. UART interrupt service routine 串口接收條形碼數據
  84. ----------------------------*/
  85. void Uart_Isr() interrupt 4 using 1
  86. {

  87.     if (RI)
  88.     {
  89.      RI = 0;             //Clear receive interrupt flag

  90.               
  91.     TR0=1;//打開定時器0                        
  92.                 if(recnum2<13)
  93.                 {
  94.      RecDate[recnum2]=SBUF;
  95.                  recnum2++;
  96.                 }   
  97.            }
  98.            }
  99. #ifndef _UART2_H_
  100. #define _UART2_H_



  101. void Uart2Init(void);
  102. void Uart2_send_byte(unsigned char date);
  103. void Uart2_send_string(unsigned char *p);

  104. void Uart2Init(void)                //9600bps@11.0592MHz      
  105. {
  106.     AUXR |= 0x08;                //使能波特率倍速位S2SMOD:(波特率加倍)
  107.         S2CON = 0x50;                //8位數據,可變波特率
  108.         AUXR &= 0xFB;                //獨立波特率發生器時鐘為Fosc/12,即12T
  109.         
  110.         BRT = 0xFA;                //設定獨立波特率發生器重裝值
  111.         
  112.         AUXR |= 0x10;                //啟動獨立波特率發生器
  113.                IE2 =0x01;        //開串口2中斷  ES2=1
  114. }


  115. void Uart2_send_byte(unsigned char date)//串口2發送一個字節
  116. {        
  117.                 IE=0 ;
  118.         S2BUF=date;
  119.         while((S2CON&0X02)==0);
  120.         {
  121.         S2CON&=~0X02;              //清除發送標志位
  122.           IE=1;
  123.         }         
  124. }

  125. void Uart2_send_string(unsigned char *p)   //串口2發送一個字符串
  126. {
  127.         while(*p!='\0')
  128.         {
  129.                 Uart2_send_byte(*p);
  130.                 p++;
  131.         }
  132. }


  133. #endif
復制代碼
回復

使用道具 舉報

ID:229821 發表于 2019-4-6 08:35 | 顯示全部樓層
我是串口2無法接受數據
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码久久久 | 精品综合视频 | 日本成年免费网站 | 国产乱码高清区二区三区在线 | 日韩国产精品一区二区三区 | 日韩精品免费 | 国产精品免费在线 | 久久中文字幕电影 | 精品久久久久久久久久久久 | 欧美一级免费 | 日本不卡高字幕在线2019 | 精品亚洲一区二区 | 青春草91 | 精品在线99 | 99一级毛片 | 亚洲免费一区二区 | 国产一级一级毛片 | 欧美国产精品一区二区三区 | 久久国产精品免费一区二区三区 | 久久99精品久久久久久秒播九色 | 久久久久久亚洲精品 | 黄色一级大片在线免费看产 | 久久精品免费一区二区 | 久久久久一区二区三区 | 高清视频一区二区三区 | 精品国产欧美一区二区三区成人 | 久久久久久国产精品 | 日韩精品一区二区三区中文字幕 | 日日骚网 | www久久久| 欧美一级片 | 国产精品99久久久久久宅男 | 亚洲一区二区精品 | 青草久久免费视频 | 亚洲精品在线视频 | 日本超碰在线 | 欧美精品在线一区二区三区 | 91精品久久久久久久99 | 午夜三区 | 久久精品色欧美aⅴ一区二区 | 久久91精品国产一区二区三区 |