前言:
当前小伙伴们对“8051单片机程序设计”大概比较重视,咱们都需要分析一些“8051单片机程序设计”的相关资讯。那么小编在网摘上收集了一些有关“8051单片机程序设计””的相关知识,希望咱们能喜欢,大家快快来学习一下吧!FPGA实现MC8051
开发环境
硬件:ALTERA Cyclone IV系列 EP4CE6F17C8 开发板
IED: Quartus (Quartus Prime 21.1) Lite Edition (免费)
内核IP:MC8051 Core IP V1.6
MC8051 Core IP简介
功能特点
采用完全同步设计指令集和标准 8051 微控制器完全兼容指令执行时间为 1~4 个时钟周期,执行性能优于标准 8051 微控制器 8 倍左右用户可选择定时器/计数器、串行接口单元的数量新增了特殊功能寄存器用于选择不同的定时器/计数器、串行接口单元可选择是否使用乘法器(乘法指令 MUL)可选择是否使用除法器(除法指令 DIV)可选择是否使用十进制调整功能(十进制调整指令 DA)I/O 口不复用内部带 256Bytes RAM最多可扩展至 64Kbytes 的 ROM 和 64Kbytes 的 RAM最多可扩展至 64Kbytes 的 ROM 和 64Kbytes 的 RAM
目录结构
顶层框架
MC8051 IP Core 顶层框架图如下图所示,内核IP与外设的连接关系,其中用虚线标识连接的表示数量是可选。
顶层信号列表
信号
描述
clk
系统时钟. 只用时钟上升沿.
reset
异步复位所有触发器.
all_t0_i
定时器/计数器0 输入.
all_t1_i
定时器/计数器 1 输入.
all_rxd_i
串口数据接收.
int0_i
中断 0 输入.
int1_i
中断1 输入.
p0_i
P 0 输入.
p1_i
P 1 输入.
p2_i
P 2 输入.
p3_i
P 3 输入.
all_rxdwr_o
rxd 数据输出/输出方向控制 (高= 输出) .
all_txd_o
串口数据输出.
all_rxd_o
串口工作模式1数据输出.
p0_o
P 0 输出.
p1_o
P 1 输出.
p2_o
P 2 输出.
p3_o
P3 输出.
VHDL设计文件结构
FPGA嵌入MC8051
建立Quartus工程
打开 Quartus (Quartus Prime 21.1) Lite Edition出现界面如下:
建立新的工程
建立名为mcu_8051的工程
选择器件
工程创建完毕
创建顶层文件
MC8051 ROM和RAM模块生成
ROM生成
在右侧导航栏输入ROM
选择生成路径和语言类型
设置 ROM 的信息,数据宽度 8bits,数据个数 4069,其余默认
取消 ROM 的输出寄存器,时钟使能信号及异步清零信号不用选
指定 ROM 的初始化数据文件也即单片机程序编译出来的*.hex 文件。对于 ROM 模块,是一定要指定初始化数据的,要不然向导就不能完成所以选择之前创建的那个空白hex文件mcu_8051.hex 文件。
选择需要生成的文件
点击Finish至此ROM创建完毕
MC8051 中 RAM 模块包括内部 RAM 和扩展 RAM,生成方法和 ROM 一般无二,下面简述一下参数设置
内部 RAM 的参数设置,数据宽度为 8bits,数据个数为 128;取消 RAM 的数据输出寄存器,同时选中时钟使能信号端
点击Finish至此RAM创建完毕
修改MC8051 Core IP源文件
将MC8051 Core IP源码文件复制到工程目录下,由于默认提供的源码中的顶层设计文件中的存储模块(ROM、RAM)是仿真时使用的, 现在要进行硬件测试,所以必须改成我们实际用到的 ROM、RAM 模块,在”./vhdl”目录下的 mc8051_p.vhd 文件,将原文件中 ROM、RAM 模块调用的代码修改:
component mcu_8051_ram
port (
clock : in std_logic;
data : in std_logic_vector(7 downto 0);
q : out std_logic_vector(7 downto 0);
address : in std_logic_vector(6 downto 0);
wren : in std_logic;
clken : in std_logic);
end component;
component mcu_8051_rom
port (
clock : in std_logic;
q : out std_logic_vector(7 downto 0);
address : in std_logic_vector(11 downto 0));
end component;
mc8051_top_struc.vhd 文件,新增标识有“--新增”语句。然后将原文件中 ROM、RAM 模块调用部分完成了源文件更新修改。
添加MC8051核IP到工程
选择非配置文件
创建PLL锁相环模块
修改时钟,由于电路板上的有源晶振频率为 50MHz,所以输入频率设为 50MHz
一路默认知道第6页,选择c0输出频率为18MHz,时钟相移和占空比不改变
PLL生成完毕
顶层文件编写
module mcu_8051(
input Clk50M, //时钟源,50M
input Rst_n, //复位端口
input int0_i, //mc8051外部中断0输入
input int1_i, //mc8051外部中断1输入
input all_t0_i, //mc8051计数器0输入
input all_t1_i, //mc8051计数器1输入
input [7:0]p0_i, //mc8051端口0输入
input [7:0]p1_i, //mc8051端口1输入
input [7:0]p2_i, //mc8051端口2输入
input [7:0]p3_i, //mc8051端口3输入
output [7:0]p0_o, //mc8051端口0输出
output [7:0]p1_o, //mc8051端口1输出
output [7:0]p2_o, //mc8051端口2输出
output [7:0]p3_o, //mc8051端口3输出
input all_rxd_i, //mc8051串口接收端口
output all_rxd_o, //mc8051串口方式0时输出端口
output all_txd_o, //mc8051串口发送端口
output all_rxdwr_o //rxd 输入/输出方向控制信号(高电平输出)
);
wire Clk18M;
//例化PLL模块
pll pll(
.inclk0(Clk50M),
.c0(Clk18M)
);
//例化mc8051核
mc8051_top mc8051_top_inst(
.clk(Clk18M),
.reset(~Rst_n), //mc8051为高电平复位,因此将复位按键状态取反接到reset上
.int0_i(int0_i),
.int1_i(int1_i),
.all_t0_i(all_t0_i),
.all_t1_i(all_t1_i),
.p0_i(p0_i),
.p1_i(p1_i),
.p2_i(p2_i),
.p3_i(p3_i),
.p0_o(p0_o),
.p1_o(p1_o),
.p2_o(p2_o),
.p3_o(p3_o),
.all_rxd_i(all_rxd_i),
.all_rxd_o(all_rxd_o),
.all_txd_o(all_txd_o),
.all_rxdwr_o(all_rxdwr_o)
);
endmodule
对工程分析和综合
引脚的锁定
编译烧录FPGA
点击“start”开始烧录
之后就打开Keil进行8051正常C语言代码编程编译出来Hex文件配置到FGPA中即可验证,简单的MC8051齐活,后续外设IP可以基于进行开发。
单片机hex烧录
标签: #8051单片机程序设计 #8051单片机程序设计教程 #div顶层 #c8051f单片机程序 #基于8051单片机的设计