找回密码
 立即注册
楼主: jnving

【实验箱已发出】陈桂友教授《USB型 1T 8051 单片机原理及应用-8H8K64U》学习打卡

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-23 21:41:38 | 显示全部楼层
第十四课:

1.在ADC_CONTR标志位,A/D转换完成后,ADC_FLAG = 1。一定要软件清0。
2.中断的允许、禁止及优先级(低位和高位的区别:高位带H如:PS低,PSH高)可从文档查,很多。和之前学的一样。
3.单片机对中断优先级的处理原则:3.高不睬低。(会否挂起),当高级中断正在执行,来了低级的,此时高级继续,等处理完成后,会自动扫描中断标志位,如果扫到了有低级的,会进行处理。特别的,当高级执行过程中,低级的来了,但是后面又来了同样的(意思也就是标志位被清或改了)那么可能会出现中断丢失的情况发生。--->处理函数一定要简单。
7.png

8.png

C语言,保护现场,恢复现场由编译器完成了。。如果想要独占,把EA = 0即可,总开关关闭。但会影响性能,所以不要长时间设0

4.项目演示。
在项目中最好通电后进行延时,因为可能会不稳定。设置延时即可。Daleyms(10);
10.png

中断函数interrupt
9.png

电路设计时,是否加电阻看情况,有电阻,有保护作用,另外有就是在电路中有静电,——————>对新手。如果设计良好,不用电阻无所谓。
通过按钮产生下降沿:比如现在是高电平,按下后,会和GND连通,则会变成低电平,下降沿。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-05-07 18:17:53

13

主题

164

回帖

375

积分

中级会员

积分
375
发表于 2024-8-23 21:48:17 | 显示全部楼层
jnv*** 发表于 2024-8-20 13:44
第三课:

1.知道了高电平和平时我们所想到的高电压的不同,生活中的高电压基本说的就是220V以上的。而逻辑 ...

搞那个USB弄了几个小时不知道哪里原因
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-25 15:15:54 | 显示全部楼层
阿杰爱*** 发表于 2024-8-23 21:48
搞那个USB弄了几个小时不知道哪里原因

什么问题不知道什么原因。我是第一次学这个,现在还没有老师的那种实验箱。只有在淘宝上买的开发板,反正点灯是没问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-05-07 18:17:53

13

主题

164

回帖

375

积分

中级会员

积分
375
发表于 2024-8-25 15:22:20 | 显示全部楼层
jnv*** 发表于 2024-8-25 15:15
什么问题不知道什么原因。我是第一次学这个,现在还没有老师的那种实验箱。只有在淘宝上买的开发板,反正 ...

你是啥开发版啊,我那个问题已经解决了,但又有新的问题出现了,不知道是不是那个视频太老了,有时候照着抄代码也会有问题,今天学的那个printf串口打印,硬是说没有printf这个函数,真难搞
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-25 15:43:56 | 显示全部楼层
本帖最后由 jnving 于 2024-8-25 22:49 编辑

第十五课:(T0~T4)用定时/计数器比软件的(Daleyms())程序的方式要好的多。

1.作用:
   ---定时控制
   ---分频器(P.S.多少时间之后才给波形的输出),事件记录(生产管理)。
   ---时钟输出,给外部器件提供时钟
   ---串口的波特率发生器
2.基本结构
1.png

如上图有两个开关控制。OSC的脉冲是均匀的,则通过周期实现计时的功能;Tx端不均匀则可以实现计数的功能。
2.png
3.单片机CPU和定时器相关的寄存器
3.png

低8位0-255存满后,高8位进1,当高8位满后,溢出。然后由TX控制。另外说明:T2H...THn一回事,叫法问题
-------暂停---------27:05---------------------------------
---T0和T1工作模式
4.png
模式0简单好用,大多情况用它就行了。
5.png
6.png
这里可以结合前面基本结构看。不分频的精度会更高。
--T2工作模式:固定为16位自动重装载模式。

4.寄存器(地址可以被8整除,可以按位寻址如:88H)
7.png

