中斷和串口剖析
今天沒什么事,就好好的琢磨了一下,前提是單片機開啟了串口中斷
本文引用地址:http://butianyuan.cn/article/201611/320715.htm1、先說串口接收數(shù)據(jù)中斷吧:當單片機串口接收到數(shù)據(jù)后,產(chǎn)生中斷,單片機跳到中斷程序中,可以選擇接收數(shù)據(jù)或者進行其他的操作,此時的串口數(shù)據(jù)可以作為控制信號,也可以僅僅是一個觸發(fā)動作,具體的操作根據(jù)中斷函數(shù)實現(xiàn)具體的功能。在中斷函數(shù)最后,需要將串口接收標志位RI清0。
2、發(fā)送中斷:當單片機向串口發(fā)送數(shù)據(jù)后,單片機產(chǎn)生串口發(fā)送中斷,同理,所發(fā)送的數(shù)據(jù)僅僅是出發(fā)中斷,中斷函數(shù)的具體功能和所發(fā)的數(shù)據(jù)沒有必然的關系,串口發(fā)送的作用是觸發(fā)中斷。同樣,不要忘了在最后將 TI 清0.
總的來講,在STC89C52中,串口發(fā)送和串口接收終端公用一個中斷源,需要在中斷函數(shù)中采用一個if...elseif...結構來判斷接收中斷標志位和發(fā)送中斷標志位根據(jù)判斷結果執(zhí)行相應的函數(shù)。
如果需要讀取串口數(shù)據(jù),則在中斷函數(shù)中將緩沖區(qū)的數(shù)據(jù)讀入單片機進行相應的處理,如果不需要對接收到的數(shù)據(jù)進行處理,那么此時串口僅僅是作為一個開關,作用就是出發(fā)中斷,然后用戶根據(jù)需要在中斷函數(shù)中進行相應的操作即可,串口發(fā)送總中斷也是這樣一個道理,只是通常我們都是將串口作為一個數(shù)據(jù)通道,中斷的作用是,在接收和發(fā)送數(shù)據(jù)的同時還可以根據(jù)需要進行相關的操作。
VB下計算機與單片機的通訊:
(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)單片機程序
#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)
{
//
//
//
}
void CLK() interrupt 1
{
}
void SERIAL() interrupt 4
{
}
評論