matlab guide串口中断的通信

matlab guide串口中断的通信
matlab guide串口中断的通信

为了能够很好的调节PID,我现学了matlab gui界面的设计,及实时曲线的绘制,能够很方便的调节PID。单片机可以把设定值和返回值通过232串口传输到上位机,上位机通过修改P I D 的参数也可以实时的传输给下位机。界面图如下:

1、pid.m文件部分重要程序如下

function pushbutton1_Callback(hObject, eventdata, handles)

global s;

s=serial('COM3');

set(s,'BaudRate',9600,'DataBit',8,'StopBits',1,'Parity','none','F lowControl','none');

s.InputBufferSize=1020;

s.OutputBufferSize=1024;

s.ReadAsyncMode='continuous';

s.BytesAvailableFcnMode='byte';

s.Timeout=0.2;

s.TimerPeriod=0.5;

s.TimerFcn=@instrcallback;

s.Terminator='CR';

warning off;

fopen(s);

function pushbutton2_Callback(hObject, eventdata, handles)

global s;

fclose(s);

delete(s);

clear s;

function pushbutton3_Callback(hObject, eventdata, handles) global P;

global I;

global D;

global pi;

global pid;

P=str2num(get(handles.edit1,'string'));

I=str2num(get(handles.edit2,'string'));

D=str2num(get(handles.edit3,'string'));

pi=[P,I*1000];

pid=[pi,D];

fwrite(s,pid);

2、instrcallback.m的中断程序如下:

function instrcallback(obj, event)

handles=guihandles();

%axes(handles.axes1);

global out;

global count;

global data;

global data1;

global data2;

global data3;

global data4;

global data5;

global alldatas1;

global alldatas2;

global s;

global i;

global m;

global n;

global x;

m=1;

n=1;

x=1;

[out,count]=fread(obj,1020,'uint8');

%set(handles.text9,'string',count);

for i=1:count/3

if (out(i)==0)&(out(i+1)==255)

data(i)=out(i+2);

data1(i)=out(i+3);

data2(i)=data(i)*256+data1(i);

for m=1:1:10

alldatas1(x)=alldatas1(x)+data2(m);

end

alldatas1(x)=alldatas1(x)/10;

set(handles.text16,'string',alldatas1(x));

plot(x,alldatas1(x),'r.');

alldatas1(x)=0;

data3(i)=out(i+4);

data4(i)=out(i+5);

data5(i)=data3(i)*256+data4(i);

for n=1:1:10

alldatas2(x)=alldatas2(x)+data5(n);

end

alldatas2(x)=alldatas2(x)/10;

set(handles.text19,'string',alldatas2(x)); plot(x,alldatas2(x),'g.');

alldatas2(x)=0;

set(handles.text20,'string',x);

x=x+1;

if x>1000

cla ;

x=1;

end

end

end

%set(handles.text10,'string',data2);

%set(handles.text21,'string',data5);

定时器中断程序设计实验

实验一定时器/中断程序设计实验 一、实验目的 1、掌握定时器/中断的工作原理。 2、学习单片机定时器/中断的应用设计和调试 二、实验仪器和设备 1、普中科技单片机开发板; 2、Keil uVision4 程序开发平台; 3、PZ-ISP 普中自动下载软件。 三、实验原理 805l 单片机内部有两个 16 位可编程定时/计数器,记为 T0 和 Tl。8052 单片机内除了 T0 和 T1 之外,还有第三个 16 位的定时器/计数器,记为 T2。它们的工作方式可以由指令编程来设定,或作定时器用,或作外部脉冲计数器用。定时器 T0 由特殊功能寄存器 TL0 和 TH0 组成,定时器 Tl 由特殊功能寄存器 TLl 和 TH1 组成。定时器的工作方式由特殊功能寄存器 TMOD 编程决定,定时器的运行控制由特殊功能寄存器 TCON 编程控制。T0、T1 在作为定时器时,规定的定时时间到达,即产生一个定时器中断,CPU 转向中断处理程序,从而完成某种定时控制功能。T0、T1 用作计数器使用时也可以申请中断。作定时器使用时,时钟由单片机内部系统时钟提供;作计数器使用时,外部计数脉冲由 P3 口的 P3.4(或 P3.5)即 T0(或 T1)引脚输入。 方式控制寄存器 TMOD 的控制字格式如下: 低 4 位为 T0 的控制字,高 4 位为 T1 的控制字。GATE 为门控位,对定时器/计数器的启动起辅助控制作用。GATE=l 时,定时器/计数器的计数受外部引脚输入电平的控制。由由运行控制位 TRX (X=0,1)=1 和外中断引脚(0INT 或 1INT)上的高电平共同来启动定时器/计数器运行;GATE=0时。定时器/计数器的运行不受外部输入引脚的控制,仅由 TRX(X=0,1)=1 来启动定时器/计数器运行。 C/-T 为方式选择位。C/-T=0 为定时器方式,采用单片机内部振荡脉冲的 12 分频信号作为时钟计时脉冲,若采用 12MHz 的振荡器,则定时器的计数频率为 1MHZ,从定时器的计数值便可求得定时的时间。 C/-T=1 为计数器方式。采用外部引脚(T0 为 P3.4,Tl 为 P3.5)的输入脉冲作为计数脉冲,当 T0(或 T1)输入信号发生从高到低的负跳变时,计数器加 1。最高计数频率为单片机时钟频率的 1/24。 M1、M0 二位的状态确定了定时器的工作方式,详见表。