8.png
更多查看手册。
定时器T2-T4还另外设置了时钟预分频器,有TM2PS(地址FEA2H)这里16位地址,说明是在外部的扩展里。要设XSFR有效才行。才能访问和设置。





点评

不错,已经学习了15节课了,送你试验箱了没  发表于 2024-8-25 17:41
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-25 15:46:27 | 显示全部楼层
阿杰爱*** 发表于 2024-8-25 15:22
你是啥开发版啊,我那个问题已经解决了,但又有新的问题出现了,不知道是不是那个视频太老了,有时候照着 ...

STC8H8K64U开发板 STC32位小系统单片机学习实验核心板免费开发票。。16.5的那个。我这打印都正常。。那就快快学,完成申请个免费的老师这款实验箱
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-25 23:29:23 | 显示全部楼层
第十六课:定时/计数器应用
1.计算定时器最大定时能力
9.png
10.png
这里最多大约是18s,这依然不够用,此时需要对定时器进行扩展:1.软件方法,2.硬件方法,3.把多个定时器串起来的方法。


扩展:T0->T1->T2->...也可以用串联的方式

2.定时器扩展
11.png

3.应用
12.png

13.png

4.编程
---》在stcai-isp-v6.94K软件中,->定时器计算器,可以自动生成。(注意》》》使能定时器中断,勾选)

void Timer0_Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x00;                                //设置定时初始值
        TH0 = 0x4C;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
}


然后在main.c程序中,在中断多次以后(取决于要定的总时间长和计时器的时长),执行相关代码
14.png

其他的定时器也可以都类似操作。对应着手册的说明进行。
当不能用位寻址时,需要用相关字节操作的方式进行设置或修改内容。
在C语言中,可以用 = ;&= ;|= 这些。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-27 14:01:15 | 显示全部楼层
第十七课:

1.并行通信,高速,近/串行通信(传递数据:脉冲高低电平。一定要有一根线共同接地。如,只有发送,那么要两根线)低速,远 <10米。扩展传送距离,RS232:15米,RS485:1000米,总体来 说,速度和距离相互制约
2.异步通信/同步通信。开始和结速的标志:起始位0,停止位1,以字符位为单位发送和接收。
3.串行通信分类
1.png

空闲的时候都是高电平。有校验位
2.png

8个数据位就没有校验位。最多是0-255数据位。如果要超过255,如:300,那么可以分成2个字节传。收到的时候再合成。
在数据传送中,要约定好:
--字符格式
--通信速率,通常用波特率表示,9600(9600bps),n(没有奇偶校验),8,1
3.png

2》按数据传送的方向分类
1.单工方式,固定单向的,如接收广播,只收不发
2.半双工方式,双向的,但是同一时该只能向一个方向传送,对讲机(按下讲话)
3.全双工方式,双向同时的,打电话
4.多终端通信方式。

4.UART,  串行并行相互转换
4.png

收发:一个一个的传,接收/发送数据缓冲器,再通过总线同时发到CPU
硬件UART即能发送,实现并行->串行输出,又能接收实现串行->并行输入。

与外部同步:以外部时钟的方法进行数据同步。
UART同步过程:
在每一个时钟脉冲上升沿采样接收数据线,连接出现9个“0”,则开始读取数位值。(发现一个0,后边又连接采样8个0,则确定它是起始位,不是干扰信号)(不是字节,是二进制位)
5.png

每个数据位时间Td为外部时钟的16倍,则16个外部时钟脉冲读一次数据位, 采样的时间都是中间时该,避开信号上升和下降时的不稳定。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-27 15:44:03 | 显示全部楼层
第七课:汇编语言

汇编的注释和C语言一样。
$INCLUDE(文件名) 包含和C语言也类似作用。
在STC8中,可以
$NOMOD51                   --->让汇编器不使用预定义的寄存器,因为STC8H.H头文件已经有了。如果没有这一句,会导致寄存器符号重复定义错误。
$INCLUDE(STC8H.H)      --->不能用引号

