本帖最后由 gentleman 于 2023-8-16 10:30 编辑
2023/08/14 第十一集
c的内容就轻松多了,相信各位都是c语言大神
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 保证不被优化
例
- #define P0PU (*(unsigned char volatile xdata *)0xfe10)
复制代码
中断
声明
- void UART_ISR(void) interrupt 4
- {
- //中断服务程序代码
- }
复制代码
使用中断号 说明哪个中断
加using 指定工作寄存器区
加small/large 说明存储模式
c的运算
算数运算
逻辑运算
&& || !
不太认同老师说的 !不常用,感觉!还是很常用的,我经常写 if(!a) 而不是 if(a==0);
位运算符
& | ^ ~ << >>
& 类似 ANL
| 常用于 给莫一位置1 psw2 |=0x80 最高位置1
<< RLC
>> RRC
STC8H C51 框架
- #inlcude "stc8h.h"
- void delay(long delaytime)
- void main(void)
- {
- while(1)
- {
- delay(100);
- }
- }
复制代码
|