51单片机外部中断与定时器的实用

中断使能寄存器 通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位 可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各 位如下所示 中断使能寄存器IE 位地址 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H 位符号 EA / ET2 ES ET1 EX1 ET0 EX0 EA 使能标志位 置位则所有中断使能 复位则禁止所有中断保留 ET2 定时器2 中断使能 ES 串行通信中断使能 ET1 定时器 1 中断使能 EX1 外部中断 1 使能 ET0 定时器0 中断使能 EX0 外部中断 0使能 8051 支持两个中断优先级 有标准的中断机制, 低优先级的中断只能被高优先级的中断所中断 ,而高优先级的中断不能被中断。 中断优先级寄存器 每个中断源都可通过设置中断优先级寄存器IP 来单独设置中断优先级 如果每个中断源的相应位被置位 则该中断源的优先级为高,如果相应的位被复位, 则该中断源的优先级为低, 如果你觉得两个中断源不够用 ,别急以后我会教你如何增加中断优先级 表 A-5 示出了 IP 寄存器的各位 此寄存器可位寻址 IP 寄存器 位地址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H 位符号 / / / PS PT1 PX1 PT0 PX0 编号 中断源 中断向量 上电复位 0000H 0 外部中断0 0003H 1 定时器0溢出 000BH 2 外部中断1 0013H 3 定时器1溢出 001BH 4 串行口中断 0023H 5 定时器2溢出 002BH PT2 定时器 2中断优先级 PS 串行通信中断优先级 PT1 定时器 1中断优先级 PX1 外部中断1 优先级 PT0 定时器0中断优先级 PX0 外部中断0 优先级

基于MATLAB实时串口数据采集与曲线显示

全日制普通本科生毕业设计 基于MATLAB实时串口数据采集与曲线显示REAL-TIME SERIAL DATA ACQUISITION AND FIGURE SHOW BASED ON MATLAB 学生姓名: 学号: 年级专业及班级: 指导老师及职称: 学院: 提交日期:2011年5月

全日制普通本科生毕业论文(设计) 诚信声明 本人郑重声明:所呈交的本科毕业论文(设计)是本人在指导老师的指导下,进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体在文中均作了明确的说明并表示了谢意。本人完全意识到本声明的法律结果由本人承担。 毕业论文(设计)作者签名: 年月日

目录 摘要 (1) 关键词 (1) 1前言 (2) 1.1 Matlab实时串口数据采集研究现状及发展趋势 (2) 1.2研究的目的和意义 (4) 1.3论文的组织结构 (5) 2Matlab下实时串口数据采集概要 (5) 2.1 Matlab的Serial类 (5) 2.2 数据采集 (6) 2.3曲线显示 (7) 3实时串口数据采集与曲线显示的实现 (8) 3.1实时串口通信的实现 (8) 3.2数据采集的实现 (9) 3.3曲线显示GUI的实现 (10) 4基于MATLAB的实时串口数据采集与曲线显示的具体做法 (12) 4.1数据采集的一般流程 (12) 4.1.1创建接口对象并设置属性 (12) 4.1.2打开串口设备对象 (12) 4.1.3读写串口操作 (13) 4.1.4关闭并清除设备对象 (13) 4.2基于Matlab中断方式的实时串行通信编程 (13) 4.3绘制采集数据的曲线波形和数据显示 (14) 4.3.1绘制曲线波形 (14)

Matlab与51单片机的串口通信

数字信号处理2012电子信息工程专业答辩报告

