找回密码
 立即注册
查看: 157|回复: 1

51-FORTH(2): 8051计算机GPIO端口控制程序

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2025-3-25 15:45:55 | 显示全部楼层 |阅读模式
一、 GPIO端口简介

8051计算机的核心是一片AI8051U单片机,通常计算机的CPU、RAM内存和各种硬件设备都已经集成在单片机中了。通常计算机用于外接各种设备的各种接口比如串口、USB口以及ISA和PCI总线,在8051计算机中统统都连接到单片机的GPIO端口(通用输入输出端口)上
AI8051U单片机内部架构上设置了8个8位共计64个GPIO端口,分别称为:P0、P1、…、P7,具体的有多少个端口,哪个端口对应哪个片上设备,要看具体单片机的管脚是多少和封装形式。
AI8051U单片机有一款PDIP40封装,其管脚的排列与功能都兼容STC89C52单片机,对于目前市面上的众多的使用STC89C52单片机的开发板,插上这款AI8051U芯片就可以直接使用
将8个一组的LED灯连接到AI8051U单片机的GPIO端口上,就构成了一个最小的8051计算机控制系统,学会了用程序控制这些LED灯发光或者是熄灭,就为将来学会使用AI8051计算机51-FORTH语言打下了良好的基础。同样学会用C语言编程点亮和控制LED闪烁,也是学习单片机的入门课程。
擎天柱是一款官方推出的AI8051U单片机核心实验板,它不但在引脚上与89C52一模一样,而且P0到P3四个8位引脚都连接了上拉的LED灯,也是实际上最小的8051计算机控制系统了。
前文已经介绍了什么是8051计算机,本文继续介绍如何用51-FORTH语言编写控制8051计算机的GIOP端口的程序。

二、 点亮LED灯

(1)由于AI8051U单片机端口加电的初始状态是高输入阻抗模式,要用端口点亮LED灯,一般需要将端口设置为准双向口模式,这个模式最接近传统的8051单片机端口工作模式。
51-FORTH系统在启动时已经对端口进行了初始化,将8个端口都预置为准双向口模式和高电平状态,因此在点亮LED时直接对端口的各个位设置输出的高低电平即可。
(2)51-FORTH对8个8位的端口有8个输出命令:P0C!、P1C!、P2C!等等这些命令是将堆栈顶上的数输出到对应的端口。比如将数值“15”输出到P0端口,那么连接在P0端口的8个LED灯一半亮,一半不亮。
实现这个效果的C51语言程序为:
P0=15;
实现这个效果的51-FORTH语言命令为:
15 P0C!<CR>
实际效果如下图:
Fig_01_LED测试.jpg
(3)51-FORTH的解释性命令执行特点。如果想了解不同数字对应的LED灯花样,使用C51语言则需要修改“P0=15;”程序中的数字15,不过每修改一次数字,就要编译一次,然后烧录一次到单片机上,才能看到对应的LED亮的效果。
但51-FORTH不同,只要修改命令行“15 P0C!<CR>”中的数字,马上就可以看到结果,无需再编译成HEX文件进行烧录。下面是这个过程的实际操作视频:

结论:使用51-FORTH系统可以直接从超级终端用命令的方式实时对端口进行操作,按不同的数字点亮LED灯,无需像C51语言一样反复烧录才能看到不同的效果,特别适合讲解、学习和进行端口控制实验。
(4)统一为高电平(=1)LED灯亮。LED连接到端口上有上拉和下拉形式之分。一般采用下拉形式,比如擎天柱核心板:
Fig_02_LED下拉.jpg
对于下拉形式的LED连接,端口要输出低电平(=0)LED灯才会亮,这与我们的直观感受不符,需要对输入数字“反相”后再输出到端口,才能实现高电平LED灯亮。对于C51程序,需要在数字前面加“按位求反(或称二进制求反)”操作符“~”:P0=~15;。
对于51-FORTH命令,则在数字后面加求反命令“NOT”:15 NOT P0C!。下面视频显示这一过程:

(5)定义LED发光新命令。对于实际的硬件系统,比如擎天柱核心板,8个一组的LED硬件连接方式是固定的,因此在进行程序设计时定义一个新命令来实现高电平点亮LED灯
比如在C51语言里,可以定义一个新函数:
LED_Set(charX) {
    P0=~X;
}
以后只要调用该函数就行了:LED_Set(15);只是要看不同数字对应的效果,仍然要经过编译和烧录过程。
对于51-FORTH,定义一个新命令的程序格式如下:
:  新命令名字  … 旧命令 …  ;
比如对于本文例子:
:  LED! NOTP0C!  ;
在FORTH中这种用冒号开头,分号结束的定义称为“冒号定义(复合词定义)”,经过定义后,以后只要输入新的命令,FORTH就依次执行定义里面那些旧命令, 比如输入“15 LED!<CR>”就行了。
FORTH对新命令名字的字符组成没有限制,标点符号和汉字都行,只要不包括空格就行。下面是新定义复合词的例子视频:

