①单片机:AT89C52 ②电阻:RES
③LED发光二极管:LED-RED
2、放置元器件、放置电源和地、连线、元器件属性设置
方波发生器的原理图如图5-22所示,整个电路设计操作都在ISIS平台中进行。与子情景3相似,故不详述。
(1)程序流程图
Timer0 开始 声明变量 声明变量 重新设置定时量 设置定时器 no 20次? 等待定时时间到后中断产生 yes 改变引脚P1.0的输出状态 主程序
返回
中断服务程序
图5-23 方波发生器的流程图
(2)源程序设计 #include
#define uchar unsigned char
#define uint unsigned int sbit D1=P1^0; uchar aa;
void main() {
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6; //定时50ms中断一次 EA=1; //开总中断
ET0=1; //允许定时器T0中断 TR0=1; //起动定时器开始工作 D1=1; //让LED灯初始时处在熄灭状态 }
void my_timer0() interrupt 1 //中断服务程序 {
TH0=(65536-50000)/256;
TL0=(65536-50000)%6; //重新赋初值 aa++; //中断一次变量aa加1
if(aa==20)
//当aa=20时中断了20次,定时时间为20*50ms=1s,更改一次P1.0口的输出状态,这样得到的方波周期为2s
{ } }
4.4.3 步骤三:PROTEUS仿真
加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话
aa=0; //将变量aa清零,以便于下次重新定时 D1=~D1;
//改变引脚P1.0的输出状态
while(1); //等待中断产生
框Program File一栏中单击打开按钮,出现文件浏览对话框,找到fangbo.hex
,启动仿真,仿真运
文件,单击“打开”按钮,完成添加文件。单击按钮
行片段如图5-24所示。用AT89C51单片机定时/计数器0的定时功能可构成一简单的方波发生器,实现周期为2s的方波,并能在虚拟示波器上直观地显示波形。
我们可以适当调整示波器面板上的按钮来使波形最有利于我们观察。调整好以后,系统产生的波形效果如图5-25所示。
转动如图5-26所示的A通道的转盘旋钮,可调整A通道的电压显示幅值,范围为2ms-20v/格,如图电压幅值为2v/格,从波形可以看出P1.0口输出电压近似为5V。
转动如图5-27所示的转盘旋钮,可调整时基。如图时基为0.5s/格。从图中我们能够看出,波形的周期为2s,这与我们设定的目标相一致。
图5-24方波发生器仿真运行图
图5-25示波器上显示的方波图
4.5 扩展练习
图5-26 调节电压幅值 图5-27 调节时基
将子情境中方波的周期更改为1秒,并能在虚拟示波器上直观地显示波
形。
子情境五:单片机外部中断仿真
5.1子情境内容:外部中断是单片机的重要内容,本子情境用外部中断功能改变流水灯和数码管的显示状态。没有发生中断时,数码管从0至F顺序显示,不断循环。当有外部中断0发生时(在单片机P3.2引脚上有低电平),立即产生中断,数码管从0至F顺序显示的工作停下来,转去执行中断服务程序。中断服务程序为:流水灯上下来回流动3次。完成中断服务程序后,返回主程序原断点处继续执行,数码管接着原来的数字继续顺序显示。程序流程图如5-29所示。
5.2 子情境目标:
(1)理解单片机的中断原理及中断过程
(2)用PROTEUS设计、仿真单片机的外部中断。 5.3 知识点链接 5.4 任务步骤
5.4.1 步骤一:PROTEUS电路设计,实现外部中断功能改变流水灯和数码管的显示状态的原理图如图5-28所示。
1、选取元器件
①单片机:AT89C51 ②电阻、排阻:RES*
③LED发光二极管:LED-RED ④按钮:BUTTON
⑤带公共端共阳七段蓝色数码管:7SEG-COM-AN-BLUE 2、放置元器件、放置电源和地、连线、元器件属性设置
外部中断实验的原理图如图5-28所示,整个电路设计操作都在ISIS平台中进行。与子情景3相似,故不详述。与LED串联的排阻阻值为1K欧姆,与数码管串联的电阻的阻值为330欧姆左右。