Matlab与51单片机的串口通信 一、简介 从Matlab6.0版本开始,Mathworks公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口(九针串口)通信正式支持(本实验采用USB转串口)利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。Matlab支持面向对象技术,用一个对象将计算机串口封装起来,只要创建串口对象,对串口对象操作就是对串口操作,非常方便。使用serial函数就可创建串口对象,通过定义串口对象的属性,能定义串口的通信模式,从串口对象属性也能了解串口的状态,即可以通过MATLAB的串口通讯函数读写数据。 二、 Matlab串口函数 serial 创建一个串口对象,格式:s = serial('coml' ) fopen 打开串口对象,格式:fopen(s) fwrite 其他程序能对该串口进行读写操作fwrite(s,’’) fread 读取串口数据,格式: fread(s) fclose 关闭串口对象,格式:fclose(s) free 解除Matlab对串口对象的控制,使 delete 删除对象s,格式:delete(s) clear 从工作空间中删除对象s,格式:clear(s) 三、实现功能 利用MATLAB串口通信函数,读写51单片机(STC89C52R+)数据,运用keil编写时钟程序,烧录到单片机中,时钟程序实现的功能是实现时钟的显示,并且能用开发板上的三个按钮进行时钟的修改,一个按钮进入修改模式(复位),另两个实现时间的增减。编辑MATLAB程序,实现对单片机的控制。读写串口操作。初始化并打开串口调协对象之后,现在可以对串口设备对象进行读写操作,串口读写操作支持二进制和文本(ASCII)两种方式。当Matlab通信数据采用西方(ASCII)方式时,读写串口设备命令分别是fscanf、fpritf;当Matlab通信数据采用二进制方式时,读写串口设备命令分别是fread、fwrite。

matlab串口实时波形显示

作者:GG 功能:实现matalb与PC外设通讯 本例:串口232与外设单片机51通讯。实时监控51数据并且实时图形显示 时间:2011—9—16 简介:实现该功能使用M脚本文件和函数文件。 第一个文件连接串口和打开串口,设置了串口的一些参数和触发事件。连接串口COM5。有关该方面的知识请自行百度I/O文字流。 第二个文件是时间回调函数,相当于其他语言中例如C语言的中断函数 第三文件是关闭串口和清除列连接。并且清除中间TXT中介文件内容 下面是源文件 第一个: clear all s=serial('COM5');%打开串口 s.BytesAvailableFcnMode='byte';%设置事件触发为接受触发 s.InputBufferSize=5000;%设置接受缓冲区大小为5000个字节 s.BytesAvailableFcnCount=10;%每次接受到50个数据时候触发事件 s.BaudRate=19200;%设置通讯波特率 s.BytesAvailableFcn=@my_callback;%指向触发事件函数 fopen(s);%打开串口 第二个 function my_callback(obj,event) out=fread(obj,10,'uint8');%串口处读出50个数据 fid=fopen('G1.txt','a+');%打开文件并且追加 fprintf(fid,'%3d',out); fclose(fid); speed=textread('G1.txt','%u'); plot(speed); disp('save ok!'); end 第三个 fclose(s);%关闭串口 delete(s);%删除串口变量 clear all; fid=fopen('G1.txt','w');%清除中间文件txt a=[]; fprintf(fid,'%s',a); fclose(fid); clear all;%清除所以变量

用定时器计数器设计一个简单的秒表

目录 摘要................................................................................................ 错误!未定义书签。 1 Proteus简介错误!未定义书签。 2 主要相关硬件介绍错误!未定义书签。 AT89C52简介错误!未定义书签。 四位数码管错误!未定义书签。 74LS139芯片介绍错误!未定义书签。 3 设计原理错误!未定义书签。 4 电路设计错误!未定义书签。 电路框图设计错误!未定义书签。 电路模块介绍错误!未定义书签。 控制电路错误!未定义书签。 译码电路错误!未定义书签。 数码管显示电路错误!未定义书签。 仿真电路图错误!未定义书签。 5 设计代码错误!未定义书签。 6 仿真图错误!未定义书签。 7 仿真结果分析错误!未定义书签。 8 实物图错误!未定义书签。 9 心得体会错误!未定义书签。 参考文献错误!未定义书签。

摘要 现在单片机的运用越来越宽泛,大到导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理,小到广泛使用的各种智能IC卡、各种计时和计数器等等。本次课设我们要设计一个能显示计时状态和结果的秒表,它是基于定时器/计数器设计一个简单的秒表。 本次设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现四位LED显示,显示时间为0~秒,计时精度为秒,能正确地进行计时,并显示计时状态和结果。其中软件系统采用汇编或者C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在keil中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。 关键词:秒表,AT89C51,proteus,C语言

matlab串口通信