在上面的视频中,在定义了新命令之后,还可以进一步定义新的命令:
: L 240 LED! ;
: R 15 LED! ;
以后只要输入“L”,左边4个LED点亮,只要输入“R”,右边4个LED点亮.
结论:使用51-FORTH系统可以直接从超级终端用冒号定义的方式定义新的命令,定义之后无需像C51语言一样需要编译和重新烧录HEX文件,就可以立即使用这些新命令了。
并且51-FORTH允许用同一个名字重新定义新命令,这样新命令就屏蔽了旧的命令,特别适合探索和实验新命令,就像视频中对“R”命令的定义一样。

三、 51-FORTH中的八进制和十六进制表示

(6)51-FORTH启动时和出错以后,系统进入十进制状态,输入的数字和输出的数字按十进制解释。比如输入:333 4 * .<CR>后,系统给十进制乘法结果:1332 ok
命令“HEX”将当前进制设置为十六进制,命令“OCTAL”将当前进制设置为八进制,命令“DECIMAL”将当前进制设置为十进制
同样输入:333 4 * .<CR>后,十六进制情况下的乘法结果是:CCC,八进制情况下的乘法结果是:1552。
(7)LED灯是二进制的最好显示和学习方法,比如输入“10 LED!<CR>”命令行,在不同的进制下它“10”被解释为不同的数,在LED灯上显示出来。
下面视频展示了不同进制下的乘法和LED发光效果。

(8)这个视频也显示了51-FORTH的工作流程
当用户从终端上输入一行命令,按回车键后,51-FORTH就开始以空格为分隔符,从左到右地解释每以字,如果这个字是已经定义过的命令,比如“LED!”,就执行这个命令,如果不是已经定义过的命令,就以当前的进制来解释这个字,比如“10”,如果解释成功,就把它作为一个数字存到堆栈顶部,然后继续解释下一个字。如果作为数字还是解释不通,比如八进制下的“19”,就认为用户输入了“未定义的字”,51-FORTH不知道如何处理,就显示出错信息“ERROR: word is undefined ( 154C): 19”,终止当前命令行的继续解释执行。然后将系统复位为十进制,等待用户新的命令。



回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-25 16:43:00 | 显示全部楼层
51-FORTH(2):8051计算机GPIO端口控制程序

一、 GPIO端口简介

8051计算机的核心采用了一片AI8051U单片机,该单片机集成了CPU、RAM内存以及多种硬件设备接口。与传统计算机类似,8051计算机通过GPIO(通用输入输出)端口连接外部设备,如串口、USB口以及ISA和PCI总线等。AI8051U单片机内部架构中设有8个8位GPIO端口,共计64个引脚,分别称为P0、P1、…、P7。具体端口数量和功能分配取决于单片机的管脚数量和封装形式。AI8051U单片机的PDIP40封装在管脚排列和功能上与STC89C52单片机完全兼容,因此可以直接替换市面上常见的STC89C52开发板上的芯片。

通过将8个LED灯连接到AI8051U单片机的GPIO端口,可以构建一个最小的8051计算机控制系统。掌握如何使用程序控制这些LED灯的亮灭,不仅为学习51-FORTH语言奠定了基础,也是单片机入门的必备技能。此外,使用C语言编程实现LED灯的点亮和闪烁同样是学习单片机的基础内容。

擎天柱是一款官方推出的AI8051U单片机核心实验板,其引脚与89C52完全一致,并且P0到P3四个8位引脚都连接了上拉LED灯,构成了一个实际的8051计算机最小控制系统。

二、 点亮LED灯

1. 端口模式设置  
   AI8051U单片机在加电后的初始状态为高输入阻抗模式。为了使用端口点亮LED灯,通常需要将端口设置为准双向口模式,该模式最接近传统8051单片机的工作模式。51-FORTH系统在启动时已经对端口进行了初始化,默认将8个端口设置为准双向口模式。

2. 51-FORTH语言控制GPIO端口  
   在51-FORTH语言中,可以通过简单的指令控制GPIO端口的输出状态。以下是一个点亮P1.0引脚LED灯的示例程序:

  
  1. forth
  2.    : LEDON
  3.      P1 0 HIGH ;  \ 将P1.0引脚设置为高电平,点亮LED
  4.    ;
复制代码

   在上述代码中,P1表示P1端口,0表示P1端口的第0位引脚,HIGH表示将该引脚设置为高电平,从而点亮LED灯。

3. LED灯闪烁控制  
   为了实现LED灯的闪烁效果,可以通过延时函数控制LED灯的亮灭状态。以下是一个简单的闪烁程序示例:

  
  1. forth
  2.    : DELAY
  3.      1000 0 DO LOOP ;  \ 简单的延时函数
  4.    ;
  5.    : LEDBLINK
  6.      BEGIN
  7.        P1 0 HIGH   \ 点亮LED
  8.        DELAY       \ 延时
  9.        P1 0 LOW    \ 熄灭LED
  10.        DELAY       \ 延时
  11.      AGAIN
  12.    ;
复制代码

   在上述代码中,DELAY函数通过循环实现延时,LEDBLINK函数通过交替设置P1.0引脚的电平状态实现LED灯的闪烁。

三、 总结

通过51-FORTH语言控制AI8051U单片机的GPIO端口,可以轻松实现LED灯的点亮和闪烁。这不仅为学习8051计算机的编程提供了基础,也为后续开发更复杂的控制系统奠定了基础。掌握GPIO端口的控制方法,是学习单片机编程的关键一步。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:44 , Processed in 0.129866 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表