实现数据的自增、恒定值、自减功能 ,通过输入菜单输入命令,选择对应的功能
%% 文件功能说明
% 上位机菜单编辑
% 从键盘读入菜单执行相应的程序
% 模拟单片机定时器中断的编写(定时器的TimerFcn就是定时器中断服务函数)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
global ccm ; %指令存取
global data %分配内存空间
data = zeros(1,50); %设计数组的默认容量为50,实际可以超过这个大小
data(1) = 1;
global down_flag %下降标志
down_flag = 0;
global temp_down_flag %上升下降缓存标志
temp_down_flag = 0;
global keep_flag %保持恒定值
keep_flag = 0;
global start_flag %定时器启动标志
start_flag = 0;
global i %数组下标
i = 2; %matlab中数组第一个元素下标为1、
%定时器对象句柄
global t
global sys_run_flag;%系统运行标志
sys_run_flag = 1;
fprintf('使用说明:\n');
fprintf(' 0 -> 退出当前程序\n');
fprintf(' 1 -> Start\n');
fprintf(' 2 -> STOP\n');
fprintf(' 3 -> DOWN\n');
fprintf(' 4 -> UP\n');
fprintf(' 5 -> KEEP\n');
fprintf(' 6 -> EXIT KEEP MODE\n');
% 配置定时器,相当于new一个定时器对象
timer_config();
ccm = input('input ccm:\n');
% ccm 可以表示一个一维的数组,ccm(1,1)表示具体功能,后面可以加其他的数据如ccm(1,2),ccm(1,3)等进行辅助功能的实现
% 999 表示退出的代码
%while(ccm~=999)
while(sys_run_flag)
if isempty(ccm)
ccm = 0;
switch ccm(1,1)
case 0
fprintf('Exit\n');
sys_run_flag = 0;
stop(t);
delete(t);
%break;
%matlab中switch不像c,一个case执行完后不会顺序执行后面的,break只用于while和for循环
case 1
fprintf('1 Timer1 excution \n');
if ~start_flag
start(t);
start_flag = 1;
case 2
fprintf('2 Timer1 stop \n');
stop(t)
start_flag = 0;
case 3
fprintf('down\n');
down_flag = 1;
keep_flag = 0;
if start_flag == 0
start_flag = 1;
start(t);
case 4
fprintf('4 up\n');
down_flag = 0;
keep_flag = 0;
if start_flag == 0
start_flag = 1;
start(t);
case 5
fprintf('5 keep\n');
stop(t);
temp_down_flag = down_flag;
if down_flag
down_flag = 0;
if keep_flag == 0
keep_flag = 1;
start_flag = 1;
start(t);
case 6
fprintf('6 exit keep mode \n');
keep_flag = 0;
down_flag = temp_down_flag ;
otherwise
fprintf('使用说明:\n');
fprintf(' 0 -> 退出当前程序\t\t\t');
fprintf(' 1 -> start\n');
fprintf(' 2 -> stop\t\t');
fprintf(' 3 -> down\n');
fprintf(' 4 -> up\n');
fprintf(' 5 -> keep\n');
fprintf(' 6 -> EXIT KEEP MODE\n');
if sys_run_flag
ccm = input('等待新指令(1:停止输出,0:退出程序):\n');
function timer_config(~,~)
%写一个定时器函数,定时执行一个语句,模拟定时器中断
global t
global start_flag
t = timer('TimerFcn',@t_TimerFcn,'Period',0.2,'ExecutionMode','fixedSpacing','TasksToExecute',inf);
start(t);
start_flag = 1;
function t_TimerFcn(~,~)
global data %数据:斜坡函数,data(i) 上升或者下降;
global i %数组的下标
global down_flag
global keep_flag
if ~down_flag
if keep_flag
data(i) = data(i-1); %数组存储数据
data(i) = data(i-1)+1; %数组存储数据
plot(data) %作图
i = i+1; %下标更新
% disp(num2str(data(i-1))) %用于在命令行窗口实时显示数字
if i == 1
data(i) = data(i)-1; %数组存储数据
down_flag = 0;
if keep_flag
data(i) = data(i-1); %数组存储数据
data(i) = data(i-1)-1; %数组存储数据
plot(data) %作图
i = i+1; %下标更新
% disp(num2str(data(i-1))) %用于在命令行窗口实时显示数字
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档Matlab定时器中断前言一、timer的基本用法二、测试例子运行结果前言matlab中与单片机进行交互时需要用到定时器timer,用它可以模拟单片机的定时器中断服务。在此基础上进行拓展,可用串口(serial)+定时器(timer)通过matlab实现上位机数据的实时显示等功能。进一步的,通过设置菜单,可以实现更为复杂的调试功能。一、timer的基本用法二、测试例子%% 文件功能说明% 上位机菜单编辑% 从键盘读入菜
http://blog.sina.com.cn/s/blog_9183ba080101olx3.html
鉴于Matlab 中缺乏多线程机制,使用Timer 无疑是一个很重要的工具,Matlab 中Timer 是一个Java 对象。
(1) Timer 的定义
t=timer();
设置属性:
eg. set(t,‘Name’,‘your_timer_name’);
当然可以一次性设置完成:
TaskTimer=timer(…
‘Name’,‘FebirdTimer’,…
‘TimerFcn’,@
Matlab生成dsp程序——官方例程学习(2)一、主要功能二、CAN总线三、2837x关于CAN说明四、生成程序五、总结
这次学习的是官方例程中的Asynchronous Scheduling,emm因为我也是一边学习一边记录,所以现在也没办法解释整个框架的结构啥的。后面我会一步一步看,慢慢分析的。
例子官网连接:官网例程链接
一、主要功能
定时器或ePWM模块用于配置定时器中断。定时器中断是根据定时器周期触发的,当收到消息时会触发eCAN消息接收中断。硬件中断块(图中的蓝色模块)触发定时
% 创建一个定时器对象
t = timer('ExecutionMode', 'fixedRate', 'Period', 1, 'TimerFcn', @myTimerInterrupt);
% 启动定时器
start(t);
% 停止定时器(当需要停止定时器时调用)
% stop(t);
% 删除定时器对象(当不再需要定时器时调用)
% delete(t);
上述代码中,`myTimerInterrupt` 函数定义了在定时器中断发生时要执行的操作,这里仅仅是输出一条消息。创建定时器对象后,设置了其执行模式为 `fixedRate`,周期为 1 秒,并指定了中断处理函数。最后通过 `start` 函数启动定时器。
你可以根据需要修改 `myTimerInterrupt` 函数中的操作,以实现你所需的功能。在需要停止定时器时,调用 `stop(t)` 停止定时器;当不再需要定时器时,调用 `delete(t)` 删除定时器对象。