摘要:结合单片机和Matlab两者优点,基于事件驱动中断通信机制,提出一种Matlab环境下PC机与单片机实时串行通信及数据处理方法;完成单片机数据采集系统与PC机RS-232/RS-485串行通信及其通信数据分析处理、文件存储、FIR滤波及图形显示;简化系统开发流程,提高开发效率。该方法已成功应用于一个PIC16F876单片机应用系统实例之中。 关键词:PIC16F876 Matlab 串口通信 RS-232 事件驱动回调函数 引言 Matlab是由美国Mathworks公司开发面向理论分析研究、工程计算数据处理和缓图一套具有强大功能软件系统。其中Matlab语言是一种以矩阵为基本运算单元解释执行高级语言,编程简例,只要几条语句就能实现诸如FFT变换、FIR/IIR滤波等数据分析处理,易于掌握。从Matlab6.0版本开始,Mathworks 公司在软件中增加了设备控制箱(instrument control toolbox),提供了对RS-232/RS-485通信标准串口通信正式支持。利用该工具箱serial类及instrcallback()回调函数,能可靠地进行实时串地通信。为此,笔者充分结合单片机和Matlab优点,基于事件驱动中断通信机制,提出了一种Matlab环境下PC机与单片机实时串行通信数据处理方法,极大地简化开发流程,提高了系统开发效率。另外,与目前普遍采用基于Matlab查询方式下非实时串行通信技术相比,这种方法实用性也大大增强了。 https://www.360docs.net/doc/7f4124622.html,提示请看下图: 1 系统总体设计简介 下面以Mircochip公司PIC16F876单片机为下位机,PC机为上位机组成实时数据采集处理系统为例,介绍基于Matlab环境下PC机与单片机串行通信实时数据处理方法实现。数据采集系统结构框图如图1所示。PC机串口与单片机USART 口通过MAX232电平转换芯片相连,系统工作时,Matlab通过调用设备控制工具箱中serial类及相关函数。来创建串口设备对象,得到设备文件句柄,从而以操作文件方式实现对PC机串行口读写操作。因而PC机可以通过Matlab向串行

MATLAB串口通信

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%本程序主要实现串口控制三轴转台进行自动标定,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%查找串口对象,若串口一开始被占用,需要加上这段程序释放串口,若串口没有被占用,则不需要这段程序 scoms=instrfind; %%尝试停止、关闭删除串口对象 stopasync(scoms); fclose(scoms);%关闭串口 delete(scoms);%释放串口%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% clear all;clc; %%%%%串口配置通道1 global s; s=serial('COM13');%设置串口号 s.baudrate=57600;%设置波特率 s.parity='none';%校验位 s.stopbits=1;%停止位 s.databits=7;%数据位 s.timeout=2;%一次读/写的时间最长为0.5s s.InputBufferSize=1024;%输入缓冲区 s.OutputBufferSize=1024;%输出缓冲区 %s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s);%%%%打开串口 fclose(s); %%%%%串口配置通道2 global s2; s2=serial('COM15');%设置串口号 s2.baudrate=460800;%设置波特率 s2.parity='none';%校验位 s2.stopbits=1;%停止位 s2.databits=8;%数据位 s2.timeout=2;%一次读/写的时间最长为0.5s s2.InputBufferSize=1024;%输入缓冲区 s2.OutputBufferSize=1024;%输出缓冲区 %s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s2);%%%%打开串口 fclose(s2); %InitPos(1)=InitPos(1)+0.3 %Pos1=num2str(InitPos(1)'); %Pos1=['Q010',Pos1(1,:),'$']; %A=[00000000000]; %fwrite(s2,A,'uint8') %AA=fread(s2,11,'uint8')

51单片机C语言程序 定时 计数器 中断

51单片机C语言程序定时计数器中断51单片机C语言程序定时计数器 中断 程序一 利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁, #include reg52.h//52单片机头文件 #include intrins.h//包含有左右循环移位子函数的库 #define uint unsigned int//宏定义 #define uchar unsigned char//宏定义 sbit P1_0=P1^0; uchar tt; void main()//主函数 { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 while(1);//等待中断产生 } void timer0()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++;

if(tt==20) { tt=0; P1_0=~P1_0; } } 程序二 利用定时/计数器T1产生定时时钟, 由P1口控制8个发光二极管, 使8个指示灯依次一个一个闪动, 闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。 #include reg52.h//52单片机头文件 #include intrins.h//包含有左右循环移位子函数的库 #define uint unsigned int//宏定义 #define uchar unsigned char//宏定义 sbit P1_0=P1^0; uchar tt,a; void main()//主函数 { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 a=0xfe; while(1);//等待中断产生 } void timer0()interrupt 1

在MATLAB中使用串口

