查看: 406|回复: 2

编写51单片机定时器中断与串口程序 学员体验天问Block

[复制链接]

4

主题

19

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2022-1-10 22:31:24 | 显示全部楼层 |阅读模式
本帖最后由 libai500 于 2022-1-11 01:56 编辑

刚学习天问Block不久,发现这款开发平台很有特色,功能强大,资源丰富,内核专业,入门门槛低,由浅入深,亦可成为专业好帮手。本篇以初学天问Block玩家的视角,介绍如何使用天问Block编写STC51单片机程序
第一节 定时器中断与串口发送
概述:
    天问Block本已经提供了丰富的串口与定时器使用例程和应用库,而且源代码是开源的,但站在学习角度上,本人还是从最初的程序开始讲述对天问Block的体验和学习情况。
第一步:打开天问Block,选择设备为STC8。
第一节0_先选择设备.jpg
会初始化如下程序图样:
第一节1.jpg
在范例代码中随便选择一个简单工程当模板
第一节2.jpg

结果如下:天问初始化指令是针对天问学习板的,笔者用的是其它学习板,可以把它去掉,暂时不用。
第一节3.jpg
第二步:在系统配置菜单中找到设置晶振时钟指令条
第一节4.jpg
点击安放这个指令,并选择晶振频率默认24MHz,次设置务必于单片机实际频率一致,这关系到程序中,定时器和波特率的数值正确性。
第一节5.jpg
第3步:部署定时器中断,定时器中断在初学者眼里不大好编写,但在天问Block中,添加三个指令条就实现了。
第一节6_快速部署定时器中断.jpg
将指令条放入程序中,
第一节7_快速部署定时器中断.jpg
更改一下定时器中断的时间,我们选择1000微妙中断1次
第一节7_设定定时器中断时间.jpg
第4步:创建一个变量,在变量菜单中点击创建变量,后期需要
在变量菜单中,点击创建指令
第一节9_创建timerA变量.jpg
弹出变量命名对话框,输入TimerA,作为一个定时器计数器使用
第一节10_创建timerA变量.jpg
创建好变量后,变量菜单中出现了针对变量的操作指令,其中包括赋值,被赋值,初始化等指令。
第一节11_出现变量操作相关指令.jpg
放置初始化指令
第一节12_放置变量初始化指令.jpg
下面分别用下拉框设置变量的存储器类型与变量的数据类型
笔者选择了默认的data存储器和无符号8位数据类型。
第一节13_变量选择Data区.jpg

第一节14_变量选择无符号8位.jpg
第五步:放置变量的赋值与被赋值指令
第一节15_放置两个变量赋值与被赋值指令.jpg
赋值与被赋值指令的连接操作:
第一节16_变量赋值准备.jpg
在数学菜单中,找到常数和运算指令
第一节17_添加常数与运算.jpg
放置常数和运算指令,并准备连接它们,完成一个TimerA=TimerA-1的递减运算。
第一节18_常数变量完成组合.jpg
合成TimerA=TimerA+1递减指令
第一节19_修改常数.jpg
改变运算符为减号
第一节20_选择减法.jpg
第六步:放置串口通讯相关指令,
在串口模块菜单中,选择初始化波特率指令和发送字符指令
第一节22_添加两个串口指令.jpg
将初始化波特率指令放置初始化过程中,发送字符指令放入主循环中,保持循环发送,如下
第一节23_串口指令已添加.jpg
设置波特率为9600
第一节24_选择默认的9600.jpg
选择通讯引脚为P30,P31组合
第一节24_选择默认的串口1.jpg
设置发送TimerA变量
第一节25_串口发送数据变量.jpg
第一节26_串口发送数据变量合成.jpg
第七步:建立一个引脚取反逻辑运算
在数学与逻辑菜单中,选择“非”指令
第一节30_放置反向指令.jpg
在GPIO菜单中选择引脚读,引脚写两个指令
第一节31_放置端口赋值和端口读取.jpg
放置这些指令,并准备组合成引脚取反运算
第一节32_组合反向指令.jpg
准备将取反逻辑运算替代“高”电平
第一节33_装载反向指令.jpg
完成组合,如下。
第一节34_最终反向指令合成.jpg
第八部。接近尾声,右键菜单选择整理图形
第一节35_整理工程.jpg
第九部:编译下载,操作如下:
同时我们可以看到,画面右侧实时的提供了C语言对照表。可供熟悉C语言的程序员对照参考
第一节36_点击编译.jpg
点击编译按钮后,完成了编译,0错误0警告,并生成了HEX文件在桌面。
HEX文件大家都懂得,可以通过下载软件下载到单片机上,并运行。
第一节37_0错误0警告.jpg
我们打开STC官方下载软件,STC-ISP.EXE,并添加刚编译好的HEX文件。
第一节39_加载HEX.jpg
下载顺利完成,情况如下:
第一节38_下载成功.jpg
打开串口调试器....怎么接受到的都是00,有BUG?
第一节40_接收到的咋全是0.jpg
原来缺少了定时器中断有效指令
第一节42_加入定时器中断有效指令.jpg
最后完整程序在编译,0错误0警告。如下:
第一节43.重新编译,0错误0警告jpg.jpg
再次下载,运行结果:串口收到了连续的倒计时数,从FF到00,不断循环。
这是定时器中TimerA=TimerA-1在以1mS的速度重复运行的结果。
第一节44_收到了倒计时数据.jpg
定时器中断本来是初学者比较恐惧的操作,很多时间设置,中断使能,定时器使能标记,非常难懂。但在天问Block中,三画两画搞定。
程序中引脚P00的2毫秒脉冲效果,就不掩饰了,回头有LED灯或示波器在为大家证实。
工程以附件形式上传,供大家验证。
串口发送定时器倒计时演示第一节.rar (1.32 KB, 下载次数: 11)
第一节19_修改常数.jpg
第一节19_完成整式组合.jpg
第一节41_忘了放定时器中断有效.jpg
回复

使用道具 举报

0

主题

1

帖子

342

积分

中级会员

Rank: 3Rank: 3

积分
342
发表于 2022-1-12 08:32:48 | 显示全部楼层
深入浅出,讲解得非常细致
回复

使用道具 举报

31

主题

109

帖子

1146

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1146
发表于 2022-1-20 23:08:06 | 显示全部楼层
楼主,不错再接再厉
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2022-5-29 16:37 , Processed in 0.298729 second(s), 26 queries .

Powered by Discuz!

© 2001-2022 Comsenz Inc.

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