找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2732|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STC12C5A60S2單片機(jī)雙串口程序問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:487464 發(fā)表于 2019-3-11 14:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
為什么我的程序編譯成功了,但是串口2卻不會(huì)發(fā)送數(shù)據(jù)呢?謝謝!

  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[]={"    識(shí)別結(jié)果    "};
  9. uchar code dis_tab4[]={"------------------------"};

  10. uchar RecDate[14]={0};  //串口接收 數(shù)據(jù)

  11. uint count_ms=0; //計(jì)時(shí)
  12. uchar recnum2=0; //串口接收長(zhǎng)度

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

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


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

  17. TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  18.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  19.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  20.         TH0 = 0xDC;                //設(shè)置定時(shí)初值
  21.         TF0 = 0;                //清除TF0標(biāo)志
  22.         TR0 = 0;                //定時(shí)器0關(guān)閉計(jì)時(shí)
  23.   ET0=1;
  24.         EA=1;
  25. }


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

  31.         TMOD &= 0x0F;                //清除定時(shí)器1模式位
  32.         TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
  33.         TL1 = 0xfd;                //設(shè)定定時(shí)初值
  34.         TH1 = 0xfd;                //設(shè)定定時(shí)器重裝值
  35.         ET1 = 0;                //禁止定時(shí)器1中斷
  36.         TR1 = 1;                //啟動(dòng)定時(shí)器1
  37.         ES = 1;                 //Enable UART1 interrupt
  38.         EA=1;                                        //開(kāi)總中斷
  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. }
復(fù)制代碼

  1. #include"12864.h"

  2. void display()///液晶顯示函數(shù)
  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發(fā)送字節(jié)
  27. {
  28.     SBUF=ch;
  29.     while(TI==0); //若果TI=0,循環(huán)等待
  30.     TI=0;                  //發(fā)送完,清零TI
  31. }


  32. void main() //主函數(shù)
  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)//串口接收到數(shù)據(jù),得到識(shí)別碼
  49.         {
  50.           recfinish=0;
  51.                 TR0=0;//關(guān)閉定時(shí)器0
  52.                 count_ms=0;
  53.                 display();
  54.         
  55.         
  56.                          Delay_1ms(30);
  57.                          recnum2=0;// 接收數(shù)據(jù)長(zhǎng)度清零
  58.                 for(i=0;i<14;i++)   
  59.                 RecDate[i]=0;
  60.         }

  61.                  Delay_1ms(30);
  62.         }            


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

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




  82.   /*----------------------------
  83. UART interrupt service routine 串口接收條形碼數(shù)據(jù)
  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;//打開(kāi)定時(shí)器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位數(shù)據(jù),可變波特率
  108.         AUXR &= 0xFB;                //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc/12,即12T
  109.         
  110.         BRT = 0xFA;                //設(shè)定獨(dú)立波特率發(fā)生器重裝值
  111.         
  112.         AUXR |= 0x10;                //啟動(dòng)獨(dú)立波特率發(fā)生器
  113.                IE2 =0x01;        //開(kāi)串口2中斷  ES2=1
  114. }


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

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


  133. #endif
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:229821 發(fā)表于 2019-4-6 08:35 | 只看該作者
我是串口2無(wú)法接受數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表