在MATLAB中使用串口 3.2.1 MATLAB对RS232 的串口通信设计 MATLAB是一个跨平台软件,而此处使用的是自主设计的数据采集卡,因此不具备直接访问的能力。但MATLAB的面向对象技术,已用一个对象把计算机串口封装起来,只要用Serial函数创建串口对象即可[6]。关键语句为:s=ser ial(‘COM1’,‘BaudRate’,9600)。MATLAB封装的串口对象支持对串口的异步读写操作,通过对异步读写设置,PC在执行读写串口函数时能立即返回,不必等待串口把数据串输完毕。当指定数据传输结束时就触发事件,执行事件回调函数,对事件回调函数编程,进行数据处理,这样可以大大提高数据处理的效率。MEX是MATLAB的可执行程序,是MATLAB调用其它语言编写的程序或算法的接口,在Windows环境下是扩展名为DLL的动态链接库。对MEX 编译器进行配置的方法是:在MATLAB命令窗口中运行mex-setup,选择VC6.0++作为编译器。用C语言编写端口读、写的操作程序,程序包含有头文件mex.h和m exFunction函数,mexFunction函数中nelhs表示输出变量的个数,plhs包含指向输出变量指针的数组,nrhs表示输入变量的个数,prhs包含指向输入变量指针的数组。接口编形成的MEX文件与参考文献[7][8]类似,在此不再累述。 3.2.2 数据采集与分析 (1)数据读取的MATLAB实现 主要代码为: %读取通道数及总数据量 fid=fopen(‘cardiogram.add’,‘r’); Status=fseek(fid,56,‘bof’); nDataChNum=fread(fid,1,‘long’); status=fseek(fid,204, ‘bof’); nAllDataLength=fre ad(fid,1, ‘long’); %按通道数循环读出各通道起始地址 status=fseek(fid,76, ‘bof’);% for i="1:" nDataChNum pChannelAdr(i)=fread(fid,1, ‘long’) end %按通道数循环读出各通道数据 for i="1:nDataChNum" status=fseek(fid,pChannelAdr(i)+360, ‘bof’) nSegNum=fread(fid,1, ‘log’) status=fseek(fid,pChannelAdr(i)+160*nSegNum+1024, ‘bof’); data=fread(fid,nAllDataLength, ‘short’); end sta=fclose(fid);

按键和定时器中断综合应用-秒表计时器

& INT1按键中断INT0# 和T0中断的综合应用 ‐简易秒表计时器 范例1:汇编源代码 范例2:C51源代码

P7 EQU 0F8H ORG 0100H #60H P6 EQU 0E8H D1 EQU 0FEH //数码管个位EQU 0FDH MAIN: MOV SP ,#60H //设置堆栈 MOV P2,#0FFH //关P2口LED MOV TMOD,#00H D2 //十位D3 EQU 0FBH // 百位 VARX DATA 30H //计数变量DATA 31H MOV TH0,#4BH MOV TL0,#0FDH //设置T0MOV R7,#20MOV VARX,#0 //置计数变量0DIG1 //BCD 个位DIG2 DATA 32H //BCD 十位DIG3 DATA 33H //BCD ,SETB ET0SETB EX0SETB IT0//百位ORG 0000H LJMP MAIN SETB EX1SETB IT1 SETB EA //允许相关中断 ORG 0003H LJMP KY1INT //KY1中断ORG 000BH LJMP T0INT //T0中断ORG 0013H KY2INT //KY2LJMP 中断

CONV: MOV A,VARX //读计数变量MOV A,DIG2 //读十位BCD MOV B,#100DIV AB DIG3A MOVC A,@A+DPTR MOV P7,A P6#D2//MOV DIG3,A MOV A,B MOV B,#10MOV P6,#D2 查表送显示ACALL DELAY //扫描延时A,DIG3//DIV AB MOV DIG2,A DIG1B MOV 读百位BCD MOVC A,@A+DPTR MOV P7,A MOV DIG1,B //转换为3位BCD DISP: MOV A,DIG1 //读个位BCD MOV DPTR,#SEGTBL MOV P6,#D3 //查表送显示ACALL DELAY CONV //MOVC A,@A+DPTR MOV P7,A P6,#D1//LJMP 返回读取VARX MOV 查表送显示 ACALL DELAY //扫描延时

matlab串口编程

