今天没什么事,就好好的琢磨了一下,前提是单片机开启了串口中断
1、先说串口接收数据中断吧:当单片机串口接收到数据后,产生中断,单片机跳到中断程序中,可以选择接收数据或者进行其他的操作,此时的串口数据可以作为控制信号,也可以仅仅是一个触发动作,具体的操作根据中断函数实现具体的功能。在中断函数最后,需要将串口接收标志位RI清0。
2、发送中断:当单片机向串口发送数据后,单片机产生串口发送中断,同理,所发送的数据仅仅是出发中断,中断函数的具体功能和所发的数据没有必然的关系,串口发送的作用是触发中断。同样,不要忘了在最后将 TI 清0.
总的来讲,在STC89C52中,串口发送和串口接收终端公用一个中断源,需要在中断函数中采用一个if...elseif...结构来判断接收中断标志位和发送中断标志位根据判断结果执行相应的函数。
如果需要读取串口数据,则在中断函数中将缓冲区的数据读入单片机进行相应的处理,如果不需要对接收到的数据进行处理,那么此时串口仅仅是作为一个开关,作用就是出发中断,然后用户根据需要在中断函数中进行相应的操作即可,串口发送总中断也是这样一个道理,只是通常我们都是将串口作为一个数据通道,中断的作用是,在接收和发送数据的同时还可以根据需要进行相关的操作。
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
{
}
上一篇:模拟量输出通道之8位DAC0832及其与单片机接口
下一篇:浅谈三种单片机程序调试方法
推荐阅读最新更新时间:2024-03-16 14:41
设计资源 培训 开发板 精华推荐
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展