1.助记符语言
CPU只能识别和执行二进制数的指令(机器语言)。如248B。这种语言不直观,不易理解的记忆。所以引入助记符。
汇编语言由操作码和操作数组成。操作码用英文组成,称为助记符。如:MOV是数据的传送,ADD是相加运算,ANL是逻辑与运算(区别与AND与,L是LOGIC的意思)
例:ADD A,#8BH---->一个数后面加了H一般就是16进制的数了,#号后面是真正的数。这名话就是把A和8BH相加。就是248B(16进制,两个字节:24H和8BH),但是这24并非是A,具代表了ADD A,A是累加器,结果会存在其中
例2:MOV A,#76H---->将16进制的76H传送到累加器A中,2个字节:0111 0100和0111 0110这两个二进制数,对应的十六进制就是74H,76H,其中74H是操作码。
8051内核单片机常用的操作码:
6.png

操作数:可以是数据也可以是地址,不同功能指令,操作对象形式不同:
---传送类:源地址+目的地址
---数据操作类:运算器和对象一般是两个
---控制类:程序计数器PC和一个数
---逻辑操作类:单双操作数之分
**数据只能是整数不能是小数
**当数据是十六进制且是以字母开头时,该数据需加一个前导0,表示后面的字母不是变量是数字。如MOV A,#ABH    <----->MOV A,#0ABH的区别
**8051单片机中,有前缀#号则后面的数据是立即数。否则,则说明该数据表示是直接地址。立即数可以是二进制,十进制,十六进制。后缀H是十六进制,B是二进制,D(可以不写)是十进制

2. 汇编语言格式
【标号:】操作码助记符【第一操作数】【,第二操作数】【,第三操作数】【;注释】【】里的内容可以不写
标号后:是所在行的指令的地址。也可以用作子程序的名字
7.png

3.指令代码存储格式
将8位二进制码表示为一个字节,8051单片机指令长度有单字节,双字节,三字节三种,分别占1-3个单元
8.png

4.指令中符号约定
9.png

5.寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,变址寻址,相对寻址,位寻址

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-08-29 09:16:23

1

主题

19

回帖

77

积分

注册会员

积分
77
发表于 2024-8-27 15:52:25 | 显示全部楼层
本帖最后由 jnving 于 2024-8-29 10:14 编辑

第八课:

数据传送类指令主要是给8051系统内名部资源赋值,进行堆栈的存取操作,执行前后,对程序状态字PSW一般不产生影响。分为:1.数据传送,2.数据交换,3.栈操作。

汇编文件:main.asm


1.指令:
--MOV<目的字节>,<源字节>
   MOV A,#data8;                  把8位二进制数(范围)的立即数给A:1.MOV A,#30(十进制);2.MOV A,#30H(十六进制);3.MOV A,#01000011B(二进制)
   MOV ADDR8,#data8;          把8位二进制数(范围)给内部的单元addr8:00-7FH
   MOV @Ri #data8;              @R0/@R1   有@间接寻址,立即寻址(第二条参数)
   MOV Rn,#data8;                n=0-7  
1.png

在编程调试时,Memory ADddress:写D:0即,内部ram从0开始
2.png 3.png 4.png

从上面可以看出,当把50给了R0后,再通过@R0,则修改了0x50的值
6.png
5.png

从Peripherals里查I/O
7.png 8.png

9.png

10.png 11.png

12.png

如有问题排查时,先看第一个错误,注意符号的英文格式。

--数据交换指令:
  --字节交换指令
13.png


--堆栈操作指令: PUSH addr8;  POP addr8;
压栈和出栈和前面学的中断流程类似
注意:A和ACC是一样的,但是将累加器A进行堆栈操作时,就不能使用PUSH A/POP A(此时是寄存器寻址方式)
而应使用PUSH/POP ACC;此时是直接寻址方式
--逻辑操作指令
14.png

--双操作数的逻辑指令:ANL与,ORL或 ,XRL异或
--算术运算类指令


13.png
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 09:20 , Processed in 0.154165 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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