在嵌入式当中,串口是一种是用的比较多的通信和调试方式,串口主要还是用于通信,虽然是比较老的一种通信方式,但是现在依然保留并有着其活力,基本所有单片机等嵌入式处理器都保留有串口模块。调试只是串口的一个被用来是用的附加功能,想对于昂贵的在线调试工具,它有着很多其他方面的优势,直观的显示程序运行的状态和相关变量。由于其长时间的使用,相关技术和程序也比较成熟,很多工具都提供对串口通信和调试的支持,MATLAB,gdb等,串口监视和调试助手等也随处可以得到,相对于其嵌入式通信方式,它简单实用,适合初学者和速率要求不高的场合。 之前用过蓝牙虚拟串口将串口无线化,单片机间串口通信,wifi模块和ARM7串口通信,单片机于PC机串口通信,这次的综合课程设计需要在PC上对串口数据进行频谱的分析,于是就想使用MATLAB数学计算软件,应该相对简单点,果然,在提供相关数学运算函数的前提下,对各种设备的支持也很强大,在这里说一下我我在这次试验中对MATLAB对串口操作的理解。前提还是阅读MATLAB自带的help文档,这是软件提供的最权威和全面的支持,但是很多人却忽略。检索对自己有用的信息也是一种能力。 在MATLAB中有三种方式来操作串口,但是最终原理都是一样的。 1,simulink工具箱仿真 2,Instrument control toolbox 3,使用MATLAB变成语言,编写自己的程序控制 在Instrument control toolbox中,就像个串口助手,可以以图像化的方式设置各种参数,进行各种操作。在工具箱中,可以将你进行的操作实时的转换成m 文件,如果你不知道怎么编写控制串口的m文件,可以进行相关操作,然后参考生成的m文件进行编程。 simulink工具箱相对而言是比较高级的功能仿真工具,一般是在隐藏硬件细节的前提下功能仿真,如果你不熟悉原理,使用起来会一头雾水,特别是出错时,所以建议在熟悉了底层实现的前提下使用。(可能说的太主观,至少我是这样)没什么比编写自己的程序更加能了解自己控制的设备了,其上的两种方式都是在这个方式的基础上实现的,最终控制原理都是一样的,都是通过MATLAB提供的一系列API函数对串口进行操作。1和2我都尝试过,但是最后还是觉得之间编程比较清晰,当然这只是一个过程,不同的情况使用不同的工具才是正确的。以上纯属个人观点和理解,仅供参考,有什么好的想法还请不吝赐教,大家一起学习。下面是我对MATLAB环境下对串口操作的一些理解和操作。 在MATLAB中,串口被抽象成一个结构体,所有的操作均同归相关函数对结构体操作完成,通过serial函数新建一个串口对象,该函数至少需要一个参数,即串口号,其他的可选参数为设置该串口相关参数,可以在新建对象的时候指定也可以在以后用set函数设置。相对而言,get函数可以得到串口对象的相关参数值或者状态。

51单片机每个外部中断和定时器中断 应用模版

