前面的汇编听的还是比较吃力的,因为一开始就是接触C语言的,对C还是比较熟悉,整体来说,对运算算法不太了解,确切说是不熟悉,有些运算程序看不太懂,还有一个就是逻辑也不是太明了,这两个方面还是要加强学习,
第十一讲,单片机C语程序设计导入,终于回到C语言了,相对汇编要轻松一点, 之前我开发的一款USB串口键盘用的是STC15W4第列的芯片,最大的亮点就是防解密,我还专门问了下之前帮我们解密芯片的人,他说解不了,哈哈,STC做的确实可以,有时候我们很奇怪,希望自己设计的产品上市后别人破解不了,又希望能解密别人设计的好的产品来缩短新开发周期,STC15系列完美解决。言归正转,学习十一讲的知识点。
C51 对ANSI C的扩展
加了19个关键字 常用的有_at_ (这个常用吗?)
sbit 常用于定义引脚
sfr 特殊功能寄存器
bit 位变量
xdata 拓展RAM
code code FLASH 区域
interrupt 中断
变量类型
新增bit 位型 1bit 0/1
sbit 1 0/1
sfr 8 0x80~0xff
sfr16 8 0x80~0xff
bit 不能声明指针 不能做数组
sbit 在可独立访问位寻址的位
sfr 用来控制定时/计数器 串口 io
sfr P0=0x80;
sbit cy=psw^7
内存区域的制定
code常数,可用于保存数码管码表
RAM
data 直接寻址低 128 BYTE
idata间接寻址RAM 256 BYTE
bdata位寻址 20H~FH
外部数据存储器
xdata外部RAM 大数组可用,
pdata 别用!!! 8032时代选页的,pdata与xdata有冲突
指针
一般和ANSI C一样
很重要,很灵活
硬件相关寄存器指针需要使用volatile 保证不被优化
运算这块要好好学一下,夯实基础!
第十二讲,C语言设计程序导入二,本章节主要学习了闪灯程序和Flsh操作,闪灯的这个理解没问题,之前也学过,Flash操作这个之前没有接触过,到时候收到实验箱要对着视频实际操作一下,加深一下印象。学习例程官网都有,就不上传了。
C语言中的运算符(超全超详细) 今天学习开天斧开发板例程,学到运算,专门找了下资料,发出来供新手学习,一起进步。 目录一、算数运算符二、关系运算符三、逻辑运算符四、位运算符五、赋值运算符六、三目运算符(特殊运算符)七、逗号运算符八、sizeof运算符九、运算符优先级基本的五种1. + 可以是: 常量+常量 , 变量+常量2. -3. *4. / 5/ 2 = 25. % 取余 5 % 2 = 1其中 : 自增运算符(++) 自减运算符( --)只能变量使用 如: NUM++; i++ 先用再加++i先加再用注意事项1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。>>=<<=!= 用于测试“不相等”== 用于测试“相等”= 用于赋值注意:在编程的过程中一定要注意 == 和 = 的区别&&逻辑与 理解为: 即 怎么又 怎么 一假全假,全真为真|| 逻辑或 理解为: 要么 怎么 要么 怎么 一真为真, 全假为假逻辑非 真取假假取真截断特性:逻辑与左边为假,右边不在读取计算 逻辑或左边为真,右边不在读取计算& //按位与 与0得0| //按位或 或1得1^//按位异或 相同为0,相异为1注:他们的操作数必须是整数。>> 右移 //缩小<< 左移 //放大,左移N位,乘以2^N+=-=*=/=%=>>=<<=&=|=^=这些运算符都可以写成复合的效果。int x = 10;x = x+10;x += 10;//复合赋值//其他运算符一样的道理。这样写更加简洁。exp1 ? exp2 : exp3exp1若为真,则执行exp2,否则执行exp3exp1, exp2, exp3, …expN逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最 后一个表达式的结果。sizeof(数据类型/变量) //获取数据类型/变量再内存中的所占字节数括号> 单目运算符> 算术运算符> 移位运算符> 关系运算符 >位运算符> 逻辑运算符 >三目运算符 >赋值运算符> 逗号运算符当运算符优先级一致时,参考结合方向
第十三讲,中断原理和工作机制,本章节主要学习了单片机的中断原理,STC8HK64U共有44个中断源,还学习了解了中断源的控制以及中断标断位等等。需要在实际应用中熟悉加深印象。
中断
单片机执行其他程序 , 出现某些异常事件或请求,cpu 中止,转去执行异常事件,执行完毕,返回继续执行。
中断源
cpu中断请求源
中断响应
cpu暂停工作转去处理中断源事件
中断服务
处理工程
中断返回
处理完返回中断的地方
中断优先级
低优先级会挂起LCALL
保护现场
PUSHPOP 指令 堆栈操作实现
堆栈
先进后出
SP 指向栈顶
中断撤除
中断请求标志位擦除,有的会自己擦除
中断源
stc8h44个
第十四讲,中断原理及工作机制二,紧接上一讲,本讲学习了中断标志位,优先级处理等
中断标志位
PCON
LVDF 低电压检测 不开中断也可以读
SPI
SPSTAT 传输完成置位
ADC
ADC_CONTR A/D转换结束标志位
需要软件清0
中断允许,禁止,优先级
IE 0A8H
EA总中断
0关闭
1开放
ELVD 低压检测
EADC A/D
ES 串口1
ET1 定时器1
EX1 INT1
ET0 T0
EX0 INT0
优先级
00 01 1011对应1234 级
先高后低 停低转高 高不睬低
第十五讲,定时器原理及STC扩展,学习整理如下,理论已经学了,还需多加练习,在实践中运用,慢慢提高
定时器结构
功能 : 定时或计数
分频
可编程输出
串口波特率发生器
一般结构
系统/外部来的时钟 让计数器加1 加满了就中断
工作模式 4种
常用16位自动重载/不可中断的16位自动重载定时器寄存器
TMOD
GATEC/TM1M0 GATEC/T M1M0
M1M0
0 0 模式0 16位自动重载
1 1 模式3 最高中断优先级的16位自动重载
记住这两个模式就行
C/T 1 计数器
0 定时器
GATE 1~INTn搞 且 TRn置位 启动
0 TRn 置位 启动
TCON
TF1TR1 TF0TR0IE1IT1IE0IT0
TF1/0 中断标志位 自动清
TR1/0 开关 置1启动
后面4位是外部中断的
AUXR
T0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1T2
T0x12/T1x12 0 12分频
1 不分频
TR2 定时器 2开关 置1启动
T2_C/T 0T2 12个时钟计数1次
1 T21个时钟计数1次
UART_M0x6 串口速度
S1ST2 波特率发生器选择位
T4T3M
T4RT4_C/T T4x12T4CLKOT3RT3_C/TT3x12T3CLKO
T4/T3CLKO时钟输出开关置1开启
本帖最后由 lhj 于 2023-11-10 15:41 编辑
STC 8H8K64U的硬件仿真也是很好用的
lhj 发表于 2023-11-4 09:55
第二讲学习了keil新建工程,了解STC IO 口状态代码,也可以直接用STC ISP生成IO口配置代码,直接复制粘贴到 ...
STC ISP IO配置