原视频3.1单片机C51编程环境的建立_哔哩哔哩_bilibili
学习建议:有数电、模电、C语言基础
---------------------------------------------------------------------------------------------------------------------------------
软件:keil与Proteus联合仿真
keil与Proteus下载安装及使用建议本站搜索
联合仿真教程:Protues+keil的联合仿真(以51单片机为例)_哔哩哔哩_bilibili
---------------------------------------------------------------------------------------------------------------------------------
一、注意事项
1.程序中必须包含
while(1){}
作为循环主体,防止sp指针失控导致死机
二、定义变量
1.在51单片机程序编写中,大部分采用标准C语言完成,有部分特殊定义规定
1.1 sfr特殊功能寄存器定义
sfr特殊功能寄存器+ = +地址
例如:
sfr PSW = 0x60;
sfr P1 = 0x90;
sfr16 DPRT = 0x82 //16位独有
1.2 头文件 <reg51.h>
1.3 中断
编码实例:跑马灯,八只led循环亮起
#include<reg51.h>
delay()
{
unsigned char i ;
for(i = 0;i<500;i++)
{;}
}//延时
void main()
{
unsigned char i,k;
while(1)
{
k = 0xFE;//11111110
for(i = 0;i<7;i++)
{
P1 = k;
delay();
k = k<<1;//移位
k = k|0x01;//将最后一位置1
}
}
}
解释:
1.移位
k=11111110
k = k<<1
→k = 11111100
或的作用
移位结束k=11111100
这时P1的8位中六位为1,两位为0,代表两只led亮起,这显然不符合我们的既定目标
而移位“<<”正是将所有数位左移,空位补0
所以最后一位必为0
我们将移位结果或0x01,将最低为置1即可