第一步,中断配置 /************************************************************ 函数名:INT0_Config 功能:配置单片机与中断相关的硬件,让单片机能够正常检测中断和执行中断代码。 输入参数: 输出参数: ************************************************************/ void INT0_Config(void) { IT0=1; //中断触发方式,IT0=0,低电平触发,INT0=1下降沿触发(下降沿就是由高电平向低电平的跳变); EX0=1; //外部中断0的中断开关,每个中断源都有自己的中断开关。 EA=1; //打开总中断,如果总中断不打开,就是其他中断开关被打开,单片机也不能执行中断。 } 第二步,中断服务,也就是cpu被中断后所要做的事。 /************************************************************ 函数名:Isr_INT0 功能:中断服务 输入参数: 输出参数: ************************************************************/ void Isr_INT0() interrupt 0 //interrupt表明该函数是中断函数,后面的标号表示是哪个中断源产生的中断。{ //(INT0)为0, Timer0为1,INT1为2,Timer3,串口中断为4。 // Add your code here //自己想要中断后发生的程序 } 第三部主函数 /************************************************************ 函数名:main 功能:主函数 输入参数: 输出参数: ************************************************************/ void main() { INT0_Config();//调用这个函数来配置外部中断 while(1) { //Add your code here //CPU一直在这里循环的执行代码,一旦发生中断,就停下来去执行中断函数Isr_INT0() interrupt 0, //执行完成后,返回从断点处继续往下执行原来的代码。 } }

MATLAB串口通信技术

一.MATLAB串口通信技术 对于WINDOWS系统而言,硬件系统的驱动程序有着十分严格的规范,可以用C或汇编语言进行开发,而MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力。即使安装了驱动程序并能正常工作的硬件设备,MATLAB也没有统一的形式对其进行访问。对于系统的串口,在MATLAB6.X中以类(SERIAL)的形式提供了支持。当用指令建立了一个串口对象(句柄)以后,对串口的硬件操作可以文件操作的软件形式来完成,方法比较简单。常用的串口操作命令及其含义如下表(1)所示,这些命令既可在MATLAB命令窗口实现,也可以M文件的形式出现,使用起来十分方便。 表1MATLAB串口操作命令表 二.数据采集系统与PC机通信的硬件电路 为了简化系统的硬件设计,数据采集系统的微转换器选用AD公司的全集成芯片ADu C812,该芯片包含有12位高性能的自校准8通道ADC,两个12位的DAC,与8051兼容的内核使用户无须学习新的指令系统。片内8K闪速/电摖除程序存储器使数据采集系统具有在线下载编程能力,利用AD公司提供的免费SERIAL WINDOW DOWNLOAD就可以将H EX文件下载到ADuC812内,对于不同的应用场所可以方便的修改系统的参数,既不需要昂贵的编程器,也不需打开机壳插拨芯片,只需将一条电缆连接到计算机的COM1或COM 2即可。另外该转换器还支持看门狗定时器、电源监视器及ADC的DMA等功能,可编程的I/O口具有三种类型的串口UART、SPI、I2C,价格也比较便宜,是一种理想的转换器。系统的硬件组成如下图(1)所示。

图1ADUC812与PC机串口通信的硬件电路图 其中ADM202及P3.0\P3.1构成了与计算机通信的RS232接口,它有两个功能,一是实现计算机与数据采集系统的数据通信。另一功能是与JP1配合使用,完成将程序从计算机下载到ADuC812片内的闪速/电摖除程序存储器中。当下载程序时,需将单片机系统的电源关掉,用屏蔽帽屏蔽JP1,单片机系统再上电,ADuC812进入程序下载状态,运行SERIAL W INDOW DOWNLOAD可以将HEX文件下载到芯片内。ADM812组成了系统的复位电路。 三.应用程序的软件流程图 PC机与单片机的串口通信技术可以说已经比较成熟,但在工程实际中应用较多的是V C、VB通信控件,一般人员开发具有一定的困难。本文的PC机应用程序是运用MATLAB 的类(SERIAL)和M语言开发,辅以MATLAB的GUIDE工具箱,程序开发相对简单。单片机的程序应用MCS—51汇编,只需在程序的第一行加$MOD812标识符即可。整个传输过程是:由单片机发送握手信号,PC机接到握手信号后发应答信号,并准备接收信号,单片机接收到应答信号后准备发送数据,并说明通信过程挂钩成功,总的测量次数和键值作为第0组发送,发送完毕累加校验和,发现传输错误时重发,程序的流程图如图2所示

定时器和计数器应用C语言程序

1、定时器应用实验 单片机的P1口上接有8只LED。采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。 #include Char i=100;/*给变量i赋初值*/ void main( ) {TMOD=0x01;/*设置定时器T0为方式1*/ TH0=0xee;/*向TH0写入初值的高8位*/ TL0=0x00;/*向TL0写入初值的低8位*/ P1=0x00;/*P1口8只LED点亮*/ EA=1;/*总中断允许*/ ET0=1;/*定时器T0中断允许*/ TR0=1;/*启动定时器T0*/ while(1) ;/*无穷循环,等待定时中断*/ } /*以下为定时器T0的中断服务程序*/ void T0_int(void) interrupt 1 {TH0=0xee;/*给T0装入16位初值,计4608个数后,T0溢出*/ TL0=0x00; i--;/*循环次数减1*/ if(i<=0) {P1=~P1;/*P1口按位取反*/ i=100;/*重新设置循环次数*/ } } 2、计数器应用实验 采用定时器T1的方式1的中断计数方式。计数输入引脚T1(P3.5)上外接开关K1,作为计数信号输入。按4次K1后,P1口的8只LED闪烁不停。 #include void Delay(unsigned int i)/* 定义延时函数Delay( ),i是形式参数,不能赋初值*/ {unsigned int j; for(;i>0;i--) /* 变量i由实际参数传入一个值,因此i不能赋初值*/ for(j=0;j<125;j++) {;} /*空函数*/ } void main( ) /*主函数*/ {TMOD=0x50;/*设置定时器T1为方式1计数*/ TH1=0xff;/*向TH1写入初值的高8位*/ TL1=0xfc;/*向TL1写入初值低8位*/ EA=1;/*总中断允许*/ ET1=1;/*T1中断允许*/ TR1=1;/*启动T1*/

单片机实验3中断、定时器计数器实验

西南科技大学实验报告 课程名称:单片机原理及应用A 实验名称:中断、定时器/计数器实验姓名: 学号: 班级:生医1401 指导教师:雷华军 西南科技大学信息工程学院制

实验题目 数码管动态扫描显示驱动、键盘动态扫描驱动 一、实验目的 1、熟练巩固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操 作,会使用HEX文件进行单片机的仿真。 2、了解定时器的原理和四种工作方式的使用方法,学习定时器的相关应用,包括产生信号和 计数,利用定时器进行延时等。 3、进一步掌握熟练单个数码管以及多位数码管的显示原理,学会将0~1000的数字进行显示。 4、掌握利用单片机产生矩形方脉冲的相关原理。 二、实验原理 1、定时器结构和原理 图① 上图①为定时器T0、T1的结构,其中振荡器经12分频后作为定时器的时钟脉冲,T为外部计数脉冲输入端,通过开关K1选择。反相器,或门,与门共同构成启/停控制信号。TH 和TL为加1计数器,TF为中断标志。每接收到一个脉冲,加1计数器自动加1,当计数器中的数被加为0时产生溢出标志,TF将被置1。计数器工作方式的选择和功能的实现需要配置相应的寄存器TMOD和TCON。 2、定时器工作方式 定时器共有四种工作方式分别为方式0——方式3。 方式0:13位计数器,最大计数值为213个脉冲。 方式1:16位计数器,最大计数值为216个脉冲。 方式2:8位自动重装计数器。该方式下,TL进行计数工作,TH用于存放计数初值,当产生溢出中断请求时会自动将TH中的初值重新装入TL,以使计数器继续工作。 方式3:仅限于T0计数器,在方式3下,T0计数器被分成两个独立的8为计数器TL0和TH0。

matlab之串口通信

matlab之串口通信 串口通信,一般是指RS232、RS422之间的通信。matlab中有专门的serial函数来创建串口对象。设串口ID号为COM1,则创建方法为: 复制内容到剪贴板 代码: >>scom= serial('com1'); 创建完串口对象后,一般需要设置串口对象的属性,否则,串口不会相互通信。 复制内容到剪贴板 代码: >> get(scom) ByteOrder = littleEndian BytesAvailable = 0 BytesAvailableFcn = BytesAvailableFcnCount = 48 BytesAvailableFcnMode = terminator BytesToOutput = 0 ErrorFcn = InputBufferSize = 512 Name= Serial-COM1 ObjectVisibility = on OutputBufferSize = 512 OutputEmptyFcn = RecordDetail = compact RecordMode = overwrite RecordName = record.txt RecordStatus = off Status = closed Tag= Timeout = 10 TimerFcn = TimerPeriod = 1 TransferStatus = idle Type= serial UserData = [] ValuesReceived = 0 ValuesSent = 0 SERIAL specific properties: BaudRate= 9600 BreakInterruptFcn = DataBits = 8 DataTerminalReady = on FlowControl = none Parity = none PinStatus = [1x1 struct]

单片机定时器使用总结

单片机定时器的使用 第一部分:51系列定时器 定时/计数器0 和定时/计数器1都有4种定时模式。 16位定时器对内部机器周期进行技术,机器周期加1,定时器值加1,1MHZ 模式下,一个机器周期为1us 。 定时器工作模式寄存器TMOD,不可位寻址,需整体赋值,高4位用于定时器1,第四位用于定时器0。 C/T:为定时器功能选择位,C/T=0对机器周期计数,C/T=1,对外部脉冲计数。 GATE:门控位,GATE=0,软件置位TRn即可启动计时器,GATE=1需外部中断引脚为高电平时才能软件置位TRn启动计时器,一般取GATE=0。 定时器控制寄存器TCON TFn:Tn溢出标志位,当定时器溢出时,硬件置位TFn,中断使能的情况下,申请中断,CPU响应中断后,硬件自动清除TFn。中断屏蔽时,该位一般作为软件查询标志,由于不进入中断程序,硬件不会自动清除标志位,可软件清除。 TRn:计时器启动控制位,软件置位TRn即可启动定时器,软件清除TRn 关闭标志位。 IEn:外部中断请求标志位。

ITn:外部中断出发模式控制位,ITn=0为低电平触发,ITn=1为下降沿触发。 中断允许控制寄存器IE EA(IE.7):全局中断控制位。EA=1开全局中断,EA=0关闭全局中断。 IE.6无意义。 ETn:定时器中断使能控制位。置位允许中断,清除禁止中断。 ES:串行接收/发送中断控制位,置位允许中断。 EXn:外部中断使能控制位。置1允许,清0禁止。 中断优先级控制寄存器IP,复位后为00H IP.6,IP.7保留,无意义。 PT2:定时器2中断优先级控制,置1设为高优先级,清0置位低优先级。 PS:串行中断优先级控制位。 PT1/0:定时器1/0优先级控制位,置1高,清0低。 PXn:外部中断优先级控制位。 当有同级中断同时响应,按IE0—>TF0—>IE1—>TF1—IE0—>RI+TI—>TF2顺序依次响应。 定时器模式0的使用TMOD&=0xf0/TMOD&=0x0f TL0高3位不用,低5位溢出时,直接向TH0进位。 通过设置TH0和TL0初值(0~8191),使计数器从初值开始加1,溢出后申请中断,溢出后需重新设置初值,否则将从0开始加1计数。 T=(模值-初值)*机器周期,初值为8191位技术最小值1,初值为0为计数最

matlab串口通信基础讲义

matlab串口通信基础讲义 ①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信; ②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言; ③支持异步通信和同步通信; ④支持基于事件驱动的通信。 从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。 3.1 Matlab对串行口控制的基础知识 Matlab对串行口的编程控制主要分为四个步骤。 ①创建串口设备对象并设置其属性。 scom=serial('com1');%创建串口1的设备对象scom scom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符) scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B scom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512B scom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10s s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中. 注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。 另外,设置串口设置对象的属性也可以用一条指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部的属性,可以用get(scom)命令。

相关文档
最新文档