已送实验箱-何宾老师《STC32位8051单片机原理及应用》感悟&汇编学习
本帖最后由 epc520 于 2023-8-8 17:11 编辑(一)LED点灯
何宾老师讲的单片机底层的知识很细致,正好趁机学习一下汇编语言,一边学一边实验,挺好。
关于实验箱的建议:现在实验箱电路板中间悬空,靠着4个角的支柱支撑。
我下载程序按住INT0键和ON/OFF键的时候,真怕把板子按成两截,
而且按下键时,板子下凹会不会有些贴片引脚翘起来,造成接触不良,
建议在中心线两端,各加一个支撑。
想要P6.0亮,必须要P4.0=0,P6.0=0;
方法有两种,一种直接对8位端口赋值,还有一种对端口的某一位赋值,两种方法任选其一。
如下面代码
代码分享,,,上传附件。
本帖最后由 epc520 于 2023-8-9 22:27 编辑
(二)LED闪烁
实验目的:实现LED以500MS的速率闪烁。
何宾老师直播中,另一个老师认为80c251只有8位数据总线时,认为是8位机,被何老师怼的挺有画面感的哈,理工科直男的乐趣,继续学习汇编延时,使LED闪烁。
如下面代码
代码分享,上传附件
本帖最后由 epc520 于 2023-8-9 22:18 编辑
(三)LED流水灯
实验目的:实现LED以100MS的速率从LED0向LED7流动,循环往复
点亮LED小灯,需要打开LED小灯的总开关P4.0,之前的实验都是直接把P4.0~P4.7的8个IO都设置为推挽输出了。
假设电路中P4.1连接的数据输入的芯片,这样粗暴的把P4的8个IO口都设为推挽输出就不对了,只要把P4.0这一个IO口设置成推挽输出即可
可以使用逻辑运算指令
ORL P4M0,#01H ;设置P4.0为推挽输出模式
ANL P4M1,#0FEH
代码截图
实验效果
mp4无法上传,略
代码分享
====================================================================
====================================================================
2023-08-09:
RL左移指令,能够循环,所以上面的程序还可以化简
代码分享
本帖最后由 epc520 于 2023-8-4 12:29 编辑
(四)LED流水灯+闪烁
在上一个实验的基础上,增加一个闪烁功能,学习一下新的汇编指令:按位取反CPL。
再吐槽一下stc-isp烧写软件,窗口飘来飘去的,之前直播中也建议优化一下这个烧写软件,
还被一位官方人士怼了,说什么增加这么多功能,做成这样很不容易了,巴拉巴拉的,真的不像技术人员说的话,
技术人员不都是追求完美的嘛!
再次建议:优化一下stc-isp工具。
如下面代码实现:LED以100MS的速率从LED0向LED7流动,然后7个灯同时闪烁2次后,再循环往复
实验效果:
最后附上代码:
楼主对我们的免费公开课 认可/支持/给力,建议主动联系我们同事
=====提前获得 【免费+包邮送】的 STC32G12K128实验箱 或 STC8H8K64U实验箱
=====现在送的,都可以利用MCU自带的 硬件USB直接仿真,硬件USB直接下载
【免费+包邮】 送/申样/采购 可加 如下 QQ或微信联系
加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ:2593903262;微信:18106296598要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
工作时间:8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
【免费+包邮】 送/申样/采购传统电话热线:0513-55012928、0513-55012929、0513-55012966
工作时间:8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
本帖最后由 epc520 于 2023-8-7 22:13 编辑
(四)数码管显示 (建议:论坛用户可以设置头像,统一头像,区分是谁的回复,都要仔细看用户名,累眼。)
实验目的:2个数码管从0到F以500MS的频率循环显示(1个数码管+8个LED小灯)
今天又补了何老师第8集视频,将keil优化等级,生成的list,map,连接器等知识,感觉收获满满(*^_^*)
接下来学习汇编显示数码管,从原理图上可以看出使用的是共阳数码管,共阳数码管的真值表如下
NUMTAB: DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh
看电路对发现,LED流水灯也是共阳连接,如果把8个LED摆成8字形,可以看出8个流水灯也相当于一个数码管。
电路设计巧妙的是,8个LED和数码管段选使用同一组IO,即P6.0~P6.7;
然后用 P7.0~P7.7作数码管的位选COM0~COM7
用 P4.0做8个LED位选,可以看作是COM8.
代码实现:
P4 DATA 0C0H
P6 DATA 0E8H
P7 DATA 0F8H
P4M0 DATA 0B4H
P4M1 DATA 0B3H
P6M0 DATA 0CCH
P6M1 DATA 0CBH
;
P7M1 DATA 0E1H
P7M0 DATA 0E2H这个地址可以在stc参考手册查到
代码截图:
实验现象:
附上代码:
本帖最后由 epc520 于 2023-8-8 08:52 编辑
(五)数码管动态扫描
实验目的:数码管1MS动态刷新低4位,显示“4321”
昨天周末又补习了一下,陈桂友教授的视频,里面的第六集正好讲解的是汇编语言,又学到了新姿势。
每集视频最后补充的是STC姚总吗?最后争执头文件包含的问题,我也测试了,发现陈教授讲的没错,
汇编的头文件包含是下面这样的。
$include (STC8H.INC)然后,姚总理解的不对,但是姚总最后给出的截图是对的,只是漏了关键点,重点在01行$NOMOD51 ,这句是禁用编译器内部预定义的寄存器,使用stc扩展的头文件
哈哈,我最喜欢打脸了,所以都测试了一遍,必须要想下面这样使用
$NOMOD51
$include (STC8H.H)
代码实现:(根据陈教授的汇编框架)
代码部分截图
实验现象:
附上代码:
本帖最后由 epc520 于 2023-8-15 23:59 编辑
(六)数码管动态扫描2
实验目的:数码管1MS动态刷新低4位,显示任意一个立即数,如6295
正在学习BCD码,有点难度,用C语言很好实现任意一个四位数,
void Show_Number(uint16_t dat)
{
uint8_t dat3,dat2,dat1,dat0;
dat3= dat / 1000 % 10;
dat2= dat / 100 % 10;
dat1= dat / 10 % 10;
dat0= dat / 1 % 10;
//下面依此显示
}汇编语言怎么实现呢,学习中。。。
============================================================
2023-08-15:用汇编实现bcd码,还是蛮有难度的
代码实现:代码里都有注释了,可以一步一步跟着调试走
笨方法:一步一步在excel里验证
实验现象:
附上代码:
为啥上传失败了
(七)数码管动态扫描3
实验目的:数码管1MS动态刷新低2位,以1S的频率来显示0~99
主要学习的新指令有
CJNE
DIV AB;A=A/B, B=A%B;
INC
代码实现:
代码部分截图
实验现象:
附上代码:
页:
[1]