wangziyi 发表于 2024-2-23 17:00:47

1,GPIO(general purpose input output)
2,P(引脚)使用规则,P实际为一八位引脚用数字电路的表达形式为p,我们可以直接操作以整排引脚,也可以细分操作引脚下的“八位数字引脚”
3,熟练使用阅读器翻阅资料
4,新建工程-导入程序
5,用于控制单独引脚的程序:sbit P00=p0^0 //选择P0.0引脚

gerry 发表于 2024-2-23 20:11:50

wangziyi 发表于 2024-2-23 16:59
第一章:
单片机初稿
什么是单片机:以硅晶圆为基底发展的高度集成可控制芯片。

王兄,你咋发我这个帖子里啦?单独发个新帖吧

wangziyi 发表于 2024-2-23 21:49:01

第四章:
1,GPIO(general purpose input output)
2,P(引脚)使用规则,P实际为一八位引脚用数字电路的表达形式为p,我们可以直接操作以整排引脚,也可以细分操作引脚下的“八位数字引脚”
3,熟练使用阅读器翻阅资料
4,新建工程-导入程序
5,用于控制单独引脚的程序:sbit P00=p0^0 //选择P0.0引脚


C51中sbit/sfr用法分析
参考文献原文(c51中sbit/sfr 用法_sfr sbit-CSDN博客)
1 首先区分bit 和sbit

bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

sbit的用法有三种:

  第一种方法:sbit 位变量名=地址值
  第二种方法:sbit 位变量名=SFR名称^变量位地址值
  第三种方法:sbit 位变量名=SFR地址值^变量位地址值

如定义PSW中的OV可以用以下三种方法:
sbit OV=0xd2 (1)说明:0xd2是OV的位地址值
sbit OV=PSW^2 (2)说明:其中PSW必须先用sfr定义好
sbit OV=0xD0^2 (3)说明:0xD0就是PSW的地址值
  因此这里用sfr P1_0=P1^0;就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了。
注意:"^"实质代表的是异或运算,可以算一下,恰好符合。
2.Sfr用法
sfr 似乎不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新的关键词,其用法是:sfrt 变量名=地址值。

例:sfr P1 = 0x90;
这样的一行即定义P1 与地址0x90 对应,P1 口的地址就是0x90.
读者认为上述使用sfr的本质上与申明变量的性质相同,都是在给一个系统内部的地址命名以方便指挥系统调用(与申明变量相同都是在命名)
SFR的定义在头文件reg51.h或reg52.h中。

wangziyi 发表于 2024-2-25 14:23:32

gerry 发表于 2024-2-23 20:11
王兄,你咋发我这个帖子里啦?单独发个新帖吧

对不起,没有注意
{:4_266:}

wangziyi 发表于 2024-2-25 16:57:50

gerry 发表于 2024-2-23 20:11
王兄,你咋发我这个帖子里啦?单独发个新帖吧

sorry,那个视频打卡的笔记是要自己新建一个楼吗?

gerry 发表于 2024-2-26 11:16:34

wangziyi 发表于 2024-2-25 16:57
sorry,那个视频打卡的笔记是要自己新建一个楼吗?

是的

gerry 发表于 2024-2-26 15:38:38

第12集:计数器的使用,通过外部输入来计数,与定时器参数差不多,稍微修改下代码即可,主要是TMOD的值。

void Timer1_Isr(void) interrupt 3
{
        P34 = !P34;
}

void Timer1_Init(void)                //1毫秒@24.000MHz
{
        TMOD = 0x40;                        //设置计数器模式
        TL1 = 0xFF;                                //设置计数初始值
        TH1 = 0xFF;                                //设置计数初始值
        TF1 = 0;                                //清除TF0标志
        TR1 = 1;                                //计数器1开始计时
        ET1 = 1;                                //使能计数器1中断
}

有个疑问是计数的外部输入只能是P35,P34?不能指定其他引脚吗?

gerry 发表于 2024-2-27 17:35:27


实验箱已收到!太给力了,{:5_332:}

gerry 发表于 2024-2-28 18:08:45

第13集:简易多任务处理总结,在实际项目中尽量把独立的功能抽出模块文件,由主程序调用对应的方法。这样既流程清晰,也方便查看模块功能。

gerry 发表于 2024-2-28 20:38:27

第14集:矩阵按键总结
独立按键:一个按键占用一个IO口
矩阵按键:将按键排列成矩阵形式的按键,占用的IO口数量为行*列
优点:减少IO口占用
缺点:程序复杂

按键识别原理:端口默认为高电平,实时读取到引脚为低电平是表示按下。
第一步:现将P0.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。
第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
第三步:行列组合一下就可以判断出是哪个按键按下了。

页: 1 2 [3] 4
查看完整版本: 【 实验箱已收到】跟着冲哥学STC-学习心得