<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          中斷和串口剖析

          作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
          以前對STC89C52單片機(jī)的串口中斷始終沒有深入的了解

          今天沒什么事,就好好的琢磨了一下,前提是單片機(jī)開啟了串口中斷

          本文引用地址:http://www.ex-cimer.com/article/201611/320715.htm

          1、先說串口接收數(shù)據(jù)中斷吧:當(dāng)單片機(jī)串口接收到數(shù)據(jù)后,產(chǎn)生中斷,單片機(jī)跳到中斷程序中,可以選擇接收數(shù)據(jù)或者進(jìn)行其他的操作,此時的串口數(shù)據(jù)可以作為控制信號,也可以僅僅是一個觸發(fā)動作,具體的操作根據(jù)中斷函數(shù)實(shí)現(xiàn)具體的功能。在中斷函數(shù)最后,需要將串口接收標(biāo)志位RI清0。

          2、發(fā)送中斷:當(dāng)單片機(jī)向串口發(fā)送數(shù)據(jù)后,單片機(jī)產(chǎn)生串口發(fā)送中斷,同理,所發(fā)送的數(shù)據(jù)僅僅是出發(fā)中斷,中斷函數(shù)的具體功能和所發(fā)的數(shù)據(jù)沒有必然的關(guān)系,串口發(fā)送的作用是觸發(fā)中斷。同樣,不要忘了在最后將 TI 清0.

          總的來講,在STC89C52中,串口發(fā)送和串口接收終端公用一個中斷源,需要在中斷函數(shù)中采用一個if...elseif...結(jié)構(gòu)來判斷接收中斷標(biāo)志位和發(fā)送中斷標(biāo)志位根據(jù)判斷結(jié)果執(zhí)行相應(yīng)的函數(shù)。

          如果需要讀取串口數(shù)據(jù),則在中斷函數(shù)中將緩沖區(qū)的數(shù)據(jù)讀入單片機(jī)進(jìn)行相應(yīng)的處理,如果不需要對接收到的數(shù)據(jù)進(jìn)行處理,那么此時串口僅僅是作為一個開關(guān),作用就是出發(fā)中斷,然后用戶根據(jù)需要在中斷函數(shù)中進(jìn)行相應(yīng)的操作即可,串口發(fā)送總中斷也是這樣一個道理,只是通常我們都是將串口作為一個數(shù)據(jù)通道,中斷的作用是,在接收和發(fā)送數(shù)據(jù)的同時還可以根據(jù)需要進(jìn)行相關(guān)的操作。

          VB下計算機(jī)與單片機(jī)的通訊:

          (1)PC端程序:

          Private Sub Command1_Click()
          Dim Num As Integer
          Dim outbte(0) As Byte
          Num = Val(Text1.Text)
          outbte(0) = CByte(Num)
          MSComm1.OutBufferCount = 0
          MSComm1.Output = outbte
          End Sub

          Private Sub Command2_Click()
          Unload Me
          End Sub

          Private Sub Form_Load()
          MSComm1.RThreshold = 2
          MSComm1.CommPort = 1
          MSComm1.Settings = "9600,n,8,1"
          MSComm1.PortOpen = True
          End Sub

          Private Sub MSComm1_OnComm()
          Dim indata As Variant
          Dim bte(0) As Byte
          Select Case MSComm1.CommEvent
          Case comEvReceive
          indata = MSComm1.Input
          bte(0) = AscB(indata)
          Text2.Text = bte(0)
          MSComm1.InBufferCount = 0
          End Select
          End Sub

          (2)單片機(jī)程序

          #include

          sbit CW = P1^1;
          sbit CK2 = P1^2;
          sbit CK1 = P1^3;
          sbit M1 = P1^4;
          sbit M2 = P1^5;
          sbit REFIN = P1^6;
          int m = 0;


          void main(void)
          {
          int k,n;
          TMOD = 0x20;
          TH0 = 0xEF;//ef;
          TL0 = 0xFF;

          EA = 1;
          ET0 = 1;

          TR0 = 1;


          TH1 = 0xfd;
          TL1 = 0xfd;

          PCON = 0x00;
          SCON = 0x50;
          //REN = 1;
          //SM2 = 0;

          ET1 = 0;
          ES = 1;

          TR1 = 1;


          REFIN = 0;
          M1 = 1;
          M2 = 0;
          CK1 = 1;
          CW = 1;
          //n = 100;
          while(1)
          {
          for(k = 0; k < 30000; k++);
          SBUF = m;
          //n--;
          }
          }


          void CLK() interrupt 1
          {
          CK2 = !CK2;
          TH0 = 0xEF;
          TL0 = 0xFF;
          m++;
          }

          void SERIAL() interrupt 4
          {

          //TI = 0;
          }



          關(guān)鍵詞: 中斷串口剖

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();