- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WORD 格式 整理
学习 参考 资料 分享
WORD 格式 整理
学习 参考 资料 分享
51单片机汇编语言及C语言经典实例
实验及课程设计
51单片机汇编语言及C语言经典实例
一、闪烁灯
如图1 所示为一简单单片机系统原理图:在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭的时间间隔为 0.2 秒。
延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程
序是如何设计呢?下面具体介绍其原理:如图 4.1.1 所示的石英晶体为 12MHz,因此,1 个机器周期为 1 微秒,机器周期 微秒如图 1 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0=0 时,发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0端口输出高电平,使用 CLR P1.0 指令使 P1.0 端口输出低电平。
C 语言源程序
#include <AT89X51.H>
sbit L1=P1^0;
void delay02s(void) //延时 0.2 秒子程序
{
图1 单片机原理图unsigned char i,j,k;
图1 单片机原理图
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
while(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
汇编源程序
ORG 0
START: CLR P1.0
LCALL DELAY
图2 程序设计流程图SETB
图2 程序设计流程图
LCALL DELAY
LJMP START
DELAY: MOV R5,#20 ;延时子程序,延时 0.2 秒
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
二、多路开关状态指示
如图 3 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,
P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状
态,根据每个开关的状态让相应的发光二极管指示,可以采用 JB P1.X,REL
或 JNB P1.X,REL 指令来完成;也可以一次性检测四路开关状态,然后让其指
示,可以采用 MOV A,P1 指令一次把 P1 端口的状态全部读入,然后取高 4 位的状态来指示。
方法1(汇编源程序)
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
RR A
RR A
RR A
ORL A,#0F0H
MOV P1,A
SJMP START
END
方法1(C语言程序)
图4 程序流程图#INClude <AT89X51.H>
图4 程序流程图
unsigned char temp;
void main(void)
{
while(1)
{
temp=P1>>4;
temp=temp | 0xf0;
P1=temp;
}
}
方法2(汇编源程序)
ORG 00H
START: JB P1.4,NEXT1
CLR P1.0
SJMP NEX1
图3 单片机原理图
图3 单片机原理图
NEXT1: SETB P1.0
NEX1: JB P1.5,NEXT2
CLR P1.1
SJMP NEX2
NEXT2: SETB P1.1
NEX2: JB P1.6,NEXT3
CLR P1.2
SJMP NEX3
NEXT3: SETB P1.2
NEX3: JB P1.7,NEXT4
CLR P1.3
SJMP NEX4
NEXT4: SETB P1.3
NEX4: SJMP START
END
方法2(C 语言源程序)
#INClude <AT89X51.H>
void main(void)
{
while(1)
{
if(P1_4==0)
{
P1_0=0;
}
Else
{
P1_0=1
您可能关注的文档
- (含答案)“伏安法测电阻”以及它几种测电阻的方法.doc
- [人教版]四年级[上册]数学期末试卷(八套).doc
- 《产前超声检查指南2012》.doc
- 《风景写生》课程.教学案.doc
- 2015年全国中学生英语能力竞赛(NEPCS)高中一年级年级组初赛试题(含答案).doc
- 2017课堂教学改革方案.doc
- 2018年广东一模作文导写和广州一模作文分析报告.doc
- 2018年最新电大混凝土结构设计原理形成性考核册答案.doc
- A8-V5.0快速操作手册范本.doc
- Android数据存储和数据访问.doc
- 【可行性报告】2023年水泵项目可行性研究分析报告.docx
- 【可行性报告】2023年生活用纸项目可行性研究分析报告.docx
- 【可行性报告】2023年碳酸二乙酯相关项目可行性研究报告.docx
- 【可行性报告】2023年棉、化纤纺织及印染产品相关项目可行性研究报告.docx
- 【可行性报告】2023年滑阀真空泵相关行业可行性分析报告.docx
- 【可行性报告】2023年钻石彩宝行业项目可行性分析报告.docx
- 【可行性报告】2023年生麻生产行业项目可行性分析报告.docx
- 【可行性报告】2023年智能电能表及配件行业项目可行性分析报告.docx
- 【可行性报告】2023年石英纤维及制品项目可行性研究分析报告.docx
- 【可行性报告】2023年钢芯铝绞线项目可行性研究分析报告.docx
文档评论(0)