【EA】EA 如何绘制波形图(三)

本文详细介绍了如何在时序图中设置状态转移,包括引入状态元素、编辑用户和系统状态、配置转移动画以及消息传递的步骤。重点讲解了TransitionTo的选择和配置过程。


前言

今天,我们来一起拆解示例如何绘制。主要展示状态转移如何进行设置。

一、时序图示例

示例:
在这里插入图片描述

二、步骤

1.引入元素

   1.1 从左侧工具栏,拖拽两个"State Lifline"及1个“Value Lifeline”,如下图所示:

在这里插入图片描述
1.2 配置Timeline Range
在这里插入图片描述
在这里插入图片描述

2.编辑状态

2.1 User如下(示例):
在这里插入图片描述
2.2 ACSytem 增加两个状态

# 题目重述 完成《单片机原理及应用》实验:定时中断实验。 要求如下: 1. 利用定时器T0的定时中断方式,在P1.0端口产生500Hz的对称方波脉冲; 2. 进一步扩展:利用定时器T0和T1,在P1.0和P1.1端口分别产生500Hz的对称方波脉冲; 3. 使用Keil编写并编译C51代码; 4. 使用Proteus绘制对应的单片机最小系统电路图,并实现仿真。 --- # 详解 ### 一、500Hz对称方波说明 - 频率 $ f = 500 \, \text{Hz} $ - 周期 $ T = \frac{1}{500} = 2 \, \text{ms} $ - 对称方波:高电平持续 $1\,\text{ms}$,低电平持续 $1\,\text{ms}$ - 每隔 $1\,\text{ms}$ 发生一次电平翻转 因此,定时器每 $1\,\text{ms}$ 中断一次,用于翻转IO状态。 ### 二、定时器初值计算(以12MHz晶振为例) - 单片机机器周期 $ T_{\text{machine}} = \frac{12}{f_{\text{osc}}} = 1\,\mu s $(12T模式) - 定时时间 $ t = 1\,\text{ms} = 1000\,\mu s $ - 计数值 $ N = \frac{t}{T_{\text{machine}}} = 1000 $ - TH0 和 TL0 初值: $$ \text{Initial value} = 65536 - 1000 = 64536 = 0xFC18 $$ 即:`TH0 = 0xFC`, `TL0 = 0x18` 同理,T1也采用相同配置。 ### 、Keil C51代码实现(支持T0和T1双通道) ```c #include <reg51.h> sbit OUT1 = P1^0; // T0输出 sbit OUT2 = P1^1; // T1输出 void Timer0_Init(); void Timer1_Init(); void main() { OUT1 = 0; OUT2 = 0; Timer0_Init(); Timer1_Init(); EA = 1; // 开总中断 while (1); } // 定时器T0初始化 —— 产生1ms中断 void Timer0_Init() { TMOD &= 0xF0; // 清除T0模式位 TMOD |= 0x01; // 设置T0为模式1(16位定时器) TH0 = 0xFC; // 1ms初值 TL0 = 0x18; ET0 = 1; // 使能T0中断 TR0 = 1; // 启动T0 } // 定时器T1初始化 —— 产生1ms中断 void Timer1_Init() { TMOD &= 0x0F; // 清除T1模式位 TMOD |= 0x10; // 设置T1为模式1(16位定时器) TH1 = 0xFC; // 1ms初值 TL1 = 0x18; ET1 = 1; // 使能T1中断 TR1 = 1; // 启动T1 } // T0中断服务函数 —— 翻转P1.0 void Timer0_ISR() interrupt 1 { TH0 = 0xFC; // 重装初值 TL0 = 0x18; OUT1 = ~OUT1; // 翻转P1.0 } // T1中断服务函数 —— 翻转P1.1 void Timer1_ISR() interrupt 3 { TH1 = 0xFC; // 重装初值 TL1 = 0x18; OUT2 = ~OUT2; // 翻转P1.1 } ``` > ✅ 将上述代码保存为 `.c` 文件,在Keil μVision中新建工程,选择对应型号(如AT89C51),添加源文件,编译生成 `.hex` 文件。 --- ### 四、Proteus电路图设计步骤 #### 元件清单: - `AT89C51` 或 `STC89C52`(兼容芯片) - 晶振:`CRYSTAL`(12MHz) - 电容:`CAP` ×2(30pF) - 电阻:`RES`(10kΩ 上拉复位) - 按钮:`SWITCH`(用于复位) - LED×2(可选,接P1.0和P1.1,串联220Ω限流电阻观察波形) - 接地、电源等基本元件 #### 连接方式: 1. **晶振电路**:连接XTAL1和XTAL2引脚,跨接12MHz晶振,两端接地通过30pF电容。 2. **复位电路**:RST引脚接10kΩ上拉电阻至VCC,按键一端接RST,另一端接地。 3. **P1.0 和 P1.1**:各接一个LED(阳极通过220Ω电阻接VCC,阴极接IO口),用于可视化方波输出。 4. **加载程序**:双击AT89C51,在“Program File”中选择Keil生成的 `.hex` 文件。 5. **仿真运行**:点击开始按钮,观察两个LED是否以相同频率闪烁(约500Hz,肉眼视为常亮,可用逻辑分析仪查看波形)。 #### 可选验证工具: - 使用Proteus中的 **Virtual Terminal** 或 **Oscilloscope** 观察P1.0/P1.1波形; - 添加 **Logic Analyzer** 测量频率是否为500Hz。 --- # 知识点 1. **定时器工作模式1(16位定时器)** 使用THx和TLx组成16位计数器,溢出时触发中断,适合精确延时。 2. **中断向量与中断号分配** T0中断号为1,T1为3;需正确编写 `interrupt n` 函数,避免冲突。 3. **机器周期与时钟频率关系** 12MHz晶振下,每12个时钟为1机器周期(1μs),决定定时器计数基准。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值