80C51

2 posts

80C51单片机Proteus仿真实验:双机单工通信

功能 波特率为9600bps; 单片机1使用4×4计算器键盘,按下其中任意一个键,单片机2的数码管显示对应数字; 数字显示范围:十六进制的0~F。 工具 Windows 10 x64 Proteus Professional 8.9 SP0 Keil C51 Version 9.59 仿真器件选型 单片机:80C51,时钟频率(Clock Frequency)调整为11.0592MHz; 数码管:7SEG-COM-AN-GRN,7段1位共阳极绿色数码管; 键盘:KEYPAD-SMALLCALC,该键盘为4*4计算器键盘; 电源:POWER一个。 定时器初值计算 本实验中发送端和接收端使用相同的定时器初始化参数,使波特率为9600 bps。计数初值计算如下: $$\rm 计数初值=2^{8}-\frac{1s}{9600bps}\times\frac{11.0592MHz}{12}=160=(A0)_{16}$$ $$\rm 计数初值=2^{8}-\frac{1s}{9600bps}\times\frac{12MHz}{12}\approx 151.833\approx (97.D55)_{16}$$ 由上式可以看出,当单片机时钟频率为11.0592 MHz时,定时器计数初值为整数,可以更方便的设置单片机的计数初值,从而得到更精准的波特率,因此本实验在Proteus中将单片机的的时钟频率(Clock Frequency)值调成了11.0592 MHz。 发送/接收时延控制方法 串口中断通信法 仿真器件连接方式与实验效果图 Keil C51代码 发送端代码 接收端代码 I/O口模拟串口通信法 仿真器件连接方式与实验效果图 定时器0中断查询法 发送端代码 接收端代码 定时器0中断法 发送端代码 接收端代码 […]

80C51单片机Proteus仿真实验:设计一个可调时、定时报警的时钟

功能 使用单片机定时器中断计时; 实现时、分、秒循环计时; 可以使用4×4键盘调节时钟时间; 可以设置报警时间,报警响两秒; 按下按键具有声音反馈; 调节数码管显示器中指定位置的时间时,数码管对应的位置闪烁。 仿真工具 Windows 10 x64 Proteus Professional 8.9 SP0 Keil C51 Version 9.59 仿真器件选型 单片机:80C51,时钟频率(Clock Frequency)默认12MHz; 数码管:7SEG-MPX8-CA-BLUE,该数码管为共阳极7段8位蓝色数码管; 蜂鸣器:BUZZER,工作电压(Operating Voltage)调为5V; 电阻:RES,电阻阻值(Resistance)调为1k; 三极管:PNP; 键盘:KEYPAD-SMALLCALC,该键盘为4*4计算器键盘; 排阻:RESPACK-8,作P0口上拉电阻; 电源:POWER两个; 接地:GROUND一个; 仿真器件连接方式及最终实验效果图 实现原理 main函数 main函数是程序入口,其中有三个模式: 模式0(mode=0):为显示计时模式,程序一运行默认进入该模式,并且程序立即从0时0分0秒开始计时。当处在其它模式时,按“÷”键便可返回模式0; 模式1(mode=1):为报警设定模式,按“×”键进入该模式。进入后可以设定报警时间,当到达报警时间时,蜂鸣器持续蜂鸣两秒钟。另外,报警时间默认值为0时0分0秒,即刚启动程序时便会警报一次。 模式2(mode=2):为计时调节模式,按“=”键进入该模式,进入后可调节当前计时时间。 定时器计时1s的计算 因为定时器工作方式1可以使用16位计数结构,是所有定时器工作方式中位数最大的,故使用定时器0的工作方式1中断的形式实现计时。但是工作方式1的16位也不足以定时1秒。在12MHz晶振周期的定时器工作方式1下的最大定时时间为: $$\rm (2^{16}-0)\times\frac{1}{12MHz}\times 12=65536 \mu s=65.536ms$$ 可以看出在定时器工作方式1下,最大定时时间远远达到1秒。故采用多次中断时间累计的形式实现1秒计时。我们知道50 ms<65.536 ms,且20×50 ms=1 s,因此,可以使用设置定时器0每50 […]