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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2736|回復: 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 單片機教程網

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